LoginSignup
13
23

More than 3 years have passed since last update.

SSDで動画の物体検出をやってみた!

Posted at

やること

  • 動画における物体検出をやってみた
  • 物体検出のアルゴリズムはSSD(Single Shot MultiBox Detector)を利用

手順概要

  • 1. ソースコードのダウンロード
  • 2. 学習済モデルのダウンロード
  • 3. 環境構築
  • 4. ソースコードの修正
  • 5. 動画ファイルの指定
  • 6. 物体検出の実行
  • 7. 実行結果の変換(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をダウンロードします スクリーンショット 2019-08-19 8.04.21.png
  • ダウンロードしたファイルは、プロジェクトの直下に格納します

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. 動画ファイルの指定

/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ファイル)

  1. 人混み
    sample1.gif

  2. 歩道と車道
    sample2.gif

  3. 観光地
    sample3.gif

  4. 談笑
    sample4.gif

ソースコード

参考文献

13
23
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
23