Выберите тайм-аут с 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
ОБНОВЛЕНИЕ: я не нашел основной проблемы, но у меня есть обходной путь, который мне подходит (по крайней мере, на данный момент).
Запустите mjpg-streamer. В моем случае веб-камера транслируется по адресу http://localhost:8083/?action=stream.
Захват видео с URL-адреса, а не с номера USB-устройства.
Измените код, чтобы сохранить изображение
импорт 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 ("Не удалось открыть устройство захвата")