J'essaie d'accéder à une webcam Logitech C310 sur mon Beaglebone. Il renvoie toujours false pour n'importe quel ID de périphérique, je ne sais pas pourquoi.
J'utilise le code suivant.
>>> import cv2, numpy as np
>>> cam = cv2.VideoCapture(0)
>>> cam.open(0)
False
La caméra apparaît en tant que video0 dans dev/et aussi dans root@arm:~#lsusb
, comme ci-dessous,
root@arm:~# lsusb
Bus 001 Device 002: ID 046d:081b Logitech, Inc. Webcam C310
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Je pouvais aussi accéder à la caméra avec v4l2-ctl
. Notez que je suis très nouveau sur OpenCV, cela peut donc sembler idiot et je m'en excuse par avance.
la fonctionnalité vidéo n'est pas prise en charge (non compilée avec FFmpeg), si cv2 a été installé à partir de la roue pypi:
pip install opencv-python
HIGHGUI ERROR: V4L: index 1 is not correct!
False
OpenCV Error: Bad flag (parameter or structure field) (Unrecognized or unsupported array type) in cvGetMat, file /home/kaushik/Desktop/OpenCV-2.4.1/modules/core/src/array.cpp, line 2482
Traceback (most recent call last):
File "x2.py", line 8, in <module>
cv2.imshow('frame', frame)
cv2.error: /home/kaushik/Desktop/OpenCV-2.4.1/modules/core/src/array.cpp:2482: error: (-206) Unrecognized or unsupported array type in function cvGetMat
si vous obtenez ce type d'erreur, il est probable que quelque chose ne va pas avec l'indexation.
au lieu de cv2.VideoCapture (0) ajouter:
cv2.VideoCapture(-1)
cela vous donnera la première caméra en état de marche ... Et si quelque chose ne va pas, il suffit de poster la trace de pile ici et je verrai si je peux vous aider :)
J'ai rencontré le même problème. Cela peut être lié à la permission de l'utilisateur. Essayez d’utiliser la procédure suivante pour diagnostiquer le problème.
Exécutez la commande suivante pour déterminer l'autorisation d'accès à la caméra.
ls -la /dev/video*
Vous pouvez obtenir une sortie similaire à celle décrite ci-dessous (vous pouvez obtenir la vidéo 1 si vous avez plusieurs caméras). Comme vous pouvez le constater, seuls les utilisateurs root
et les utilisateurs du groupe video
ont le droit d'accéder à la caméra.
crw-rw----. 1 root video 188, 0 Apr 3 21:16 /dev/video0
Donc, le correctif est simple, ajoutez votre compte utilisateur au groupe video
, en utilisant la commande suivante:
Sudo usermod -a -G video <you login name>
J'espère que ça aide!
Cela dépend de l'argument transmis à cv2.VideoCapture ().
Normalement, c’est 0 pour faire fonctionner la webcam principale de votre pc. De même, si vous souhaitez accéder à une deuxième caméra installée sur votre système, transmettez l’argument en tant que 2.
Mais si vous n'avez qu'une seule caméra et que l'indexation «0» ne vous aide pas, essayez de passer l'index sous la forme -1.
Tout d'abord, si vous essayez de capturer une vidéo, alors cam.open () n'est pas la bonne façon de le faire. La méthode open () initialise l'objet caméra (dans ce cas, la "cam").
Deuxièmement, cam.open () renvoie false car cv n'est pas en mesure d'initialiser l'objet cam. La méthode VideoCapture () initialise déjà votre objet caméra . Vous pouvez le vérifier en ajoutant
cam.isOpened()
juste après
cam.VideoCapture(0)
cela retournera "True".
Troisièmement, si vous voulez vider le flux de la caméra, c’est la manière conventionnelle de le faire.
import cv2
cam = cv2.VideoCapture(0)
print cam.isOpened()
while(True):
ret, frame = cam.read()
cv2.imshow('frame', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cam.release()
cv2.destroyAllWindows()
Si vous ne l'avez pas résolu à bien des égards, vous pouvez essayer de
trouver et installer "opencv3.2.0-dev" , je l'utilise pour résoudre
le problème deux fois.
il suffit de piper installer opencv-python ne suffit pas. (hmm,
au moins parfois)
J'ai trouvé quelque chose dans la documentation qui pourrait bien aider.
cap.read () renvoie un booléen (vrai/faux). Si frame est lu correctement, ce sera True. Parfois, cap peut ne pas avoir initialisé la capture. Dans ce cas, le code indique une erreur. Vous pouvez vérifier s'il est initialisé ou non par la méthode cap.isOpened (). Si c'est vrai, d'accord. Sinon ouvrez-le avec cap.open ().