使用百度云智能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 = 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 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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/532835.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

xp搭建 php环境,windows xp 下 LAMP环境搭建

1. apache安装步骤如下图在浏览器中输入:localhost,出现下面页面说明已成功安装apache。2. mysql安装如下图显示在运行里面输入cmd ,然后连接测试mysql ,如图所示:3. php安装(1)将php压缩包解压到安装路径中的php目录…

C++中的虚函数(表)实现机制以及用C语言对其进行的模拟实现

C中的虚函数(表)实现机制以及用C语言对其进行的模拟实现 声明:本文非博主原创,转自https://blog.twofei.com/496/,博主读后受益良多,特地转载,一是希望好文能有更多人看到,二是为了日后自己查阅。 前言 …

C++中数组和指针的关系(区别)详解

C中数组和指针的关系(区别)详解 本文转自:http://c.biancheng.net/view/1472.html 博主在阅读后将文中几个知识点提出来放在前面: 没有方括号和下标的数组名称实际上代表数组的起始地址,这意味着数组名称实际上就是…

安装php独立环境,0507-php独立环境的安装与配置 Web程序 - 贪吃蛇学院-专业IT技术平台...

1.在一个纯英文目录下新建三个文件夹2.安装apache(选择好版本)过程中该填的按格式填好,其余的只更改安装目录即可如果报错1901是安装版本的问题。检查:安装完成后localhost打开为It works!添加到电脑属性环境变量:3.将php文件解压文档放到AMP…

linux中PATH变量-详细介绍

转自:https://blog.csdn.net/haozhepeng/article/details/100584451 转载者勘误 原文最后提到的 echo 命令对于环境变量的修改无影响。这是肯定的,echo 命令相当于只是一个打印的函数(比如 Python 中的 print)。这里要修改环境变…

php assert eval,代码执行函数之一句话木马

前言大家好,我是阿里斯,一名IT行业小白。非常抱歉,昨天的内容出现瑕疵比较多,今天重新整理后再次发出,修改并添加了细节,另增加了常见的命令执行函数如果哪里不足,还请各位表哥指出。eval和asse…

显卡、显卡驱动、CUDA、CUDA Toolkit、cuDNN 梳理

显卡、显卡驱动、CUDA、CUDA Toolkit、cuDNN 梳理 转自:https://www.cnblogs.com/marsggbo/p/11838823.html#nvccnvidia-smi GPU型号含义 显卡: 简单理解这个就是我们前面说的GPU,尤其指NVIDIA公司生产的GPU系列,因为后面介绍的…

VS Code的Error: Running the contributed command: ‘_workbench.downloadResource‘ failed解决

VS Code的Error: Running the contributed command: _workbench.downloadResource failed解决 转自:https://blog.csdn.net/ibless/article/details/118610776 1 问题描述 此前,本人参考网上教程在VS Code中配置了“Remote SSH”插件(比如这…

Oracle闪回报错,oracle 闪回区满了,ORA-19815

oracle 闪回区满了,查看日志报错:ORA-19815,命令行输入:sqlplus / as sysdbastartup mount //如果你的数据库出现了无法连接的情况时,可以加上这句select file_type, percent_space_used as used,percent_space_rec…

[2021-ICCV] MUSIQ Multi-scale Image Quality Transformer 论文简析

[2021-ICCV] MUSIQ: Multi-scale Image Quality Transformer 论文简析 论文:https://arxiv.org/abs/2108.05997 代码:https://github.com/google-research/google-research/tree/master/musiq 概述 当前SOTA的IQA(图像质量评估&#xff0…

安装oracle不动了,windows2008安装ORACLE到2%不动的问题 | 信春哥,系统稳,闭眼上线不回滚!...

最近又有网友遇到在windows2008服务器上安装ORACLE软件时到2%就卡住不动的问题,下面是该网友的描述:oralce 11g r2 windows server 2008 R2安装到最后一步复制数据文件时卡到2% 不走了内存一直飙升求解决这个问题前段时间也有人遇到过,但是他…

手把手教你入门Git --- Git使用指南(Linux)

手把手教你入门Git — Git使用指南(Linux) 系统:ubuntu 18.04 LTS 本文所有git命令操作实验具有连续性,git小白完全可以从头到尾跟着本文所有给出的命令走一遍,就会对git有一个初步的了解,应当能做到会用并…

php数据关系图,如何利用navicat查看数据表的ER关系图

文章背景:(相关推荐:navicat)由于工作需要,现在要分析一个数据库,然后查看各个表之间的关系,所以需要查看表与表之间的关系图,专业术语叫做ER关系图。默认情况下,Navicat显示的界面是这样的&…

Linux中g++与gcc的区别

转自:https://blog.csdn.net/bit_clearoff/article/details/53965514 Windows中我们常用vs来编译编写好的C和C代码;vs把编辑器,编译器和调试器等工具都集成在这一款工具中,在Linux下我们能用什么工具来编译所编写好的代码呢&#…

从C源代码到可执行文件的四个过程:预处理、编译、汇编、链接

从C源代码到可执行文件的四个过程:预处理、编译、汇编、链接 总览 我们将在Linux操作系统中,以C语言的Hello World程序为例,用gcc编译器分步执行这四个步骤。 我们有再熟悉不过的HelloWorld程序,hello.c: #include …

linux内核中cent文件夹,Centos 中如何快速定制二进制的内核 RPM 包

1、rpm 制作前的环境准备:yum install -y ncurses-devel qt-devel rpm-build redhat-rpm-config asciidoc hmaccalc perl-ExtUtils-Embed xmlto audit-libs-devel binutils-devel elfutils-devel elfutils-libelf-devel newt-devel python-devel zlib-devel bc2、准…

TabError- inconsistent use of tabs and spaces in indentation 查验及解决方法

TabError: inconsistent use of tabs and spaces in indentation 查验及解决方法 报错代码 def eccv16(pretrainedTrue):model ECCVGenerator()if(pretrained):import torch.utils.model_zoo as model_zoomodel.load_state_dict(torch.load(/home/ps/.cache/torch/hub/check…

linux用xshell编辑文件,Linux远程管理器xshell和xftp使用教程

Xshell 是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议。Xftp 是一个基于 MS windows 平台的功能强大的SFTP、FTP 文件传输软件。安装完毕后打开xshell设置网站帐号信息设置主机信息设置服务器帐号设置字符集编码设置好了…

FLOPs、FLOPS、Params的含义及PyTorch中的计算方法

FLOPs、FLOPS、Params的含义及PyTorch中的计算方法 含义解释 FLOPS:注意全大写,是floating point operations per second的缩写(这里的大S表示second秒),表示每秒浮点运算次数,理解为计算速度。是一个衡量…

科普 | 单精度、双精度、多精度和混合精度计算的区别是什么?

科普 | 单精度、双精度、多精度和混合精度计算的区别是什么? 转自:https://zhuanlan.zhihu.com/p/93812784 我们提到圆周率 π 的时候,它有很多种表达方式,既可以用数学常数3.14159表示,也可以用一长串1和0的二进制长串表示。 …