【发布时间】:2020-11-23 14:28:14
【问题描述】:
我正在尝试使用 Arduino Uno 通过网络摄像头拍摄快照照片。我正在使用 python OpenCV 与相机接口以捕获视频。我还在为 Arduino 接口使用 pyserial,这样当按下按钮时,Arduino 和 python 将交互并且相机将拍照。我遇到的问题是,当我为 Arduino 运行串行连接时,网络摄像头窗口不会加载视频,例如(没有响应)。当我注释掉与串行接口有关的代码行时,相机窗口框架会加载并且我可以查看视频。我在想,由于这两个设备都通过 USB 连接到我的计算机,PySerial 正在接管串行接口,并且不允许相机视频源将其数据加载到接口上供我查看。我的问题是有没有办法将两者连接在一起,这样当 Arduino 接收到数字输入时,它会向 python 发送“命令”以使网络摄像头拍照?任何建议将不胜感激。
平台:
Windows 10 Python 3.8
Python 代码:
import cv2
import serial
cam = cv2.VideoCapture(0)
ser = serial.Serial('COM7', 9600)
cv2.namedWindow("Object")
img_counter = 0
while True:
ret, frame = cam.read()
snap = ser.read()
ser.reset_input_buffer()
if not ret:
print("failed to grab frame")
break
cv2.imshow("Object", frame)
k = cv2.waitKey(1)
if k%256 == 27:
# ESC pressed
print("Program closing...")
break
elif str(snap) == '1':
# Button pressed
img_name = "opencv_frame_{}.png".format(img_counter)
cv2.imwrite(img_name, frame)
print("{} written!".format(img_name))
img_counter += 1
cam.release()
cv2.destroyAllWindows()
附:如果这个问题看起来很基本,请原谅,我对这个工作范围有点新手。我正在创建这个学校项目来连接神经网络和 PLC。我还有一个 Rasberry Pi,我可以用它来运行神经网络,但这对我来说是另一个需要学习曲线的领域,哈哈。
【问题讨论】:
-
我不知道什么与什么有关,或者如何!你有一台 Windows PC,OpenCV 在某处运行,Arduino 连接到某个东西,其他东西是串行的,有一个按钮和一个网络摄像头连接到某个东西。也许图表会有所帮助。
-
网络摄像头已连接到 Windows PC。 OpenCV 在连接到网络摄像头的同一台 Windows PC 中的 Anaconda Spyder IDE 中运行。 Arduino Uno 连接到与网络摄像头连接的同一台 Windows PC。按钮位于面包板上,并连接到所述 Arduino 设备上的引脚 10。运行 OpenCV Python 代码的两个设备(网络摄像头和 Arduino 都通过 USB 端口连接到同一台计算机)。
-
请问串行连接在做什么?
-
所以您并没有像第一句话所说的那样真正使用 Arduino 拍照,因为 PC 是与相机对话的人。而且您拍摄的照片并不是真正的照片,因为它是视频。