< >
Home » Jetbot-AI机器人教程 » Jetbot-AI机器人教程-人脸追踪

Jetbot-AI机器人教程-人脸追踪

说明:

  • 介绍jetbot如何人脸追踪

步骤:

  • 基本界面:

请输入图片描述

第一步:创建一个终端,添加设备权限

$ sudo chmod 777 /dev/ttyTHS1

第二步:在JetBot上运行程序:

  • 通过导航到http://<jetbot_ip_address>:8888连接到您的机器人

  • 使用默认密码jetbot登录

  • 通过选择Kernel -> Shutdown All Kernels...来关闭所有其他正在运行的笔记本...

  • 导航到~/Notebooks/face_tracking/

  • 打开并跟随face_tracking.ipynb笔记操作

  • 运行程序导入相关包,创建摄像机实例

from jetbot import Camera
from jetbot import bgr8_to_jpeg
import PID
camera = Camera.instance(width=720, height=720)
  • 创建运动控制变量
global face_x, face_y, face_w, face_h
face_x = face_y = face_w = face_h = 0
global target_valuex
target_valuex = 2048
global target_valuey
target_valuey = 2048
  • 创建PID控制实例
xservo_pid = PID.PositionalPID(1.9, 0.3, 0.35)
yservo_pid = PID.PositionalPID(1.5, 0.2, 0.3)
  • 创建PTZ云台总线转向控制实例
fromfrom  servoserialservose  import ServoSerial
servo_device = ServoSerial()
  • 创建显示控件
import traitlets
import ipywidgets.widgets as widgets
from IPython.display import display
face_image = widgets.Image(format='jpeg', width=300, height=300)
display(face_image)
  • 人脸检测需要级联分类器,加载"Haar"级联分类器,123.xml是Haar级联数据,可以从OpenCV3源代码中的data/haarcascades获得此xml,然后通过face_cascade.detectMultiScale() 执行实际的面部检测
import cv2
face_cascade = cv2.CascadeClassifier('123.xml')
  • 运行主进程。在人脸识别获得当前人脸的位置之后,PTZ控制器将通过PID控制器跟踪人脸。这里使用位置PID算法。
while 1:
    frame = camera.value
    frame = cv2.resize(frame, (300, 300))
    gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
    faces = face_cascade.detectMultiScale( gray )
    if len(faces)>0:
        (face_x, face_y, face_w, face_h) = faces[0]
        # cv2.rectangle(frame,(face_x,face_y),(face_x+face_h,face_y+face_w),(0,255,0),2)
        cv2.rectangle(frame,(face_x+10,face_y),(face_x+face_w-10,face_y+face_h+20),(0,255,0),2)

        xservo_pid.SystemOutput = face_x+face_h/2
        xservo_pid.SetStepSignal(150)
        xservo_pid.SetInertiaTime(0.01, 0.006)
        target_valuex = int(2048 + xservo_pid.SystemOutput)
        yservo_pid.SystemOutput = face_y+face_w/2
        yservo_pid.SetStepSignal(150)
        yservo_pid.SetInertiaTime(0.01, 0.006)
        target_valuey = int(2048+yservo_pid.SystemOutput)
        servo_device.Servo_serial_double_control(1, target_valuex, 2, target_valuey)
    face_image.value = bgr8_to_jpeg(frame)

纠错,疑问,交流: 请进入讨论区点击加入Q群

获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号


标签: jetbot-ai机器人教程