Help us understand the problem. What is going on with this article?

Flask: カメラ動画・ストリーミング配信やってみた♬

More than 1 year has passed since last update.

stream_animation.gif

動いた!!!

何が問題だったのか。。。

だよね。。。

ということでできました。

参考サイト

Video Streaming with Flask
miguelgrinberg/flask-video-streaming

環境差分ということ

なんと、上記の記事は4年も前なのに。。。ウワンはほんのひと月前に環境構築したのに。。そんなことは関係なく。。
とにかく、アプリのダウンロードはubuntu環境で。。。適当なDir配下に置きます。

$ git clone https://github.com/miguelgrinberg/flask-video-streaming.git

これで、すべての必要なファイルがダウンロードされ、flask-video-streaming 配下に配置されます。
このダウンロードした中にrequirements.txtなどという環境情報が入っています。

requirements.txt
click==6.7
Flask==0.12.2
itsdangerous==0.24
Jinja2==2.9.6
MarkupSafe==1.0
Werkzeug==0.12.2
requirements-pi.txt
。。。
picamera==1.13
requirements-opencv.txt
。。。
numpy==1.13.1
opencv-python==3.2.0.8

動かないと言っていたウワンの環境は以下の通りでした。。。

C:\Users\user>pip list
C:\Users\user>pip list
Package                            Version
---------------------------------- -----------
click                              6.6 X
Flask                              0.11.1 X
itsdangerous                       0.24 〇 
Jinja2                             2.8 X
MarkupSafe                         0.23 X
numpy                              1.14.2 △
opencv-python                      3.4.1 △
Werkzeug                           0.11.11 X

〇:満たしている △:UpperVersion X:LowerVersion

ということで、環境構築
pythonなどが動いている環境であれば、以下のコマンドで一発構築できるはず。。
--userつける前はいろいろ出るけど、以下ですんなりいきました。

ubuntu on windows
python2 環境
$ pip install Flask --user
python3 環境
$ pip3 install Flask --user

windows
python3 環境
C:\Users\user>pip install Flask --user

ここからは基本同じなので、Windows環境を記載します。
このコマンドで以下の環境になりました。

C:\Users\user>pip list
Package                            Version
---------------------------------- -----------
click                              6.6 X
Flask                              1.0.2 〇
itsdangerous                       0.24 〇
Jinja2                             2.10 〇
MarkupSafe                         0.23 X 
numpy                              1.14.2 △
opencv-python                      3.4.1 △
Werkzeug                           0.14.1 △

clickとMarkupSafeが満たしていませんが、。。まずは放置しました。

そして、実行

...>flask-video-streaming>python app.py

なんの苦労もなく動きました!

ちなみにcamera.pyのsleep(1)を以下のように削除すると、。。。2fpsくらい

camera.py
class Camera(BaseCamera):
    """An emulated camera implementation that streams a repeated sequence of
    files 1.jpg, 2.jpg and 3.jpg at a rate of one frame per second."""
    imgs = [open(f + '.jpg', 'rb').read() for f in ['1', '2', '3']]

    @staticmethod
    def frames():
        while True:
            #time.sleep(1)
            yield Camera.imgs[int(time.time()) % 3]

そして、どうせシークエンスに動いているので演算やめて、
以下のようにすると。。。すごく速くなった
※10fpsは超えていると思う

    @staticmethod
    def frames():
        while True:
            #time.sleep(1)
            yield Camera.imgs[0]
            yield Camera.imgs[1]
            yield Camera.imgs[2]

ということで計測しました。

    @staticmethod
    def frames():
        start_time=time.time()
        i=0
        while True:
            yield Camera.imgs[i%3]
            time.sleep(0.1) #0.1をいろいろ変える
            i += 1
            if int(time.time()-start_time)>=10:
                print("i=",i,"fps=",i/10)
                break

以下のとおりな結果でした。読み込まれた画像については、かなり優秀
ただし、これはあくまで関数内でのyieldしているカウント数から見ており、実際はこれ以上のfpsもやってみたが、出力はカクカク乱れて見えた。
以下の通り、この範囲(0.02あたりまで)はグラフも直線的に見える。
※このあたりから別のボトルネックが発生しているようである

wait fps
0.008 118.2
0.01 95.6
0.02 48.3
0.05 18.02
0.1 9.32
0.2 4.84
0.5 1.98
1 1.00
2 0.50
5 0.20

fpsvswait2.jpg

そして、注意!

 * Environment: production
   WARNING: Do not use the development server in a production environment.
   Use a production WSGI server instead.

ということで、商用環境には使わないでね。。。WSGI
とりあえず、。。ゆっくりやっていこう
【参考】
WSGIとPythonでスマートなWebアプリケーション開発を
Full Stack Python

以下に性能改善とWSGIの話がある
Flask Video Streaming Revisited

まとめ

・Flask:画像・ストリーミングが出来た
 あらためて、環境を意識して開発すべきを肝に銘じた

・実際のカメラ画像でいろいろ遊んでみようと思う

【追記】

カメラ動画・Streaming配信は以下の変更で簡単に出来ました!
※変更は、以下のとおり、camera ⇒ camera_opencv

app.py
else:
    from camera_opencv import Camera

安定した動画が配信できています。
ちなみに、RasPiでPicameraも同様にできた。
以下、ちょっと動画配信の記録。。。
doga_streaming.jpg

これで、リアルタイム物体検出Streaming配信もできそう。。。

MuAuan
2020年目標;いい記事を書く 記事350いいね1500フォロワー150 2019年の実績/目標 記事275/300いいね1035/1000フォロワー97/100 1/7/2019 記事219いいね784フォロワー76 2018年の実績/目標 記事140/200いいね423/500フォロワー48/50 7/8/2018 記事90いいね227フォロワー25
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした