前言

这篇文章属于此系列:

一个用树莓派做的会聊天,能人脸识别(支持云台追踪)和发送邮件的小玩具

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

树莓派实现简单的人脸识别相关推荐

  1. 树莓派c语言人脸识别,树莓派实现简单的人脸识别

    前言 这篇文章属于此系列: 一个用树莓派做的会聊天,能人脸识别(支持云台追踪)和发送邮件的小玩具 https://blog.csdn.net/yonglisikao/article/details/8 ...

  2. 史上最简单的人脸识别项目登上GitHub趋势榜

    来源 | GitHub Trending整理 | Freesia译者 | TommyZihao出品 | AI科技大本营(ID: rgznai100) 导读:近日,一个名为 face_recogniti ...

  3. 用Python实现简单的人脸识别,10分钟(附源码)

    前言 今天,我们用Python实现简单的人脸识别技术! Python里,简单的人脸识别有很多种方法可以实现,依赖于python胶水语言的特性,我们通过调用包可以快速准确的达成这一目的.这里介绍的是准确 ...

  4. 用Python几行代码实现简单的人脸识别,10分钟完成(附源码)

    前言 今天,我们用Python实现简单的人脸识别技术! Python里,简单的人脸识别有很多种方法可以实现,依赖于python胶水语言的特性,我们通过调用包可以快速准确的达成这一目的.这里介绍的是准确 ...

  5. 10分钟手把手教你运用Python实现简单的人脸识别

    欲直接下载代码文件,关注我们的公众号哦!查看历史消息即可! 前言:让我的电脑认识我 我的电脑只有认识我,才配称之为我的电脑! 今天,我们用Python实现高大上的人脸识别技术! Python里,简单的 ...

  6. 树莓派+百度api实现人脸识别

    title: 树莓派+百度api实现人脸识别 tags: 树莓派 date: 2018-5-31 20:06:00 --- 树莓派对接百度api 我以前玩安卓的时候一直用的讯飞的平台和api,对于百度 ...

  7. python简单的人脸识别系统(PCA+逻辑回归)

    python简单的人脸识别系统(PCA+逻辑回归) 数据集:ORL人脸库 特征提取:PCA降维,将112*92降成30 分类器:逻辑回归 ** 代码: from tkinter import * fr ...

  8. Python简单实现人脸识别检测, 对照片进行评分

    大家好,今天和大家说说如何用Python简单实现人脸识别检测, 对照片进行排名,看看自己有多漂亮. [开发环境]: Python 3.8 Pycharm 2021.2 [模块使用]: requests ...

  9. 树莓派与OpenCV实现人脸识别(OpenCV安装篇)

    主要看了以下两位博客的文章完成的,也遇到了不少的坑,在这里一一填补说明. 链接: https://blog.csdn.net/weixin_42163073/article/details/10730 ...

最新文章

  1. 【FFmpeg】解决警告warning: xxx is deprecated [-Wdeprecated-declarations]的方法
  2. Prismatic 机器学习不一定得用大框架
  3. java统计多个线程的请求次数_Web并发页面访问量统计实现
  4. AX中对Programmable section的动态控制
  5. IDC:2021年云上数据量超过传统数据中心,All in Cloud是趋势
  6. Java测试题及答案(Java干货完整试卷)
  7. Struts框架命名空间问题答疑
  8. 科学家查明北京雾霾6大主要贡献源
  9. 《人工智能 智能系统指南》
  10. Java小开发(汽车租赁系统)
  11. python怎样分析文献综述_论文的文献综述有什么方法吗?
  12. python识图 web_python+flask搭建CNN在线识别手写中文网站
  13. 计算机excel界面,理解Excel工作界面
  14. 先秦经典智慧名言故事丛书(全16册) 内容简介
  15. B - Molar mass UVA - 1586
  16. office办公软件 下载与安装教程
  17. 位、字节、字、字长的概念以及存储单位的的换算
  18. 今天的Java笔试题
  19. 后端程序员福音 -- TellMe 推送助手
  20. 史上最小白之RNN详解

热门文章

  1. 第39级台阶(dp)
  2. 微信二次分享签名错误php,微信二次分享报错invalid signature问题及解决方法
  3. Python实现二维离散卷积运算
  4. Inventor 2021 安装避坑指南
  5. Unity Shader -描边(后期处理)
  6. 查看当前目录和上一级目录的命令
  7. QT获取当前目录的上一级目录dir->cdUp()
  8. JAVA汉字拼音解析
  9. 软件开发+推广引流,最适合企业商家的软件营销模式
  10. 【配准论文解读】Color Point Cloud Registration with 4D ICP Algorithm