资料介绍
描述
介绍
在本文中,我们将介绍如何使用 Python 编程语言中的 OpenCV 库在 LattePanda 上实现人脸识别。
我们使用的操作系统是 LattePanda 上默认的 Windows 10。
1. 软件准备
安装 Python
首先,请从官网下载最新的Python。注意Python有两个版本,一个是2.7.x版本,一个是3.x版本。2.7.x 版本是较旧的版本,将来会被弃用,所以在这个项目中我们使用 Python3,本文中的最新版本是3.6.1 。
请按照下图安装。
安装 Python 时不要忘记勾选“ Add Python 3.6 to PATH ”选项,它使 Windows 系统能够调用 Python 可执行文件。
安装后,为了测试我们是否可以在 LattePanda 上运行 Python,请按快捷键“Win+R”启动命令提示符并输入“ cmd ”。
接下来,在 cmd 中键入“ python ”以启动 Python 交互会话。如果出现符号“ >>> ”,则表示 Python 已成功安装并在您的操作系统上运行。否则,如果您看到任何错误消息,请检查安装步骤,尤其是PATH选项。
请输入“ exit() ”命令退出此shell并返回命令提示符。
安装所需的软件包
现在,我们将使用Python 包管理器(pip)安装这个项目的三个必要的 Python 包
1. 请在命令提示符下输入“ pip install numpy ”安装此Python数值计算工具。
2.接下来,输入“ pip install opencv-python ”来安装OpenCV,一个开源的计算机视觉库,我们在我们的项目中使用它来识别人脸。
3、最后输入“ pip install pyserial ”安装Python的串口通讯工具。我们使用这个库与 Python 和 Arduino 建立串行连接。
Thonny - Python IDE
人们可能需要一些工具来有效地编写代码。这是我们向您推荐的一个名为Thonny的优秀 Python IDE 。该 IDE 集成了适合初学者的所有基本工具(调试器、python shell、变量等)。
您可以从官方网站下载它:.
为了让 Thonny 使用之前安装的 Python 包,我们需要将解释器的默认路径更改为 Windows 系统中 Python 可执行文件的位置。
在 thonny IDE 中,单击工具,然后单击选项以打开首选项窗口:
在这个窗口中,点击interpreter选项卡,将路径设置为默认的Python安装路径,如下图:
2.硬件
我们在这个项目中使用Logitech C270 网络摄像头(或几乎任何其他带有 USB 连接器的网络摄像头)来识别人脸。而要跟踪人脸位置,我们需要一个小的旋转平台。如下图所示,我们使用底部的小型伺服电机(Tower Pro MG90)来旋转安装在其上的相机。您可以在Thingiverse 网站上查看现成的网络摄像头/伺服支架。
请注意,伺服信号线连接到LattePanda 上的Arduino 引脚 9 。确保正确连接,棕色接地针朝外,如 LattePanda 上标记的那样。
三、软件实现
阿杜诺素描
请启动 Arduino IDE 并将以下代码下载到 LattePanda 的 Arduino Leonardo 内核(您必须指定正确的 COM 端口,通常是COM4 )。
在这段代码中,LattePanda 的 Arduino 芯片会从串口接收到两条不同的指令,如果指令是“ a ”或“ b ”,则将相机 CCW 或 CW 转动 1 度(此值可根据你的要求)。
由于我们已将伺服连接到 LattePanda Arduino D9引脚,当然我们必须在您的 Arduino 草图(第 9 行)中指定它。如果要将伺服切换到另一个引脚,请记住将“ s.attach(9) ”这一行中的引脚号修改为实际引脚号。伺服上限 (180) 和伺服下限 (0) 可以根据物理设置进行修改。
//Arduino sketch
//waiting command from LattePanda (Python) to control servo
#include
Servo s;
int degree = 90;
void setup()
{
Serial.begin(115200);
s.attach(9);
}
void loop()
{
if(Serial.available())
{
int cmd = Serial.read();
if(cmd == 'a')
{
degree++;
if(degree >= 180)
degree = 180;
s.write(degree);
}
else if(cmd == 'b')
{
degree--;
if(degree <= 0) //lower
degree = 0;
s.write(degree);
}
else
Serial.println("Press a/b to turn the camrea!");
}
}
Python 脚本
我们已经准备好了 Python 库和 IDE,现在让我们完成人脸跟踪的实现。
由于我们要在这个项目中检测人脸,请从OpenCV github(https://github.com/opencv/opencv/tree/master/data/haarcascades)下载现有模型,我们需要两个xml文件:
- haarcascade_frontalface_default.xml :用于人脸检测
- haarcascade_eye.xml :用于眼睛检测。
首先,我们将调用函数“ cv2.VideoCapture(0) ”从分辨率为 640x480 的相机中检索图像数据。接下来,我们构建串行连接(第 9行中的COM4 )与 Arduino 内核通信,并使用它来控制伺服角度。
while循环中的识别功能就是简单地将每一帧中的原始图像转换为灰度颜色,然后使用识别模型(face_cascade和eye_cascade)在这一帧中找到最可能的人脸。
如何确定我们想要的脸?该程序将计算图像中有多少张脸并选择最大的一张。
为了跟踪人脸,程序首先计算人脸的位置(第22行中的position = x + w/2.0 ),x是标记人脸的矩形的左上角坐标,w是矩形的宽度.
LattePanda 得到人脸位置后,将其与图像中心(#24~27 行)进行比较,并发出命令旋转相机平台以补偿差异。
注意,我们已经指定中心线为320 (由 640/2 导出,640 是每个图像帧的分辨率宽度)。所以如果你想修改分辨率或者使用另一个网络摄像头,不要忘记改变这个参数。
import cv2
import numpy as np
import serial
face_cascade = cv2.CascadeClassifier('./haarcascade_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier('./haarcascade_eye.xml')
cap = cv2.VideoCapture(0)
cap.set(3, 640)
cap.set(4, 480)
ser = serial.Serial('COM4', 115200)
while True:
_, img = cap.read()
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 2, 5)
if len(faces):
(x, y, w, h) = max(faces, key=lambda face: face[2]*face[3])
cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
roi_gray = gray[y:y+h, x:x+w]
roi_color = img[y:y+h, x:x+w]
eyes = eye_cascade.detectMultiScale(roi_gray)
for (ex,ey,ew,eh) in eyes:
cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2)
position = x + w/2.0
print(position)
if position < 320:
ser.write(b'a')
else:
ser.write(b'b')
cv2.imshow('face', img)
k = cv2.waitKey(5) & 0xFF
if k == 27:
break
cv2.destroyAllWindows()
演示视频
检查这个项目的性能,我们在手机上显示一张人脸图片,你可以看到网络摄像头会尝试将其中心对准人脸。欣赏~
- 使用Xbox Kinect和OpenCV进行面部识别
- YNH-950 人脸识别主板规格书
- 非理想环境下的改进人脸识别算法 3次下载
- 基于聚类分析的复杂环境中人脸目标识别技术 10次下载
- 利用小尺度核卷积的人脸表情识别方法 9次下载
- 基于深度学习的快速人脸识别算法及模型 13次下载
- 基于图像融合的视频人脸识别算法就相关指标 12次下载
- 如何实现复杂背景中的快速人脸识别技术研究 14次下载
- 使用OpenCV进行车牌数字识别的资料免费下载 29次下载
- 如何提高复杂环境下的人脸识别的增强算法资料概述 8次下载
- openCV人脸检测系统的设计方案探究 3次下载
- OpenCV3编程入门-源码例程全集-人脸识别 2次下载
- 人脸识别 13次下载
- 基于OpenCV的图像特征智能识别系统设计 20次下载
- 基于openCV的人脸检测识别系统的设计 477次下载
- 基于OpenCV的人脸识别系统设计 1.1w次阅读
- 人脸识别技术的原理是什么 人脸识别技术的特点有哪些 1110次阅读
- 一文看懂人脸识别技术 2605次阅读
- 基于SeetaFace2和OpenCV实现人脸识别 2221次阅读
- 什么是人脸识别?如何使用10行代码实现人脸识别 5310次阅读
- 人脸识别的原理揭秘 6456次阅读
- 人脸识别技术及应用概览 2060次阅读
- 基于OpenCV和 Python的人脸识别实现方案 3838次阅读
- 滴滴人脸识别怎么破解 11.8w次阅读
- 人脸识别技术原理分析及典例详解 9014次阅读
- 人脸识别几种解决方案的对比_人脸识别技术原理介绍 8w次阅读
- 人脸识别考勤机优缺点分析 2w次阅读
- opencv人脸识别原理 8462次阅读
- 人脸识别技术原理、特点及应用 2284次阅读
- 人脸识别成金融业“新宠” 1035次阅读
下载排行
本周
- 1山景DSP芯片AP8248A2数据手册
- 1.06 MB | 532次下载 | 免费
- 2RK3399完整板原理图(支持平板,盒子VR)
- 3.28 MB | 339次下载 | 免费
- 3TC358743XBG评估板参考手册
- 1.36 MB | 330次下载 | 免费
- 4DFM软件使用教程
- 0.84 MB | 295次下载 | 免费
- 5元宇宙深度解析—未来的未来-风口还是泡沫
- 6.40 MB | 227次下载 | 免费
- 6迪文DGUS开发指南
- 31.67 MB | 194次下载 | 免费
- 7元宇宙底层硬件系列报告
- 13.42 MB | 182次下载 | 免费
- 8FP5207XR-G1中文应用手册
- 1.09 MB | 178次下载 | 免费
本月
- 1OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 2555集成电路应用800例(新编版)
- 0.00 MB | 33566次下载 | 免费
- 3接口电路图大全
- 未知 | 30323次下载 | 免费
- 4开关电源设计实例指南
- 未知 | 21549次下载 | 免费
- 5电气工程师手册免费下载(新编第二版pdf电子书)
- 0.00 MB | 15349次下载 | 免费
- 6数字电路基础pdf(下载)
- 未知 | 13750次下载 | 免费
- 7电子制作实例集锦 下载
- 未知 | 8113次下载 | 免费
- 8《LED驱动电路设计》 温德尔著
- 0.00 MB | 6656次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935054次下载 | 免费
- 2protel99se软件下载(可英文版转中文版)
- 78.1 MB | 537798次下载 | 免费
- 3MATLAB 7.1 下载 (含软件介绍)
- 未知 | 420027次下载 | 免费
- 4OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 5Altium DXP2002下载入口
- 未知 | 233046次下载 | 免费
- 6电路仿真软件multisim 10.0免费下载
- 340992 | 191187次下载 | 免费
- 7十天学会AVR单片机与C语言视频教程 下载
- 158M | 183279次下载 | 免费
- 8proe5.0野火版下载(中文版免费下载)
- 未知 | 138040次下载 | 免费
评论
查看更多