目次
- はじめに
- 背景
- ユースケース
- 機能概要
- 機能実装
- インフラ環境の開発
- カスタムモデルの作成
- アプリの開発
- 動作確認
- まとめ
- さいごに
はじめに
UPWARDの北明です。R&Dの一環で画像認識機能の開発をしています。今回はAzureの画像認識サービスであるComputer VisionとCustom Visionを利用した機器情報の収集システムの開発をご紹介します。
背景
UPWARDはUPWARD AGENT(以下AGENT)というモバイルCRMアプリをご提供しています。新規機能として、顧客の属性情報を取得する画像認識機能の開発を進めています。画像認識機能が具備されれば、例えば機器の種類や型番情報の手入力の手間から解放され、容易にデータ保存できるようになります。今回は、給湯器を一つの例にAzureサービスを組み込んだ画像認識アプリの試作品を作成しました。
ユースケース
AGENTでは取引先を管理したり、顧客の訪問後に活動報告を作成することが出来ます。ユースケースとして次を想定しています。訪問時にアプリを起動して給湯器の写真を撮影し、画像認識で読み取った情報を取引先、または活動報告に登録します。もしくは、訪問時に撮った写真を後で画像認識で読み取り、取引先、または活動報告に登録します。
機能概要
画像認識サービスとしてAzureのComputer VisionとCustom Visionを採用しました。Computer Visionは画像から文字を読み取り、Custom Visionは事前に作成したカスタムモデルを元に、画像から物体を検出します。写真の解像度が低い場合は文字が読み取れないので、Computer Visionで型番が抽出できなかった場合の補助として、Custom Visionで給湯器の外形から型番を判定します。カスタムモデルは給湯器の型番ごとに教育用データを用意し、トレーニングを実行して作成します。
図1が全体のシステム構成図です。
図1. システム構成図
- Custom Visionでカスタムモデルを作成します。
- 作成したカスタムモデルをCustom Vision Predictionに発行します。
- 撮影した画像(図2)をAzureのContainer Appsにデプロイしたアプリに送信します。
- 次の手順で給湯器の型番を取得します。
- Computer Visionと通信し、画像のOCR読み取りを実行します。
本体シールから給湯器の型番を読み取ります。 - 本体シールの型番が読み取れなかった場合はCustom Visionと通信し、画像の物体検出を実行します。
- Computer Visionと通信し、画像のOCR読み取りを実行します。
- Computer VisionまたはCustom Visionで解析した結果、取得した型番をキーにデータベースから
機器情報を取得します。 - 型番を含む機器情報を解析結果として返します。
図2. 給湯器の画像
機能実装
インフラ環境の開発
Azureポータルで開発用のリソースグループを作成し、次のリソースを設置しました。
- Container Apps:開発したアプリをデプロイします。
- Container Registry:Container AppsにデプロイするアプリのイメージをGitHub Actionsでビルド&プッシュします。
- Computer Vision:トレーニングを実行してカスタムモデルを作成します。
- Custom Vision Prediction:作成したカスタムモデルを発行します。
- ストレージアカウント:型番をキーにメーカーなどの機器情報を登録します。
カスタムモデルの作成
給湯器の外形から型番を判定するため、Custom Visionでカスタムモデルを作成しました。まっすぐ正面から、ある程度の大きさで撮影されてる給湯器の画像を型番ごとに40~50枚くらい収集し、Custom Visionでトレーニングしました。対象の型番は次の3種類です。
図3はCustom Visionによるカスタムモデルの評価です。評価尺度は次の3つです。
- Precision(適合率):正解と予測したものが実際に正解だった割合
- Recall(再現率):実際に正解のものの中で正解と予測できた割合
- mAP(mean Average Precision):平均適合率を物体の分類ごとに平均した数値(物体の分類が合っているかの程度をあらわす指標)
トレーニングの結果、適合率と再現率、mAPそれぞれが80%以上であるモデルを作成することができました。
図3. モデルの評価
アプリの開発
アプリの開発言語はTypeScript(Node.js+GraphQL)としました。
下記のComputer VisionやCustom VisionのAPIのリファレンスを参考に機能を作成します。
ComputerVisionClient classlearn.microsoft.com
PredictionAPIClient classlearn.microsoft.com
Computer VisionやCustom Visionと通信するクラスを作成し、画像の解析結果をJSONで取得します。取得した結果を元に給湯器の型番を抽出し、ストレージアカウントに登録されている機器情報と照合します。照合した結果、型番が一致した機器情報を解析結果として返します。作成したアプリはGitHub ActionsでContainer Appsにデプロイします。
動作確認
Insomniaの画面で「POST」にアプリの接続先URLを入力します。「image」で解析する画像を選択し、リクエストを送信すると給湯器の型番と型番に紐づくメーカーなどの機器情報がJSON形式で返って来ます(図4)。
図4. 機器情報の取得
まとめ
Computer VisionとCustom Visionを利用して給湯器の機器情報を収集するシステムを実現することが出来ました。今回は給湯器をターゲットにしていますが、エアコンの室外機などその他の機器にも応用できます。現在のスマホであれば、文字の読み取りをするのに十分な解像度の写真が撮影できるので、Computer Visionのみで十分な精度で画像認識が可能です。ただし、文字の読み取りに失敗した場合に、Custom Visionを組み合わせることで読み取りの精度を上げることができます。
かつてクラウドが今ほど便利では無かったころ、OpenCVやKerasなどのライブラリを利用して画像認識モデルを作成したことがありました。任意の物体を検出したり、正面からの本人顔認識を実現することは出来ましたが、どのように特徴量を抽出してモデルを作成するかをコーディングしたり、数千枚の教育用データを用意したりと、大変手間がかかりました。その点、Azureの画像認識サービスを利用すれば基本的な機能は既に用意されているので、実現したい機能に集中して開発することが出来ます。
さいごに
部門問わず、少しでもUPWARDにご興味いただいた方は、まずはカジュアルにお話しすることも可能ですので、ぜひコンタクトをお待ちしております。