给你1000位美女照片,你如何选出5位最漂亮的_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > 给你1000位美女照片,你如何选出5位最漂亮的

给你1000位美女照片,你如何选出5位最漂亮的

 2017/11/5 15:21:40  紫薯Mr  程序员俱乐部  我要评论(0)
  • 摘要:老板给了你1000张美女model照片,让你选5位出来参加展会,请问你如何选?A:我会嗖嗖嗖过一遍,然后随机挑5张顺眼的。紫薯:还不如让老板随机选顺眼的。B:开个小组会,集合大家的意见选5个最漂亮的。紫薯:你真不在乎老板想看到哪几位美女么?C:随机选5个身材满足标准、容貌可佳的就可以了。紫薯:你的决策也很随机哇。紫薯觉得:我们需要考虑老板最喜欢长成什么样的女生,需要知道来看台的客户对美女的偏好,要知道哪些美女的长相与产品、场景更相配。所以...最好还是用上图像识别技术,让&ldquo
  • 标签:

 

老板给了你1000张美女model照片,让你选5位出来参加展会,请问你如何选?

 

 

A:我会嗖嗖嗖过一遍,然后随机挑5张顺眼的。

紫薯:还不如让老板随机选顺眼的。 

B:开个小组会,集合大家的意见选5个最漂亮的。

紫薯:你真不在乎老板想看到哪几位美女么?

C:随机选5个身材满足标准、容貌可佳的就可以了。

紫薯:你的决策也很随机哇。

紫薯觉得:我们需要考虑老板最喜欢长成什么样的女生,需要知道来看台的客户对美女的偏好,要知道哪些美女的长相与产品、场景更相配。

 

所以...最好还是用上图像识别技术,让“万能”的算法帮你搞定,不然搞完这些保证你看到美女就想吐。

为了简单起见,这里只考虑老板喜好这一个因素。因为无论因素多少,我们只需要确定一个标准美女便可。

紫薯的解决方案:

第一步:紫薯:“老板,你觉得哪个明星最漂亮?” 老板:“ 孙俪”。

第二步:小叔花了3秒钟找了张孙俪姐姐的照片。

第三步:又花了3秒钟把自己的那套人脸识别、人脸相似度匹配的软件程序打开。(mac pro,)

第四步:跑程序自动匹配从1000张原始图片中抠出人脸结果,花了30分钟,这期间我喝了个茶看看了远处的风景。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 class="python plain">...... modelin/1 (9)(8).jpg modelin/1 (9)(9).jpg modelin/1 (9).jpg modelin/Alyson-Hannigan-5.jpg modelin/Alyson_Hannigan_200512.jpg modelin/fangbingbing.jpg modelin/gaoyuanyuan.jpg modelin/libingbing.jpg modelin/linqingxia.jpg modelin/linzhiling.jpg modelin/liushishi.jpg modelin/liuyifei.jpg modelin/lizhi.jpg modelin/Miley-Cyrus-Photos.jpg modelin/Screenshot at Dec 11 22-10-55.png modelin/shuwei.jpg modelin/tangwei.jpg modelin/zhangmanyu.jpg detect 1015 faces, cost 1777.025725 seconds! /////耗时

下面是给每张图片打分,733张有效人脸,耗时35s:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ...... 图片名称:[1 (9)(7)face.jpg], 与目标图片相似度=[74] 图片名称:[1 (9)(8)face.jpg], 与目标图片相似度=[64] 图片名称:[1 (9)(9)face.jpg], 与目标图片相似度=[66] 图片名称:[1 (9)face.jpg], 与目标图片相似度=[54] 图片名称:[Alyson-Hannigan-5face.jpg], 与目标图片相似度=[52] 图片名称:[Alyson_Hannigan_200512face.jpg], 与目标图片相似度=[46] 图片名称:[gaoyuanyuanface.jpg], 与目标图片相似度=[44] 图片名称:[libingbingface.jpg], 与目标图片相似度=[42] 图片名称:[linqingxiaface.jpg], 与目标图片相似度=[58] 图片名称:[linzhilingface.jpg], 与目标图片相似度=[56] 图片名称:[liushishiface.jpg], 与目标图片相似度=[44] 图片名称:[liuyifeiface.jpg], 与目标图片相似度=[44] 图片名称:[lizhiface.jpg], 与目标图片相似度=[54] 图片名称:[Miley-Cyrus-Photosface.jpg], 与目标图片相似度=[44] 图片名称:[Screenshot at Dec 11 22-10-55face.jpg], 与目标图片相似度=[56] 图片名称:[tangweiface.jpg], 与目标图片相似度=[44] 图片名称:[zhangmanyuface.jpg], 与目标图片相似度=[48] detect 733 faces, cost 35.284538999999995 seconds!//////耗时

