基于OpenCV-Python的摄像头人脸检测追踪控制系统

快来打我* 2022-09-13 00:21 254阅读 0赞

基于OpenCV-Python的摄像头人脸检测追踪控制系统
资源:https://download.csdn.net/download/weixin\_53403301/25496828

采用OpenCV-Python进行人脸识别 并计算出相对位置

输出左右中三种信号

可外接单片机设备控制步进电机并实现摄像头自动追踪

程序测试如图:
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

单片机及步进电机系统仿真图:
在这里插入图片描述
Python程序如下:

  1. import cv2
  2. import threading
  3. cap = cv2.VideoCapture(0) # 开启摄像头
  4. # 循环读取图像
  5. while True:
  6. ok, faceImg = cap.read() # 读取摄像头图像
  7. if ok is False:
  8. print('无法读取到摄像头!')
  9. break
  10. # faceImg = img
  11. high=faceImg.shape[0]
  12. width=faceImg.shape[1]
  13. # print(width,high)
  14. gray = cv2.cvtColor(faceImg,cv2.COLOR_BGR2GRAY)
  15. classifier = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
  16. # 加载人脸识别分类器
  17. # 官方已有的分类器 https://github.com/opencv/opencv/tree/master/data/haarcascades
  18. # github的不好下载, 可以从码云上找
  19. # Python\Python38-32\Lib\site-packages\cv2\data 这个目录下也有
  20. # 识别器进行识别
  21. def track():
  22. faceRects = classifier.detectMultiScale(gray,scaleFactor=1.2,minNeighbors=3,minSize=(32, 32))
  23. if len(faceRects):
  24. for faceRect in faceRects:
  25. x,y,w,h = faceRect
  26. # 框选出人脸 最后一个参数2是框线宽度
  27. cv2.rectangle(faceImg,(x, y), (x + w, y + h), (0,255,0), 2)
  28. print(x+w/2)
  29. if x+w/2 > width/2+50:
  30. print("Left")
  31. elif x+w/2 < width/2-50:
  32. print("Right")
  33. elif width/2-50 < x+w/2 < width/2+50:
  34. print("Central")
  35. # # 转换灰色
  36. # gray = cv2.cvtColor(faceImg,cv2.COLOR_BGR2GRAY)
  37. #
  38. # # 加载人脸识别分类器
  39. # # 官方已有的分类器 https://github.com/opencv/opencv/tree/master/data/haarcascades
  40. # # github的不好下载, 可以从码云上找
  41. # # Python\Python38-32\Lib\site-packages\cv2\data 这个目录下也有
  42. # classifier = cv2.CascadeClassifier('haarcascade_eye.xml')
  43. # color = (255,0,0)
  44. #
  45. # # 识别器进行识别
  46. # faceRects = classifier.detectMultiScale(gray,scaleFactor=1.2,minNeighbors=3,minSize=(32, 32))
  47. #
  48. # if len(faceRects):
  49. # for faceRect in faceRects:
  50. # x,y,w,h = faceRect
  51. # # 框选出人脸 最后一个参数2是框线宽度
  52. # cv2.rectangle(faceImg,(x, y), (x + h, y + w), color, 2)
  53. #
  54. #
  55. #faceImg= cv2.cvtColor(faceImg,cv2.COLOR_RGB2BGR)
  56. cv2.imshow("faceImg",faceImg)
  57. # 展示图像
  58. thread = threading.Thread(target=track)
  59. thread.start()
  60. k = cv2.waitKey(10) # 键盘值
  61. if k == 27: # 通过esc键退出摄像
  62. break
  63. # 关闭摄像头
  64. cap.release()
  65. cv2.destroyAllWindows()

单片机C语言程序如下:

  1. #include <reg51.h>
  2. sbit key1=P1^0;
  3. sbit key2=P1^1;
  4. sbit key3=P1^2;
  5. unsigned char BJDJ[]={
  6. 0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};
  7. unsigned char i;
  8. void delay(unsigned int time){
  9. unsigned int j=0;
  10. for(;time>0;time--)
  11. for(j=0;j<125;j++);
  12. }
  13. void zd(void){
  14. for(i=0;i<8;i++){
  15. P2=BJDJ[i];
  16. delay(100);
  17. }
  18. }
  19. void fzd(void){
  20. for(i=8;i>0;i--){
  21. P2=BJDJ[i];
  22. delay(100);
  23. }
  24. }
  25. void zd2(void){
  26. for(i=0;i<8;i++){
  27. P2=BJDJ[i];
  28. delay(10);
  29. }
  30. }
  31. void fzd2(void){
  32. for(i=8;i>0;i--){
  33. P2=BJDJ[i];
  34. delay(10);
  35. }
  36. }
  37. void main(void){
  38. while(!key3){
  39. while(!key1){
  40. if (!key2)zd2();
  41. else zd();
  42. }
  43. while(key1){
  44. if (!key2) fzd2();
  45. else fzd();
  46. }
  47. }
  48. }

改进单片机系统程序(由外部中断控制):

  1. #include <reg51.h>
  2. sbit key1=P1^0;
  3. sbit key2=P1^1;
  4. sbit key3=P1^2;
  5. unsigned char BJDJ[]={
  6. 0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};
  7. unsigned char i;
  8. void delay(unsigned int time){
  9. unsigned int j=0;
  10. for(;time>0;time--)
  11. for(j=0;j<125;j++);
  12. }
  13. void main(void)
  14. {
  15. EA=1; //×ÜÖжϿªÆô
  16. EX0=1; //ÍⲿÖжÏ1ÔÊÐí
  17. IT0=1; //ÖжÏ1 ϽµÑØ´¥·¢
  18. EX1=1;
  19. IT1=1;
  20. P2=0x0;
  21. }
  22. void exter0()interrupt 0 //ÍⲿÖжÏ0
  23. {
  24. for(i=0;i<8;i++){
  25. P2=BJDJ[i];
  26. delay(100);
  27. }
  28. }
  29. void exter1()interrupt 2 //ÍⲿÖжÏ1
  30. {
  31. for(i=8;i>0;i--){
  32. P2=BJDJ[i];
  33. delay(100);
  34. }
  35. }

仿真图:
在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,254人围观)

还没有评论,来说两句吧...

相关阅读

    相关 人脸识别系统_人脸检测

    项目:基于人脸识别的无卡ATM机模拟系统 主要实现内容: 包括实现AMT机模拟人脸识别和密码输入、PC端模拟实现储户数据库服务器系统。 1. ATM模拟端实现采用手