監視カメラの動画を物体検知する その2 anaconda+YOLOv3環境の構築

はじめに

前回の記事

監視カメラの動画を物体検知する その1 anaconda+YOLOv4環境の構築
はじめに以前の記事で監視カメラを購入したんですが、動画をいちいち確認することはかなり手間だということが分かり、物体検知で自動化することを目指すことに…監視カメラの動画を自動分析するために、anaconda+YOLOv4で物体検知ができる環境...

で、anaconda+YOLOv4の環境構築を試みましたが、
Visual C++の導入前で一旦中断…

めんど やっぱり確立された環境でやりたいですよね、
環境作るのにハマりたくないですし

こちらの記事を参考にしました
https://tech-diary.net/keras-yolov3/

うん、簡単にできそうな予感!
(モデルをダウンロードする時点で5分では終わらないと思いますが)

もちろんベンチマークとしてはYOLOv4の方が高いんですが、
今回はお遊びみたいなものなので。v3でも十分です

Anacondaで仮想環境を作る

ここまでは前回と同じです
Anaconda Powershell(Anaconda Prompt)を立ち上げ、

conda create --name yolov3
conda activate yolov3

そして、参考記事の通りに

conda install tensorflow==1.14.0 keras==2.2.4 pillow matplotlib

下手にバージョンを変えると危険なので、
情報があるものをそのまま使わせてもらいます

YOLOv3 のリポジトリからクローンする

gitをインストールしていなかったので、
以下URLからダウンロードし、インストールを行います
https://gitforwindows.org/

インストールしたらGit Bushを立ち上げ、
クローンしたい場所にcdで移動して、

git clone https://github.com/qqwweee/keras-yolo3.git

でリポジトリからソースコードをクローンします

学習済モデルをダウンロードする

ここで、こちらから学習済モデルをダウンロードしておきます
https://pjreddie.com/media/files/yolov3.weights

242MBあるのでそこそこ時間がかかりますね

置き場所はどこでもいいとは思いますが、
先ほど作成したkeras-yolo3の配下に置いておきました

モデルの変換

モデルを.h5のファイルに変換します
Keras用のモデルファイルですね

すでにconvert.pyというスクリプトが用意されているので、
それを実行すればいい模様(便利!)

Anaconda Powershellでさっきのkeras-yolov3に移動し、

python convert.py yolov3.cfg yolov3.weights model_data/yolo.h5

を実行します

そうすると、model_dataのフォルダが作成され、
その下にyolo.h5というモデルファイルができています

テスト用画像を取得する

テスト用の画像は、参考URLと同じshibuya.jpegを使わせてもらいます

こちらも、keras-yolov3の配下に置いておきます

実行

再度Anaconda Promptから、

python yolo_video.py --image

を実行します

と、ここで。

エラー発生。

AttributeError: 'str' object has no attribute 'decode'

やっぱりか…すんなりとはいかせてくれないですね

調べてみると、同じと思われる現象がありました
最近発生し始めた、ライブラリのバージョン違いによるもののようですね

参考:
https://qiita.com/Hiroki-Fujimoto/items/b078bfb680fb710c38c1

これだからpythonは…

さて、どうもh5pyというライブラリが悪さをしていそうなので調べてみます

conda list

でh5pyを見ると、案の定3.2.1と最新バージョンがインストールされています

情報の通り、2.10.0にダウングレードしてみましょう

と、危ない、pipでインストールしようとしていました…
そういえばcondaでkerasとtensorflowはインストールしていました
condaとpipは「混ぜるな危険」です

conda install h5py==2.10.0

再実行

さて、気を取り直して、もう一度

python yolo_video.py --image

すると、

Input image filename:

と聞かれます。きた!
ここで、先ほどの画像「shibuya.jpg」と打ち込んでEnter

フォトが立ち上がり、次の画面が出ます

おー検出できている!
人もですし、信号機やバックパックも検出できている

ただこれ、一時的にフォトで検出画像を表示しているだけですね

今回使わせてもらったYOLOv3実装リポジトリのREADMEを読むと
input、output引数を指定すればvideoのinputとoutputができそうです
https://github.com/qqwweee/keras-yolo3

まとめ

anaconda+YOLOv3環境構築が 5分 1時間くらいでできました!
思ったよりハマらなくて良かったです!

次回は実際の監視カメラ動画(AVI)を検出してみたいと思います

(でも実際の動画は貼れないだろうから記事はどうしよう…)

その3に続く

監視カメラの動画を物体検知する その3 動画(.AVI)からyolov3で物体検出する
windowsでanaconda+yolov3の環境構築を作り、動画ファイルから物体検出結果の動画を出力します。結構簡単に作ることができます

きゅうこん

きゅうこん

元メカ設計者、現なんちゃってAIエンジニア。実験データを分析しているうちにプログラミングとAIのスキルを習得(?)職業何ですか?と聞かれたときに何と答えるべきかを考える日々。 Qiita: https://qiita.com/kamome885

タイトルとURLをコピーしました