「アナログメーター解析AI」を創りました!

  • HOME
  • 「アナログメーター解析AI」を創りました!

はじめに

こんにちは。
「翔べ、SQLインジェクション」でお馴染のAI 戦士、大坂です。
本日も、水の星からAIをこめてお送りいたします。
今回は 「どんなアナログメーターでも解析するAI」 という、ガンダムの記憶回路に取り付けたくなるような一品を研究開発します。

“アナログのメーターを解析するAI”とは

つまり、「アナログメーターの値をデジタル化する人工知能」 です。
これをシステムに組み込むことで、今まで人がやっていた”メーターを読む”という作業を、人工知能が自動でやってくれるようになります。
すごいですよね。親父が熱中するわけだ。

工場や研究施設にあるようなアナログメーターは、様々な情報を数字にして「人が読める」ようにしてくれます。
この時、人はメーターの”針”が指す場所を見て「これは78」とか「これは2」とか”判断”します。
そしてそれが「正常」とか「異常」と”判断”したり、値をノートに”記録”したりします。

数値を判断しているのはメーターではなく人なんですね。
さらに、記録をとるのも人です。
「メーターがある場所」によっては、人は苦労してそれを読みにいかなければいけません。大変です。

宇宙世紀に生きる大坂は、このくびきから人類を開放したい。

24時間365日、放っておいてもメーターの数値を読み取って記録を取るAI。

私、ショウ・アズナブルが開発しようというのだ!

「メーター解析の手順」を設計

開発を5段階に分けます。
  1. Step01画像収集&アノテーション(下準備)
  2. Step02“画像内のメーターの有無”と、その”位置座標”を割り出すAIの作成
  3. Step03“メーターの中の軸の有無”と、その”位置座標”を割り出すAIの作成
  4. Step04“メーターの針がどの角度を指しているか”判断する解析処理を作成
  5. Step05“リアルタイムでメーターの角度を表示するアプリ”を作成

Step01からStep03では、”物体検知” というAI技術を利用します。

Step04では、画像処理ライブラリの「 OpenCV 」を使って”針の角度”を算出する画像解析処理を作成します。

Step05では、Pythonの簡易サーバー「 Flask 」を利用してシステムをサーバー化します。

開発フロー
▲開発フロー

段取りは出来ました。
オオサカ、行きまーーす。

「物体検知モデル(AI)」の作成

AIに「これがアナログメーターだよ」と教えてあげるために「アナログメーターの画像」をたくさん用意します。
今回はMicrosoftの「 BingImageSearchAPI 」を利用して大量の「アナログメーターの画像」を集めました。

しかし、集めた画像の全てが使い物になるわけではありません。
使えそうな画像だけを選び、「 VoTT 」を使ってアノテーションします。

“アノテーション”とは、データに注釈を付けることで”関連付け”を行う作業です。
大切な工程ですが、正直かなりしんどいです。1枚ずつ手作業で行うので本当に大変。

画像収集とVoTTアノテーション
▲画像収集とVoTTアノテーション

アノテーションする画像の枚数を増やすほど、AIの精度は上がります。
とは言え、キリがありません。まるで終わりのないディフェンスのようです。
なので、200枚程度でやめておきます。腱鞘炎になりそうです。
軟弱者ではありません。偉い人にはそれがわからんのです。

大坂が6時間かけてアノテーションした200枚の画像をAIに学習させます。
モデルの構築には今回も「 YOLO 」を利用しました。

“モデル”とは、AIが「これはギレンザビではなく、アナログメーターだ」と判断するための”根拠”のようなものです。
モデルは数式で表現されます。

“YOLO”は、入力された画像から物体の位置と種類を検出するモデルです。
ハロと名前が似ているので愛用しています。

では見せてもらおうか、大坂が作ったモデルの精度とやらを。

▲物体検知モデルをチェック

リアルタイムで”メーター”と、その”軸”を検知していますね。
ぼくが一番うまく、YOLOv3を使えるんだ。

「メーター解析処理」の実装

AIがメーターを認識できるようになりました。
次は、AIが「メーターの”針”はどの角度を指しているか」わかるようにします。

取得した軸座標の周りの色の特徴からピーク値を計測し、その値が一定の角度に存在するものを取得して、針の角度を算出します。

チョー簡単ですネ。え、わかりにくい?
ですよね。すいません。

針の角度検出原理
▲針の角度検出原理

このようなイメージです。

まず、軸の周りの小さい範囲を画像として切り抜きます。
画像の中は”背景”と”針”と”軸”だけになるわけです。
そこから”背景”と”針”の色を検出して、それらのコントラストを数値化します。
この数値こそ、デジタルで表現された針なのです。
瞬時に何回も検出を行い、”メーターの軸”と連続した”色の数値(針)”から角度を算出します。

この手法はかなり試行錯誤しました。今回の頑張りどころです。
市販の安価なネットワークカメラで十分な性能を発揮します。
カメラの性能の違いが、サービスの決定的な差ではない、ということですね。

システムのサーバー化

最後の仕上げに、システムをアプリケーションにします。

今回はAWSのEC2にシステムを構築します。
クラウド環境が、このサービスを皆様に届けてくれるわけですね。AWSは、いいものだ。

システムは「 Flask 」を利用してサーバー化しました。
FlaskはPythonで書く軽量なWebアプリケーションフレームワークです。
ラスクと名前が似ているので愛用しています。

利用している端末からカメラを起動し、メーターに向けるとリアルタイムでこいつ、動くぞ。

アプリ画面
▲アプリ画面

「ああ…針が見える…」

これから

ひとまず「アナログメーターの値をデジタル化する人工知能」は完成しました。

ただ、改善の余地はあります。
YOLOに関しては最近”v4″という新型が登場しましたし、是非試してみたい。
今後も様々な手法を用いて、精度の向上、及び汎用化を進めていきたいですね。
まだ、ぼくには直せる所があるんだ。こんなにうれしいことはないです。

さて、いかがでしたでしょうか?
詰め込みすぎ?ぼくもまだまだ坊やです!
ロボット最高!

AIを活用したワクワク開発、導入を検討されている方は是非、こちらまで!

次回、「サイコガンとサイコガンダムは似ているけど全く関係がない。」 君は、生き延びることができるか。

もっと詳しく知りたい方は
お気軽にお電話ください
03-5823-0088
大坂 2019年 入社
大坂

大阪からきた大坂です。