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

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

やること

  • 動画における物体検出をやってみた
  • 物体検出のアルゴリズムは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

ソースコード

https://github.com/hiraku00/ssd_keras_test

参考文献

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
ユーザーは見つかりませんでした