Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
21
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

@hiraku00

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

ソースコード

参考文献

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
21
Help us understand the problem. What are the problem?