900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 使用百度云智能SDK和树莓派搭建简易的人脸识别系统 Python语言版

使用百度云智能SDK和树莓派搭建简易的人脸识别系统 Python语言版

时间:2023-05-14 13:00:23

相关推荐

使用百度云智能SDK和树莓派搭建简易的人脸识别系统 Python语言版

硬件

树莓派4B一个CSI摄像头一个

笔者使用的是树莓派4B和CSI摄像头,但是树莓派3和USB摄像头等相似设备均可。

百度云智能设置

Step 1 登录

百度云智能 网址/

首先登录百度账号,与百度云、百度贴吧等互通,可直接扫码登录。如果没有百度账号请先自行注册。

Step 2 实名认证

百度的产品用了这么多年了,想必大家都已经认证过了,没有认证的读者现在认证即可,很快。

Step 3 领取免费资源

实名认证之后可以领取免费的智能云资源,一定要领取,否则之后我们测试程序时会报qps不足,不知道在哪领取的话先往后看,后面也会有链接。

Step 4 创建应用

鼠标放到右上角的三道横杠,依次选择产品服务、人工智能、人脸识别。

进来以后创建应用:

没有什么特别好说的,都无关乎我们的程序,按自己想的填写即可:(注意前面没有领取免费资源的话,可以在这里点击去领取)

Step 5 下载SDK

创建好应用后回到这个界面,点击下载SDK,一会儿要用。

本文采用Python语言实现,后续可能会出C++版本的教程,这里先直接选择Python的SDK:

Step 6 保存关键信息、创建组、新建用户并上传图片

下载好后我们进入到应用详情,首先保存好AppID、API Key、Secret Key三个字段的值,一会儿程序中要用。

保存好后我们点击左侧的“可视化人脸库”,然后根据页面提示创建组、创建用户、并上传用户的人脸图片,这里笔者只上传了一张自拍照,经测试在正常条件下也是可以识别出本人的。

到这里百度云智能的配置就告一段落了。

树莓派摄像头设置及必要视觉库的安装

Step 1 树莓派及摄像头的硬件安装及开启

首先我们将树莓派和摄像头安装好,并通过raspi-config开启摄像头权限,不熟悉的同学可以参考博客:树莓派摄像头基础配置及测试

Step 2 安装必要的视觉库

安装picamera,这是树莓派原生的图像和摄像头库。

pip install picamera

这里假设大家已经安装好python3。

安装opencv,笔者的程序中使用opencv库来做的图像采集。

sudo apt-get install -y libopencv-dev python3-opencv

如果要使用Python来使用GPIO信号,需要使用RPi.GPIO模块。如果你使用的是Python2版本,树莓派默认安装了RPi.GPIO模块(python-rpi.gpio)。

目前大多数的人都是使用Python3了,所以我们要手动安装Python 3版本的模块。

GPIO在本文中暂时不需要,但是还是安装一下,以后可以通过GPIO传输控制信号玩法有很多,笔者私以为树莓派最有魅力的一个点就在与除了可以看作一台电脑,它还带有丰富的GPIO接口。

sudo apt-get install python3-rpi.gpio

Step 3 安装百度云智能相关模块

安装百度AI模块

sudo pip install baidu-aip

安装SDK,将下载好的人脸识别SDK解压并安装:

sudo python3 setup.py install

测试

首先创建一个客户端来访问百度云智能,这里传入的参数就是刚才让大家保存的几个字段APP_ID, API_KEY, SECRET_KEY

client = AipFace(APP_ID, API_KEY, SECRET_KEY)

以下是核心测试函数,笔者在代码中做了比较详细的注释。

def check():stranger_count = 0while True:img_np = get_image()# opencv读取图像img_base64 = image_to_base64(img_np)# 将opencv读取到的图像转base64编码result = client.search(str(img_base64), 'base64', 'admin'); #在百度云人脸库中寻找匹配的人脸if result['error_msg'] == 'SUCCESS': # 如果成功了,说明检测到人,但不一定是成员name = result['result']['user_list'][0]['user_id'] # 获取名字score = result['result']['user_list'][0]['score']# 获取相似度分数# print(name, score)if score > 80: #如果相似度大于80print('检测到成员:{}, 匹配度:{}'.format(name, score))with open('Log.txt','a') as f:f.write('Person: {},\t score: {:.4f}\t, time: {}\n'.format(name, score, get_curr_time()))time.sleep(2)else:print("检测到非成员,")name = 'stranger'stranger_count += 1stranger_path = os.path.join(STRANGER_DIR, str(stranger_count)+'.jpg')with open('Log.txt','a') as f:f.write('Person: {},\t saved as: {},\t time: {}\n'.format(name, stranger_path, get_curr_time()))cv2.imwrite(stranger_path, img_np)time.sleep(2)elif result['error_msg'] == 'pic not has face':print('未检测到人脸')time.sleep(2)else:print(result['error_code']+' ' + result['error_code'])time.sleep(2)

Log.txt文件的部分输出:

Person: stranger, saved as: strangers/16.jpg, time: Thu Aug 5 19:07:31 Person: stranger, saved as: strangers/17.jpg, time: Thu Aug 5 19:07:34 Person: Song, score: 95.0842, time: Thu Aug 5 19:07:37 Person: stranger, saved as: strangers/18.jpg, time: Thu Aug 5 19:07:43

stranger是笔者请师哥露脸时的输出。Song是笔者本人露脸的识别结果及分数。识别的精度还是可以满足一般日常场景的需要的。

除了与百度之间的接口之外就是一些简单控制逻辑,大家也可以自行设计一些控制逻辑,根据是否检测到人脸、检测到的人脸能否被识别为用户组里的人脸来配合GPIO做一些控制逻辑,比如开关门、开关灯之类等智能家居,或者人脸识别打卡等。

后续笔者可能会做一个C++语言版的分享。

源码地址:/Adenialzz/Rpi-BaiduSDK/tree/main

有其他报错或者困惑的朋友欢迎留言交流,有其他有趣的树莓派或计算机视觉想法的朋友也欢迎留言讨论。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。