やること
- 動画における物体検出をやってみた
- 物体検出のアルゴリズムはSSD(Single Shot MultiBox Detector)を利用
手順概要
-
- ソースコードのダウンロード
-
- 学習済モデルのダウンロード
-
- 環境構築
-
- ソースコードの修正
-
- 動画ファイルの指定
-
- 物体検出の実行
-
- 実行結果の変換(png -> gif)
動作環境
- macOS Catalina 10.15 beta
- anaconda 4.6.14
- Python 3.5.4
- tensorflow 1.3.0
- keras 1.2.2
- opencv-python 3.3.0.9
- imageio 2.4.1
1. ソースコードのダウンロード
- 下記コマンドでソースコードをダウンロードします
$ git clone https://github.com/rykov8/ssd_keras.git
$ cd ssd_keras
2. 学習済モデルのダウンロード
-
こちらに学習済モデルが公開されているので、
weights_SSD300.hdf5
をダウンロードします
3. 環境構築
- こちらのAnaconda環境構築用の設定ファイルをダウンロードして、プロジェクトの直下に格納します
- ダウンロードした設定ファイル(.yaml)を元に下記のコマンドでAnacondaの環境を構築します
- また、「imageio」を個別にインストールします
- その後、環境をアクティベートします
$ conda env create -f ykov8_ssd_keras.yaml
$ conda install imageio
$ source activate rykov8_ssd_keras
4. ソースコードの修正
- 私の環境では、以下部分を修正しました
- コンソール上にも物体検出の結果を出力しています
- 物体検出した結果は「testing_utils」の「image」フォルダにpng形式で保存します(182行目)
/testing_utils/videotest.py
#--------------
# 12行目
#--------------
# before
from scipy.misc import imread, imresize
# after
from imageio import imread
#--------------
# 87行目
#--------------
# before
vidw = vid.get(cv2.cv.CV_CAP_PROP_FRAME_WIDTH)
vidh = vid.get(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT)
# after
vidw = vid.get(cv2.CAP_PROP_FRAME_WIDTH)
vidh = vid.get(cv2.CAP_PROP_FRAME_HEIGHT)
#--------------
# 99行目
#--------------
# before
# after
num_frame = 0
#--------------
# 162行目
#--------------
# before
# after
print(text)
#--------------
# 182行目
#--------------
# before
# after
print(text)
cv2.imwrite("./image/frame_" + str('{0:04d}'.format(num_frame)) +".png", to_draw)
num_frame += 1
5. 動画ファイルの指定
-
videotest_example.py
で動画ファイルの指定を行います - 動画ファイルはPexels(フリー動画サイト)からダウンロードしました
/testing_utils/videotest_example.py
#--------------
# 24行目
#--------------
# before
vid_test.run('path/to/your/video.mkv')
# after
vid_test.run('../movie/1.mp4')
6. 物体検出の実行
- 指定した動画で物体検出の実行をします
- 4.の182行目で記載した通り、「testing_utils」フォルダ内に「image」フォルダを作成しておきます
$ python videotest_example.py
7. 実行結果の変換(png -> gif)
- 実行が完了したら、「image」フォルダのpngファイルをgifに変換します
- gifへの変換はPicGIF Liteを使いました
結果(gifファイル)
ソースコード