web-dev-qa-db-ja.com

opencvストリームを停止できません:デバイスの不適切なioctl

ビデオをフレーム画像に変換したいだけです。

この単純なコードを使用する

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

出力は

ストリームを停止できません:デバイスの不適切なioctl

Ubuntuサーバーでpython 2.7.6を使用しています。

14
Gor

Ubuntu 16.04.3でこの問題を解決しました。

  1. Sudo apt-get install ffmpeg
  2. Sudo apt-get install libavcodec-dev libavformat-dev libavdevice-dev
  3. 次のコマンドを使用して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
8
劉大為

こんにちは私もこのエラーを取り、このコマンドで解決しました。

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

cmakeコマンドでエラーが発生した場合、2番目にpls install cmake gui.Do最初のコマンド:Sudo apt-get install libv4l-dev cmakeguiプログラムを使用して、CmakeVars.txtファイルでパラメーターを設定できます。 CmakeVars.txtファイル交換WITH_LIBV4L = OFFをWITH_LIBV4L = ONに編集し、make && Sudo make installコマンドを実行します。このエラーの詳細については、 https://github.com/opencv/opencv/issues/6157 をご覧ください。

2
emre

JavaでManjaro 17.0.2とOpenCV 3.2.0を使用してもまったく同じ問題が発生しました。 OpenCVの古い実装を削除し、最初からインストールし直しました。これらのパラメーターを使用してcmakeを実行cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_LIBV4L=ON ..(@emreに感謝)

次に、Cmakeインストールの出力で、Can't find ffmpeg - 'pkg-config' utility is missing。 pkg-configをインストールし、cmake、makeを再実行して、すべてが機能するようになりました。

1
Ognjen Mišić

この問題は、ffmpegとffmpeg-develが欠落していることが原因でした。これはcmake出力で確認できます。

CMAKE output

FFMPEGが使用できない場合、それらのYESはNOになります。また、FFMPEGを使用せずにopencvをコンパイルしてインストールすると、ビデオ関連のサンプルに対して「ストリームを停止できません:デバイスの不適切なioctl」というエラーが表示されます。

問題を解決するには、ffmpegとffmpeg-develをインストールしてから、「make」と「make install」を再度インストールします。

お役に立てれば。

1
Stanley Yong

私はLinux Mintを使用し、C++でプログラミングしています。 https://stackoverflow.com/a/45893821/11247666 と同じ手順を適用します。これは:

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

しかし、この後。問題は解決できませんでした。私はこのエラーがあります:

詳細不明のエラー(関数は実装されていません。Windows、GTK + 2.xまたはCarbonサポートでライブラリを再構築します。UbuntuまたはDebianを使用している場合、libgtk2.0-devおよびpkg-configをインストールしてから、cmakeを再実行するか、スクリプトを構成します)cvNamedWindowで。

以下を適用します

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

この後、同じ手順を適用しました。

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

上記は私のために働いた。