V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
brightguo
V2EX  ›  程序员

国内人脸识别公司哪家强,人脸比对跑个分比较下!

  •  
  •   brightguo ·
    guoming0000 · 2017-02-12 16:30:23 +08:00 · 6696 次点击
    这是一个创建于 2845 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前不久《最强大脑》第四季第一期的舞台上,王峰对阵小度机器人进行了“人机大战”,其中最精彩和有趣的是第一场 pk---从小时候照片判别长大后对应的人,而她有个姐姐,这对姐妹恰恰是双胞胎!百度真的这么强吗,可以识别出万分之一的区别? 有没有办法衡量百度到底有多强,带着这个疑问,我搜到了百度已经开放了他的人脸识别 sdk 。同时作为对比,我选择旷视科技这家公司,因为他们的技术应用在支付宝人脸支付、人脸解锁等场景(https://zhuanlan.zhihu.com/p/21978771)。作为程序员,撸起袖子马上干起来。 还要说明下的是,人脸对比是确认一张照片的人和另一张照片的人的相似度,相似度越高说明两个人越像,越低说明两个人不像。大家常见的就是支付宝里的刷脸支付,它的作用和签名验证、指纹验证(上班手指打卡器)一样,确定你是不是你的问题。而人脸对比和最强大脑里的从小时候照片推算出长大后照片有些不同,但目标是一样的,都是看相似性。通过对比人脸识别中人脸对比的准确性,可以知道谁的算法更加强劲。 百度人脸对比 sdk 入口地址:https://cloud.baidu.com/product/face/compare 旷视科技人脸对比入口地址:https://www.faceplusplus.com.cn/face/detect-api.html

    分别注册账号,拿到 api key 和 api secret ,阅读下示例代码。发现 face++的很简单,直接用 curl.exe + MS 命令行。而百度我选择用 python sdk 。由于我用的是免费的接口,旷视的调用次数限制未知,而百度的 api 每天最多 1000 次,他们都对并发不做保证,如果想要商用并且调用次数很多,考虑买个商用授权吧。同时还要说明,试用版和商用版用的效果是一样的,也就是商用版识别结果会和试用版一样,仅仅是次数限制。 face++对免费 api 的说明: 并发数有上限且不保证并发:由于资源有限,在调用繁忙的情况下,您的请求有可能会受到并发限制。 Face 存储有上限:每个用户使用免费服务只能创建 1000 个 FaceSet ,总计最多存储 100 万个人脸。 一个用户只能有一个 API Key 使用免费服务,而且该 API Key 不能转为正式 API Key 。

    1.首先我想到的是对比下双胞胎辨别能力如何 从朱佳雯微博提取了 3 张正面照片,从朱佳怡提取 1 张正面图片。 图片来源:

    蜜蜂少女队-朱佳雯 
    http://weibo.com/u/5873198061
    http://tva2.sinaimg.cn/crop.0.0.749.749.180/006ptl6Zjw8fa9d1bq3xmj30ku0ktmyd.jpg
    http://wx1.sinaimg.cn/mw690/006ptl6Zgy1fc0nme8eapj31ho1zk7wj.jpg
    http://wx3.sinaimg.cn/mw690/006ptl6Zgy1fcfsg03fs1j31ho1zkhdv.jpg
    蜜蜂少女队-朱佳怡
    http://www.weibo.com/u/5873198101
    http://tva3.sinaimg.cn/crop.0.0.749.749.180/006ptl7Djw8fa0yk1bwisj30ku0ktmy7.jpg
    

    face++的识别代码,请将“应用的 API Key ”和“应用的 Secret Key ”分别替换成申请到的字符串。

    set ZJW1=http://tva2.sinaimg.cn/crop.0.0.749.749.180/006ptl6Zjw8fa9d1bq3xmj30ku0ktmyd.jpg
    set ZJW2=http://wx1.sinaimg.cn/mw690/006ptl6Zgy1fc0nme8eapj31ho1zk7wj.jpg
    set ZJW3=http://wx3.sinaimg.cn/mw690/006ptl6Zgy1fcfsg03fs1j31ho1zkhdv.jpg
    set ZJY=http://tva3.sinaimg.cn/crop.0.0.749.749.180/006ptl7Djw8fa0yk1bwisj30ku0ktmy7.jpg
    curl -X POST "https://api-cn.faceplusplus.com/facepp/v3/compare" -F "api_key=应用的 API Key" -F "api_secret=应用的 Secret Key" -F "image_url1=%ZJW1%" -F "image_url2=%ZJY%"
    curl -X POST "https://api-cn.faceplusplus.com/facepp/v3/compare" -F "api_key=应用的 API Key" -F "api_secret=应用的 Secret Key" -F "image_url1=%ZJW2%" -F "image_url2=%ZJY%"
    curl -X POST "https://api-cn.faceplusplus.com/facepp/v3/compare" -F "api_key=应用的 API Key" -F "api_secret=应用的 Secret Key" -F "image_url1=%ZJW3%" -F "image_url2=%ZJY%"
    curl -X POST "https://api-cn.faceplusplus.com/facepp/v3/compare" -F "api_key=应用的 API Key" -F "api_secret=应用的 Secret Key" -F "image_url1=%ZJW1%" -F "image_url2=%ZJW2%"
    curl -X POST "https://api-cn.faceplusplus.com/facepp/v3/compare" -F "api_key=应用的 API Key" -F "api_secret=应用的 Secret Key" -F "image_url1=%ZJW1%" -F "image_url2=%ZJW3%"
    curl -X POST "https://api-cn.faceplusplus.com/facepp/v3/compare" -F "api_key=应用的 API Key" -F "api_secret=应用的 Secret Key" -F "image_url1=%ZJW2%" -F "image_url2=%ZJW3%"
    

    百度识别代码 安装百度人脸识别包, pip install baidu-aip 百度识别需要使用本地文件,下载她们的照片,依次命名 zhujiawen 、 zhujiawen2 、 zhujiawen3 和 zhujiayi ,保存到 d 盘下。

    # 引入人脸识别 SDK
    from aip import AipFace
    # 定义常量 APP_ID = '你的 
    App ID'API_KEY = '你的 API Key'
    SECRET_KEY = '你的 Secret Key'
    # 初始化 AipFace 对象
    aipFace = AipFace(APP_ID, API_KEY, SECRET_KEY)
    # 读取图片
    def get_file_content(filePath): 
      with open(filePath, 'rb') as fp: 
        return fp.read()
    
    aipFace.match([get_file_content('d:/zhujiawen.jpg'),get_file_content('d:/zhujiayi.jpg'),])
    aipFace.match([get_file_content('d:/zhujiawen2.jpg'),get_file_content('d:/zhujiayi.jpg'),])
    aipFace.match([get_file_content('d:/zhujiawen3.jpg'),get_file_content('d:/zhujiayi.jpg'),])
    aipFace.match([get_file_content('d:/zhujiawen.jpg'),get_file_content('d:/zhujiawen2.jpg'),])
    aipFace.match([get_file_content('d:/zhujiawen.jpg'),get_file_content('d:/zhujiawen3.jpg'),])
    aipFace.match([get_file_content('d:/zhujiawen2.jpg'),get_file_content('d:/zhujiawen3.jpg'),])
    

    图片如下(前三章朱佳雯,后一张朱佳怡): 对比结果如下(数值越高越相似):

    |表 1|人脸对比结果| |----|----|----|----|----| |序号|图片 1|图片 2|face++|百度| |1|朱佳雯 1|朱佳怡|88.804|93.915| |2|朱佳雯 2|朱佳怡|84.242|94.210| |3|朱佳雯 3|朱佳怡|79.859|93.574| |4|朱佳雯 1|朱佳雯 2| 84.716|93.172| |5|朱佳雯 1|朱佳雯 3|87.825|92.108| |6|朱佳雯 2|朱佳雯 3|83.453|92.042|

    这个是百度运行结果,可以参考下:

    我们观察数据,分析下: 1 )序号 1 、序号 2 的数值都比序号 6 大,这意味着双胞胎的相似度有时高过自己与自己的相似度。这说明,最强大脑中,小度可能真的是运气好,蒙对了! 2 )百度的数据比较集中,在 92~95 之间,而 face++数据在 79~89 之间。这说明百度的算法可能比较准确。(双胞胎确实像啊,怎么 face++范围波动那么大?) 3 )观察最大值, face++在 1 (人不同)和 5 (同一个人)时数值最大,百度在 1 (人不同)和 2 (人不同)数值最大。 face++比百度稍微好些。 4 )观察最小值, face++序号 3 (不同人)最小,百度序号 6 最小(同一人)。 face++比百度好。 对比双胞胎,双方确实都有问题。要说谁好一些,我投 face++一票。 2.可能你说上一回合,各有错误,而每张照片差别太大(清晰度、时间、光照、妆容都不一样)。那么同一个人在同一时间段的照片分别对比(人脸表情、朝向不同),看看相似性是不是应该很高。 这次换王珞丹,从她的微博弄下 5 张图,分别用第 1 张与后 4 张进行对比: 王珞丹

    http://ww2.sinaimg.cn/mw1024/49393842jw1f8wne2olizj22as3g6u0x.jpg
    http://ww1.sinaimg.cn/mw1024/49393842jw1f8wnejo9tyj22as3g6u0y.jpg
    http://ww4.sinaimg.cn/mw1024/49393842jw1f8wne9yic3j22as3g6qv6.jpg
    http://ww3.sinaimg.cn/mw1024/49393842jw1f8wndxibndj22as3g6qv5.jpg
    http://ww3.sinaimg.cn/mw1024/49393842jw1f8wnee6krdj22as3g6qv6.jpg
    

    对比代码: face++的

    set WLD1=http://ww2.sinaimg.cn/mw1024/49393842jw1f8wne2olizj22as3g6u0x.jpg
    set WLD2=http://ww1.sinaimg.cn/mw1024/49393842jw1f8wnejo9tyj22as3g6u0y.jpg
    set WLD3=http://ww4.sinaimg.cn/mw1024/49393842jw1f8wne9yic3j22as3g6qv6.jpg
    set WLD4=http://ww3.sinaimg.cn/mw1024/49393842jw1f8wndxibndj22as3g6qv5.jpg
    set WLD5=http://ww3.sinaimg.cn/mw1024/49393842jw1f8wnee6krdj22as3g6qv6.jpg
    curl -X POST "https://api-cn.faceplusplus.com/facepp/v3/compare" -F "api_key=应用的 API Key" -F "api_secret=应用的 Secret Key" -F "image_url1=%WLD1%" -F "image_url2=%WLD2%"
    curl -X POST "https://api-cn.faceplusplus.com/facepp/v3/compare" -F "api_key=应用的 API Key" -F "api_secret=应用的 Secret Key" -F "image_url1=%WLD1%" -F "image_url2=%WLD3%"
    curl -X POST "https://api-cn.faceplusplus.com/facepp/v3/compare" -F "api_key=应用的 API Key" -F "api_secret=应用的 Secret Key" -F "image_url1=%WLD1%" -F "image_url2=%WLD4%"
    curl -X POST "https://api-cn.faceplusplus.com/facepp/v3/compare" -F "api_key=应用的 API Key" -F "api_secret=应用的 Secret Key" -F "image_url1=%WLD1%" -F "image_url2=%WLD5%"
    

    百度的(还是一次下载图片,保存为 wangluodan1 、 wangluodan2 、 wangluodan3 、 wangluodan4 、 wangluodan5 )

    aipFace.match([get_file_content('d:/wangluodan1.jpg'),get_file_content('d:/wangluodan2.jpg'),])
    aipFace.match([get_file_content('d:/wangluodan1.jpg'),get_file_content('d:/wangluodan3.jpg'),])
    aipFace.match([get_file_content('d:/wangluodan1.jpg'),get_file_content('d:/wangluodan4.jpg'),])
    aipFace.match([get_file_content('d:/wangluodan1.jpg'),get_file_content('d:/wangluodan5.jpg'),])
    

    对比结果如下(数值越高越相似):

    |表 2|人脸对比结果| |----|----|----|----|----| |序号|图片 1|图片 2|face++|百度| |1|王珞丹 1|王珞丹 2|88.973|95.826| |2|王珞丹 1|王珞丹 3|94.752|98.096| |3|王珞丹 1|王珞丹 4|81.722|93.068| |4|王珞丹 1|王珞丹 5|80.724|94.447|

    果不其然, face++的相似度范围来去太大,而百度依旧十分稳定!这一回合百度完胜。可以看到 face++在人脸发生很大的旋转、表情发生变化时,数值波动增大,识别效果不如百度。这一回合毋庸置疑,我投百度一票。 最后在看一下不同的人的对比:

    |表 3|人脸对比结果| |----|----|----|----|----| |序号|图片 1|图片 2|face++|百度| |1|朱佳雯 1|王珞丹 1|59.221|53.006|

    再一次看到对于不同的人,百度的相似度更低。百度能在同样的人的对比中,相似度更高,而在不同人对比中,相似度更低,这一回合我投百度一票。最终还是百度更强,说明百度的人脸识别应该是国内最强。

    • 文章仅从少量数据分析,如果要更强说服力,需要拿更多的图片对比。
    • 文章可以分享,谢绝转载。
    • 文中图片皆来自互联网,侵权立删。 若想阅读更多的文章请关注微信公众号:
    11 条回复    2018-06-18 18:14:00 +08:00
    brightguo
        1
    brightguo  
    OP
       2017-02-12 16:46:46 +08:00
    不知道为啥表格画不出来,看表格还是去我原网站吧, http://brightguo.com/which-company-fr-is-better/
    fffflyfish
        2
    fffflyfish  
       2017-02-12 18:16:02 +08:00
    python 也可以不下载 sdk 用的 , 乘机水一发我写的 https://github.com/FormatFish/FaceDetect-TextDetect
    brightguo
        3
    brightguo  
    OP
       2017-02-12 20:33:25 +08:00
    @fffflyfish 下载 sdk 只是少让自己写代码,你这个应该还是要 https 网络通信的(下载了你的更不容易搞出识别了把~)
    fffflyfish
        4
    fffflyfish  
       2017-02-12 21:17:37 +08:00
    @brightguo 要有理有据啊,都用的 baidu api ,凭啥说我的不容易搞识别?来你说个功能,一起玩玩?网络传输写好以后可以直接让别人体验,你这 sdk 打包先不说要考虑平台的兼容性,别人就算想试试你这源码都得跑去下载 sdk ,想想都麻烦
    brightguo
        5
    brightguo  
    OP
       2017-02-12 23:25:45 +08:00
    @fffflyfish 下载了你的更不容易搞出识别了把--------你的一样得下载你的代码运行啊,和一行指令下载库有多少区别吗。我是 python 初学者不会 django ,不想安装那么大的库。容易的意思你理解错了。
    roist
        6
    roist  
       2017-02-12 23:34:24 +08:00
    用名人的照片,这没有意义
    brightguo
        7
    brightguo  
    OP
       2017-02-12 23:39:28 +08:00
    @roist 一般他们用于训练的人脸的库因为版权,不会用到明星的。再者,这些是明星近期的图片,不会存在与他们本身的数据库里。
    fffflyfish
        8
    fffflyfish  
       2017-02-13 12:37:34 +08:00
    @brightguo 我就不说话, http://123.56.90.153:8001 去用用
    brightguo
        9
    brightguo  
    OP
       2017-02-13 15:50:38 +08:00
    @fffflyfish 昨天就用过了,效果一样。可是我还是觉得我这个简单~
    fffflyfish
        10
    fffflyfish  
       2017-02-13 15:56:21 +08:00
    @brightguo 哦,你高兴就好
    3gtaoke
        11
    3gtaoke  
       2018-06-18 18:14:00 +08:00
    我这里有头部接口公司,价格便宜,需要可以联系 VX:15555528171
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1017 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 20:52 · PVG 04:52 · LAX 12:52 · JFK 15:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.