1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

TensorFlowのMobileNetV3Smallを使って、ブラウザで撮影した写真の類似画像検索を試した

1
Last updated at Posted at 2026-07-30

はじめに

IT部門に異動してきて4か月目のにったです。

この記事では、以前noteで構想した設備保全システムの一部を、PoC(概念実証)として実装した内容を紹介します。

構想をまとめたnote
https://note.com/ko1_nitta/n/n9bc9e5b3e5d0

設備に異常が発生した際、対象設備のマニュアルや過去の対応記録をすぐに確認できないことがあります。

  • 対象設備のマニュアルがどこに保存されているか分からない
  • マニュアルを見つけても、必要な情報が何ページにあるか分からない
  • 設備名、型番、警報コード、症状などからマニュアルを検索できない
  • 過去の異常内容、参照したページ、実施した対応が設備単位で蓄積されていない
  • 対応方法が担当者個人の経験や記憶に依存している

主に次のような課題があり、これらの課題に対して次のような仕組みを考えています。

設備台帳を起点にマニュアルを管理する
  ↓
スマートフォンから設備台帳にひもづく設備を登録する
  ↓
設備へカメラを向けて対象設備を特定する
  ↓
設備にひもづくマニュアルを表示する
  ↓
異常内容、参照ページ、対応結果を設備ごとに記録する

最終的には、設備という現物を起点に、マニュアルや過去の異常対応履歴へアクセスできる仕組みを目指しています。

今回のPoCでは、その中から次の部分に絞って実装しました。

スマートフォンで撮影した画像と登録済み画像を比較し、類似する設備を検索する


作ったもの

今回のシステムには、大きく分けて2つの操作があります。

  1. 設備画像を登録する
  2. 登録済み画像から類似する設備を検索する

設備画像を登録する

ブラウザ上でカメラを起動し、検索対象にしたい設備を撮影します。

撮影した画像はサーバーへ保存します。

同時に、画像を画像分類モデル:MobileNetV3Smallへ入力し、画像の特徴を表す「特徴ベクトル」を生成します。

登録時には、次の情報を保存します。

  • 設備ID
  • 設備名
  • マニュアルのパス
  • 撮影画像
  • 画像から生成した特徴ベクトル

同じ設備IDで複数回登録できるため、1つの設備に対して、正面、側面、斜めなど、異なる角度の画像を保存できます。

類似する設備を検索する

カメラに設備を映した状態で「認識」ボタンを押すと、その時点の映像から画像を取得します。

取得した画像についても、登録時と同じMobileNetV3Smallを使って特徴ベクトルを生成します。

その後、登録済み画像の特徴ベクトルと比較し、類似度が高い設備を検索します。


実際の画面

ここでは、実際に作成したフロントエンドの画面を紹介します。

1. カメラを起動した画面

ブラウザからカメラの使用を許可すると、画面内にカメラ映像が表示されます。

スマートフォンでは、背面カメラを優先して使用します。

image.png

図1:ブラウザ上でカメラを起動した状態

この画面では、登録と認識の両方で同じカメラ映像を使用します。

2. 設備情報を入力する画面

設備を登録する際は、設備ID、設備名、マニュアルのパスを入力します。

image.png

図2:設備ID、設備名、マニュアル情報を入力する画面

「登録」ボタンを押すと、その時点のカメラ映像をJPEG画像として取得し、設備情報と一緒にFastAPIへ送信します。

サーバー側では、次の処理を行います。

3. 設備を認識した結果

設備へカメラを向けて「認識」ボタンを押すと、登録済み画像との比較結果を画面に表示します。

image.png

図3:BOSEを映しながら認識ボタンを押した結果画面

現在の画面には、最も類似度が高かった設備について、次の情報を表示しています。

  • 設備ID
  • 設備名
  • 類似度
  • 登録画像数
  • マニュアルへのリンク

FastAPI側では上位3候補まで返して、画面では最上位の候補だけを表示するように設計しています。

4. 見分けにくい機器でも試してみた

我が家に、ちょうど次の2種類のESP32がありました。

  • ESP32-WROOM-32E
  • ESP32-WROVER-E

この2つは基板の色や全体的な形が似ているため、画像だけで区別できるのかを試す対象としてちょうどよいと考えました。

それぞれについて、角度や距離を変えながら数十枚の画像を登録し、認識させてみました。

image.png

図4:左がWROVER-E、右がWROOM-32E

image.png

図5:外観が似ているESP32を認識させた結果

撮影する角度や距離によって類似度は変化しましたが、今回試した範囲では、数十枚程度の登録画像でも対象物をある程度区別できることを確認できました。


システム構成

今回のシステムでは、次の技術を使用しています。

役割 使用技術
フロントエンド React、Vite
API FastAPI
APIサーバー Uvicorn
画像認識 TensorFlow、Keras
使用モデル MobileNetV3Small
画像処理・数値計算 Pillow、NumPy
データ保存 JPEG、JSON
実行環境 Docker Compose、Ubuntu Server

