Видео идет на несколько кадров, затем выдает ошибку - PullRequest
0 голосов
/ 21 мая 2019

Я работаю на Raspberry Pi3 модель B + Я установил OpenCV 3.4.4 на мой RasPberry Pi, и он установил нормально.Я просто запускаю основной код, чтобы увидеть результаты работы моей камеры.(я подключил две камеры)

Вот код.

import cv2
import time


def show_webcam(mirror=False):
    frame_rate = 30
    prev = 0
    cam = cv2.VideoCapture(0)
    cam1 = cv2.VideoCapture(1)
    ff= 0.5

    fxx = ff
    fyy = ff 
    while True:
        ret_val, img = cam.read()
        img2 = cam1.read()[1]
        time_elapsed = time.time() - prev
       # print('data type of frame', type(img))
        if time_elapsed > 1/frame_rate:
            prev = time.time()
            cv2.rectangle(img,(100,100),(500,500),(255,255,0),2)
            small_frame = cv2.resize(img, (0, 0), fx=fxx, fy=fyy)
            cv2.resize(img2,(0, 0), fx = fxx, fy = fyy)
            #print("helo")
        #if mirror: 
        #    img = cv2.flip(img, 1)
            cv2.imshow('my webcam', img)
            cv2.imshow('my 2nd webcam', img2)
        #if cv2.waitKey(1) == 27: 
        #    break  # esc to quit
        if cv2.waitKey(1) == 27:
            break
    cv2.destroyAllWindows()
    print (cam)

def main():
    show_webcam(mirror=True)

if __name__ == '__main__':
    main()



Видео появляются в течение нескольких кадров, но через несколько секунд я получаю эту ошибку

select timeout
VIDIOC_DQBUF: Resource temporarily unavailable
Traceback (most recent call last):
  File "camera.py", line 39, in <module>
    main()
  File "camera.py", line 36, in main
    show_webcam(mirror=True)
  File "camera.py", line 21, in show_webcam
    small_frame = cv2.resize(img, (0, 0), fx=fxx, fy=fyy)
cv2.error: OpenCV(3.4.4) /home/pi/packaging/opencv-python/opencv/modules/imgproc/src/resize.cpp:3784: error: (-215:Assertion failed) !ssize.empty() in function 'resize'

Этот же код прекрасно работает, когда я внедряю его на своем ноутбуке.Что я могу сделать, чтобы исправить эту ошибку и убедиться, что видео не прерывается?

попытался сделать cv2.waitKey (30) не работает

Ответы [ 3 ]

0 голосов
/ 21 мая 2019

Вы должны проверить, является ли ret_val обоих cam.read() истинным одновременно, прежде чем продолжить обработку. Таким образом, когда кадр неправильно захватывается, он отбрасывается, и процесс повторяется, вместо того, чтобы выдавать ошибку и завершаться.

Технически это не устраняет ошибку, но решает вашу проблему, при условии, что результирующая частота кадров достаточна для вашего приложения.

0 голосов
/ 21 мая 2019

почему вы используете переменную time_elapsed, в то время как вы можете просто использовать функцию waitkey и передать ей миллисекунду, которую вы хотите ждать, 1000 / framePerSecond. и что касается вашей ошибки, кадр, который вы пытаетесь изменить размер, пуст, иногда это происходит. поэтому, прежде чем выполнять какую-либо обработку изображения, попробуйте проверить, не является ли изображение пустым, затем выполните то, что вы хотите сделать.

0 голосов
/ 21 мая 2019

Тот же код работает на ноутбуке, но не на пи. Это означает, что у вас есть проблемы с меньшим объемом памяти и / или процессора на меньшем устройстве.

Попробуйте уменьшить частоту кадров, чтобы настроить количество кадров, которое вы можете работать с меньшим устройством.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...