python - 如何将网络摄像头与来自 arduino 和 SR04 距离传感器的串行数据同步
问题描述
我已经用 arduino+SR04 传感器连接了我的笔记本电脑。我想做的是,一旦距离传感器检测到有人在笔记本电脑附近(距离读数小于 50 厘米),我想使用 python-opencv 打开网络摄像头(稍后保存此视频剪辑)问题我面临的是arduino + SR04和python之间存在不同步的通信。即使在人离开后,传感器读数也会在 phython 控制台上持续弹出约 3-4 秒(这可能是由于传感器数据的写入速度不如相机显示快)。这么长的延迟,我的视频会占用很多空间。
我尝试将 SR04 传感器的延迟增加到 500 毫秒,但这会使网络摄像头变得非常不稳定和缓慢。我不希望视频断断续续。请帮忙
我的 arduino +SR04 代码
const int echo_pin = 9;
const int trig_pin = 10;
void setup() {
Serial.begin(9600);
pinMode(echo_pin, INPUT);
pinMode(trig_pin, OUTPUT);
}
void loop() {
double period, distance;
digitalWrite(trig_pin, LOW);
delayMicroseconds(2);
digitalWrite(trig_pin, HIGH);
delayMicroseconds(10);
digitalWrite(trig_pin, LOW);
period = pulseIn(echo_pin, HIGH);
distance = (period / 2) / 29.1;
//delay(500);
Serial.println(distance);
}
我的 Python 代码
import serial
import time
import cv2
cap = cv2.VideoCapture(0)
arduino = serial.Serial('COM10', 9600)
def Measure():
distance = arduino.readline()
#time.sleep(.5)
print ("distance "+str(distance)+" cm")
return float(distance)
while True:
output = Measure()
if output < 50:
# Capture frame-by-frame
ret, frame = cap.read()
# Our operations on the frame come here
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# Display the resulting frame
cv2.imshow('frame',gray)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
解决方案
推荐阅读
- reactjs - 如何将 Netlify 上的 React 前端连接到 PythonAnywhere 上的 Flask 后端
- javascript - 在 LeafletJS 地图中禁用左右按钮平移
- php - 一个 PDO 函数用于任何查询
- connexion - 我在休息 api 调用上遇到问题-属性只读
- arrays - Ruby 的组合比较运算符是如何工作的?
- apache-spark - Synapase 笔记本中的 Pyspark 数据帧错误
- reactjs - 来自 Django 服务器的 reactjs 请求时出错(403 错误/CORS)
- python-3.x - 从第一个循环中获取结果以在 python 中运行第二个循环
- python - 过滤 dtype 转换失败的行
- php - 做imagecropauto后如何保持gif背景透明度