LattePanda AI-人脸识别门禁系统

描述

概述

人脸识别,是基于人的脸部特征信息进行身份识别的一种生物识别技术。用摄像机或摄像头采集含有人脸的图像或视频流,并自动在图像中检测和跟踪人脸,进而对检测到的人脸进行脸部识别。
 

操作系统


本项目中我们将实现摄像头人脸识别效果,包含人名标签和识别框,并结合灯带的亮灯状态制作人脸识别门禁系统。
(最终效果视频)

 

项目基础

人脸识别

 

硬件准备:

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”;
 

操作系统


样例代码:
 

操作系统操作系统

 

 复制代码 隐藏代码

  1. #导入人脸识别模块
  2. from faceRecognition import *
  3.  
  4. #人脸检测与识别文件调用
  5. faceDetectorPath = "face-detection-retail-0005.xml"
  6. landmarksPath = "landmarks-regression-retail-0009.xml"
  7. faceReidentificationPath = "face-reidentification-retail-0095.xml"
  8.  
  9. #调用训练模型文件
  10. model = Model()
  11.  
  12. model.load(faceDetectorPath = faceDetectorPath,
  13. landmarksPath = landmarksPath,
  14. faceReidentificationPath = faceReidentificationPath)
  15.  
  16. #初始化摄像头与窗口
  17. camera = Camera()
  18. screen = Screen("人脸识别门禁系统", (0,0,0))
  19.  
  20. #打开手写数字交互窗口,按下“Q”键退出窗口
  21. if_run = 1
  22. while (if_run == 1):
  23. #从摄像头获取图片
  24. image = camera.read(flip = False)
  25. #图片剪裁
  26. image = model.clipResizeFrame(image)
  27. screen.clear()
  28. #获取人脸识别结果并在屏幕上显示识别标签
  29. results = model.predict(image)
  30. screen.putImage(image, 80, 0, 640, 480)
  31. for roi, landmarks, identity in zip(*results):
  32. x, y = roi.position
  33. w, h = roi.size
  34. screen.putTag(identity, x+80, y, w, h, bg=(0,255,0))
  35.  
  36. #打开与显示交互窗口,如果按下Q键,将无法进入下一次while循环  
  37. if screen.show():
  38. if_run = 0
  39. screen.quit()

复制代码

2、运行程序,当执行到最后一个单元格时,会打开交互窗口。
未识别到人脸:
 

操作系统


检测到未知人脸:
 

操作系统


识别到已知人脸,并显示此人姓名:
 

操作系统


3、按键盘上的“Q”键可退出交互窗口。

 

项目进阶

人脸识别门禁系统

 

如果让人脸作为门禁系统的钥匙,会使我们的生活更方便快捷。当识别到主人的人脸时,灯带亮绿灯,表示准许进入;否则显示红灯。

硬件准备:

主控:Arduino UNO、IO 传感器扩展板 V7.1
模块:WS2812 RGB 全彩灯带

硬件连接图:

操作系统


*WS2812上有7个RGB灯,程序中的np[0]表示第一个灯,程序中的np[1]表示第二个灯。

 

程序编写:

双击打开“人脸识别_灯带.ipynb”;
 

操作系统


样例代码:
 

操作系统操作系统操作系统

 

 复制代码 隐藏代码

  1. #导入人脸识别模块
  2. from faceRecognition import *
  3. import time
  4. from pinpong.board import Board,Pin,NeoPixel
  5.  
  6. NEOPIXEL_PIN = Pin.D7
  7. PIXELS_NUM = 1 #灯数,如果需要多个灯亮,请改此数值
  8.  
  9. #初始化,选择板型和端口号
  10. Board("uno", "/dev/ttyUSB0").begin()
  11.  
  12. np = NeoPixel(Pin(NEOPIXEL_PIN), PIXELS_NUM) #np[0]表示第一个灯,np[1]表示第二个灯,以此类推
  13.  
  14. #人脸检测与识别文件调用
  15. faceDetectorPath = "face-detection-retail-0005.xml"
  16. landmarksPath = "landmarks-regression-retail-0009.xml"
  17. faceReidentificationPath = "face-reidentification-retail-0095.xml"
  18.  
  19. #调用训练模型文件
  20. model = Model()
  21.  
  22. model.load(faceDetectorPath = faceDetectorPath,
  23. landmarksPath = landmarksPath,
  24. faceReidentificationPath = faceReidentificationPath)
  25.  
  26. #初始化摄像头与窗口
  27. camera = Camera()
  28. screen = Screen("人脸识别门禁系统", (0,0,0))
  29.  
  30. #打开手写数字交互窗口,按下“Q”键退出窗口
  31. if_run = 1
  32. led = 0
  33. count = 0
  34. while (if_run == 1):
  35. #从摄像头获取图片
  36. image = camera.read(flip = False)
  37. #图片剪裁
  38. image = model.clipResizeFrame(image)
  39. screen.clear()
  40. #获取人脸识别结果并在屏幕上显示识别标签
  41. results = model.predict(image)
  42. screen.putImage(image, 80, 0, 640, 480)
  43. for roi, landmarks, identity in zip(*results):
  44. x, y = roi.position
  45. w, h = roi.size
  46. screen.putTag(identity, x+80, y, w, h, bg=(0,255,0))
  47.  
  48. #count>30,修改30可调节切换灯颜色的速度
  49. if identity != "未知人脸" and count>30:
  50. np[0] = (0, 255 ,0) #设置第一个灯亮绿色
  51. #np[1] = (0, 255 ,0) #设置第二个灯亮绿色
  52. count = 0
  53. elif identity == "未知人脸" and count>30:
  54. np[0] = (255, 0 ,0) #设置第一个灯亮红色
  55. #np[1] = (255, 0 ,0) #设置第二个灯亮红色
  56. count = 0
  57. count+=1
  58.  
  59.  
  60. #打开与显示交互窗口,如果按下Q键,将无法进入下一次while循环  
  61. if screen.show():
  62. if_run = 0
  63. screen.quit()

复制代码

运行效果:

当识别到已知人脸时,灯带的第一个灯亮绿色;
 

操作系统


当屏幕中没有人脸或者是未知人脸时,灯带的第一个灯亮红色。

操作系统

本文转载至:DF创客社区

原文链接:https://mc.dfrobot.com.cn/thread-306871-1-1.html

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分