2021-08-18 20:15:59 索炜达电子 4428
项目编号:E341
文件大小:17M
源码说明:带中文注释
开发环境:C编译器
简要概述
本项目为基于OpenCV-Python和STM32F103单片机的二自由度人脸跟踪舵机云台系统。
本系统的预期功能是实时检测摄像头中出现的人脸,并对其进行跟踪。要实现该功能,主要应解决如下问题:
图像采集
人脸检测
舵机控制
具体实现思路如下:
图像采集方面,使用普通的usb摄像头,这样可以直接得到数字图像无需进行数模转换,而且价格低廉,在不要求高精度的情况下比较适合。将usb摄像头直接通过usb数据线接到电脑,即可在PC端得到实时图像。
人脸检测方面,在PC端编写用于人脸检测的python程序。使用opencv库,首先对从摄像头得到的每一帧实时图像进行预处理,然后调用opencv自带的harr分类器检测人脸的位置。将检测到的人脸的中心点坐标用串口发送给STM32单片机即可。
舵机控制方面,使用STM32单片机,根据串口接收到的来自上位机的坐标分别对两个舵机进行独立的位置控制。具体思路是,将图像的中心点的横纵坐标(恒定值)与人脸中心点的横纵坐标分别作差,将该差值作为偏差输入到STM32中实现的两个PD控制器中,计算所需占空比,产生两路PWM波驱动舵机向偏差减小的方向转动。
实现效果
经测试,该系统能够实现预期的功能。经过调参后,调节时间很短,超调较小,系统的快速性和平稳性均能达到预期目标。系统的不足之处在于有一定稳态误差,但是考虑到舵机成本较低,系统的精度处在可以接受的范围内。
下图分别是单人和多人的跟踪效果:
目录│文件列表:
└ 项目
│ Face Tracking Pan.docx
└ face-tracking-pan-tilt-camera
└ face-tracking-pan-tilt-camera
├ code
│ │ track_face.py
│ ├ control
│ │ │ keilkilll.bat
│ │ │ README.TXT
│ │ ├ CORE
│ │ │ │ core_cm3.c
│ │ │ │ core_cm3.h
│ │ │ └ startup_stm32f10x_hd.s
│ │ ├ HARDWARE
│ │ │ ├ KEY
│ │ │ │ │ key.c
│ │ │ │ └ key.h
│ │ │ ├ LED
│ │ │ │ │ led.c
│ │ │ │ └ led.h
│ │ │ ├ PID
│ │ │ │ │ pid.c
│ │ │ │ └ pid.h
│ │ │ ├ serial
│ │ │ │ │ serial.c
│ │ │ │ └ serial.h
│ │ │ └ TIMER
│ │ │ │ timer.c
│ │ │ └ timer.h
│ │ ├ OBJ
│ │ │ └ CONTROL.hex
│ │ ├ STM32F10x_FWLib
│ │ │ ├ inc
│ │ │ │ │ misc.h
│ │ │ │ │ stm32f10x_adc.h
│ │ │ │ │ stm32f10x_bkp.h
│ │ │ │ │ stm32f10x_can.h
│ │ │ │ │ stm32f10x_cec.h
│ │ │ │ │ stm32f10x_crc.h
│ │ │ │ │ stm32f10x_dac.h
│ │ │ │ │ stm32f10x_dbgmcu.h
│ │ │ │ │ stm32f10x_dma.h
│ │ │ │ │ stm32f10x_exti.h
│ │ │ │ │ stm32f10x_flash.h
│ │ │ │ │ stm32f10x_fsmc.h
│ │ │ │ │ stm32f10x_gpio.h
│ │ │ │ │ stm32f10x_i2c.h
│ │ │ │ │ stm32f10x_iwdg.h
│ │ │ │ │ stm32f10x_pwr.h
│ │ │ │ │ stm32f10x_rcc.h
│ │ │ │ │ stm32f10x_rtc.h
│ │ │ │ │ stm32f10x_sdio.h
│ │ │ │ │ stm32f10x_spi.h
│ │ │ │ │ stm32f10x_tim.h
│ │ │ │ │ stm32f10x_usart.h
│ │ │ │ └ stm32f10x_wwdg.h
│ │ │ └ src
│ │ │ │ misc.c
│ │ │ │ stm32f10x_adc.c
│ │ │ │ stm32f10x_bkp.c
│ │ │ │ stm32f10x_can.c
│ │ │ │ stm32f10x_cec.c
│ │ │ │ stm32f10x_crc.c
│ │ │ │ stm32f10x_dac.c
│ │ │ │ stm32f10x_dbgmcu.c
│ │ │ │ stm32f10x_dma.c
│ │ │ │ stm32f10x_exti.c
│ │ │ │ stm32f10x_flash.c
│ │ │ │ stm32f10x_fsmc.c
│ │ │ │ stm32f10x_gpio.c
│ │ │ │ stm32f10x_i2c.c
│ │ │ │ stm32f10x_iwdg.c
│ │ │ │ stm32f10x_pwr.c
│ │ │ │ stm32f10x_rcc.c
│ │ │ │ stm32f10x_rtc.c
│ │ │ │ stm32f10x_sdio.c
│ │ │ │ stm32f10x_spi.c
│ │ │ │ stm32f10x_tim.c
│ │ │ │ stm32f10x_usart.c
│ │ │ └ stm32f10x_wwdg.c
│ │ ├ SYSTEM
│ │ │ ├ delay
│ │ │ │ │ delay.c
│ │ │ │ └ delay.h
│ │ │ ├ sys
│ │ │ │ │ sys.c
│ │ │ │ └ sys.h
│ │ │ └ usart
│ │ │ │ usart.c
│ │ │ └ usart.h
│ │ └ USER
│ │ │ CONTROL.uvguix.James Wu
│ │ │ CONTROL.uvoptx
│ │ │ CONTROL.uvprojx
│ │ │ JLinkSettings.ini
│ │ │ main.c
│ │ │ stm32f10x.h
│ │ │ stm32f10x_conf.h
│ │ │ stm32f10x_it.c
│ │ │ stm32f10x_it.h
│ │ │ system_stm32f10x.c
│ │ │ system_stm32f10x.h
│ │ └ DebugConfig
│ │ └ USART_STM32F103ZE_1.0.0.dbgconf
│ └ data
│ └ haarcascade_frontalface_default.xml
└ images
│ cam_1.jpg
│ cam_1_2.png
│ cam_2.jpg
│ example.gif
│ multi.png
│ README.md
│ result_1.png
│ result_2.png
│ single.png
│ stm32_board.jpg
└ system.jpg