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

硬件

  1. 树莓派4B一个
  2. CSI摄像头一个

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

百度云智能设置

Step 1 登录

百度云智能 网址https://cloud.baidu.com/

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

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 = 0
    while 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:    #如果相似度大于80
                print('检测到成员:{}, 匹配度:{}'.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 += 1
                stranger_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 2021
Person: stranger,	 saved as: strangers/17.jpg,	 time: Thu Aug  5 19:07:34 2021
Person: Song,	 score: 95.0842	, time: Thu Aug  5 19:07:37 2021
Person: stranger,	 saved as: strangers/18.jpg,	 time: Thu Aug  5 19:07:43 2021

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

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

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

源码地址:https://github.com/Adenialzz/Rpi-BaiduSDK/tree/main

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

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值