blank page

プログラミングなどについて書きます

FlaskとOpenCVを使っていたらVIDEOIO ERRORなるものでハマった

Flask && OpenCV

サーバーにアクセスが来たらOpenCVを使ってWEBカメラから写真をとっていろいろするみたいなコードを書いていた時にハマったことがあったのでメモメモ...  

起こったこ

VIDEOIO ERROR: V4L2: Pixel format of incoming image is unsupported by OpenCV
Unable to stop the stream: Device or resource busy

こういうエラーで,カメラが使えないぜ馬鹿野郎と言われています.
           

環境

OS: Ubuntu 16.04 xenial
Kernel: x86_64 Linux 4.4.0-93-generic
🐍 miniconda3-4.1.11

この他に,raspi3でもエラーが出るのを確認しました.
  

     

Sample code

import cv2
from flask import Flask

cap = cv2.VideoCapture(0)
app = Flask(__name__)

@app.route("/")
def hoge():
    _, frame = cap.read()
    """
        ここでいろいろする
    """
    return "HOGE"

if __name__ == "__main__":
    app.run(debug=True)

   

みたいなコードです.

 

いろいろ省いたりしていますがこれを実行すると...

     

* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
* Restarting with stat
VIDEOIO ERROR: V4L2: Pixel format of incoming image is unsupported by OpenCV
Unable to stop the stream: Device or resource busy

   

鯖は立ち上がるがVIDEOIO ERRORが出ます:innocent: ぐぐっても解決策の載ってる記事が見つかりませんでした...(自明的なことなのかな)
 
 
 
これに1日あるかないかくらい時間を取られました...
 
まじかなpeopleです.
    

解決方法

app.run(debug=True)debug=TrueFalseにするか消しましょう.
それを保存して実行すると動きます.(自分の環境では)
 
 

おわり

正直理由はこんな感じなんかな〜(?)程度でしかわかってないのでわかるかたぜひ教えてくれると嬉しいです〜!