Камера устройства USB не возвращает изображение - PullRequest
0 голосов
/ 06 апреля 2020

У меня есть камера openMV для моей магистерской диссертации, которую я использую для обнаружения объектов на изображении. Я должен использовать Python3 в Ubuntu, потому что этого требует другое устройство. Проблема возникает случайно, иногда, когда я загружаю свой компьютер, скрипт творит чудеса, иногда он застревает и KeyboardInterrupt возвращает:

File "main_bolts.py", line 39, in camera_capture
size = struct.unpack("<L", sp.read(4))[0]
File "/usr/local/lib/python3.6/dist-packages/serial/serialposix.py", line 483, in read
ready, _, _ = select.select([self.fd, self.pipe_abort_read_r], [], [], timeout.time_left())

Камера настроена как:

port = '/dev/ttyACM0'
sp = serial.Serial(port, baudrate=115200, bytesize=serial.EIGHTBITS, parity=serial.PARITY_NONE,
           xonxoff=False, rtscts=False, stopbits=serial.STOPBITS_ONE, timeout=None, dsrdtr=True)
sp.setDTR(True) # dsrdtr is ignored on Windows.

Сценарий на камере:

import sensor, image, time, ustruct, pyb
from pyb import USB_VCP
usb = USB_VCP()
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.skip_frames(time = 2000)
while(True):
    cmd = usb.recv(4, timeout=5000)
    img = sensor.snapshot().compress()
    if (cmd == b'snap'):
        usb.send(ustruct.pack("<L", img.size()))
        usb.send(img)

Строка, которая вызывает изображение:

sp.write(b"snap")
sp.flush()

size = struct.unpack("<L", sp.read(4))[0]
frame = sp.read(size)

Я бы затем обработал изображение. Это иногда возвращает изображение и показывает в окне с cv2.imshow(). Это проблема с номером ttyACM? Можно ли как-то автоматизировать его, чтобы всегда связывать его с правильным устройством? (Я только связан с камерой и манипулятором - всегда одни и те же порты USB) У меня заканчиваются идеи, и это расстраивает

...