全体の処理は、次の構成です。

設備を登録するときの流れ

設備を認識するときの流れ

フロントエンドでは、主に次の処理を行います。

  • カメラ映像の表示
  • カメラ映像から静止画を取得
  • 設備情報の入力
  • FastAPIへの画像送信
  • 認識結果の表示

サーバー側では、主に次の処理を行います。

  • 撮影画像の受け取り
  • 画像の前処理
  • MobileNetV3Smallによる特徴ベクトルの生成
  • 元画像の保存
  • 特徴ベクトルの保存
  • 登録済み画像との比較
  • 類似する設備の検索

画像の登録と認識を行うAPIは、FastAPIで実装しています。


画像分類モデルを類似画像検索に使う

今回使用したMobileNetV3Smallは、本来、画像に写っているものを分類するためのモデルです。

一般的な画像分類では、入力した画像に対して、次のような結果を出します。

犬
猫
自動車

しかし、今回必要だったのは、撮影した設備に名前を付けることではありません。

この画像には何が写っているか

ではなく、

この画像と特徴が近い登録画像はどれか

を調べる必要があります。

そこで今回は、MobileNetV3Smallが最後に出力する分類結果を使わず、分類する途中で得られる画像の特徴を利用しました。


画像をどのように比較しているか

MobileNetV3Smallへ画像を入力すると、画像の輪郭、形状、模様、色、質感などの特徴が、576個の数値として出力されます。

この数値の並びを「特徴ベクトル」と呼びます。

登録時には、撮影した画像から特徴ベクトルを生成し、設備情報と一緒に保存します。

認識時にも同じ方法で特徴ベクトルを生成し、登録済み画像の特徴ベクトルと比較します。

特徴ベクトル同士の比較には、コサイン類似度を利用しています。

その類似度が1に近いほど、2つの画像の特徴が近いと判断します。

類似度が0.9だった場合でも、「90%の確率で同じ設備」という意味ではありません。

あくまで、2つの画像から取り出した特徴がどの程度近いかを表す値です。


複数画像の結果を設備単位でまとめる

今回の実装では、同じ設備IDに複数の画像を登録できます。

例えば、1つの設備について、次のような画像を登録できます。

  • 正面から撮影した画像
  • 側面から撮影した画像
  • 斜めから撮影した画像
  • 少し離れた位置から撮影した画像

認識時には、撮影した画像とすべての登録画像を比較します。

その後、同じ設備IDに登録されている画像をまとめ、類似度が高かった上位3画像の平均を、その設備のスコアとして使用します。

最も高い類似度だけを使うと、偶然1枚だけ似ていた画像の影響を受ける可能性があります。

一方、すべての登録画像を平均すると、撮影角度が大きく異なる画像や、写りの悪い画像によってスコアが下がる可能性があります。

そこで今回は、類似度が高い上位3画像の平均を使用しました。

ただし、この方法が最適かどうかは、今後登録画像を増やしながら検証する必要があります。


Yさんへの報告とフィードバック

今回は冒頭のNote記事にも登場いただいた
現場とITの両方に詳しいYさんへPoCを見てもらいました。

その中で、主に次の点が話題になりました。

  • QRコードを使う方法との比較
  • 登録画像が増えた場合の精度
  • 画像認識以外の情報を組み合わせる方法

自分一人で考えていたときには出てこなかった、現場目線でのフィードバックをもらうことができました。

QRコードを使う方法との比較

設備を特定する方法としては、設備にQRコードを貼る方法も考えられます。

QRコードには、次のような利点があります。

  • 読み取り精度が高い
  • コードの一部が隠れていても読み取れる場合がある
  • スマートフォンで簡単に読み取れる
  • 比較的簡単に導入できる
  • 読み取った設備を一意に特定しやすい

設備を確実に特定するという点では、QRコードは非常に有効な方法です。

一方、実際の現場では、次のような課題も考えられます。

  • QRコードをどこに貼るか決める必要がある
  • 分かりやすい場所に貼れない設備がある
  • 汚れや破損によって読み取れなくなる可能性がある
  • 設備や施設の美観に影響する
  • 既存設備へQRコードを貼り付ける作業が必要になる
  • 高所や狭い場所など、QRコードを確認しにくい場合がある

今回のPoCでは、設備に新しくQRコードやラベルを貼り付けるのではなく、設備の外観そのものを検索の手掛かりとして利用します。

そのため、QRコードを貼りにくい設備や、ラベルを追加したくない場所では、画像検索に優位性があると感じました。

ただし、画像認識とQRコードのどちらか一方だけを使う必要はありません。

設備や現場の条件に応じて、次のように使い分ける方法も考えられます。

QRコードと画像認識を組み合わせることで、それぞれの弱点を補える可能性もあります。

登録画像が増えた場合の精度

