初学树莓派——(七)接入百度API实现人脸识别
目录
百度端
找到百度智能云中人脸识别这块的网址人脸对比_人脸对比识别_人脸对比相似度-百度AI开放平台
创建应用
按照网页的指示步骤即可完成创建
返回应用列表即可查看已创建的应用
新增人脸分组
下载SDK
树莓派端
SDK传输至树莓派,我用的是VNC远程传输,没有用VNC的小伙伴可以直接用U盘拷贝
安装pip和setuptools,此处不讲解如何安装哈,大家加油,安装后检查一下是否安装到位
我粗鲁了一下,输入命令python setup.py install后报了个错,然后我直接加了sudo继续命令他,然后success安装到位
测试人脸识别
我在桌面上创建了一个文件夹face_dect用来存放本次所需的py文件,jpg文件,txt文件
下面是我的代码
#导入相关的库,因为我用的是外接的摄像头,所以我选择使用CV2来调取摄像头的图像
from aip import AipFace # 百度的API库,前面讲解了如何安装
import cv2 # 我前面的博客讲过如何安装CV2
import time # pip install time
import urllib.request # pip install request pip install urllib
import base64
video = cv2.VideoCapture(0) # 调用摄像头
judge = video.isOpened() # 判断video是否打开
#百度人脸识别API账号信息
APP_ID = '你的APP_ID' # 文章前面讲解了如何设置此类信息
API_KEY = '你的API_KEY '
SECRET_KEY ='你的SECRET_KEY '
GROUP = '你的GROUP '
IMAGE_TYPE='BASE64' # 图像编码类型
client = AipFace(APP_ID, API_KEY, SECRET_KEY)#创建一个客户端用以访问百度云
#把图像上传到百度api进行人脸检测
def go_api(image):
result = client.search(str(image, 'utf-8'), IMAGE_TYPE, GROUP);#在百度云人脸库中寻找有没有匹配的人脸
if result['error_msg'] == 'SUCCESS':#如果成功了
name = result['result']['user_list'][0]['user_id']#获取名字
score = result['result']['user_list'][0]['score']#获取相似度
if score > 80:#如果相似度大于80
if name == 'XXX':#此处的XXX就是你在GROUP下面设置的人物
print("欢迎%s !" % name)
else:
print("对不起,我不认识你!")
name = 'Unknow'
return 0
curren_time = time.asctime(time.localtime(time.time()))#获取当前时间
#将人员出入的记录保存到Log.txt中
f = open('Log.txt','a')
f.write("Person: " + name + " " + "Time:" + str(curren_time)+'\n')
f.close()
return 1
elif result['error_msg'] == 'pic not has face':
print('检测不到人脸')
time.sleep(2)
return 0
else:
print(result['error_code']+' ' + result['error_code'])
return 0
def getimage():
if judge:
ret, frame = video.read() # 获取摄像头
cv2.imshow("frame", frame) # 我在这个地方把摄像头获取到的东西放出来了
# 便于调试,但是每个while需要手动把小窗口关掉
cv2.waitKey(0) # 小窗口保持,不然的话小窗口无法显示图像
cv2.imwrite('b.jpg', frame) # 把刚刚摄像头拿到的图片保存到b.jpg
# 这个文件的路径和py文件一致
#对图片的格式进行转换
def transimage():
f = open('b.jpg','rb')
img = base64.b64encode(f.read())
return img
if __name__ == '__main__':
while True:
getimage()
img = transimage()#转换照片格式
res=go_api(img)
if(res==1):
print("yes")
else:
print("no")
# 释放窗口
video.release()
cv2.destroyAllWindows()