基于face++和Onenet平台的人脸门禁系统

前言

第一次见识人脸解锁是在iPhoneX,前两天安卓8.0的小米6把我的手机也可以做到人脸结果。各大公司都推出了自己的人脸识别Api,因为个人兴趣,了解了face++的人脸识别Api,主要打算用于智能家居的门禁系统。本文使用python的requests库,实现face++的API接口的调用,使用Opencv调用摄像头拍照,进行人脸识别。

1.face++的初接触

1.1注册及基本概念

注册账号后,即可在应用管理中的API KEY中,查看自己的API KEY 和 API Secret,这是免费试用的API,有两点缺陷:

1、有一些API接口服务,无法使用;

2、并发数有上限,在调试时,可能会经常并发数出错,错误代码: CONCURRENCY_LIMIT_EXCEEDED

一些face++中人脸识别的核心概念:https://console.faceplusplus.com.cn/documents/5671791,其中涉及到人脸标识(face_token),人脸集合标识(faceset_token)。

1.2 人脸检测API的调用

人脸识别的第一个API -- Detect API,上传图片进行人脸检测,对检测到的人脸将给出face_token作为唯一标识。注意,同一个人脸的face_token是不一样的。

调用的URL:https://api-cn.faceplusplus.com/facepp/v3/detect ,调用方法POST。

其请求(必选)参数为,具体参数和返回值可见文档 https://console.faceplusplus.com.cn/documents/4888373

实现上传的python代码为:

  1. # -*- coding:utf8 -*-
  2. import requests
  3. import json
  4. #上传一张人脸
  5. def send_oneface(pic_name):
  6. basic_dir = r'dir path'
  7. url = 'https://api-cn.faceplusplus.com/facepp/v3/detect'
  8. payload = {
  9. 'api_key': '*******',
  10. 'api_secret': '*******',
  11. }
  12. files = {'image_file': open(basic_dir+'/'+pic_name, 'rb')} #这里以二进制上传数据
  13. r = requests.post(url, files=files, data=payload)
  14. face = (r.json().get('faces'))
  15. if face is None:
  16. print('there is no face found in %s' %pic_name)
  17. else:
  18. a = face[0]['face_token']
  19. print('faceId1:%s' %a)
  20. return a

其中注意的是files中,按API文档,采用二进制图片上传;其次使用requests.post上传请求,返回的r为json字符串,需r.json()变为字典格式。

返回结果为,具体可见face++官方文档分析:

2. 人脸集合及人脸识别

2.1 建立人脸集合

描述:创建一个人脸的集合 FaceSet,用于存储人脸标识 face_token。

调用的URL:https://api-cn.faceplusplus.com/facepp/v3/faceset/create

