まるっとワーク

統計・機械学習・電子工作など気になることを残していきます

Rasberry PiとSORACOMサービスとで異常検知システムを作成 1/2 (システム概要とセットアップ編)

f:id:toku_dango:20210515193032p:plain
会社での作業員異常通報に関する改善が図れそうだったので、試作をしてみました。
ここでは、Rasberry PiとSORACOMサービスとを組み合わせた作業員の異常状態検知 監視システムについてご紹介します。


目次


背景

私が所属している会社では、作業員が危険な状態に陥った場合を検知/通報する「作業員異常通報装置」が運用されています。
危険な状態とは、体調不良や事故で他の人に助けを求める必要がある状態のことです。
単独作業の場合は、この装置を身に付けるルールとなっていますが、「きちんと使われない」「誤作動が多い」など運用に難ありな状況です。

作業員異常通報装置の運用

該当の装置についてちょっとだけ紹介します。※装置画像はあえて載せません
この装置は、ズボンのベルトに装着し、手動のスイッチと人の転倒を検知するセンサのいずれかが作動することで所定の場所に無線連絡する装置です。
単独作業時に装着するルールになっていますが、急に一人になる場合/装着し忘れる場合があります。また、装置の装着位置や作業内容によって、「転倒を検知するセンサが誤報する」という問題があり、誤報時には管理者が現場確認に行く手間が発生します。このような状況では、誤報を恐れて積極的に装着したくないという気持ちも出てくるのではと思っています。

上記問題点を踏まえて、「装置を装着する等の作業員の追加作業が必要ない」「異常を正しく検知」方法を検討しました。また、誤報に対する追加の対策として、管理者が遠隔で即座に状況確認できる方法も検討しました。

実施したいこと

作業者の異常を検知して、管理者に通知するシステムの作成が目標となるため、以下機能の実現を目指しました。

機能①:作業者(人)を認識して、異常を検知する
機能②:異常を検知したら、その旨をスマートスピーカーで管理者に通知する
機能③:異常を検知したら、状況の画像と位置情報をLINEで管理者に通知する
機能④:異常を検知したら、状況の画像と位置情報をSORACOM Lagoonダッシュボードで表示
おまけ機能:新型コロナ対策 密集検知機能(規定人数以上の人が会議室内にいる場合にその旨を管理者に通知する)

人の認識機能を有した市販の監視カメラは最近出てきましたが、まだまだ高価ですね。また、その中でも異常を検知する機能を有したものもそこまで多くないと思います。

今回SORACOMサービスを使用した理由としては、Wi-Fiが届かない様々な場所にも設置することを想定しているからです。
SORACOMではRaspberry Pi等に接続し、セルラー通信が可能となるUSBドングルがあるので、今回はそれを使用しています。

下記に本システムの概要図を示します。

f:id:toku_dango:20210508152246p:plain
システム概要図


使ったもの

  • Rasberry Pi 4 Model B+

www.amazon.co.jp

 公式のカメラモジュールなります。USBカメラでも代用がきくと思います。
www.amazon.co.jp

 SORACOMのSIMを入れて使うUSBモデムです。
 USBに接続状態を示すインジケーター付いているので、
 状態が分かりやすいのが利点です。

 音声で通知するために、今回はスマートスピーカーを使用します。
 Amazon Echoを喋らせる方法は色々とあるので、使い勝手が良いです。
 Amazon Echoを喋らせる方法は、以下にまとめています。
dango-study.hatenablog.jp

機能実装に向けて

機能①~④およびおまけ機能は、以下機能を組み合わせて実現します。
実装までの説明が少し長くなりそうなので、ここではセットアップまでを記載します。

  1. システム概要とセットアップ (本ページ)
  2. 機能の実装 (次ページ)


f:id:toku_dango:20210516162100p:plain

環境の構築

1. ハードウェアの構成について

Rasberry Piと周辺機器は以下の通り接続します。
f:id:toku_dango:20210516195405p:plain

