一.腾讯优图

1.开发者地址:http://open.youtu.qq.com/welcome/developer

2.接入流程:按照开发者页面的接入流程接入之后,创建应用即可获得所需的AppID、SecretID和SecretKey这是进行接口调用必须的凭证

3.测试流程:

3.1.测试可以直接调用网络接口,或者下载相应语言的sdk(http://open.youtu.qq.com/welcome/developer#/tool-sdk),我采用的是下载python版本的sdk(该sdk对应的python2.x的版本)

3.2.测试的数据还是lfw的数据集,测试结果如果调用成功则获取到比对的分数,调用失败则将改组比对的分数设置为-1,以便后续的分析,直接上python代码:

 import TencentYoutuyun # 这是下载的python模块

 appid = 'xxxxx' # 你的appid
 secret_id = 'xxxxx' #你的secret_id
 secret_key = 'xxxxx' #你的secret_key
 userid = 'test' # 任意字符串
 end_point = TencentYoutuyun.conf.API_YOUTU_END_POINT
 youtu = TencentYoutuyun.YouTu(appid, secret_id, secret_key, userid, end_point)

 def compare_test():
     lfw_file = open("pairs.txt") # lfw的pair.txt 删除了第一行
     res_file = open("youtu.txt", "a+") # txt保存比对分数
     error_code = open("error_code.txt", "a+") # 测试用于保存调用出错编码
     count = 0
     while 1:
         image_path = "xxxxxx" # 你本地lfw数据的路径
         line = lfw_file.readline()
         if not line:
             break
         line = line.strip('\n')
         images = line.split('\t')
         if len(images) > 3:
             register_image = image_path + images[0] + "/" + images[0] + "_"
             if len(images[1]) < 2:
                 register_image = register_image + " + images[1] + ".jpg"
             elif len(images[1]) < 3:
                 register_image = register_image + " + images[1] + ".jpg"
             elif len(images[1]) < 4:
                 register_image = register_image + " + images[1] + ".jpg"
             else:
                 register_image = register_image + images[1] + ".jpg"

             verify_image = image_path + images[2] + "/" + images[2] + "_"
             if len(images[3]) < 2:
                 verify_image = verify_image + " + images[3] + ".jpg"
             elif len(images[3]) < 3:
                 verify_image = verify_image + " + images[3] + ".jpg"
             elif len(images[3]) < 4:
                 verify_image = verify_image + " + images[3] + ".jpg"
             else:
                 verify_image = verify_image + images[3] + ".jpg"
         else:
             register_image = image_path + images[0] + "/" + images[0] + "_"
             if len(images[1]) < 2:
                 register_image = register_image + " + images[1] + ".jpg"
             elif len(images[1]) < 3:
                 register_image = register_image + " + images[1] + ".jpg"
             elif len(images[1]) < 4:
                 register_image = register_image + " + images[1] + ".jpg"
             else:
                 register_image = register_image + images[1] + ".jpg"

             verify_image = image_path + images[0] + "/" + images[0] + "_"
             if len(images[2]) < 2:
                 verify_image = verify_image + " + images[2] + ".jpg"
             elif len(images[2]) < 3:
                 verify_image = verify_image + " + images[2] + ".jpg"
             elif len(images[2]) < 4:
                 verify_image = verify_image + " + images[2] + ".jpg"
             else:
                 verify_image = verify_image + images[2] + ".jpg"

         content = youtu.FaceCompare(register_image, verify_image)
         error_code.write(str(content['errormsg']) + '\n')
         if content['errorcode'] != 0:
             score = -1
         else:
             score = content['similarity']

         print(str(count))
         print(register_image)
         print(verify_image)
         print(str(score) + '\n')

         if (int(count / 300)) % 2 == 0:
             flag = 1
         else:
             flag = 0

         res_file.write(line + '\t' + str(score) + '\t' + str(flag) + '\n')
         count += 1

     lfw_file.close()
     res_file.close()
     error_code.close()

 compare_test()

二.知脸(ZKfaceOnline)

1.知脸开发者中心地址:http://zkfaceonline.com:8003/developers_doc.html

2.接入流程:注册后可获取到Ocp-Apim-Subscription-Key,然后再开发者管理界面注册人脸比对数据库,记住该数据库的名称,该名称以及Ocp-Apim-Subscription-Key在后面的测试过程中都是必需的。

3.测试流程:

3.1.人脸比对分为两个步骤:先将需要比对的两张图片上传到指定接口做人脸特征的提取,如果成功则返回这两张图片在数据库中faceid,然后将返回的两个faceid提交到指定的人脸比对接口做比对,如果比对成功则会返回两张图片之间的相似值

3.2.具体测试代码,如下:

 # coding=utf-8
 import requests #该模块是第三方库,可以去网上下载
 import json

 def get_face_id(image): #上传一张图片做人脸检测,返回faceid
     url = 'http://zkfaceonline.com:8003/face/v0/faceApimatch?detect&db&matchDB=你的数据库名称'
     headers = {
         'Content-Type': 'application/octet-stream',
         'Ocp-Apim-Subscription-Key': '你自己的key',
     }
     data = open(image, "rb").read()
     try:
         res = requests.post(url, headers=headers, data=data)
     except Exception:
         res = requests.post(url, headers=headers, data=data)

     result = res.text.strip('this key has no database[]')
     try:
         result = json.loads(result)
         if len(result) == 1:
             res_dict = result[0]
             if "faceid" in res_dict.keys():
                 print(res_dict['faceid'])
                 return res_dict['faceid']
             else:
                 return '-1'
         else:
             return '-1'
     except Exception:
         return '-1'

 def face_compare(image1, image2): #两张图片做人脸比对,返回比对分数
     face1 = get_face_id(image1)
     face2 = get_face_id(image2)
     url = 'http://zkfaceonline.com:8003/face/v0/faceApimatch?match&db&matchDB=你的数据库名称&faceset1=' + face1 + '&faceset2=' + face2

     headers = {
         'Content-Type': 'application/octet-stream',
         'Ocp-Apim-Subscription-Key': '你自己的key',
     }
     try:
         res = requests.post(url, headers=headers)
     except Exception:
         res = requests.post(url, headers=headers)

     result = res.text.strip('this key has no database[]')
     print(res.text)
     try:
         result = json.loads(result)
         if len(result) == 1:
             res_dict = result[0]
             if 'similarity' in res_dict.keys():
                 print(res_dict['similarity'])
                 return res_dict['similarity']
             else:
                 return -1
         else:
             return -1
     except Exception:
         return -1

 def face_compare_test():
     lfw_file = open("pairs.txt")
     res_file = open("res_zk.txt", "a+")
     count = 0
     while 1:
         image_path = "你lfw数据集在本地的路径"
         line = lfw_file.readline()
         if not line:
             break
         line = line.strip('\n')
         images = line.split('\t')
         if len(images) > 3:
             register_image = image_path + images[0] + "/" + images[0] + "_"
             if len(images[1]) < 2:
                 register_image = register_image + " + images[1] + ".jpg"
             elif len(images[1]) < 3:
                 register_image = register_image + " + images[1] + ".jpg"
             elif len(images[1]) < 4:
                 register_image = register_image + " + images[1] + ".jpg"
             else:
                 register_image = register_image + images[1] + ".jpg"

             verify_image = image_path + images[2] + "/" + images[2] + "_"
             if len(images[3]) < 2:
                 verify_image = verify_image + " + images[3] + ".jpg"
             elif len(images[3]) < 3:
                 verify_image = verify_image + " + images[3] + ".jpg"
             elif len(images[3]) < 4:
                 verify_image = verify_image + " + images[3] + ".jpg"
             else:
                 verify_image = verify_image + images[3] + ".jpg"
         else:
             register_image = image_path + images[0] + "/" + images[0] + "_"
             if len(images[1]) < 2:
                 register_image = register_image + " + images[1] + ".jpg"
             elif len(images[1]) < 3:
                 register_image = register_image + " + images[1] + ".jpg"
             elif len(images[1]) < 4:
                 register_image = register_image + " + images[1] + ".jpg"
             else:
                 register_image = register_image + images[1] + ".jpg"

             verify_image = image_path + images[0] + "/" + images[0] + "_"
             if len(images[2]) < 2:
                 verify_image = verify_image + " + images[2] + ".jpg"
             elif len(images[2]) < 3:
                 verify_image = verify_image + " + images[2] + ".jpg"
             elif len(images[2]) < 4:
                 verify_image = verify_image + " + images[2] + ".jpg"
             else:
                 verify_image = verify_image + images[2] + ".jpg"

         print('\n' + str(count))
         print(register_image)
         print(verify_image)
         score = face_compare(verify_image, register_image)

         if (int(count / 300)) % 2 == 0:
             flag = 1
         else:
             flag = 0

         res_file.write(line + '\t' + str(score) + '\t' + str(flag) + '\n')
         count += 1

     lfw_file.close()
     res_file.close()

 face_compare_test()

三.性能评测

建议采用画rock曲线的方式进行比较,可以将百度和face++的人脸比对结果画在一张图上进行比对

腾讯优图及知脸(ZKface)人脸比对接口测试(python)的更多相关文章

  1. 重磅!刷新两项世界纪录的腾讯优图人脸检测算法DSFD开源了!

    近日,知名开源社区Github上有个名为DSFD(Dual Shot Face Detector)的算法引起了业内关注,它正是来自于腾讯优图.目前,该算法已经被计算机视觉顶级会议CVPR 2019接收 ...

  2. 腾讯优图联手Science发布主题报告:计算机视觉的研发和应用

    近日,腾讯优图与<科学>(Science)杂志共同发布<Seeing is believing: R&D applications of computer vision> ...

  3. 腾讯优图&港科大提出一种基于深度学习的非光流 HDR 成像方法

    目前最好的高动态范围(HDR)成像方法通常是先利用光流将输入图像对齐,随后再合成 HDR 图像.然而由于输入图像存在遮挡和较大运动,这种方法生成的图像仍然有很多缺陷.最近,腾讯优图和香港科技大学的研究 ...

  4. 【腾讯优测干货分享】安卓专项测试之GPU测试探索

    本文来自于Dev Club 开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57c7ffdc0569a1191bce8a63 作者:章未哲——腾讯SNG质 ...

  5. 在腾讯云上把Laravel整合万向优图图片管理能力,打造高效图片处理服务

    推荐理由: 现如今数据爆炸性增长,人类生活产出的数据越来越多,文字信息,图片信息,视频信息:但有很多信息我们都无法直接使用,需通过一定的处理,才能够获取其中对我们有用的信息,在腾讯云上的万向优图能够对 ...

  6. 腾讯云万象优图每个账户提供50G的图片存储(支持黄图检测)

    文章由GIT博客迁移过来 程序下载地址(源码也在):点我下载 设计说明 10月20号晚上,准备写这么一个程序. 腾讯云万象优图每个账户提供50G的图片存储(支持黄图检测) 可以在截图之后,直接点击上传 ...

  7. 【腾讯云的1001种玩法】 Laravel 整合万向优图图片管理能力,打造高效图片处理服务

    版权声明:本文由白宦成原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/574549001488234358 来源:腾云阁 h ...

  8. 【腾讯优测干货分享】如何降低App的待机内存(四)——进阶:内存原理

    本文来自于腾讯优测公众号(wxutest),未经作者同意,请勿转载,原文地址:http://mp.weixin.qq.com/s/3FTPFvZRqyAQnU047kmWJQ 1.4进阶:内存原理 在 ...

  9. 【腾讯优测干货】看腾讯的技术大牛如何将Crash率从2.2%降至0.2%?

    小优有话说: App Crash就像地雷. 你怕它,想当它不存在.无异于让你的用户去探雷,一旦引爆,用户就没了. 你鼓起勇气去扫雷,它却神龙见首不见尾. 你告诫自己一定开发过程中减少crash,少埋点 ...

随机推荐

  1. FZU 1062 洗牌问题

    首先有一个规律:当一个数字归位的时候,所有数字都会归位. 因此只需要模拟一个数字就可以了. #include<cstdio> #include<cstring> #includ ...

  2. Thinking in scala (8)---- 乘幂计算

    递归的方式: b^n = (b^(n/2))^2 若n是偶数 b^n = b*(b^(n-1)) 若n是奇数 迭代的方式 product:存储中间结果,初始化为1 b^n = (b^2)^(n/2) ...

  3. STM8时钟系统详解

    就我个人看来,研究一块单片机,分为新手和老手两种模式,新人迫切的想先用,你得告诉他们怎么样最快的写出一个能跑起来的程序,告诉他们每一个外设的使用方式,老手不同,用的单片机多了外设对于他们而言没太多好奇 ...

  4. Android.mk文件详解(转)

    源:Android.mk文件详解 从对Makefile一无所知开始,折腾了一个多星期,终于对Android.mk有了一个全面些的了解.了解了标准的Makefile后,发现Android.mk其实是把真 ...

  5. Tessnet2图片识别

    验证码识别据说可以用C#图像识别类库Tessnet2来实现,Tessnet2源于目前Google维护的开源项目Tesseract2.本文将对此传说进行验证,含验证结果与验证方法. 1. 验证结果 —— ...

  6. C# Expression表达式笔记

    整理了一下表达式树的一些东西,入门足够了 先从ConstantExpression 开始一步一步的来吧  它表示具有常量值的表达式 我们选建一个控制台应用程序 ConstantExpression _ ...

  7. c#中反射

    在.Net 中,程序集(Assembly)中保存了元数据(MetaData)信息,因此就可以通过分析元数据来获取程序集中的内容,比如类,方法,属性等,这大大方便了在运行时去动态创建实例. MSDN解释 ...

  8. C语言-指针、数组、结构体、分支、循环混合使用

    1.写一个程序,输出如下内容: //############################################################# //### name number ma ...

  9. UVa 10346 - Peter's Smokes

    题目大意:Peter有n支烟,每k个剩下的烟头可以卷成一支新烟,问Peter能吸多少跟烟? 简单数学题. #include <cstdio> int main() { #ifdef LOC ...

  10. JAVA短信验证登录

    短信验证登陆 1.点击触发,以电话号码为参数调用发送验证登录短信方法 2.默认模板为验证模板 生成6位验证码 3.将生成的验证码和手机号码放入缓存,(已经设置好缓存存放时间) 4.调用发送模板短信方法 ...