web-dev-qa-db-fra.com

opencv Impossible d'arrêter le flux: ioctl inapproprié pour le périphérique

Je veux juste convertir la vidéo en images.

Utilisation de ce code simple

import cv2
vidcap = cv2.VideoCapture('gog.mp4')
success,image = vidcap.read()
count = 0
success = True
while success:
  success,image = vidcap.read()
  print 'Read a new frame: ', success
  cv2.imwrite("frame%d.jpg" % count, image)
  count += 1

la sortie est

Impossible d'arrêter le flux: ioctl inapproprié pour l'appareil

J'utilise python 2.7.6 sur le serveur ubuntu.

14
Gor

J'ai résolu ce problème sur Ubuntu 16.04.3.

  1. Sudo apt-get install ffmpeg
  2. Sudo apt-get install libavcodec-dev libavformat-dev libavdevice-dev
  3. Reconstruisez OpenCV 3.3.0 avec les commandes suivantes:

    • cd build
    • cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_FFMPEG=ON -D WITH_TBB=ON -D WITH_GTK=ON -D WITH_V4L=ON -D WITH_OPENGL=ON -D WITH_CUBLAS=ON -DWITH_QT=OFF -DCUDA_NVCC_FLAGS="-D_FORCE_INLINES" ..
    • make -j7
    • Sudo make install
8
劉大為

Salut j'ai également pris cette erreur et résolu avec ces commandes.

Sudo apt-get install libv4l-dev
cmake -DWITH_LIBV4L=ON .. (this is important)
make && Sudo make install

si une erreur se produit avec la deuxième commande cmake, installez cmake gui.Do première commande: Sudo apt-get install libv4l-dev Grâce au programme cmakegui, vous pouvez définir des paramètres avec le fichier CmakeVars.txt. Modifiez l'échange de fichiers CmakeVars.txt WITH_LIBV4L = OFF en WITH_LIBV4L = ON et exécutez make && Sudo make install commande. Pour plus d'informations sur cette erreur, visitez: https://github.com/opencv/opencv/issues/6157

2
emre

J'ai eu exactement le même problème en utilisant Manjaro 17.0.2 et OpenCV 3.2.0 avec Java. J'ai supprimé l'ancienne implémentation d'OpenCV, suis allé et l'ai réinstallé à partir de zéro. Ran cmake avec ces paramètres cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_LIBV4L=ON .. (merci @emre)

Ensuite, dans la sortie de l'installation de Cmake, j'ai remarqué Can't find ffmpeg - 'pkg-config' utility is missing. Installation de pkg-config et réexécution de cmake, make et maintenant tout fonctionne.

1
Ognjen Mišić

Le problème était dû à l'absence de ffmpeg et ffmpeg-devel. Vous pouvez le vérifier dans la sortie cmake.

CMAKE output

Si FFMPEG n'est pas disponible, ces OUI deviendront NON. Et si vous compilez et installez l'opencv sans FFMPEG, vous obtiendrez l'erreur "Impossible d'arrêter le flux: ioctl inapproprié pour le périphérique" pour les échantillons liés à la vidéo.

Pour résoudre votre problème, installez ffmpeg et ffmpeg-devel, puis "make" et "make install" à nouveau.

J'espère que cela t'aides.

1
Stanley Yong

J'utilise Linux Mint et la programmation en C++. J'applique la même procédure de https://stackoverflow.com/a/45893821/11247666 . C'est:

Sudo apt-get install ffmpeg
Sudo apt-get install libavcodec-dev libavformat-dev libavdevice-dev
cd opencv-3.3.0
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local  -D WITH_FFMPEG=ON -D WITH_TBB=ON -D WITH_GTK=ON -D WITH_V4L=ON -D WITH_OPENGL=ON -D WITH_CUBLAS=ON -DWITH_QT=OFF -DCUDA_NVCC_FLAGS="-D_FORCE_INLINES" ..
make -j7
Sudo make install

Mais après ça. Le problème n'a pas pu être résolu. J'ai cette erreur:

Erreur non spécifiée (la fonction n'est pas implémentée. Reconstruisez la bibliothèque avec le support Windows, GTK + 2.x ou Carbon. Si vous êtes sur Ubuntu ou Debian, installez libgtk2.0-dev et pkg-config, puis relancez cmake ou configurez le script ) dans cvNamedWindow.

J'applique ce qui suit

Sudo apt-get install libgtk2.0-dev
Sudo apt-get install pkg-config

Après cela, j'ai appliqué cette même procédure:

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local  -D WITH_FFMPEG=ON -D WITH_TBB=ON -D WITH_GTK=ON -D WITH_V4L=ON -D WITH_OPENGL=ON -D WITH_CUBLAS=ON -DWITH_QT=OFF -DCUDA_NVCC_FLAGS="-D_FORCE_INLINES" ..
make -j7
Sudo make install

Ce qui précède a fonctionné pour moi.