カメラとAIで「猫」を見つけるまで

「カメラで撮った映像からAIが猫を見つけてくれるアプリ」を作りました。ここまでの道のりは、大きく3つの部分に分かれます。

1.カメラの映像をAIに渡せる形にする (MyImageAnalyzer の役割)
まず、スマホのカメラはリアルタイムでたくさんの映像(画像)をAIに見せます。しかし、AIは「写真」そのままの形では理解できません。AIが理解できる「データ」の形に変換する必要があります。

 カメラからの映像を受け取る:

ImageAnalysis という機能を使って、カメラからどんどん送られてくる映像を受け取ります。受け取った映像は ImageProxy という一時的な形なので、これを普通の「画像データ」(Bitmap)に変換します。

 AIが理解できる「数値」に変換:

この Bitmap の画像を、AI(今回のYOLOv8モデル)が処理できる「数値の羅列」(ByteBuffer)に変換します。このとき、画像のサイズをAIが期待する大きさ(例:640×640ピクセル)に調整したり、色をAIが理解しやすいように並べ替えたりする「前処理」を行います。ここで MyImageAnalyzer が大活躍します! MyImageAnalyzer はカメラから画像を受け取り、AIに渡すための変換を全て担当しています。

2.AIモデルで「これは猫だ!」と判断する (YoloV8Detector の役割)

 AIモデルの準備:

事前に訓練しておいたAIモデル(.tflite ファイル)をアプリに組み込んでおきます。これは、何万枚もの猫の画像を学習して「猫とはこういう形だ!」と覚えた賢い先生のようなものです。YoloV8Detector がこのAIモデル(先生)を準備し、AIに「画像を分析して」と指示を出す役割を担っています。

 「推論」と「結果の読み取り」:

AIに変換した画像データ(ByteBuffer)を渡すと、AIはそれを分析して「推論」を行います。推論の結果は、AI独自の「数値の羅列」で返ってきます。ここには、「このあたりに猫っぽいものがあるぞ、自信度はこれくらい、種類はこれだ」というような情報が隠されています。YoloV8Detector は、このAIの数値の羅列を人間が理解できる形(「座標」や「信頼度」、「クラスID」)に読み解きます。

 不要な検出結果を整理する (NMS):

AIは「ちょっとでも猫っぽいもの」を見つけると、たくさんの候補を出してきます。しかし、同じ猫に何個も四角が表示されても困ります。「NMS (Non-Maximum Suppression)」という技術を使って、たくさんの候補の中から、最も自信度が高く、重なっていない「代表」の四角だけを選び出します。

 クラスIDを名前に変換:

AIは「これはクラスIDが62番だ」と教えてくれますが、私たちはそれが「猫」であることを知りたいです。そこで、あらかじめ「62番は猫」というリストを用意しておき、AIの「62番」を「猫」という名前に変換して表示できるようにしました。

3.画面に「猫」の四角を表示する (OverlayView の役割)

AIが「猫だ!」と判断した情報(どこに、何の種類の猫が、どれくらいの自信度でいるか)を、カメラの映像の上に表示します。

 透明なシートを重ねる:

カメラの映像が表示されている画面の上に、透明なシート(OverlayView)を重ねます。このシートには、好きなものを描くことができます。

 四角とラベルを描く:

OverlayView は、YoloV8Detector から渡された猫の位置情報(座標)を受け取ります。その座標に合わせて、猫の周りに四角い枠を描き、その枠の近くに「猫 (自信度)」というラベルを表示します。最初はAIへの「前処理」や、AIからの「結果の読み取り」がうまくいきませんでした。AIが理解できる言葉と、私たちが理解できる言葉の間に通訳がいなかったような状態です。これを修正し、AIが意味のある結果を返すようになりました。

 最初はバウンディングボックス(四角)が表示されなかった:

AIは結果を出しているのに、画面に四角が表示されませんでした。一番の原因は、カメラの映像を表示する PreviewView という部品を、画面のレイアウトに追加し忘れていたことでした。透明なシートがあっても、その下に映像がなければ何も見えません。また、四角を描く透明なシート(OverlayView)が、映像とピタッと合うように、サイズ情報を正しく渡せていない問題もありました。これらを修正し、四角が表示されるようになりました。

 「Class 62」ではなく「猫」と表示したい:

これは、AIが数字で返す「クラスID」を、人間がわかる「ラベル名」(”cat”)に変換するリストを YoloV8Detector に追加することで解決しました。

 「close()」「detect()」「saveImages」「getInputSize()」などのエラー:

これらは、それぞれの部品(クラス)が持つべき「機能(メソッド)」がまだ作られていなかったり、他の部品からその機能を使えるようにする「許可(public修飾子)」が設定されていなかったり、新しい機能(saveImages)を導入したときに、その情報を他の部品に伝える「引数」が足りなかったりしたことが原因でした。一つずつ足りない機能を追加したり、設定を修正したりして、エラーを解決していきました。

 猫が検出された画像だけを保存したい:

これは、MyImageAnalyzer で「AIが猫だと判断した結果」が出たときだけ、元の画像を保存するように条件を追加することで解決しました。まとめると、このアプリは、カメラから画像を受け取り、それをAIが理解できる形に変換し(MyImageAnalyzer)、訓練済みのAIモデルで分析させ(YoloV8Detector)、その結果を人間が見てわかるように画面に描画する(OverlayView)という連携プレーで動いています。各部品がそれぞれの役割をきちんと果たし、情報が正しく連携されることで、最終的に「猫検出アプリ」が完成しました。

