面部识别的python代码正在工作,正在写入端口COM3(连接到arduino)。arduino代码将从字符串中删除X和Y字符,并将其拆分为两个四舍五入整数,然后写入伺服电机。但是,arduino没有读取任何信息,伺服系统也没有接收到任何信息
用于获取背面位置并将其写入串行端口的python代码:
import cv2
import numpy as np
import serial
import time
from tkinter import *
from tkinter import messagebox
ser = serial.Serial('COM3', 9600)
cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
videoCamera = cv2.VideoCapture(0)
t0 = 0
valueX = 0
valueY = 0
x = 0
y = 0
w = 0
h = 0
time.sleep(2)
while(True):
ret, img = videoCamera.read()
faces = cascade.detectMultiScale(img, 1.5, 5)
for (x , y , w , h) in faces:
cv2.rectangle(img, (x, y), (x+w, y+h), (0, 0, 255), 3)
if(t0>20):
valueX = ((180 - x / (videoCamera.get(cv2.CAP_PROP_FRAME_WIDTH)/180)) + w/2)
valueY = ((y / (videoCamera.get(cv2.CAP_PROP_FRAME_HEIGHT)/180)) + h/2)
faceLocation = "X" + str(valueX) +" " + "Y" + str(valueY)
ser.write(str.encode(faceLocation))
print(str.encode(faceLocation))
t0 = 0
cv2.imshow('frame', img)
k = cv2.waitKey(30) & 0xFF
t0 += 1
if k==27:
break
videoCamera.release()
cv2.destroyAllWindows()
arduino代码从python将伺服旋转到给定的面位置:
#include<Servo.h>
Servo serX;
Servo serY;
String tempModify;
void setup() {
serX.attach(10);
serY.attach(11);
Serial.begin(9600);
Serial.setTimeout(10);
serX.write(0);
serY.write(0);
}
void loop() {
}
void serialEvent() {
if(Serial.available() < 0){
tempModify = Serial.readString();
serX.write(parseDataX(tempModify));
serY.write(parseDataY(tempModify));
}
}
int parseDataX(String data){
data.remove(0, data.indexOf("X")+ 1);
return data.toInt();
}
int parseDataY(String data){
data.remove(0,data.indexOf("Y")+1);
return data.toInt();
}
目前没有回答
相关问题 更多 >
编程相关推荐