实现的python代码:(这里就直接参考这位大佬的:http://blog.csdn.net/obuzuopiqi/article/details/54428433)

  1. #coding=utf8
  2. import requests
  3. url = 'https://api-cn.faceplusplus.com/facepp/v3/faceset/create'
  4. payload = {'api_key': '*******',
  5. 'api_secret': '*******',
  6. 'display_name':'Dorm_1014',
  7. 'outer_id':'dorm',
  8. 'face_tokens':'c116a106c02f6ffd8606408fe2fb5def'
  9. }
  10. r = requests.post(url,data=payload)
  11. print r.text

这里会返回人脸集合的唯一标识faceset_token,其作用于outer_id差不多,都是作为人脸集合的标识。

2.2 人脸识别(搜索)

描述:在Faceset中找出与目标人脸最相似的一张或多张人脸。
        调用URL:https://api-cn.faceplusplus.com/facepp/v3/search

实现的代码:

  1. #coding=utf8
  2. import requests
  3. import json
  4. payload = {
  5. 'api_key': 'db9imPdwPuABdAUsaXzqLF8jnzKxuw7k',
  6. 'api_secret': '8Zpr10gYFbIXeU5QWz-CJtEKlJejvpPd',
  7. }
  8. #search 查找功能
  9. def find_face(pic_name):
  10. url = 'https://api-cn.faceplusplus.com/facepp/v3/search'
  11. payload['outer_id'] = 'test'
  12. files = {'image_file': open(pic_name, 'rb')}
  13. r = requests.post(url,files=files,data=payload)
  14. print(r.json())
  15. return r.json()

3.结合Onenet云平台的门禁系统

由于在接触Onenet物联云平台,就简单做了一个门禁系统。代码中是方便调试的,按空格拍照,并且上传到face++,将人脸识别结果和图像再上传到onenet平台,可以实现远程的监控。当触发条件为陌生人,Onenet平台会发邮件提醒自己,陌生人来访。

先放结果图吧:

这里可以结合其他传感器、继电器等硬件,实现更多的功能。

代码如下:

  1. #!/usr/bin/python
  2. # -*- coding:utf8 -*-
  3. import cv2
  4. import requests
  5. import json
  6. import time
  7. payload = {
  8. 'api_key': '********',
  9. 'api_secret': '********',
  10. }
  11. #search 查找功能
  12. def find_face(pic_name):
  13. url = 'https://api-cn.faceplusplus.com/facepp/v3/search'
  14. payload['outer_id'] = 'test'
  15. files = {'image_file': open(pic_name, 'rb')}
  16. r = requests.post(url,files=files,data=payload)
  17. print(r.json())
  18. return r.json()
  19. #向onenet平台提交图片
  20. def onenet_put_pic(device,image_name):
  21. url='http://api.heclouds.com/bindata'
  22. headers={"api-key":'*********', #改成你的APIKEY
  23. "Content-Type":"image/jpg",
  24. }
  25. querystring = {"device_id": str(device), "datastream_id": "picture"}
  26. with open(image_name, 'rb') as f:
  27. r=requests.post(url, params=querystring, headers=headers, data=f)
  28. # print(r.json())
  29. return r
  30. #向onenet平台提交数据
  31. def onenet_put_data(device,id,data):
  32. url='http://api.heclouds.com/devices/'+str(device)+'/datapoints'
  33. apiheaders={"api-key":'**********'}
  34. values={ 'datastreams':[{"id":id,"datapoints":[{"value":data}]}] }
  35. jdata = json.dumps(values) # 对数据进行JSON格式化编码
  36. #print(jdata) #打印json内容
  37. r=requests.post(url,headers=apiheaders,data=jdata)
  38. # print(r.json())
  39. return r
  40. cap=cv2.VideoCapture(0)
  41. device = *****
  42. while True:
  43. #读取帧摄像头
  44. s, img = cap.read()
  45. if s==True:
  46. cv2.imshow('test',img)
  47. key = cv2.waitKey(1) & 0xFF
  48. #退出
  49. if key == 27:
  50. break
  51. if key == ord(' '):
  52. time_now = time.strftime('%m-%d %H-%M-%S',time.localtime(time.time()))
  53. pic_name1 = "./pic_r/"+time_now+".jpg"
  54. cv2.imwrite(pic_name1,img)
  55. print('保存图片成功')
  56. onenet_put_pic(device,pic_name1) #提交给onenet
  57. data = find_face(pic_name1) #对比人脸库
  58. if "error_message" in data:
  59. print("高并发报错")
  60. elif len(data["faces"]) == 0:
  61. print('\n未检测到人脸')
  62. onenet_put_data(device,"people","没有人脸")
  63. else:
  64. if data["results"][0]["face_token"] == "37752bc1efbc7af3a9b765eec9928ab9" and data["results"][0]["confidence"]>=data["thresholds"]["1e-5"]:
  65. print('\n这是CJC')
  66. onenet_put_data(device,"people","CJC")
  67. elif data["results"][0]["face_token"] == "5b15f6da55737907bf470db44f38f9d1" and data["results"][0]["confidence"]>=data["thresholds"]["1e-5"]:
  68. print('\n这货是MLH')
  69. onenet_put_data(device,"people","MLH")
  70. else:
  71. print('\n陌生人')
  72. onenet_put_data(device,"people","陌生人")

智能门禁(4)---基于face++和Onenet平台的人脸门禁系统相关推荐

  1. 【毕业设计_课程设计】基于Android的人脸门禁系统

    文章目录 0 项目说明 1 研究目的 2 研究内容及实验结果 3 部分系统界面 4 项目源码 0 项目说明 基于Android的人脸门禁系统 提示:适合用于课程设计或毕业设计,工作量达标,源码开放 1 ...

  2. 基于树莓派百度Api的人脸门禁系统--毕业设计

    基于树莓派百度Api的人脸门禁系统 在学校中因为上课原因,没有拿到关于电气及其自动化本专业的毕业题目,但是门禁系统让我眼前一亮.此题目是我硬着头皮接下的. 为了更好的做完自己的毕业设计,在不断的学习p ...

  3. 基于nbiot在onenet平台的一个智能停车场系统

    是一次青少年的比赛作品:其包括代码+pcb+物联网的页面 代码主要是包括:AT指令的发送和接收是否"ok"的判断 (我用的是nbiot,也是用到bc28的芯片,不同芯片主要是指令会 ...

  4. 智能门禁(3)---汉王智能人脸门禁系统

    汉王智能人脸门禁系统方案

  5. 基于区块链的二维码门禁系统成品演示视频

    视频演示链接:https://www.bilibili.com/video/av49528235?from=search&seid=9311233092198623454

  6. 毕设-基于STM32刷卡、指纹的门禁系统的设计与实现(进阶版)

    简介 上面一篇文章已经将指纹模块的驱动原理讲解明白,本文就详细介绍以下整个系统是如何实现的. 实现功能 系统要求如下: 1)使用RC522与指纹模块控制门的打开 2)添加IC卡和指纹数据 3)语音播报 ...

  7. 基于百度人脸识别的小区人脸门禁系统

    又是一年毕业季,自己转眼间也毕业一年了!!!前段时间帮学妹指导了一个小区人脸识别门禁系统,整个的实现思路在此记录下,感兴趣的可以参考一下. 整个项目沟通后情况如下: 需求功能: 人脸录入 人脸更新 人 ...

  8. 毕设-基于STM32刷卡、指纹的门禁系统(进阶版-指纹模块的驱动)

    目录 简介 模块介绍 引脚介绍 指令 驱动方式 代码编写 串口初始化 串口发送数据 发送指令 删除flash库中指定ID号开始的N个数据 录取指纹图像 生成特征 存储在缓冲区1中 生成特征 存储在缓冲 ...

  9. 基于STM32与OneNet平台的智能家居系统设计(代码开源含自制APP代码)

     前言:本文为手把手教学的基础物联网开发设计,项目包含对下位机(MCU对外设数据读取与控制)和上位机(包含服务平台和APP端)的设计.下位机选取STM32作为MCU,外设有LED灯和DHT11温湿度传 ...

