パラパラ漫画を作成するアプリを作ってみました


こんにちは!
製品開発部映像AIグループの張朝程です。

最近、ジオスコープやミルモットHDをご利用中のお客様からクラウド録画データの静止画をパラパラ漫画にしたい、というお問い合わせが増えてきました。

そこで、PythonとOpenCVを使えば、静止画を一括で取得し簡単にパラパラ漫画を生成できるので、この課題をクリアできます。

今回、PythonプログラムをWindowsのexeファイルに変換するツールPyInstallerを使い、Python環境がないWindows PCでも動くPythonとOpenCVを組み合わせたアプリを作成してみました。

0. 開発環境

  • OS: Windows10
  • Python: 3.8.2
  • OpenCV: 4.5.2
  • PyInstaller: 4.3

1. 環境構築

WindowsのコマンドプロンプトでPythonの実行環境があることを前提に、以下の手順で環境構築を行います。

1.1 Pythonとpip

Pythonのバージョンによっては、PyInstallerとの互換性がない可能性があります。Python 3.8.2ならPyInstallerを利用できます。

OpenCVとPyInstallerは、pipでインストールします。pipがなくインストールする場合は以下のコマンドを実行しましょう。

1.2 PyInstallerとOpenCV

pipコマンドでインストールします。

PyInstallerをインストールしたかどうか確認します。

OpenCVをインストールしたかどうか確認します。

2. Pythonスクリプトの作成

まず、Documentsフォルダの直下にworkspace_pythonという作業ディレクトリを作成します。
そして、workspace_pythonの直下に、main.pyファイルと、静止画ファイルを格納するimgというディレクトリを作成し、静止画ファイルをimg\にコピーしておきます。

2.1 ディレクトリ構造

2.2 Pythonスクリプト main.py

2.3 main.pyで使われたOpenCV

  • cv2.imread( img_paths[0] )
    取得した一枚目の画像ファイルを読み込みます。
  • cv2.imread( img_paths[0] ).shape[:2]
    一枚目の画像のwidthとheightを取得し、変数heightと変数widthに代入します。
  • cv.VideoWriter_fourcc(‘m’, ‘p’ , ‘4’ , ‘v’)
    mp4動画を出力してください!というデータフォーマットを定義します。
  • cv2.VideoWriter(‘timelaps.mp4’, fourcc, FRAME_RATE, (width, height))
    引数1: 動画パス名
    引数2: cv.VideoWriter_fourcc(‘m’, ‘p’ , ‘4’ , ‘v’)の戻り値。
    引数3: FPS ( Frame Per Second ) 、つまり1秒間の動画で見せる静止画の枚数を意味します。
    引数4: 動画サイズ。
  • cv.VideoWriter.write(image)とcv.VideoWriter.release()
    forループで、すべての画像を.write(image)で書き込んでから、.release()でmp4ファイルを出力します。

3. Pythonアプリをexe化して動画作成します

以下のコマンドで、先ほど作ったPythonスクリプトを簡単にexeファイルに変換できます。–onefileオプションを付けると、関連するファイルを1つにまとめてexeファイルを生成します。

もしPyInstallerは環境変数に通っていない場合、以下のコマンドでも実行できます。

うまくいくと、ディレクトリ構造は以下のように変わります。

~\dist\の直下に、main.exeを生成できましたね。

今回のPythonスクリプトは、静止画を格納するimgフォルダはexeファイルと同階層に配置する仕様です。
そのため、exeファイルをdistフォルダから取り出し、imgフォルダと同じ階層に移動します。

以上のディレクトリ構造を確認した上で、マウスでmain.exeファイルをダブルクリックすると、Windowsのterminalを表示し、Pythonスクリプト内のprint()内容を表示します。

“変換完了”が表示されたら、windowsのterminalが自動的に消えます。コマンドプロンプトで確認すると、timelaps.mp4ファイルがworksapce_pythonフォルダ内に作成されました!

4.実演 

エコモット本社前で撮影された静止画80枚をパラパラ漫画にしました!
( 動画サイズ:  320 * 180 )