こんばんはエンジニアの眠れない夜です。
Kerasを使って物体検出をしてみたいという方に朗報です。
keras−yolo3と言うプロジェクトがありこちらを使うと簡単に物体検出ができます。
実はこのプロジェクトは1年ほど前からあるのですが最近気づきました(;´∀`)
すごく簡単に物体検出ができるのでこちらのブログでも紹介していきます。
keras−yolo3 の使い方
まずはこちらのコマンドでプロジェクトをクローンします。
git clone https://github.com/qqwweee/keras-yolo3.git
プロジェクトディレクトリに移動します。
cd keras-yolo3
環境
ドキュメントではPython 3.5.2で動作確認を行っているようなのでPythonのバージョンを3.5.2 にすることをおすすめします。
他のバージョンでも動くかもしれませんが、バージョンを揃えたほうが安全です。
pyenv を使っている場合は下記のコマンドでPythonバージョン3.5.2をインストールして、keras-yolo3のディレクトリだけ今インストールしたPythonバージョン3.5.2を利用する設定ができます。
pyenv install 3.5.2
pyenv local 3.5.2
必要なモジュール
最小構成で必要なモジュールを requirements.txt に書き出したのでこちらをダウンロード(保存)してインストールしてください。
pip install -r requirements.txt
続いて学習済みのモデルをダウンロードします。
wget https://pjreddie.com/media/files/yolov3.weights
これをKerasで使えるように変換します。
python convert.py yolov3.cfg yolov3.weights model_data/yolo.h5
これで準備は完了です!
YOLOを使って物体検出をしてみましょう!
keras−yolo3 を使って物体検出をしてみよう!
準備ができたのでkeras-yoloを使って物体検出をしてみます。
まずはkeras-yolo3フォルダ直下に物体検出したい画像と動画ファイルを保存します。
画像の物体検出
下記のコードを実行すると”Input image filename:”と表示されるのでファイル名を入力します。(拡張子まで正確に)
python yolo_video.py --image
するとこんな感じで画像に検出されたもののラベルとその確率が表示されます。
動画の物体検出
動画を使った物体検出をしたい場合は下記のコードを実行します
python yolo_video.py --input ファイル名.mp4
CPUで実行したので1秒1コマ程度のスピードですが無事にYOLOを使った物体検出が画像・動画でできました!
物体検出がこんなに簡単にできるようになるなんて思いもしませんでした。
いい時代になりましたね(^^)v
始めから用意されているモデルで検出できるものがあなたのニーズに合うかは分かりませんが物体検出ができるようになったということが何より嬉しいことですよね!
人によって検出したい対象が異なると思うので次回は独自の物体検出モデルの作成方法をご紹介します。
ディープラーニングを使うのはオーバースペックという方はこちらの白背景から対象物を切り取る方法もぜひご覧ください。
OpenCVとその他、Pythonの定番のライブラリだけで簡単にできるので開発工数ほぼ0です。
というかコピペで終わります。ぜひこちらもお試しください。
[…] 【物体検出】keras−yoloの使い方 […]
[…] 【物体検出】keras−yolo3の使い方 […]
[…] 【物体検出】keras−yolo3の使い方 […]
Input image filename:kakuninn2.jpg
Traceback (most recent call last):
File “yolo_video.py”, line 73, in
detect_img(YOLO(**vars(FLAGS)))
File “yolo_video.py”, line 8, in detect_img
img = input(‘Input image filename:’)
File “”, line 1, in
NameError: name ‘kakuninn2’ is not defined
というエラーが出てきます.助けてください!!kakuninn2.jpgはkeras-yolo3直下においています.
yuuuuuuさん
ご質問ありがとうございます。
yolo_video.py で kakuninn2.jpg (JPGファイル)を入れているのがエラーの原因ではないでしょうか?
入力を動画ファイルにしてみるといかがでしょうか?