j'essaie de prendre une vidéo avec webcam en utilisant opencv et python avec un code simple
import numpy as np
import cv2
cap = cv2.VideoCapture(0)
print('cap.isOpened')
if cap.isOpened():
print ('cap is opened')
while(True):
re,img=cap.read()
cv2.imshow("video output", img)
k = cv2.waitKey(10)&0xFF
if k==27:
break
cap.release()
cv2.destroyAllWindows()
cela fonctionne bien si j'essaie de lire une vidéo existante telle que le fichier .mp4. mais quand j'essaie d'utiliser une webcam, j'ai une erreur
GStreamer-CRITICAL **: gst_element_get_state: l'assertion 'GST_IS_ELEMENT (element)' a échoué cap.isOpened
pour plus d'informations j'utilise odroid xu4 avec ubuntu 16.04, webcam j'utilise logitech c170 (cela fonctionne correctement dans webcamtest et en utilisant guvcview) pensais que cela ne fonctionne pas sur cheese et camorama.
besoin d'aide à ce sujet s'il vous plaît ..
La solution de contournement suivante a une chance raisonnable de fonctionner:
cap = cv2.VideoCapture(0, cv2.CAP_V4L)
La possibilité de sélectionner des backends a été ajoutée dans OpenCV 3, voir la VideoCapture()
docs .
La solution de contournement fait basculer le backend vers V4L (à partir de GStreamer par défaut) pour ma version OpenCV 3.4.4 avec prise en charge de GStreamer sur une boîte 16.04. Voici la sortie du code de la question avec solution de contournement après export OPENCV_VIDEOIO_DEBUG=TRUE
:
[ WARN:0] VIDEOIO(cvCreateCameraCapture_V4L(index)): trying ...
[ WARN:0] VIDEOIO(cvCreateCameraCapture_V4L(index)): result=0x20b1470 ...
cap.isOpened
cap is opened
Si la solution de contournement ne fonctionne pas pour vous, vous pouvez vérifier si votre build OpenCV prend en charge V4L
À l'aide de print(cv2.getBuildInformation())
. Voici la section pertinente pour ma construction:
Video I/O:
DC1394: YES (ver 2.2.4)
FFMPEG: YES
avcodec: YES (ver 56.60.100)
avformat: YES (ver 56.40.101)
avutil: YES (ver 54.31.100)
swscale: YES (ver 3.1.101)
avresample: NO
GStreamer:
base: YES (ver 1.8.3)
video: YES (ver 1.8.3)
app: YES (ver 1.8.3)
riff: YES (ver 1.8.3)
pbutils: YES (ver 1.8.3)
libv4l/libv4l2: NO
v4l/v4l2: linux/videodev2.h