前五名的结果出来了

1 2 3 4 5 图片名称: (52)face.jpg , 与目标图片相似度= 94 图片名称: 0 (142)face.jpg , 与目标图片相似度= 94 图片名称: 1 (27)face.jpg , 与目标图片相似度= 94 图片名称: 1 (26)(5)face.jpg , 与目标图片相似度= 92 图片名称: 1 (2)face.jpg , 与目标图片相似度= 92

第五步:又花了3秒钟,5位绝色美女的照片被发到老板面前,而这五位都是老板最喜欢的。

耗时计算:3秒+3秒+3秒 = 9秒干活 ,外加 30分钟休息。

看一张结果中第一位美女的全图,是不是还可以?

以下进入高能编码区。

介绍下程序实现方法原理:

首先遍历文件夹下所有图片,识别其面部区域,并抠图保存。

主要使用opencv的人脸识别算法,有兴趣的可以了解下haar特征,核心代码如下:

1 2 3 4 5 6 7 8 start = time.clock() for functions">file in files: ##mac系统,删除SD_Store隐藏文件     if 'DS_Store' in file:         continue     print ('modelin/'+file)     outFaces('modelin/'+file,file[:-4]) print ("detect %d faces, cost %s seconds!" % (len(files),time.clock()-start)) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 def detectFaces(image_path):     img = cv2.imread(image_path)       face_cascade = cv2.CascadeClassifier("cvdata/haarcascades/haarcascade_frontalface_default.xml")     if img.ndim == 3:         gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)     else:         gray = img        faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=3, minSize=(10,10),                                      flags=cv2.CASCADE_SCALE_IMAGE)     result = []     for (x,y,width,height) in faces:         result.append((x,y,x+width,y+height))     return result

图像识别最常用的是通过颜色特征判断。图片相似性主要通过比较汉明距离来确定。像手指一样,每张图片也有自己的图像指纹,它是由一组哈希算法运算后得到的二进制结果。所谓汉明距离,便是一组二进制数据变成另一组二进制数据所需步骤。两张相同的图片,汉明距离便是0.

 

遍历抠出的面部区域文件夹,使用pHash(感知哈希算法)进行图片指纹的对比:

1 2 3 4 5 6 7 for fname in files:     image2 = Image.open('modelout/'+fname)     score = classify_DCT(imageStand,image2)     dicAll[fname] = score     print ("图片名称:[%s], 与目标图片相似度=[%d]" % (fname,(100-score)))       print ("detect %d faces, cost %s seconds!" % (len(files),time.clock()-start)) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 def simmilar_people(image1,image2,size=(32,32),part_size=(8,8)):       assert size[0]==size[1],"size error"     assert part_size[0]==part_size[1],"part_size error"       image1 = image1.resize(size).convert('L').filter(ImageFilter.BLUR)     image1 = ImageOps.equalize(image1)     matrix = get_matrix(image1)     DCT_matrix = DCT(matrix)     List = sub_matrix_to_list(DCT_matrix, part_size)     middle = get_middle(List)     code1 = get_code(List, middle)         image2 = image2.resize(size).convert('L').filter(ImageFilter.BLUR)     image2 = ImageOps.equalize(image2)     matrix = get_matrix(image2)     DCT_matrix = DCT(matrix)     List = sub_matrix_to_list(DCT_matrix, part_size)     middle = get_middle(List)     code2 = get_code(List, middle)       return comp_code(code1, code2)

 

小决策,大学问。

此项目代码已经开源。但是千张美女图片因怕涉嫌传播**...,所以不敢乱放。

关注公众号,输入“识别美女”,便可获得资源下载地址,当然是整个项目的源码大包(180M),下下来后,请阅读readme了解运行环境。

 

 

个人博客地址 http://www.adbtime.com/view/428 ,欢迎访问

原创文章,转载请注明出处,感谢! 

  • 相关文章
发表评论
用户名: 匿名