ネットワークカメラを用いた顔認識及び人物特定システムの構築 [防犯カメラの自作]
1. はじめに
放送大学のオンライン授業である「情報ネットワーク」のレポートで「情報ネットワークの発展学習及び活用」として作成したものを一般公開しています。
2. 前提条件
AIの知識(Python + TensorFlow) |
Webサーバ、データベースの知識 |
サーバサイドスクリプト(PHP or Ruby or Pythonなど) |
クライアントサイドスクリプト(JavaScript + Ajax) |
Linuxの操作・管理 |
Raspberry Piを使用する際には電子工作の知識が必須。 |
3. 応用例
今回のシステムはいわゆる「ロボットの目」としても機能するので、距離センサーなどを組み合わせればロボットアームで物体を掴むことも可能です。
その他に全自動のロボットカー、ドローンなどにも利用可能です。
4. 内容
授業で登場した「AI」「IoT」「ビックデータ」などを利用してシステムを構築する。このシステムは自動監視カメラで指名手配犯や任意の人物を特定するシステムである。
インターネットから自動収集したビッグデータを用いて「画像から顔領域を検出する1つ目のAIモデル」を作成する。次に「顔を判別する2つ目のAIモデル」を作成する。
この2つのAIを用いてネットワークカメラに写っている人物の特定を行う。
※実際に試したところ、1つのAIより2つのAIに分割して組み合わせると精度が高くなります。
4.1 開発環境
・ディープラーニングライブラリにはTensorFlowを使用する。 |
・AIモデルの学習及び作成にはクラウドのPaaS形態であるGoogle Cloud Platformを使用する。 |
※Google Cloud Platformではなく、自前のGPUでもOK。
4.2 1つ目のAIモデル
年齢/性別/人種別など様々な顔画像をインターネットから3,000-10,000枚ぐらい自動収集する。そして、全ての顔画像に対して顔領域のラベリングを行う。ラベリング作業は可能な限りOpenCVなどを用いて自動化する。
次に、TensorFlowの一般物体検出アルゴリズム(SSD - Single Shot multibox Detector)の学習済みモデルを用いてObject Detection APIで「画像から顔領域を検出」するAIモデルを転移学習で作成する。
※この顔領域の検出は精度が非常に高いです。97%以上は検出。
4.3 2つ目のAIモデル
ネットワークカメラで特定したい人物の顔画像を最低でも200枚以上収集する。多いほど、精度があがる。そして、TensorFlowで畳み込みニューラルネットワーク(CNN)を用いて「顔を判別」するAIモデルを作成する。
4.4 カメラ
ネットワークカメラまたはWebカメラを用いてパソコンと連携する。もしくは、Raspberry PiなどにWebカメラまたは単にカメラを搭載する。
※Raspberry Piを使用する場合は人感センサーなどを組み合わせる事が可能である。
4.5 サーバー関連
Apache HTTP Serverを用いてWebサーバーを運用する。そして、サーバーサイド・スクリプト及びHTML/JavaScript+AjaxでWebサイトを構築する。
そのWebサイトではネットワークカメラの状況を映し出す。特定の人物がカメラに映りこんだ場合にデータベースに人物写真と日時を記録する。必要であればメール送信やスマートフォンにプッシュ通知を送る。
5. 最後に
基本的に外部設計のみです。詳細はネットで調査して下さい。