次は、CLASやRTKと連動し、どこで猫を発見したかという位置情報を追加します。

【重要なお知らせ】CLAS/RTK アプリの価格について

いつもCLAS RTKアプリをご利用いただき、誠にありがとうございます。
皆様に支えられてきたことに心より感謝申し上げます。

また、このたび皆様のご要望にお応えし、Windows版も完成いたしました!

さて、これまで無料でご提供しておりましたCLAS RTKアプリですが、本日より有料サービスとさせていただくことになりました。
料金は、アプリ1本につき月額2,200円(税込)、または年額13,200円(税込)となります。
お申し込みは、clas.jp ソフトウェアライセンス申し込み よりお願いします。

なお、現在ご利用中のアプリはそのままお使いいただけますが、不具合対応以外のサポートはご利用いただけませんので、何卒ご理解賜りますようお願い申し上げます。

今後ともCLAS RTKアプリをどうぞよろしくお願いいたします。
                   CLAS代表 田中龍児

自動リスクマップ作成アプリの開発開始


災害現場やインフラ点検での「自動リスクマップ作成アプリ」です。


GNSS (RTK/CLAS) + カメラ + AI画像認識で、危険箇所(ひび割れ・浸食・陥没等)を自動認識し、マップにプロット


作業者が歩きながら使うだけで、現場の危険マップをリアルタイムに生成


インフラメンテナンスや災害時の初動対応で役立つでしょう。

(進捗状況を投稿することにします)

画像は、Gemini 作成

PC版RTK/CLASアプリがついに完成!

長らくお待たせいたしました。PC版RTK/CLASアプリが正式にリリースされました!

直感的な操作性を追求し、ほとんどマニュアルがなくてもご利用いただける設計になっています。現在、詳細なマニュアルも準備中ですので、初めての方でも安心してご活用いただけます。

暑い中での計測作業は大変かと思いますが、PCやタブレットで快適に動作する本アプリをぜひお試しください。高精度な測位をサポートするRTK/CLASアプリが、皆様の作業効率向上に貢献します!

お問い合わせは、 フォーム かメール( tanaka(a)clas.jp )でお願いします。
※メールの (a) を@に変えてください。

【重要なお知らせ】Android CLAS RTK アプリの今後の運営について

いつもCLASのGNSSサービスをご利用いただき、誠にありがとうございます。

また、日頃より皆様には、弊社のAndroid CLAS RTK アプリをご愛用いただき、心より感謝申し上げます。皆様からの貴重なご意見やご要望をいただきながら、より安定したサービス提供と、今後の機能拡充・品質向上を目指し、社内で慎重に検討を重ねてまいりました。

つきましては、大変恐縮ではございますが、現在無料で提供しておりますAndroid CLAS RTK アプリにつきまして、今後は有料サービスとして提供させていただく方向で準備を進めておりますことを、この場をお借りしてご報告させていただきます。

具体的な料金体系につきましては、現在、皆様にご納得いただけるよう、月額1,980円〜4,980円、年額19,800円〜49,800円の範囲で検討を進めております。詳細が決まり次第、改めて皆様にご案内させていただきます。

この変更により、皆様にはご負担をおかけすることとなり大変申し訳ございませんが、これもひとえに、アプリの継続的な開発・改善を行い、より一層皆様の業務に貢献できる高機能で安定したサービスを提供していくための決断でございます。

今後も、皆様のGNSS測量業務を強力にサポートできるよう、社員一同尽力してまいりますので、何卒ご理解とご協力を賜りますようお願い申し上げます。

引き続き、CLASのサービスをどうぞよろしくお願いいたします。

Windows PC 用 CLAS RTK のテストバージョン

開発言語:Java JavaFX
配布形式:自己完結型アプリケーション
その他
NTTとSoftBank のNtripに対応
今期を元期にリアルタイム変換して平面直角座標を表示
GXGGA、GXRNC、平面直角座標を保存
プロット画面には現在点のみ表示(今後のバージョンアップで変更予定)


CLASのユーザー様には、clas.jpのダウンロードコーナーからダウンロードできるようにします。

しばらくお待ちください。

もうすぐWindowsのRTKができます

6月からパソコン版の衛星測位プログラムを開発してきましたが、受信機とBluetooth接続で、NTT と SoftBank の Ntrip に対応した RTK(KabutoMLRTK)がほぼ完成しました!


次はCLASの開発に挑戦します!
パソコン向けのプログラムは、スマホ向けより開発がスムーズで楽しいです!

新発見

熱心なユーザーが、PCとの接続の方法を発見してくださいました。

AndroidをGNSS受信機(Ritto MGLR-9PC/Ri)とUSB接続し、PCとBluetooth接続することで、PCは仮想COMポート経由でNMEAデータを受信できます。

これにより、u-centerやRTKLIBなどのGNSSソフトがデータを読み取れます。

実験してみたところ、RTKもCLASもPCで受信できました。Android側ではこれまで通り、ログも取れていました。

コマーシャルを兼ねてこの新発見を図にしてみました。