「アナログメーター読み取りAI」を開発しました
投稿日 : 2024.10.10
はじめに
こんにちは。
「翔べ、SQLインジェクション」でお馴染のAI 戦士、オウサです。
本日も、水の星からAIをこめてお送りいたします。
今回は 「どんなアナログメーターでも解析するAI」 という、ガンダムの記憶回路に取り付けたくなるような一品を研究開発します。
"アナログのメーターを解析するAI"とは
つまり、「アナログメーターの値をデジタル化する人工知能」 です。
これをシステムに組み込むことで、今まで人がやっていた"メーターを読む"という作業を、人工知能が自動でやってくれるようになります。
すごいですよね。親父が熱中するわけだ。
工場や研究施設にあるようなアナログメーターは、様々な情報を数字にして「人が読める」ようにしてくれます。
この時、人はメーターの”針”が指す場所を見て「これは78」とか「これは2」とか"判断"します。
そしてそれが「正常」とか「異常」と"判断"したり、値をノートに"記録"したりします。
数値を判断しているのはメーターではなく人なんですね。
さらに、記録をとるのも人です。
「メーターがある場所」によっては、人は苦労してそれを読みにいかなければいけません。大変です。
宇宙世紀に生きるオウサは、このくびきから人類を開放したい。
24時間365日、放っておいてもメーターの数値を読み取って記録を取るAI。
私、ショウ・アズナブルが開発しようというのだ!
「メーター解析の手順」を設計
開発を5段階に分けます。
- Step01 画像収集&アノテーション(下準備)
- Step02 "画像内のメーターの有無"と、その"位置座標"を割り出すAIの作成
- Step03 "メーターの中の軸の有無"と、その"位置座標"を割り出すAIの作成
- Step04 "メーターの針がどの角度を指しているか"判断する解析処理を作成
- Step05 "リアルタイムでメーターの角度を表示するアプリ"を作成
Step01からStep03では、”物体検知” というAI技術を利用します。
Step04では、画像処理ライブラリの「 OpenCV 」を使って"針の角度"を算出する画像解析処理を作成します。
Step05では、Pythonの簡易サーバー「 Flask 」を利用してシステムをサーバー化します。
段取りは出来ました。
オウサ、行きまーーす。
「物体検知モデル(AI)」の作成
AIに「これがアナログメーターだよ」と教えてあげるために「アナログメーターの画像」をたくさん用意します。
今回はMicrosoftの「 BingImageSearchAPI 」を利用して大量の「アナログメーターの画像」を集めました。
しかし、集めた画像の全てが使い物になるわけではありません。
使えそうな画像だけを選び、「 VoTT 」を使ってアノテーションします。
"アノテーション"とは、データに注釈を付けることで"関連付け"を行う作業です。
大切な工程ですが、正直かなりしんどいです。1枚ずつ手作業で行うので本当に大変。
アノテーションする画像の枚数を増やすほど、AIの精度は上がります。
とは言え、キリがありません。まるで終わりのないディフェンスのようです。
なので、200枚程度でやめておきます。腱鞘炎になりそうです。
軟弱者ではありません。偉い人にはそれがわからんのです。
オウサが6時間かけてアノテーションした200枚の画像をAIに学習させます。
モデルの構築には今回も「 YOLO 」を利用しました。
"モデル"とは、AIが「これはギレンザビではなく、アナログメーターだ」と判断するための"根拠"のようなものです。
モデルは数式で表現されます。
"YOLO"は、入力された画像から物体の位置と種類を検出するモデルです。
ハロと名前が似ているので愛用しています。
では見せてもらおうか、オウサが作ったモデルの精度とやらを。
リアルタイムで"メーター"と、その"軸"を検知していますね。
ぼくが一番うまく、YOLOv3を使えるんだ。
「メーター解析処理」の実装
AIがメーターを認識できるようになりました。
次は、AIが「メーターの"針"はどの角度を指しているか」わかるようにします。
取得した軸座標の周りの色の特徴からピーク値を計測し、その値が一定の角度に存在するものを取得して、針の角度を算出します。
チョー簡単ですネ。え、わかりにくい?
ですよね。すいません。
このようなイメージです。
まず、軸の周りの小さい範囲を画像として切り抜きます。
画像の中は"背景"と"針"と"軸"だけになるわけです。
そこから"背景"と"針"の色を検出して、それらのコントラストを数値化します。
この数値こそ、デジタルで表現された針なのです。
瞬時に何回も検出を行い、"メーターの軸"と連続した"色の数値(針)"から角度を算出します。
この手法はかなり試行錯誤しました。今回の頑張りどころです。
市販の安価なネットワークカメラで十分な性能を発揮します。
カメラの性能の違いが、サービスの決定的な差ではない、ということですね。
システムのサーバー化
最後の仕上げに、システムをアプリケーションにします。
今回はAWSのEC2にシステムを構築します。
クラウド環境が、このサービスを皆様に届けてくれるわけですね。AWSは、いいものだ。
システムは「 Flask 」を利用してサーバー化しました。
FlaskはPythonで書く軽量なWebアプリケーションフレームワークです。
ラスクと名前が似ているので愛用しています。
利用している端末からカメラを起動し、メーターに向けるとリアルタイムでこいつ、動くぞ。
「ああ…針が見える…」
これから
ひとまず「アナログメーターの値をデジタル化する人工知能」は完成しました。
ただ、改善の余地はあります。
YOLOに関しては最近"v4"という新型が登場しましたし、是非試してみたい。
今後も様々な手法を用いて、精度の向上、及び汎用化を進めていきたいですね。
まだ、ぼくには直せる所があるんだ。こんなにうれしいことはないです。
※2023年より「PRIME METER EYE」としてサービスご提供を開始しました。
詳細はこちらの記事になります
さて、いかがでしたでしょうか?
詰め込みすぎ?ぼくもまだまだ坊やです!
ロボット最高!
AIを活用したワクワク開発、導入を検討されている方は是非、お気軽にお問い合わせまで!
次回、「サイコガンとサイコガンダムは似ているけど全く関係がない。」
君は、生き延びることができるか。