【Python, darkflow】Webカメラの画像から人や猫を検出して切り抜いてみる

Darkflowというオープンソースの物体検出のライブラリを使って
Webカメラを使って人や猫を検出してその部分を切り抜くプログラムを紹介します。

人だけでも良かったのですが、私が猫が好きなので検出してみます。

ちなみにバックエンドはTensorFlowを使います。

バージョン等

  • Python 3.6.0
  • TensorFlow 1.7.0

2019年1月11日現在TensorFlowがバージョン2.0だとdarkflowは動かないので注意してください。

Darkflowとは(簡単に)

私も画像処理は専門ではないので、簡単に説明しますが、
Darkflowは物体検出物体認識をリアルタイムで行うことができるオープンソースのプログラムです。
以下のgithubのREADMEを見ると何ができるのかわかると思います。

thtrieu/darkflow
Translate darknet to tensorflow. Load trained weights, retrain/fine-tune using tensorflow, export constant graph def to mobile devices - thtrieu/darkflow

準備

TensorFlow 1系のインストール

先程もお話したようにTensorFlowは1系をインストールする必要があります。pipでバージョン指定してインストールします。

darkflowのインストール

darkflowをインストールします。
まずgithubからdarkflowをcloneし、そのディレクトリに移動します。

そして以下のコマンドでインストールします。

もし上記のコマンドでインストールできなかった時には次の2つの方法も試してください。

or

ディレクトリの作成と必要なデータの取得

ディレクトリ構成

まず、今回作るプログラムのディレクトリを作成しておきます。
ディレクトリ名をとりあえずfind_person_and_cat(適当に決めてください)にしておきます。

先に最終的なディレクトリ(find_person_and_cat)構成を示しておきます。

上記のような構成になるようにもろもろ設定していきます。

設定ファイルの取得

設定ファイルや学習済みモデルのデータを保存しておく用のディレクトリを用意しておきます。

先程cloneしたdarkflowからdarkflow/cfg/yolo.cfgを今作成したcfgディレクトリに格納しておきます。(コピーなんかをしてください)

次にクラス名(分類する対象の名前)の一覧が書いてあるデータもダウンロードします。

ルートディレクトリに戻っておきます。

学習済みモデルの重みデータの取得

find_person_and_cat下にweightsというディレクトリを作っておきます。

そしてwgetコマンドで重みデータをダウンロードします。

ルートディレクトリに戻っておきます。

実装:人と猫を検出・認識して切り抜いてみる

では、Webカメラから画像データを取得して人と猫を見つけてその部分を切り抜いてみます。

先程のdarkflowの力を借りれば簡単にできます。

サンプルコード(main.py)を以下に示します。

ソースコードの詳しい説明はまた後日追記する予定です。
とりあえず指定したディレクトリ構成にし上記のコードを実行すると
Webカメラでひたすら撮影しながら、人か猫がいればその部分を切り抜いていきます。
(ひたすら画像を上書きしていきます。)

参考文献

【苦しみながら理解する深層学習】 YOLO9000: Better, Faster, Stronger
俗に言うYOLO9000とYOLO v2はイコールかと思っていまいしたが、そうではなかったですw どんなもの?…
https://arxiv.org/pdf/1612.08242.pdf
YOLO: Real-Time Object Detection
You only look once (YOLO) is a state-of-the-art, real-time object detection system.
タイトルとURLをコピーしました