SSDを使った物体検出
SSDとはSingle Shot MultiBox Detectorのことで、物体検出アルゴリズムの一つ。
物体検出アルゴリズムにはYOLOなどもある。
何から手を付けていいのかわからなかったので
とりあえず以下のサンプルソースを動かしてみた。
https://github.com/rykov8/ssd_keras
なお、その際には以下のサイトを参考にさせていただいた。
https://qiita.com/PonDad/items/6f9e6d9397951cadc6be
http://ai-coordinator.jp/ssd_keras-ubuntu#i-3
準備
サンプルソース
サンプルソースをダウンロード
$ git clone https://github.com/rykov8/ssd_keras.git
参考サイトの情報によると、本サンプルソースは
最新バージョンのtensorflowやkerasに対応していないため
専用の仮想環境構築から行った
仮想環境構築
condaを使用して、専用環境を構築
$ conda create -n SSD python=3.6 anaconda $ source activate SSD
tensorflowインストール
$ pip install tensorflow==1.1.0
kerasインストール
$ pip install keras==1.2.2
OpenCVインストール
OpenCVがffmpegをうまく認識せず、2時間ほどハマった
以下サイトを参考に解決
https://teratail.com/questions/58787
OpenCVはこちらで事前に検証
jupyter notebookインストール
$ pip install jupyter notebook
動画の準備
適切な動画がない場合、以下のサイトよりフリー動画をダウンロード
https://videos.pexels.com/
ダウンロード動画はmp4形式のため、以下サイトを使用してmkvに変換
https://convertio.co/ja/
ソースの修正
サンプルソースが一部間違っているため修正
# 修正前 vidw = vid.get(cv2.cv.CV_CAP_PROP_FRAME_WIDTH) vidh = vid.get(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT) # 修正後 vidw = vid.get(cv2.CAP_PROP_FRAME_WIDTH) vidh = vid.get(cv2.CAP_PROP_FRAME_HEIGHT)
実行
$ cd testing_utils $ python videotest_example.py
結果
できた