树莓派实现简单的人脸识别
前言
这篇文章属于此系列:
一个用树莓派做的会聊天,能人脸识别(支持云台追踪)和发送邮件的小玩具
https://blog.csdn.net/yonglisikao/article/details/82804318
前提
一.硬件要求
树莓派及基本配件,树莓派摄像头模块(Picamera)或USB摄像头(Webcam)。
二.系统要求
Raspbian系统(其他Linux系统应该也可以,没试过)
三.软件要求
Python及一些库——opencv,dlib, face_recognition,numpy
(安装opencv一般需要至少一个小时,如果使用Picamera,可以用更简单的picamera库代替,这些将在后文中继续讨论。)
环境搭建
1.系统安装
系统安装可以参考之前的文章。
2.摄像头配置
摄像头与树莓派在物理上连接完成后,如果是首次使用需要进行一些配置,在命令行输入:
sudo raspi-config
在 Interfacing Options 里启用 Camera,在命令行输入:
sudo reboot
配置完毕,接下进行检查,在命令行输入:
ls /dev/video*
如果有显示:/dev/video0,则检查完毕。
3.库的安装
安装opencv,参考下面这篇Adrian Rosebrock的文章:
https://www.pyimagesearch.com/2017/09/04/raspbian-stretch-install-opencv-3-python-on-your-raspberry-pi/
走完这篇文章的所有流程后,你应该安装了numpy,并建立了自己的虚拟环境(virtualenv),无论它叫 cv 或者其他什么名字的,以下的操作请都在虚拟环境下完成。另外,我使用的是python3。
安装dlib,face_recognition,在命令行输入:
pip install dlib
pip install face_recognition
pip install numpy
至此环境搭建完毕。
代码实现
1.face_recognition库的简单使用
face_recognition的github项目地址为:https://github.com/ageitgey/face_recognition
在此仅简单介绍几个函数,更详细的内容请参考原项目地址。
加载当前目录下的名为“test.jpg”的图片,得到ndarray类型的数据image
image = face_recognition.load_image_file('test.jpg')
对image进行分析,得到照片中脸的位置信息face_locations,能同时获取多张脸的位置,所以返回类型为list
face_locations = face_recognition.face_locations(image)
输入image,face_locations,得到脸的特征值face_encodings,能同时获取多张脸的特征值,所以返回类型为list
face_encodings = face_recognition.face_encodings(image, face_locations)
比较两个特征值——encoding1与encoding2,匹配返回True,否则返回False。tolerance越低,顾名思义,容错率越低
matches = face_recognition.compare_faces(encoding1, encoding2, tolerance=0.38)
接下来运行一个实例,以下实例改编自项目原址一个用picamera库实现的demo,这里使用opencv实现:
# coding = utf-8
import face_recognition
import cv2# 创建视频对象
video_capture = cv2.VideoCapture(0)# 加载当前目录下名为'test.jpg'的照片,照片里需要有且仅有一张脸,这张脸将作为认识的脸
print('loading...')
image = face_recognition.load_image_file('test.jpg')
face_encoding = face_recognition.face_encodings(image)[0]while True:print('Capturing image.')# 读取一帧照片ret, frame = video_capture.read()# 把照片缩小一点,能加快处理速度frame = cv2.resize(frame, (0, 0), fx=0.25, fy=0.25)# 将cv2用的BGR颜色转换为face_recognition用的RBG颜色rgb_frame = frame[:, :, ::-1]# 获取这一帧图片里所有人脸的位置和特征值face_locations = face_recognition.face_locations(rgb_frame)print('Found {} faces in image.'.format(len(face_locations)))face_encodings = face_recognition.face_encodings(output, face_locations)# 对获取的每张脸进行循环,判断是否是认识的脸for face_encoding in face_encodings:# 判断当前的脸是否与认识的脸匹配match = face_recognition.compare_faces([face_encoding], face_encoding)name = '<Unknown Person>'if match[0]:name = 'test' # test为'test.jpg'里面人脸的名字print('I see someone named {}!'.format(name))
运行实例时,你需要在运行的当前目录下放置名为“test.jpg”的包含一张人脸的图片,可以使用你的摄像头临时拍一张,但对不同类型的设备而言,指令不同。
Picamera,直接在命令行输入:
raspistill -o test.jpg
Webcam,需要先安装fswebcam,在命令行输入:
sudo apt-get install fswebcam
安装完成后,使用下面命令拍照:
fswebcam test.jpg
运行完实例后,结合前面几个函数的介绍,以及实例里的注释分析,相信你对如何使用face_recognition库,有了基本的认识,项目原址有更多的例子等待着你去探索。
2.安装并使用picamera库
以上的实例是通过opencv实现的,如果你因为时间原因不想安装opencv,依然建议你看一下这篇Adrian Rosebrock文章:
https://www.pyimagesearch.com/2017/09/04/raspbian-stretch-install-opencv-3-python-on-your-raspberry-pi/
至少要从里面挑出安装pip,virtualenv,搭建虚拟环境以及在虚拟环境里安装numpy的部分,因为使用picamera库也需要这些东西。
安装picamera库,在命令行输入:
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install python3-picamera
用picamera库实现的实例:
# coding = utf-8
import face_recognition
import picamera
import numpy as np# 创建视频对象
camera = picamera.PiCamera()
# 设置分辨率
camera.resolution = (320, 240)
# 初始化一个空的ndarray类型的数据
rgb_frame = np.empty((240, 320, 3), dtype=np.uint8)# 加载当前目录下名为'test.jpg'的照片,照片里需要有且仅有一张脸,这张脸将作为认识的脸
print('loading...')
image = face_recognition.load_image_file('test.jpg')
face_encoding = face_recognition.face_encodings(image)[0]while True:print('Capturing image.')# 用Picamera读取一帧照片camera.capture(rgb_frame, format='rgb')# 获取这一帧图片里所有人脸的位置和特征值face_locations = face_recognition.face_locations(rgb_frame)print('Found {} faces in image.'.format(len(face_locations)))face_encodings = face_recognition.face_encodings(rgb_frame, face_locations)# 对获取的每张脸进行循环,判断是否是认识的脸for face_encoding in face_encodings:# 判断当前的脸是否与认识的脸匹配match = face_recognition.compare_faces([face_encoding], face_encoding)name = '<Unknown Person>'if match[0]:name = 'test' # test为'test.jpg'里面人脸的名字print('I see someone named {}!'.format(name))
总结
以上内容教给你如何搭建环境,并帮你的简单分析了face_recognition库的使用方法,具体如何使用还需要靠你自己去创造。
不过,需要注意:
1.如果你使用树莓派摄像头模块(Picamera),那么picamera库的方案最适合你,如果想使用opencv的方案,需要做一些配置。方法如下,首先在命令行输入下面的命令,新建或编辑这个文件:
sudo nano /etc/modules
在里面写入以下内容:
bcm2835-v4l2
2.如果你使用USB摄像头,那么你只能使用opencv的方案。
代码
https://github.com/LoveThinkinghard/Raspibot
树莓派实现简单的人脸识别相关推荐
- 树莓派c语言人脸识别,树莓派实现简单的人脸识别
前言 这篇文章属于此系列: 一个用树莓派做的会聊天,能人脸识别(支持云台追踪)和发送邮件的小玩具 https://blog.csdn.net/yonglisikao/article/details/8 ...
- 史上最简单的人脸识别项目登上GitHub趋势榜
来源 | GitHub Trending整理 | Freesia译者 | TommyZihao出品 | AI科技大本营(ID: rgznai100) 导读:近日,一个名为 face_recogniti ...
- 用Python实现简单的人脸识别,10分钟(附源码)
前言 今天,我们用Python实现简单的人脸识别技术! Python里,简单的人脸识别有很多种方法可以实现,依赖于python胶水语言的特性,我们通过调用包可以快速准确的达成这一目的.这里介绍的是准确 ...
- 用Python几行代码实现简单的人脸识别,10分钟完成(附源码)
前言 今天,我们用Python实现简单的人脸识别技术! Python里,简单的人脸识别有很多种方法可以实现,依赖于python胶水语言的特性,我们通过调用包可以快速准确的达成这一目的.这里介绍的是准确 ...
- 10分钟手把手教你运用Python实现简单的人脸识别
欲直接下载代码文件,关注我们的公众号哦!查看历史消息即可! 前言:让我的电脑认识我 我的电脑只有认识我,才配称之为我的电脑! 今天,我们用Python实现高大上的人脸识别技术! Python里,简单的 ...
- 树莓派+百度api实现人脸识别
title: 树莓派+百度api实现人脸识别 tags: 树莓派 date: 2018-5-31 20:06:00 --- 树莓派对接百度api 我以前玩安卓的时候一直用的讯飞的平台和api,对于百度 ...
- python简单的人脸识别系统(PCA+逻辑回归)
python简单的人脸识别系统(PCA+逻辑回归) 数据集:ORL人脸库 特征提取:PCA降维,将112*92降成30 分类器:逻辑回归 ** 代码: from tkinter import * fr ...
- Python简单实现人脸识别检测, 对照片进行评分
大家好,今天和大家说说如何用Python简单实现人脸识别检测, 对照片进行排名,看看自己有多漂亮. [开发环境]: Python 3.8 Pycharm 2021.2 [模块使用]: requests ...
- 树莓派与OpenCV实现人脸识别(OpenCV安装篇)
主要看了以下两位博客的文章完成的,也遇到了不少的坑,在这里一一填补说明. 链接: https://blog.csdn.net/weixin_42163073/article/details/10730 ...
最新文章
- 【FFmpeg】解决警告warning: xxx is deprecated [-Wdeprecated-declarations]的方法
- Prismatic 机器学习不一定得用大框架
- java统计多个线程的请求次数_Web并发页面访问量统计实现
- AX中对Programmable section的动态控制
- IDC:2021年云上数据量超过传统数据中心,All in Cloud是趋势
- Java测试题及答案(Java干货完整试卷)
- Struts框架命名空间问题答疑
- 科学家查明北京雾霾6大主要贡献源
- 《人工智能 智能系统指南》
- Java小开发(汽车租赁系统)
- python怎样分析文献综述_论文的文献综述有什么方法吗?
- python识图 web_python+flask搭建CNN在线识别手写中文网站
- 计算机excel界面,理解Excel工作界面
- 先秦经典智慧名言故事丛书(全16册) 内容简介
- B - Molar mass UVA - 1586
- office办公软件 下载与安装教程
- 位、字节、字、字长的概念以及存储单位的的换算
- 今天的Java笔试题
- 后端程序员福音 -- TellMe 推送助手
- 史上最小白之RNN详解