我已经使用Arduino和电位计构建了如下所示的简单电路
我已经编写了它的Arduino代码,如下所示:
void setup() {
Serial.begin(9600);
pinMode(A0,INPUT);
}
void loop() {
Serial.println(analogRead(A0));
delay(100);
}
我想要的是,仅当检测到面部时,我才想获得电位器的模拟值一次。我编写了如下所示的Python代码:
import cv2
import serial
arduino = serial.Serial('COM3', 9600, timeout=.1)
success = False
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
# Read the input image
#img = cv2.imread('test.png')
cap = cv2.VideoCapture(0)
while cap.isOpened():
_, img = cap.read()
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 1.1, 4)
if faces == ():
success = False
for (x, y , w ,h) in faces:
cv2.rectangle(img, (x,y), (x+w, y+h), (0, 0, 255), 3)
while (success == False):
data = arduino.readline()
if data:
print(float(data.decode('utf-8')))
success = True
cv2.imshow('img', img)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
在网络摄像头上检测到脸部时,程序将仅根据需要获取电位器的值1倍。如果我将电位器设置为1023,然后运行Python代码,它将输出1023;否则,将显示1023。但是问题是;当我不停止代码并从视图中拔出头并将电位器的值设置为500左右时,再次显示我的头后,它又显示1023。我的错在哪里?你能解决吗?