AI×IoTで人検知機能付き監視カメラを作ってみた
はじめに
こんにちは。呉屋です。
今回は、最近受講した「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 4B
・Micro SD カード
・Raspberry Pi Camera Module V2.1
・Raspberry Piに接続するHDMIケーブル
・Raspberry Piに接続するHDMIが使えるディスプレイ
・Raspberry Piに接続するUSB(Type-A)キーボード
事前準備 ~ラズパイの設定~
初期設定を行います。
ネットでググると多く紹介されているため、ここでは大まかに記載します。
- ラズパイOSのインストール
- ネットワークの設定
- カメラデバイスの設定
以上の設定で、Wi-Fi経由でラズパイに接続が可能になります。

次に、AI開発に必要なライブラリをインストールします。
- Pytorchのインストール
Pythonのオープンソース機械学習ライブラリを使用します。
ここで注意点があります。
Pytorchのビルド(コンパイル)は、かなりの時間を要します。
コマンドを実行して待つだけなのですが、丸一日かかりました。。。
- torchvisionのインストール
PyTorchのパッケージで画像データを扱いやすくするためのライブラリです。
ここでもビルドを行うのですが、半日ほどかかりましたので注意してください。
準備完了したラズパイは、こちらです!
「カメラってこんな感じ?」って、驚きました!(笑)

本番 ~ストリーミング配信~
ここからが本番です!
カメラで撮影している動画をストリーミング配信し、Webモニタリングを行います。
セミナー側よりプログラムソースが用意されていますので、ラズパイへダウンロード・実行します。
※実行コマンドは、一部のみ記載させていただきます。
$ git clone https://github.com/XXXXX # Gitでプログラムソースダウンロード
$ python3 camera.py & # カメラアプリ起動
$ python3 api.py # API サーバー起動
Webでモニタリング確認します。

用意されたものを利用しただけなのですが、簡単に構築できたのは驚きです!
本番 ~学習データの取得と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モデルが悪いためデータを取得しなおす必要があります。
・人が映っている場合

・人が映っていない場合

まとめ
本セミナーはLinuxの基本操作ができれば、ラズパイ開発未経験者でも完成することができました。
ラズパイに興味はあったのですが、なかなか触る機会がなかったのでとても勉強になりました。
今回のAI技術は「畳み込みニューラルネットワーク」の「CAM(Class Activation Mapping)」手法を用いました。
「人が映っている・いない」の特徴量をフィルター(層)で少しずつ抽出していき、判断するとのことです。
調べてみると、数式が色々出てきて難しかったです。。。(笑)
人を枠で囲ったり、ヒートマップで表現したりと工夫するには、機械学習の知識やプログラミング技術が必要です。
現在、クラウドサービスで気軽にAIを使用することができますが、IoTや企業等から収集されたビックデータを解析する際に技術手法まで知っておくと、様々なニーズに対応できると思います!
さいごに
セミナー主催者のMorning Project Samurai 株式会社様、ブログ掲載をご快諾いただきありがとうございます。
次回のテーマは「物体検出と音声生成の組み合わせ」を予定しているとのことです。
興味のある方はぜひ、参加してみてはいかがでしょうか(^o^)/