人脸识别

  首先我想描述一下,在学校的时候一直好奇人脸识别与人脸检测这个技术,之后做了很多实验,曾经使用过很多简单的算法来做人脸相似度对比,比如:夹角余弦算法、判断两个矩阵之间对应位置元素相同来做统计、直方图比对、欧氏距离、绝对值距离等等很多这种低级的实验我都做过,一次次的识别让我感到万分难过。之后我不在最求这种算法的研究了,改成了看别人如何实现的,你也实现出来就好。很多人说这是it从业者的征兆,这样我彻底相信了,因为作为一个it开发的从业工作者,不能什么东西都需要自己开发,公司的要求是尽快的把项目赶出来,才能到达利益最大化。下面我为大家带来我在学校一直实验的人脸识别实现吧。当然我是在调用别人的接口。

1、导入所需要的包

  1. import requests
  2. from json import JSONDecoder
  3. import cv2

导包

2、定义请求返回数据画出人脸

  1. def drawFace(face_rectangle,img):
  2. width = face_rectangle['width']
  3. top = face_rectangle['top']
  4. left = face_rectangle['left']
  5. height = face_rectangle['height']
  6. start = (left, top)
  7. end = (left + width, top + height)
  8. color = (55, 255, 155)
  9. thickness = 3
  10. cv2.rectangle(img, start, end, color, thickness)

定义函数

3、准备好post请求的地址、key、password。

  1. compare_url = "https://api-cn.faceplusplus.com/facepp/v3/compare"
  2. key = "5Ut_EUtu3dG8Q60UBQdj8_LICgc4KByR"
  3. secret = "cWXtsKOMx62m8zHUx810MG-0oGoOnhSO"
  4.  
  5. faceId1 = "img_test/tong1.jpg" # 图片地址
  6. faceId2 = "img_test/tong2.jpg" # 图片地址
  7.  
  8. data = {"api_key": key, "api_secret": secret}
  9. files = {"image_file1": open(faceId1, "rb"), "image_file2": open(faceId2, "rb")}
  10. response = requests.post(compare_url, data=data, files=files)

发送请求

4、对http返回数据进行转换提取

  1. req_con = response.content.decode('utf-8')
  2. req_dict = JSONDecoder().decode(req_con)
  3.  
  4. print(req_dict)
  5.  
  6. #置信度,越高说明越像
  7. confindence = req_dict['confidence']
  8. print(confindence)
  9.  
  10. #将人脸框出来
  11. face_rectangle_1 = req_dict['faces1'][0]['face_rectangle']
  12. # print(face_rectangle_1)
  13. face_rectangle_2 = req_dict['faces2'][0]['face_rectangle']

5、画出检测对比的人脸

  1. img1 = cv2.imread(faceId1)
  2. img2 = cv2.imread(faceId2)
  3.  
  4. if confindence>=80:
  5. drawFace(face_rectangle_1,img1)
  6. drawFace(face_rectangle_2,img2)
  7.  
  8. #图片过大,调整下大小
  9. img1 = cv2.resize(img1,(500,500))
  10. img2 = cv2.resize(img2,(500,500))
  11.  
  12. cv2.imshow("img1",img1)
  13. cv2.imshow("img2",img2)
  14.  
  15. cv2.waitKey(0)
  16. cv2.destroyAllWindows()

6、下面是完整代码:

  1. # coding:utf-8
    import requests
  2. from json import JSONDecoder
  3. import cv2
  4.  
  5. def drawFace(face_rectangle,img):
  6. width = face_rectangle['width']
  7. top = face_rectangle['top']
  8. left = face_rectangle['left']
  9. height = face_rectangle['height']
  10. start = (left, top)
  11. end = (left + width, top + height)
  12. color = (55, 255, 155)
  13. thickness = 3
  14. cv2.rectangle(img, start, end, color, thickness)
  15.  
  16. compare_url = "https://api-cn.faceplusplus.com/facepp/v3/compare"
  17. key = "5Ut_EUtu3dG8Q60UBQdj8_LICgc4KByR"
  18. secret = "cWXtsKOMx62m8zHUx810MG-0oGoOnhSO"
  19.  
  20. faceId1 = "img_test/tong1.jpg" # 图片地址
  21. faceId2 = "img_test/tong2.jpg" # 图片地址
  22.  
  23. data = {"api_key": key, "api_secret": secret}
  24. files = {"image_file1": open(faceId1, "rb"), "image_file2": open(faceId2, "rb")}
  25. response = requests.post(compare_url, data=data, files=files)
  26.  
  27. req_con = response.content.decode('utf-8')
  28. req_dict = JSONDecoder().decode(req_con)
  29.  
  30. print(req_dict)
  31.  
  32. #置信度,越高说明越像
  33. confindence = req_dict['confidence']
  34. print(confindence)
  35.  
  36. #将人脸框出来
  37. face_rectangle_1 = req_dict['faces1'][0]['face_rectangle']
  38. # print(face_rectangle_1)
  39. face_rectangle_2 = req_dict['faces2'][0]['face_rectangle']
  40.  
  41. img1 = cv2.imread(faceId1)
  42. img2 = cv2.imread(faceId2)
  43.  
  44. if confindence>=80:
  45. drawFace(face_rectangle_1,img1)
  46. drawFace(face_rectangle_2,img2)
  47.  
  48. #图片过大,调整下大小
  49. img1 = cv2.resize(img1,(500,500))
  50. img2 = cv2.resize(img2,(500,500))
  51.  
  52. cv2.imshow("img1",img1)
  53. cv2.imshow("img2",img2)
  54.  
  55. cv2.waitKey(0)
  56. cv2.destroyAllWindows()

  

