前言:最近一直在探索机器视觉这一块,用了用百度的人脸对比,确实是大平台的识别率确实是高,兼容性,平台移植性都挺好,正好配合opencv+树莓派,实现人脸识别,准确率挺高的。
1.树莓派安装上opencv
刚开始,我用的树莓派4b,用pip命令安装老是报错,换了源也不管用最后还是找了一个不错的文章才找着解决方法文章最后附上链接
我用的就是先用浏览器下载whl包,然后在树莓派上离线安装
下载地址:https://www.piwheels.org/simple/opencv-python/opencv_python-3.4.3.18-cp37-cp37m-linux_armv7l.whl

sudo pip3 install opencv_python-3.4.3.18-cp37-cp37m-linux_armv7l.whl

然后import cv2 测试一下,ok
2.下载百度aip并修改编码
一般按照官方文档,会出现编码错误的 问题mac系统上我没测试过,Linux和win上直接用pip下百度的aip会出项编码的问题这时我们通过在json里的encoder.py文件就可以解决问题

sudo pip3 install baidu-aip

下载完之后在python json文件夹里找到encoder.py文件在179行添加上一行代码

if isinstance(o, bytes):  # 少这一行return str(o, encoding='utf-8');
return JSONEncoder.default(self, o)

添加完成后应该是如图所示,保存即可

接下来就可以正常使用百度的aip了,到百度智能云上注册个账号弄一个人脸库,具体看官方的说明文档此处省略。

3.邮箱发送需要用的库安装smtplib
sudo pip3 install smtplib email
由于此处不是文章的主要内容直接附上测试代码

import datetime as dt
from email.mime.text import MIMETextmailserver = "**********"  #邮箱服务器地址
username_send = '****************'  #邮箱用户名
password = '***********'   #邮箱密码:需要使用授权码
username_recv = '**************'  #收件人,多个收件人用逗号隔开def emil_send(text,score,now_time):mail = MIMEText("人员:"+text+"发现时间:"+now_time+"相似度:"+score)mail['Subject'] = '人脸识别发现情况!'mail['From'] = username_send  #发件人,注意这里,一定和smtp.sendmail参数一致,否则会报错mail['To'] = username_recv  #收件人;[]里的三个是固定写法smtp = smtplib.SMTP(mailserver,port=25) # 连接邮箱服务器,smtp的端口号是25# smtp=smtplib.SMTP_SSL('smtp.qq.com',port=465) #QQ邮箱的服务器和端口号try:smtp.login(username_send,password)  #登录邮箱smtp.sendmail(username_send,username_recv,mail.as_string())# 参数分别是发送者,接收者,第三个是把上面的发送邮件的内容变成字符串smtp.quit() # 发送完毕后退出smtp print("发送完毕")except:print("发送失败")

4.具体实现过程,首先通过opencv读取树莓派的usb摄像头里的视频,这里我是用的usb摄像头不是树莓派官方摄像头,用法大同小异没什么区别,通过opencv已经训练好的face检测的数据集haarcascade_frontalface_default.xml
我的放在/usr/local/lib/python3.7/dist-packages/cv2/data/haarcascade_frontalface_default.xml目录下没有的我也附上链接https://pan.baidu.com/s/11xjhBVmrlpNK8OC00uyqrw 提取码:dtyb
跟我放在一样的目录上就行

