如何同时运行OpenCV和Arduino PySerial

2024-05-29 04:36:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用Arduino Uno使用网络摄像头拍摄快照。我正在使用PythonOpenCV与摄像头接口以捕获视频。我还在Arduino界面上使用pyserial,这样当按下按钮时,Arduino和python将进行交互,相机将拍摄照片。我遇到的问题是,当我运行Arduino的串行连接时,网络摄像头窗口没有加载视频,即(没有响应)。当我注释掉与串行接口相关的代码行时,相机窗口框架将加载,我可以查看视频。我认为,由于这两个设备都是通过USB连接到我的计算机上的,PySerial接管了串行接口,不允许摄像头视频馈送将其数据加载到接口上供我查看。我的问题是,有没有一种方法可以将两者连接在一起,这样当Arduino接收到数字输入时,它会向python发送一个“命令”,让网络摄像头拍照?如有任何建议,将不胜感激

站台:

视窗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,我可以用它来运行神经网络,但这是另一个对我来说有学习曲线的领域


Tags: 代码nameimport网络img视频countercv2
1条回答
网友
1楼 · 发布于 2024-05-29 04:36:07

输入串行连接超时

ser=serial.Serial(port='comX',baudrate=9600,timeout=.1) #timeout - float type

我认为read()没有用,而是readline()。您可以转换此数据(如果为intiger)

#write this in while 
try:
    dat=ser.readline()
    try:
        datInt=int(dat)
    except:
        print('Convert fail')#often readed b'', and may not converted
except:
    print('Serial connecting fail')

此datInt值是写入的intiger。 如果不是intiger,可以使用string方法,并使用more命令进行转换

如果要列出或读取更多数据,请在此处写一条消息

祝你好运

(对不起,我的英语不太好)

相关问题 更多 >

    热门问题