face++ API接口调用的更多相关文章

  1. 【redis】redis实现API接口调用调用次数的限制

    redis实现API接口调用调用次数的限制 参考地址:https://bbs.csdn.net/topics/391856106?page=1 参考地址:https://www.cnblogs.com ...

  2. [转载]android常用的API接口调用

    原文地址:android常用的API接口调用作者:宋耀 显示网页:         Uri uri = Uri.parse("http://www.google.com"); In ...

  3. Nginx api接口调用配置

    1 # Nginx api接口调用配置 2 3 # 什么是跨域同源? 4 # 同源策略:协议(http.https.wss--)+域名+端口=一个完整的网站 5 # 跨域:当前所在的网站post(ge ...

  4. 新浪网易淘宝等IP地区信息查询开放API接口调用方法

    通过IP地址获取对应的地区信息通常有两种方法:1)自己写程序,解析IP对应的地区信息,需要数据库.2)根据第三方提供的API查询获取地区信息. 第一种方法,参见文本<通过纯真IP数据库获取IP地 ...

  5. ajax跨域实现api 接口调用

    背景: 想实现跨域去调用接口, 然后同时支持下次调用,能够带cookie信息过来,同时支持来自多个源头的域名的跨域调用. 1.这样支持来自所有域名的跨域调用: 不支持跨域是,浏览器报错: 在api接口 ...

  6. JAVA的免费天气api接口调用示例

    step1:选择本文所示例的接口"免费天气api" url:https://www.juhe.cn/docs/api/id/39/aid/87 step2:每个接口都需要传入一个参 ...

  7. java web api接口调用

    Web Services 被W3C进行了标准化定义. Web Services 发布到网上,可以公布到某个全局注册表,自动提供服务URL,服务描述.接口调用要求.参数说明以及返回值说明.比如中国气象局 ...

  8. 小程序API接口调用

    1.在config.js中写入api接口及appkey   2.在HTTP.js中引入config.js,然后新建HTTP.js,在里进行wx.request的封装. 定义一个HTTP的类,来类里定义 ...

  9. .Net RabbitMQ实战指南——HTTP API接口调用

    RabbitMQ Management插件还提供了基于RESTful风格的HTTP API接口来方便调用.一共涉及4种HTTP方法:GET.PUT.DELETE和POST.GET方法一般用来获取如集群 ...

  10. Restful API接口调用的方法总结

    restful 接口调用的方法 https://www.cnblogs.com/taozhiye/p/6704659.html http://www.jb51.net/article/120589.h ...

随机推荐

  1. Remote X11 GUI for Linux/Unix

    摘自:https://www.redwireservices.com/remote-x11-for-linux-unix The Problem One of my most feared quest ...

  2. 【多校联合】(HDU6045)Is Derek lying?

    分析 之前没有想到题目解法,看了题解才会,记录一下思考过程. 这条题目的实质是,在满足合法的情况下,有没有a和d的可行解?也就是说,不要仅仅附在表面的思考逻辑条件,而是要思考实际的数学表达. 转化为数 ...

  3. 2016弱校联盟十一专场10.3 We don't wanna work!

    能把 not working now 写成 not working hard now 还查一晚上也是没谁了 我的做法是维护两个set 分别是前20% 和后80% #include<iostrea ...

  4. xadmin站点管理面样样式控制

    xadmin可以使用的页面样式控制基本与Django原生的admin一直. list_display 控制列表展示的字段 search_fields 控制可以通过搜索框搜索的字段名称,xadmin使用 ...

  5. LAXCUS对数据存储的优化

        LAXCUS兼容行存储(NSM)和列存储(DSM)两种数据模型,实现了混合存储.同时在分布环境里,做到将数据的分发和备份自动处理,这样就不再需要人工干预了.     行存储,为了兼容广大用户对 ...

  6. 项目启动报错: No naming context bound to this class loader

    发步项目到本地tomcat,启动后,一直包错:  警告: Failed to retrieve JNDI naming context for container [StandardEngine[Ca ...

  7. MSSSQL 脚本收藏

    通配符 % : 表示0~n个任意字符 ­ _ : 表示单个任意字符 ­ [] :表示在括号里列出的任意字符 ­ [^]:表示任意个没有在括号中列出的字符 ­ 1.创建数据库 2. 创建架构 /**** ...

  8. HDU 1028 整数拆分问题 Ignatius and the Princess III

    Ignatius and the Princess III Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K ...

  9. User Agent的学习

    什么是User-Agent? User-Agent是一个特殊字符串头,被广泛用来标示浏览器客户端的信息,使得服务器能识别客户机使用的操作系统和版本,CPU类型,浏览器及版本,浏览器的渲染引擎,浏览器语 ...

  10. css实现div一直旋转

    看到音乐播放器播放界面的唱片一直旋转,突然想到在网页中的一直旋转效果,所有特地查了一下分享出来 这是一个静态的div,然后把它旋转动起来.效果请看右上角的音乐播放按键一样. 代码如下: <htm ...