cam = cv2.VideoCapture(0)
cam.set(3, 640) # set video width
cam.set(4, 480) # set video height
face_detector = cv2.CascadeClassifier('/usr/local/lib/python3.7/dist-packages/cv2/data/haarcascade_frontalface_default.xml'

获取和初始化级联分类器之后

count2=0
def face_search(filepath):#人脸库搜索 global count2with open(filepath, 'rb') as fp:image=base64.b64encode(fp.read())imageType="BASE64"groupIdList="ge"result=client1.search(image,imageType,groupIdList)#print(result)            #打印出所有信息if(str(result['error_code'])=="0"):now_time = dt.datetime.now().strftime('%F %T')print("时间戳:" + str(result['timestamp']))print("用户组:" + str(result['result']['user_list'][0]['group_id']))print("用户:" + str(result['result']['user_list'][0]['user_id']))print("相似度:" + str(result['result']['user_list'][0]['score']))  # 打印出相似度其他信息类似print("时间:"+now_time)if(int(result['result']['user_list'][0]['score'])>70):print("OK!")if(count2==0):emil_send(str(result['result']['user_list'][0]['user_id']), str(result['result']['user_list'][0['score']),now_time)count2=count2+1else:count2=0# img = cv2.imread("./huancun/output.jpg").copy()# cv2.imwrite('/home/pi/Desktop/face/face_NO/'+str(result['timestamp'])+'.jpg', img)print("NO!")# print("已保存!")else:print("错误代码;" + str(result['error_code']))  # 打印错误代码如果是0则正确

人脸搜索的的代码,这里识别相似度大于70的就认为是发现目标,就会调用emil_send()方法发送到邮箱,如果相似率低的就会保存起来
完整代码:

import cv2
import base64
from aip import AipFaceimport smtplib
import datetime as dt
from email.mime.text import MIMEText
#apk
APP_ID1 = ""
API_KEY1 = ''
SECRET_KEY1 = ''
client1 = AipFace(APP_ID1, API_KEY1, SECRET_KEY1)
#mailserver = ""  #邮箱服务器地址
username_send = ''  #邮箱用户名
password = ''   #邮箱密码:需要使用授权码
username_recv = ''  #收件人,多个收件人用逗号隔开cam = cv2.VideoCapture(url)
cam.set(3, 640) # set video width
cam.set(4, 480) # set video height
face_detector = cv2.CascadeClassifier(cv2.data.haarcascades+'haarcascade_frontalface_default.xml')
# For each person, enter one numeric face id
print("\n sousuozhong ...")
# Initialize individual sampling face count
count = 0
count2 = 0
def face_search(filepath):#人脸库搜索  222207global count2with open(filepath, 'rb') as fp:image=base64.b64encode(fp.read())imageType="BASE64"groupIdList="ge"result=client1.search(image,imageType,groupIdList)#print(result)            #打印出所有信息if(str(result['error_code'])=="0"):now_time = dt.datetime.now().strftime('%F %T')print("时间戳:" + str(result['timestamp']))print("用户组:" + str(result['result']['user_list'][0]['group_id']))print("用户:" + str(result['result']['user_list'][0]['user_id']))print("相似度:" + str(result['result']['user_list'][0]['score']))  # 打印出相似度其他信息类似print("时间:"+now_time)if(int(result['result']['user_list'][0]['score'])>70):print("OK!")if(count2==0):emil_send(str(result['result']['user_list'][0]['user_id']), str(result['result']['user_list'][0['score']),now_time)count2=count2+1else:count2=0# img = cv2.imread("./huancun/output.jpg").copy()# cv2.imwrite('/home/pi/Desktop/face/face_NO/'+str(result['timestamp'])+'.jpg', img)print("NO!")# print("已保存!")else:print("错误代码;" + str(result['error_code']))  # 打印错误代码如果是0则正确
def emil_send(text,score,now_time):mail = MIMEText("人员:"+text+"发现时间:"+now_time+"相似度:"+score)mail['Subject'] = '人脸识别发现情况!'mail['From'] = username_send  #发件人,注意这里,一定和smtp.sendmail参数一致,否则会报错mail['To'] = username_recv  #收件人;[]里的三个是固定写法smtp = smtplib.SMTP(mailserver,port=25) # 连接邮箱服务器,smtp的端口号是25try:smtp.login(username_send,password)  #登录邮箱smtp.sendmail(username_send,username_recv,mail.as_string())smtp.quit() # 发送完毕后退出smtp print("发送完毕")except:print("发送失败")#face_search('face/ll.jpg')
while(True):ret, img = cam.read()#img = cv2.flip(img,1,-1) # flip video image verticallygray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)cv2.imshow('image1', img)faces = face_detector.detectMultiScale(gray, 1.3, 5)for (x,y,w,h) in faces:cv2.rectangle(img, (x,y), (x+w,y+h), (255,0,0), 2)     count += 1# Save the captured image into the datasets foldernew NEDcv2.imwrite("./huancun/output.jpg", gray[y:y+h,x:x+w])face_search("./huancun/output.jpg")#cv2.imshow('image2', img)k = cv2.waitKey(100) & 0xff # Press 'ESC' for exiting videoif k == 27:break
#    elif count >= 30: # Take 30 face sample and stop video
#         break# Do a bit of cleanup
print("\n >>end<<")
cam.release()
cv2.destroyAllWindows()

最终效果图:


具体效果可根据自己的需求更改,opencv的级联分类器有好多训练好的模型数据,相对来说比较好用,搜索到脸部截取下来,再用百度的aip搜索,可靠性还是非常高的毕竟大平台,训练数据多
结尾:本文代码部分都是原创,转载请附上链接

树莓派+opencv+百度aip实现人脸识别并发置邮箱相关推荐

  1. python+opencv+百度智能云 人脸识别——人脸融合

    一.设计思路 1.导入模块 import base64 import json import requests base64模块:由于某些系统中只能使用ASCII字符.Base64就是用来将非ASCI ...

  2. 树莓派+百度api实现人脸识别

    title: 树莓派+百度api实现人脸识别 tags: 树莓派 date: 2018-5-31 20:06:00 --- 树莓派对接百度api 我以前玩安卓的时候一直用的讯飞的平台和api,对于百度 ...

  3. java 正規表示 group_经验分享|Java+百度AI实现人脸识别

    之前尝试用python+opencv实现过人脸识别,接下来我们使用Java+百度AI来实现人脸识别的尝试. I 注册百度开放平台账号 打开百度AI官方网站(https://ai.baidu.com/? ...

  4. Qt+百度AI实现人脸识别之人脸检测

    文章目录 简单需求 Demo运行结果 百度AI人脸识别接入 为什么使用百度AI接口 接入步骤 如何获取Access Token Qt软件开发 人脸检测Qt编程步骤 知识点 网络编程 get.put.p ...

  5. Java后端 + 百度SDK实现人脸识别

    Java后端 + 百度SDK实现人脸识别 人工智能越来越贴近我们的生活,相信大家也经常接触到人脸识别,手机付款.app注册验证.门禁等等. 如果要用Java后台使用这些功能,那么需要怎么做呢?请看完下 ...

  6. 基于opencv和pillow实现人脸识别系统(附demo)

    更多python教程请到友情连接: 菜鸟教程https://www.piaodoo.com 初中毕业读什么技校 http://cntkd.net 茂名一技http://www.enechn.com p ...

  7. 百度智能云人脸识别java_demo完整实例

    1.首先需要注册百度智能云服务,注册完登录之后 找到对应的人脸识别云服务. 2.点击立即使用 3.创建应用 4.领取免费的api接口服务 5.领取完成之后,创建自己的应用,填写必填项之后创建即可 6. ...

  8. 人脸表情识别 微信小程序 百度智能云人脸识别API(含完整项目文件)

    展示 界面展示 正下方三个按钮: 左边:切换前后置摄像头 中间:拍照 右边:选择相册 识别结果展示 图像中有人脸时显示识别结果: 图像中无人脸时不显示识别结果: 获取百度智能云人脸识别API 1.进入 ...

  9. 使用百度云的人脸识别API实现两张照片是否为同一人的判断

    今天是小编第一次使用百度云的人脸识别API,小编是个小白,一路坎坷,经过一天的学习与研究,终于实现了这个功能. 1.下面是在这个过程中使用的所有的工具: IntelliJ IDEA(Java的开发工具 ...

  10. Python基于百度AI的人脸识别系统--颜值检测

    基于百度AI的人脸识别系统–颜值检测 刚开始学,觉得好玩就写了这个 主要是分为人脸识别系统的对接,UI的设计 人脸识别系统: 用的百度的AI,其中的AK,SK可以换成自己的,在百度开放平台上注册就能获 ...

最新文章

  1. 2014/08/24——升级stepbystep修复tc不刷新问题并加入杭电bc
  2. Canvas3 汉化QA和BUG反馈
  3. 在Unix/Linux上令(java)JVM支持中文输出
  4. jfreechart 时序图 ,生成图表
  5. [html] 表单可以跨域吗?
  6. 计算机网络学习笔记(7. 报文交换与分组交换①)
  7. 快速部署MySQL5.6.36数据库实践
  8. java手机编译器_Java编译器手机版
  9. java excel 导入试题
  10. 什么是在网上常说的“丢包”?
  11. kali 使用u盘安装提示“无法挂在光盘..”的解决方案
  12. window10下WSL使用Ubuntu报错: System has not been booted with systemd as init system (PID 1). Can‘t operat
  13. 更换头像的测试点(站在 app 的角度来分析)
  14. 『phphot』【SD2.0大会】刘振飞:微软Office研发成功三大法宝
  15. tensorflow 数据输入与特征工程
  16. YouTube玩转的自动字幕,为什么被国内视频网站“主动错过”?
  17. 陈皓:Git显示漂亮日志的小技巧
  18. Frontend 当前前端的三种渲染方式
  19. EP-PEG2000-EP,具有两个环氧基团的线性双功能PEG,EP-PEG2000-Epoxide
  20. 求三角形 四边形面积(python)

热门文章

  1. 艺术与实在中的递归 递归和原始递归函数——读哥德尔之六
  2. 在Dart中使用FFI调用Rust函数
  3. 基于JAVAweb唐院寻人表白系统计算机毕业设计源码+数据库+lw文档+系统+部署
  4. c# 操作word光标
  5. ios审核要注意的地方(转)
  6. tornado 异步
  7. 大数据分析技术与应用
  8. 机器学习笔记 - EfficientNet论文解读
  9. ubuntu设置软件安装源为阿里云
  10. 做硬件,真的没前途吗?看看资深工程师是怎么说的