概述人脸识别,是基于人的脸部特征信息进行身份识别的一种生物识别技术。用摄像机或摄像头采集含有人脸的图像或视频流,并自动在图像中检测和跟踪人脸,进而对检测到的人脸进行脸部识别。
本项目中我们将实现摄像头人脸识别效果,包含人名标签和识别框,并结合灯带的亮灯状态制作人脸识别门禁系统。
(最终效果视频)
项目基础人脸识别
硬件准备:ai主控:lattepanda
输入输出设备:5英寸显示屏、键盘、鼠标、摄像头
人脸信息录入:1、双击桌面上的“startpage.sh”,打开jupyterlab,切换到“home/lattepanda/桌面/lattepanda&ai项目实战/”目录下,如下图,检查一下项目必需的3个文件;
2、双击进入“图片拍摄”文件夹;
3、双击打开程序,修改拍摄的照片数量,例如for index in range(3);
样例代码:
4、选择无其他人、无杂物的背景,正眼看着摄像头,然后运行程序,拍摄的图片会在程序同目录下依次出现;
5、双击图片查看拍摄效果;
6、选择效果最好的一张,重命名为此人的姓名;
7、将照片复制到“lattepanda&ai-人脸识别门禁系统”文件夹下。
程序编写:1、双击打开“人脸识别.ipynb”;
样例代码:
复制代码 隐藏代码
#导入人脸识别模块 from facerecognition import * #人脸检测与识别文件调用 facedetectorpath = face-detection-retail-0005.xml landmarkspath = landmarks-regression-retail-0009.xml facereidentificationpath = face-reidentification-retail-0095.xml #调用训练模型文件 model = model() model.load(facedetectorpath = facedetectorpath, landmarkspath = landmarkspath, facereidentificationpath = facereidentificationpath) #初始化摄像头与窗口 camera = camera() screen = screen(人脸识别门禁系统, (0,0,0)) #打开手写数字交互窗口,按下“q”键退出窗口 if_run = 1 while (if_run == 1): #从摄像头获取图片 image = camera.read(flip = false) #图片剪裁 image = model.clipresizeframe(image) screen.clear() #获取人脸识别结果并在屏幕上显示识别标签 results = model.predict(image) screen.putimage(image, 80, 0, 640, 480) for roi, landmarks, identity in zip(*results): x, y = roi.position w, h = roi.size screen.puttag(identity, x+80, y, w, h, bg=(0,255,0)) #打开与显示交互窗口,如果按下q键,将无法进入下一次while循环 if screen.show(): if_run = 0 screen.quit()复制代码
2、运行程序,当执行到最后一个单元格时,会打开交互窗口。
未识别到人脸:
检测到未知人脸:
识别到已知人脸,并显示此人姓名:
3、按键盘上的“q”键可退出交互窗口。
项目进阶人脸识别门禁系统
如果让人脸作为门禁系统的钥匙,会使我们的生活更方便快捷。当识别到主人的人脸时,灯带亮绿灯,表示准许进入;否则显示红灯。
硬件准备:主控:arduino uno、io 传感器扩展板 v7.1
模块:ws2812 rgb 全彩灯带
硬件连接图:
*ws2812上有7个rgb灯,程序中的np[0]表示第一个灯,程序中的np[1]表示第二个灯。
程序编写:双击打开“人脸识别_灯带.ipynb”;
样例代码:
复制代码 隐藏代码
#导入人脸识别模块 from facerecognition import * import time from pinpong.board import board,pin,neopixel neopixel_pin = pin.d7 pixels_num = 1 #灯数,如果需要多个灯亮,请改此数值 #初始化,选择板型和端口号 board(uno, /dev/ttyusb0).begin() np = neopixel(pin(neopixel_pin), pixels_num) #np[0]表示第一个灯,np[1]表示第二个灯,以此类推 #人脸检测与识别文件调用 facedetectorpath = face-detection-retail-0005.xml landmarkspath = landmarks-regression-retail-0009.xml facereidentificationpath = face-reidentification-retail-0095.xml #调用训练模型文件 model = model() model.load(facedetectorpath = facedetectorpath, landmarkspath = landmarkspath, facereidentificationpath = facereidentificationpath) #初始化摄像头与窗口 camera = camera() screen = screen(人脸识别门禁系统, (0,0,0)) #打开手写数字交互窗口,按下“q”键退出窗口 if_run = 1 led = 0 count = 0 while (if_run == 1): #从摄像头获取图片 image = camera.read(flip = false) #图片剪裁 image = model.clipresizeframe(image) screen.clear() #获取人脸识别结果并在屏幕上显示识别标签 results = model.predict(image) screen.putimage(image, 80, 0, 640, 480) for roi, landmarks, identity in zip(*results): x, y = roi.position w, h = roi.size screen.puttag(identity, x+80, y, w, h, bg=(0,255,0)) #count>30,修改30可调节切换灯颜色的速度 if identity != 未知人脸 and count>30: np[0] = (0, 255 ,0) #设置第一个灯亮绿色 #np[1] = (0, 255 ,0) #设置第二个灯亮绿色 count = 0 elif identity == 未知人脸 and count>30: np[0] = (255, 0 ,0) #设置第一个灯亮红色 #np[1] = (255, 0 ,0) #设置第二个灯亮红色 count = 0 count+=1 #打开与显示交互窗口,如果按下q键,将无法进入下一次while循环 if screen.show(): if_run = 0 screen.quit()复制代码
运行效果:当识别到已知人脸时,灯带的第一个灯亮绿色;
当屏幕中没有人脸或者是未知人脸时,灯带的第一个灯亮红色。
本文转载至:df创客社区
原文链接:https://mc.dfrobot.com.cn/thread-306871-1-1.html
CES最酷产品:自动驾驶汽车智能餐叉入围
华为生态加速 拟用三年时间让90%的应用都可以跑在鲲鹏上
智慧云屏的概念、应用及功能
不再赠送充电器,还值得购买iPhone 12吗?
智慧工地实名制管理系统解决劳务纠纷
LattePanda AI-人脸识别门禁系统
光电电流互感器的两种输出方式
Pasternack推出高柔性VNA线缆组件,具有出色的电气性能
各大巨头纷纷抢滩智能锁行业,智能锁行业迎来风口
凯世光研聚焦PCB业务 拟转让湖北凯昌55%股权
小米将推出新款自研芯片
如何根据气隙计算相应AL值呢?
Softmax如何把CNN的输出转变成概率?交叉熵如何为优化过程提供度量?
华佳彩12.6”金属氧化物2.5K高刷高灵敏臻彩屏荣获CITE创新奖
元宇宙不止是畅想 “科幻畅想 元宇漫游” 主题论坛开讲
管式土壤墒情监测仪的功能介绍
分析闭锁器结构与材料及如何判断闭锁器坏了
奔驰正式发布史上首款高端皮卡X- 卖29万起 图文详解
华硕最近发布了具有一些荒谬规格的ROG Phone 3
基于TFT LCD的BOOST DC-DC电源电路设计