Выберите тайм-аут с Python OpenCV Raspbian RPi4 с одной веб-камерой USB

Сначала мой процесс установки opencv:

https://www.pyimagesearch.com/2019/09/16/install-opencv-4-on-raspberry-pi-4-and-raspbian-buster/

sudo apt-get install -y vim bc

#gain more SDCARD space; remove unneed software
###############################################
sudo apt-get purge -y wolfram-engine;
sudo apt-get purge -y libreoffice*;
sudo apt-get clean;
sudo apt-get autoremove -y;


###############################################
# install dependencies
###############################################

sudo apt-get install -y build-essential cmake pkg-config;
echo;echo;echo;
sudo apt-get install -y libjpeg-dev libtiff5-dev libjasper-dev libpng-dev;
echo;echo;echo;

sudo apt-get install -y libavcodec-dev libavformat-dev libswscale-dev libv4l-dev;
echo;echo;echo;
sudo apt-get install -y libxvidcore-dev libx264-dev;
echo;echo;echo;

sudo apt-get install -y libfontconfig1-dev libcairo2-dev;
echo;echo;echo;
sudo apt-get install -y libgdk-pixbuf2.0-dev libpango1.0-dev;
echo;echo;echo;

sudo apt-get install -y libgtk2.0-dev libgtk-3-dev;
echo;echo;echo;

sudo apt-get install -y libatlas-base-dev gfortran
echo;echo;echo;

sudo apt-get install -y libhdf5-dev libhdf5-serial-dev libhdf5-103
echo;echo;echo;

sudo apt-get install -y libqtgui4 libqtwebkit4 libqt4-test python3-pyqt5
echo;echo;echo;

sudo apt-get install -y python3-dev
echo;echo;echo;



###############################################
# create virtual python environment (need pip, virtualenv , virtualenvwrapper)
###############################################

wget https://bootstrap.pypa.io/get-pip.py
sudo python get-pip.py
sudo python3 get-pip.py
sudo rm -rf ~/.cache/pip

sudo pip install virtualenv virtualenvwrapper


#EDIT .bashrc, add to bottom:
###############################################
# virtualenv and virtualenvwrapper
export WORKON_HOME=$HOME/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
source /usr/local/bin/virtualenvwrapper.sh

#save, exit .bashrc, reload:
###############################################
source ~/.bashrc

# now create the virtual environment (we're calling it 'cv')
###############################################
mkvirtualenv cv -p python3



###############################################
#INSTall opencv4 into 'cv' virtual environment using 'pip'
###############################################
pip install opencv-contrib-python

pip3 install matplotlib

###############################################
# I make sure I'm in the virtual env
###############################################
workon cv


###############################################
# the 'LD_PRELOAD' takes care of a startup error
###############################################
LD_PRELOAD=/usr/lib/arm-linux-gnueabihf/libatomic.so.1.2.0    python3

Далее, вот мой скрипт на Python: (я пробовал с установкой ширины x высоты и без нее)

import cv2

device = 0

cap = cv2.VideoCapture(device)

cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)

# if capture failed to open, try again
if not cap.isOpened():
    cap.open(device)

# only attempt to read if it is opened
if cap.isOpened:
    while(True):
        ret, frame = cap.read()

        if ret:
            cv2.imshow('frame',frame)
        else:
            print("Error reading capture device")
            break

        if cv2.waitKey(1) & 0xff == ord('q'):
            break

    cap.release()
    cv2.destroyAllWindows()
else:
    print("Failed to open capture device")

Вывод ошибки:

выберите тайм-аут VIDIOC_DQBUF: ресурс временно недоступен Ошибка чтения устройства захвата

Камера отлично работает с mjpg-streamer

ОБНОВЛЕНИЕ: я не нашел основной проблемы, но у меня есть обходной путь, который мне подходит (по крайней мере, на данный момент).

  1. Запустите mjpg-streamer. В моем случае веб-камера транслируется по адресу http://localhost:8083/?action=stream.

  2. Захват видео с URL-адреса, а не с номера USB-устройства.

  3. Измените код, чтобы сохранить изображение

импорт cv2

webcamConnected = Ложь

url = "http: / localhost:8082/? action =stream"

cap = cv2.VideoCapture(URL)

# пытаться читать, только если он открыт
если крышка открыта:
    в то время как (Истина):
        ret, frame = cap.read()
        если ret:
            cv2.imshow('рамка', рамка)
        еще:
            print ("Ошибка чтения устройства захвата")
            перемена
        если cv2.waitKey(1) & 0xff == ord('q'):
            перемена

    cap.release()
    cv2.destroyAllWindows()
еще:
    print ("Не удалось открыть устройство захвата")

0 ответов

Другие вопросы по тегам