AI×IoTで人検知機能付き監視カメラを作ってみた

2021年4月12日

はじめに

こんにちは。呉屋です。
今回は、最近受講した「AI×IoT」技術セミナーについて紹介します。
本掲載につきましては、セミナー主催者「Morning Project Samurai 株式会社」様より、ご快諾いただいております。

タイトルは「Raspberry Pi で⼈検知機能付き監視カメラをつくってみよう!!AI×IoTの技術の入り口を実践・体験!」です。
AIとIoT技術検証中の私にピッタリで面白そうな内容と思い、すぐに申し込みました!

セミナーの詳細は、下記となります。
https://techplay.jp/event/812039

「TECH PLAY」という技術者向けコミュニティーサイトで紹介されていました。
興味のある分野を登録しておくと、通知がくるので情報収集の際におすすめです!

事前準備 ~機材の準備~

使用するIoTは「Raspberry Pi(ラズベリーパイ、ラズパイ)」というものです。
コンピュータに必要最低限の基幹部品を1枚の回路基盤に搭載したシングルボードコンピュータです。
2012年に発売され「手のひらサイズ」「安い」等から進化し続ける人気のIoTで、ディスプレイ・キーボード・マウスがあれば、WindowsやMacのようにパソコンとして使用できます。

Raspberry Pi

ラズパイを含めた必要な機材は、下記となります。
ラズパイとカメラのみ購入したため、一万円程度で用意できました!

・Raspberry Pi 4B
・Micro SD カード
・Raspberry Pi Camera Module V2.1
・Raspberry Piに接続するHDMIケーブル
・Raspberry Piに接続するHDMIが使えるディスプレイ
・Raspberry Piに接続するUSB(Type-A)キーボード

事前準備 ~ラズパイの設定~

初期設定を行います。
ネットでググると多く紹介されているため、ここでは大まかに記載します。

  • ラズパイOSのインストール
  • ネットワークの設定
  • カメラデバイスの設定

以上の設定で、Wi-Fi経由でラズパイに接続が可能になります。

Raspberry Pi

次に、AI開発に必要なライブラリをインストールします。

  • Pytorchのインストール

 Pythonのオープンソース機械学習ライブラリを使用します。
 ここで注意点があります。
 Pytorchのビルド(コンパイル)は、かなりの時間を要します。
 コマンドを実行して待つだけなのですが、丸一日かかりました。。。

  • torchvisionのインストール

 PyTorchのパッケージで画像データを扱いやすくするためのライブラリです。
 ここでもビルドを行うのですが、半日ほどかかりましたので注意してください。

準備完了したラズパイは、こちらです!
「カメラってこんな感じ?」って、驚きました!(笑)

Raspberry Pi

本番 ~ストリーミング配信~

ここからが本番です!
カメラで撮影している動画をストリーミング配信し、Webモニタリングを行います。
セミナー側よりプログラムソースが用意されていますので、ラズパイへダウンロード・実行します。
※実行コマンドは、一部のみ記載させていただきます。

$ git clone https://github.com/XXXXX # Gitでプログラムソースダウンロード
$ python3 camera.py & # カメラアプリ起動
$ python3 api.py # API サーバー起動

Webでモニタリング確認します。

Raspberry Pi

用意されたものを利用しただけなのですが、簡単に構築できたのは驚きです!

本番 ~学習データの取得とAIの訓練~

AIで人を認識するためには、学習データが必要です。
「⼈が映っている状態」と「⼈が映っていない状態」のデータを取得します。
このデータがAI構築の肝ということなので、慎重に行います。
指定されたURLから録画開始・停止・削除ができるようになっています。

カメラに⾃分が映る場所に移動し、録画をスタートします。
様々な動きをしたり、カメラの位置を変えたりしてデータを取得します。

そして、これでいいと思ったところで録画を止めます。

これで「⼈が映っている状態」のデータ取得は完了しました。
同様に「⼈が映っていない状態」のデータも取得し、準備完了です。

次に、取得した学習データをもとにAIの訓練を行います。
ラズパイだと時間がかかることから、ノートPCに実行環境(Visual Studio Code)を用意しました。

先ほど取得した学習データをPCにコピーし、実行します。

$ python cam.py train

すると、「model.pth」という学習モデルファイルが作成されます。

本番 ~人検知の検証~

いよいよラストです。
訓練したAIモデルが正しく動作するか検証していきます。

学習モデルファイルをラズパイにコピーし、AIアプリを起動します。

$ python3 cam.py eval --pth=../models/model.pth --ipt=/tmp/camera_out.jpg --opt=/tmp/cam_out.jpg

Webでアクセスし、人が映っている箇所が明るくなれば無事完了です!
人が認識されない場合は、AIモデルが悪いためデータを取得しなおす必要があります。

・人が映っている場合

Raspberry Pi

・人が映っていない場合

Raspberry Pi

まとめ

本セミナーはLinuxの基本操作ができれば、ラズパイ開発未経験者でも完成することができました。
ラズパイに興味はあったのですが、なかなか触る機会がなかったのでとても勉強になりました。

今回のAI技術は「畳み込みニューラルネットワーク」の「CAM(Class Activation Mapping)」手法を用いました。
「人が映っている・いない」の特徴量をフィルター(層)で少しずつ抽出していき、判断するとのことです。
調べてみると、数式が色々出てきて難しかったです。。。(笑)
人を枠で囲ったり、ヒートマップで表現したりと工夫するには、機械学習の知識やプログラミング技術が必要です。

現在、クラウドサービスで気軽にAIを使用することができますが、IoTや企業等から収集されたビックデータを解析する際に技術手法まで知っておくと、様々なニーズに対応できると思います!

さいごに

セミナー主催者のMorning Project Samurai 株式会社様、ブログ掲載をご快諾いただきありがとうございます。
次回のテーマは「物体検出と音声生成の組み合わせ」を予定しているとのことです。
興味のある方はぜひ、参加してみてはいかがでしょうか(^o^)/