9
votes

Erreur OpenCv ne peut pas ouvrir la caméra via la capture vidéo

J'utilisais ma caméra via opencv et soudainement après le redémarrage, j'ai exécuté mon code, il affiche l'erreur ci-dessous:

cap = cv2.VideoCapture(0)  # here it throws an error


import json
while(True):
    # Capture frame-by-frame
    ret, frame = cap.read()

    retval, buffer_img = cv2.imencode('.jpg', frame)

    resdata = base64.b64encode(buffer_img)

    resdata = "data:image/png;base64,"+ str(resdata.decode("utf-8"))
    PARAMS = {'image': resdata}

    # Our operations on the frame come here
    #gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    # Display the resulting frame
    cv2.imshow('frame',frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# When everything done, release the capture
cap.release()
cv2.destroyAllWindows()
[ WARN:0] global /io/opencv/modules/videoio/src/cap_v4l.cpp (802) open VIDEOIO ERROR: V4L: can't open camera by index 0
Traceback (most recent call last):
  File "test.py", line 20, in <module>
    retval, buffer_img = cv2.imencode('.jpg', frame)
cv2.error: OpenCV(4.1.2) /io/opencv/modules/imgcodecs/src/loadsave.cpp:877: error: (-215:Assertion failed) !image.empty() in function 'imencode'

J'ai aussi essayé avec cap = cv2.VideoCapture(1) mais cela montre que la caméra ne peut pas être trouvée

Comment puis-je résoudre ce problème?


0 commentaires

5 Réponses :


2
votes

Je n'irai pas dans cette partie Ce que vous essayez de faire, voici juste un bloc de code qui peut ouvrir votre caméra à chaque fois que vous l'exécutez,

python: 3.7.3

OpenCV: 4.1.0

import cv2
cap = cv2.VideoCapture(0)
while True:

    ret, frame = cap.read()
    cv2.imshow('frame',frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()


5 commentaires

cap = cv2.VideoCapture (0), ça ne marche pas, ça me donne l'erreur que j'ai mentionnée au début


quel type de caméra utilisez-vous? Caméra par défaut pour ordinateur portable (0), caméra externe (1 -....), changez simplement la valeur 0 -... et voyez ce qui se passe.


J'ai utilisé (-1) cela donne un appareil photo impossible à trouver


changez-le simplement de 0 à 1 ou 2 ou 3, si cela ne fonctionne pas, le problème peut-être votre version python ou openCV. vous pouvez le réinstaller et voir ce qui se passe, juste une petite suggestion


fait toutes sortes de choses ne peuvent toujours pas résoudre, je pense qu'il y a un problème de compatibilité ubuntu sinon il devrait fonctionner.



0
votes

J'ai eu le même problème, il suffit de changer 0 à 1, puis à -1 et de nouveau à 0. Je ne sais pas pourquoi cela a fonctionné pour moi.


0 commentaires

6
votes

J'ai eu le même problème lorsque j'ai créé plus d'une instance du cv2.VideoCapture (0). Vérifiez donc si votre code contient plusieurs initialisations ou sections qui appellent cv2.VideoCapture (0) plus d'une fois. J'étais confronté à ce problème lors de l'exécution du serveur flask en mode débogage car il appelait cv2.VideoCapture (0) deux fois.

python3 debugCamera.py 
[ WARN:0] global /io/opencv/modules/videoio/src/cap_v4l.cpp (887) open VIDEOIO(V4L2:/dev/video0): can't open camera by index

Erreur:

import cv2
cap = cv2.VideoCapture(0)
cap2 = cv2.VideoCapture(0)
while True:

    ret, frame = cap.read()
    cv2.imshow('frame',frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()


1 commentaires

Vous essayez d'ouvrir une caméra deux fois. Lorsqu'un matériel pénètre dans un travail, il n'autorise pas les commandes externes en même temps.



4
votes

J'ai eu la même erreur. Essayez de changer 0 en -1

cap = cv2.VideoCapture(-1)

Cela a résolu le problème.


1 commentaires

votre erreur obtenue cause -1 index. -1 index signifiant le dernier élément de la liste. je te recommande. vous pouvez utiliser 0 si vous avez une webcam.



0
votes

Très probablement un problème d'autorisation sur /dev/video0 .

Vérifiez si vous faites partie du groupe "vidéo".
id -a

si vous ne voyez pas de vidéo dans votre liste de groupe, ajoutez sudo usermod -a -G video

pour les utilisateurs d'Ubuntu: (20.04)
sudo usermod -a -G video $LOGNAME

Déconnectez-vous et reconnectez-vous et essayez-le.


0 commentaires