文章目录
和追踪小车的原理是一样的
首先获得目标物体的x,y坐标,然后通过目标物体的xy坐标来控制我们云台的两个舵机的pid运动
无论追踪什么物体,都是通过物体的x,y坐标来控制云台的运动,对于云台的舵机来说,它只知道传给它的是x,y坐标,并不知道OpenMV传给它的是小球的xy坐标还是人脸的xy坐标
所以我们只需要修改main.py中的函数即可
追踪人脸的云台
搜索函数:objects = img.find_features(face_cascade,threshold ,scale)
记得要载入haar算子
,并且寻找小球的函数find_blob()
和寻找人脸的函数find_feartures()
的返回值是不一样的!
import sensor, image, time
from pid import PID
from pyb import Servo
pan_servo=Servo(1)
tilt_servo=Servo(2)
pan_servo.calibration(500,2500,500)
tilt_servo.calibration(500,2500,500)
red_threshold = (13, 49, 18, 61, 6, 47)
pan_pid = PID(p=0.07, i=0, imax=90) #脱机运行或者禁用图像传输,使用这个PID
tilt_pid = PID(p=0.05, i=0, imax=90) #脱机运行或者禁用图像传输,使用这个PID
#pan_pid = PID(p=0.1, i=0, imax=90)#在线调试使用这个PID
#tilt_pid = PID(p=0.1, i=0, imax=90)#在线调试使用这个PID
sensor.reset() # Initialize the camera sensor.
sensor.set_contrast(1) # 插入:设置对比度
sensor.set_gainceiling(16) # 插入:设置增益
# 由于云台上的OpenMV是反着装的,而检测人脸的haar算子是正着看的,所以就必须把照片倒过来才能检测成功
# 我们不用那么麻烦:直接设置图像为镜像模式,是垂直方向的翻转即可
sensor.set_vflip(True)
sensor.set_pixformat(sensor.GRAYSCALE) # 人脸识别最好采用灰度图模式
sensor.set_framesize(sensor.QQVGA) # use QQVGA for speed.
sensor.skip_frames(10) # Let new settings take affect.
sensor.set_auto_whitebal(False) # turn this off.
clock = time.clock() # Tracks FPS.
# 加载人脸的haar算子
face_cascade = image.HaarCascade("frontalface" , stages = 25)
def find_max(blobs):
max_size=0
for blob in blobs:
if blob[2]*blob[3] > max_size:
max_blob=blob
max_size = blob[2]*blob[3]
return max_blob
while(True):
clock.tick() # Track elapsed milliseconds between snapshots().
img = sensor