求助人脸追踪控制云台问题-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 335|回复: 0

[未解决] 求助人脸追踪控制云台问题

[复制链接]
发表于 2022-8-27 19:22 | 显示全部楼层 |阅读模式
本帖最后由 bgsdd 于 2022-8-27 19:23 编辑

起源对摄像头云台自动跟踪人脸感兴趣,百度琢磨了下:用PYTHON-OPENCV实现人脸检测,计算出人脸中心和画面中心的坐标是否重合,如果不重合就控制云台旋转到画面中心,来实现摄像头云台追踪人脸,通过  PYTHON serial 串口输出坐标给ARDUINO来驱动云台步进电机,发现接收PYTHON坐标负值的时候正常动作,接收坐标正值的时候电机不动 ,单独用ARDUINO 串口监视器调试的时候 正值和负值都可以正常动作



这是PYTHON输出部分,坐标输出显示正常:

人脸偏差坐标---- 149
人脸偏差坐标---- 99
人脸偏差坐标---- 12
人脸偏差坐标---- -18
人脸偏差坐标---- -49
人脸偏差坐标---- -92
人脸偏差坐标---- -102


这是PYTHON serial库输出部分,只弄了X(左右)方向:
x = int(480 - (xmin/2+xmax/2))       # 计算画面X方向画面中心和人脸中心的偏差
print("人脸偏差坐标----", (x))       # 打印出人脸中心和画面中心偏差
x = str(x)     #坐标转化成STR类型以便发送ARDUINO编码格式
ser.write(x.encode("utf-8"))     #发送ARDUINO 编码格式




这是ARDUINO部分,用来控制电机转动方向:
const int dir = 8;     // 方向控制引脚
const int pul = 9;    // 步进控制引脚
long val;//变量

void setup() {
  Serial.begin(9600);
  pinMode(dir, OUTPUT);//步进电机端口输出模式,步进电机部分:
  pinMode(pul, OUTPUT);  
}

void loop() {
  if (Serial.available()) //等待接收串口数据,如果串口有数据,那么开始
  {
    val = Serial.parseInt();//串口接收数据转化为整数型并赋值给变量
    if (val > 15) {//如果坐标偏离大于15,云台电机开始正转向图像中心调转
      digitalWrite(dir, LOW);//电机正转
      for (int i = 0; i < 5; i++) {//每一次调转电机5步
        digitalWrite(pul, HIGH);    //输出高脉冲
        delayMicroseconds(2000);   //电机转动速度
        digitalWrite(pul, LOW);     //输出低脉冲
        delayMicroseconds(2000);
      }
    }
    if (val < -15) {//如果坐标偏离小于-15,云台电机开始反转向图像中心调转
      digitalWrite(dir, HIGH);//电机反转
      for (int i = 0; i <  5; i++) {
        digitalWrite(pul, HIGH);   
        delayMicroseconds(2000);   
        digitalWrite(pul, LOW);     
        delayMicroseconds(2000);
      }
    }
  }
}




您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 00:44 , Processed in 0.124686 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表