本記事で記載の対象となるRasberryPiは、OS(Rasbian)が既にインストールされていることを前提としています。
※開発環境は以下の通り

$python3 -V
Python 3.7.3


2. Camera Moduleを使うための設定

RaspberryPiでカメラを動かす必要があるので、その設定を実施します。
Camera Moduleのセットアップ方法は、多く掲載されているので、ここでは割愛します。
詳細は以下リンクを参照してください。
thepihut.com

動作確認用に、画像をキャプチャするコードを紹介します。
コードを実行して、カメラ映像が写った5秒後の映像をキャプチャして表示するコードとなっています。

from picamera import PiCamera
import os
from time import sleep

camera = PiCamera()
camera.resolution = (300, 200)
camera.framerate = 15
camera.start_preview(alpha=100)
sleep(5)

camera.capture("image1.jpg")
camera.stop_preview()
os.system("xdg-open image1.jpg")


3. SORACOMを使うための設定

SORACOMを使い始めるまでのフロー、SORACOMのUSBモデムをRasberry Piで使用する方法については、公式サイトで説明されているので、そのリンクを紹介します。
SORACOM の利用を始める | ガイド | SORACOM Users
Getting Started: Raspberry Pi と USB モデム | 各種デバイスで SORACOM Air を使用する | SORACOM Users

4. 必要なモジュールのセットアップ

人物検知と異常検知には、ディープラーニングを使った画像認識ライブラリであるTensorFlowとOpenCVを使います。
自身でパッケージをインストールすることも可能ですが、より簡単にインストールができるスクリプトをからあげさんが公開して下さっている(以下URL)ので、それを活用させていただきます。
以下のように、コマンドでスクリプトを「setup-ai.sh」をダウンロードして実行しましょう。
karaage.hatenadiary.jp


$ git clone https://github.com/karaage0703/raspberry-pi-setup #スクリプトファイルのダウンロード
$ cd raspberry-pi-setup && ./setup-ai.sh #スクリプトファイルのパスへ移動/スクリプト実行


5. 物体検知ツールのセットアップ

上記までで開発環境は整いました。
ここからはコードを書いていくことになるのですが、まずは物体検知ができるようするために、同じくからあげさんが公開して下さっている「Object Detection Tools」を活用させていただきます。
人物含めた物体の検知を手軽に実施するには、Googleさんが提供している「Object Detection API」を使う例もあるのですが、
Rasberry Pi で使用するにはデータ容量や実装までのハードルが高かったため、活用させていただきます。
物体検出に必要な学習モデルも学習済みのモデルを用いています。

以下のように、コマンドでスクリプトを「get_ssdlite_mobilenet_v2_coco_model.sh 」をダウンロードして実行しましょう。

$ cd && git clone https://github.com/karaage0703/object_detection_tools #スクリプトファイルのダウンロード
$ cd ~/object_detection_tools/models #スクリプトファイルのパスへ移動
$ ./get_ssdlite_mobilenet_v2_coco_model.sh #スクリプト実行


試しに物体検知を実施する場合は、以下の通りコードを実行ください。
カメラの映像とともに物体検知(認識したものを四角で囲み左下に名前を記載)されていれば成功です。

$ cd ~/object_detection_tools #pythonファイルパス ディレクトリへ移動
$ python3 scripts/object_detection.py -l='models/coco-labels-paper.txt' -m='models/ssdlite_mobilenet_v2_coco_2018_05_09/frozen_inference_graph.pb' -d='raspi_cam' #コード実行


実行結果
f:id:toku_dango:20210516121933p:plain
物体の半分しか映っていなくてもある程度の精度で認識してくれるようです。
簡単にこんなことが試せるのは素晴らしいですね、からあげさんに感謝です。

まとめ

本記事では、システム概要とセットアップについて説明をしました。
物体検知だけでもかなり遊べると思いますが、次ページはこの機能を使って目的の機能を組み込んでいきます。

次の記事

  1. システム概要とセットアップ
  2. 機能の実装 (次ページ)