現在は、数十枚程度の登録画像で認識を試しています。

実際の現場で使用する場合、設備や登録画像は数百件、数千件と増える可能性があります。

登録数が増えるほど、外観が似ている設備も増えるため、現在と同じ方法で十分な精度を保てるかは分かりません。

例えば、次のような設備は、画像だけでは区別が難しい可能性があります。

  • 同じメーカーの同型設備
  • 外装が共通している設備
  • 制御盤や分電盤
  • 同じシリーズのポンプやモーター
  • 銘板以外の外観がほとんど同じ設備

この点について、画像認識だけで設備を特定するのではなく、OCRなどの別の技術を組み合わせる案が出ました。

OCRとの組み合わせ

設備の銘板には、次のような情報が記載されています。

  • メーカー名
  • 型番
  • 製造番号
  • 定格
  • 製造年月

これらの情報をOCRで読み取り、画像の類似度と組み合わせる方法が考えられます。

画像認識だけでは区別しにくい設備でも、型番や製造番号を読み取ることで、より正確に特定できる可能性があります。

大分類から段階的に検索する

最初からすべての設備を比較するのではなく、まず設備の大分類を判定し、その後に候補を絞る方法も考えられます。

例えば、最初に次のような分類を行います。

  • 空調設備
  • 電気設備
  • 給排水設備
  • 消防設備
  • 昇降機設備

その後、同じ分類に含まれる設備だけを対象に、類似画像検索を行います。

すべての設備を一度に比較するよりも、候補を絞りやすくなる可能性があります。

利用者に判断を促すUI

画像認識の結果を、そのまま正解として扱う必要はありません。

例えば、上位3件の候補を表示し、利用者に正しい設備を選んでもらう方法も考えられます。

候補1:空調機 AHU-01
候補2:空調機 AHU-02
候補3:空調機 AHU-03

画像認識の役割を「設備を完全に自動判定すること」ではなく、「人が探す候補を減らすこと」と考える方法です。

候補が3件程度まで絞られていれば、利用者が目視で確認することも難しくありません。

画像認識の結果を正解として扱うのではなく、利用者の判断を支援する情報として使う形です。

設置場所を利用する

設備が設置されている建物、フロア、機械室などの情報を利用する方法も考えられます。

例えば、地下1階の機械室で撮影している場合、その場所に存在しない設備を候補から除外できます。

画像認識だけでなく、設備台帳や設置場所を組み合わせることで、検索精度を高められる可能性があります。

一人で考えていたときは、画像認識モデルの精度を上げることに意識が向いていました。

今回のフィードバックから、実際の現場で使用するためには、次の情報を組み合わせることが重要だと気づきました。

  • 設備の外観
  • 銘板に書かれた文字
  • 設備の大分類
  • 設置場所
  • 設備台帳
  • 利用者の判断

画像認識の精度だけを追求するのではなく、複数の情報を組み合わせて、利用者が正しい設備へたどり着ける仕組みを考える必要があります。


まとめ

今回は、MobileNetV3Smallを利用し、ブラウザで撮影した設備から、類似する登録設備を検索するシステムを作成しました。

今回実装した処理は、次のとおりです。

MobileNetV3Smallは比較的軽量なモデルですが、今回試したESP32や手元の機器については、数枚から数十枚の画像を登録することで、撮影した対象をある程度区別できました。

モデルを自分で一から学習させなくても、学習済みモデルを特徴抽出器として利用することで、類似画像検索を実装できました。

今回のPoCはまだ小規模ですが、結果としては大きな手応えを得られたと考えています。

設備をスマートフォンで撮影し、設備情報やマニュアルへアクセスする仕組みの第一歩になりました。

次の段階では、当初考えていた次の構想を進めたいと思います。

設備台帳を起点にマニュアルを管理する
  ↓
スマートフォンから設備台帳にひもづく設備を登録する
  ↓
設備へカメラを向けて対象設備を特定する
  ↓
設備にひもづくマニュアルを表示する
  ↓
異常内容、参照ページ、対応結果を設備ごとに記録する

次は、設備台帳を起点にマニュアルを管理し、メーカーサイトなどから必要なマニュアルを収集できる仕組みについて、PoCを作成したいと考えています。

今回作成した画像検索機能についても、次の改善を進めていきます。

  • 類似度のしきい値を設定する
  • 上位候補を画面へ表示する
  • 設備の大分類から候補を絞る
  • OCRで銘板や型番を読み取る
  • 背景の影響を減らす
  • 設置場所を利用する
  • ベクトル検索を導入する
  • 別の画像認識モデルを試す
  • 認識結果を利用者が修正できるようにする
  • 利用者の修正結果を精度改善に利用する

画像認識だけですべてを自動判断するのではなく、画像、OCR、設備台帳、設置場所、利用者の判断を組み合わせながら、実際の現場で利用できる形へ改善していきたいと思います。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?