最新文章

  1. 如何提升微服务的幸福感
  2. 《深入Java虚拟机》笔记
  3. mac 更换默认蓝牙适配器_蓝牙防丢器实现安卓的BLE接口编程
  4. 选择 Java 编写 iOS 与 安卓 App的八大理由
  5. python 读取csv_Python实现CSV数据的读取--两种方法实现
  6. xpath抓取html不完全,scrapy的xpath是否取HTML标签的情况分析
  7. python3 模块详细解释_详解Python3中的contextvars模块
  8. 从Android运行时出发,打造我们的脱壳神器 - zyq8709--dexhunter(二代抽取壳)
  9. 细胞制备流程图_体细胞核移植过程中,注入“供体细胞”还是“供体细胞核”?...
  10. Result的类型分析和总结
  11. Real-Time-Voice-Cloning(github声音克隆项目演示)
  12. css3波浪纹路_css3线条波浪动画效果
  13. 什么是CISP-PTS?考什么?
  14. 通过学习制作长微博工具来了解水印的制作,及EditText中的内容在图片中换行显示
  15. python短网址转换
  16. C++函数未运行,且显示Process returned -1073741571 (0xC00000FD)
  17. muduo BlockingQueue详解
  18. 台大李宏毅--keras
  19. 学雷锋志愿魂·手抄报见行动
  20. CNN中各参数的意义

热门文章

  1. 力士乐电源模块故障代码_奥的斯电梯OVF402,OVF404,OVF406驱动器故障代码
  2. php文章远程图片,php实现异步将远程链接上内容(图片或内容)写到本地的方法
  3. php curl 批量,关于用php的curl批量抓取内容
  4. 聚宽macd底背离_老股民技巧一招鲜:MACD顶、底背离图解及近期实战应用,字字斗金...
  5. java复习系列[2] - Java多线程
  6. php批量生成优惠券,PHP自动批量生成会员卡号程序
  7. 【LeetCode】【HOT】347. 前 K 个高频元素(哈希表+优先队列)
  8. 使用Freemarker实现网页静态化
  9. 关于neo4j初入门(2)
  10. uploadify没反应