🚗

SORACOM Fluxで実現する!AIナンバー認識システム構築記

に公開

はじめに

皆さんは、EV(電気自動車)の充電体験に、もっとスマートさを求めたことはありませんか?

現在、多くのEV充電スタンドでは、専用のアプリを起動したり、認証カードをかざしたりといった手間が必要です。しかし、一部のサービスでは、車と充電器が自動で通信し、プラグを挿すだけで認証から課金までが完了するプラグアンドチャージという未来の体験がすでに始まっています。

その核心となるのが、車両を自動で識別する認証の仕組みです。

今回の記事では、カメラが駐車した車両のナンバーを自動で読み取り、車両を特定するアプリケーションSORACOM Fluxを使って検証してみた記録をお届けします。

この記事を読めば、以下のことが分かります。

  • SORACOM Fluxを使ったエッジAIアプリケーションの検証プロセス
  • カメラ(ソラカメ)映像からリアルタイムでナンバープレートを認識する仕組み

それでは、検証の全貌を見ていきましょう!

システム構成

まず、本プロジェクトが目指す全体像と、今回検証した範囲を説明します。

将来的な全体像

「プラグアンドチャージ」のシステム全体像です。

図1:プラグアンドチャージ システム全体像
今回検証したのは、カメラでのナンバー認識部分です。

検証プロセス(実装の詳細)

ここからは、実際に手を動かして検証したプロセスを、順を追って解説していきます。

Step 1: 準備編:カメラとSORACOM環境

■ 使用するカメラ:ATOM Cam 2

今回の主役であるカメラには、「ATOM Cam 2」 を使用しました。

実はこのカメラ、以前参加したSORACOM公式の 「ソラカメで画像解析」SORACOM Flux ハンズオンセミナー で入手したものです。セミナー料金にカメラ本体が含まれており、SORACOMのサービスを実際に触りながら学べる、非常にお得なセミナーでした。
これからSORACOMを触ってみたいという方には、こうしたハンズオンセミナーへの参加もおすすめです。

■ ソラカメのライセンス契約

ATOM Cam 2を「ソラカメ」として利用するには、専用のライセンスが必要です。今回は、 月額990円の「クラウド常時録画ライセンス (7日間)」 を契約しました。

これにより、カメラの映像が常にクラウドに録画され、SORACOM Flux上のアプリケーションから映像を受け取ることが可能になります。

■ SORACOM Fluxのプラン選定

SORACOM Fluxにはいくつかのプランがありますが、まずは動作検証からということで、 無料の「Developerプラン」 を選択しました。小規模なテストやプロトタイピングであれば、無料プランでも十分に機能検証が可能です。

Step 2: 実装編:認識フローの構築

アプリケーションの心臓部である、SORACOMのサービスを連携させた画像認識フローを解説します。今回はSORACOM Fluxを使い、アプリケーションをローコードで構築しました。

完成したフローの全体像はこちらです。

図2: SORACON Fluxフロー

それでは、左から順に各ブロックの役割を見ていきましょう。

1. 【トリガー】ソラカメ モーション/サウンド検知

すべての処理の起点となるのが、ソラカメのモーション検知機能です。カメラの映像内で何かしらの動きを検知すると、後続の処理を開始するためのイベントを発生させます。今回は、駐車する車の大きな動きだけを捉えたかったため、モーション検知の感度を「Low」に設定しました。

2. 【遅延処理】Republish

モーションを検知してすぐの画像でナンバー認識をしても、車はまだ動いている最中です。ナンバープレートがブレてしまい、AIが正しく認識できません。そこで、Republishアクションを使い、30秒間の待機時間を設けました。これにより、車が所定の位置に停車し、静止した状態の画像を認識処理に使用することができます。

3. 【画像取得】ソラカメ 画像取得

モーションを検知したカメラから最新の静止画を取得し、一時的にSORACOM Harvest Filesに保存します。この保存された画像が、次のAI処理のインプットとなります。

4. 【AI処理】ナンバー認識AI

ここが今回のシステムの核となる、AIによるナンバープレートの読み取り処理です。AIモデルには、「Google Gemini 2.0 Flash-Lite」 を採用しました。コストを抑えつつナンバー認識という目的を果たせる、最もバランスの良いモデルとしてこれを選択しました。

AIから期待通りの結果を得るには、指示書となる「プロンプト」が極めて重要です。試行錯誤の末、以下のようなプロンプトを作成しました。

# リクエスト内容 【モーション検知画像の説明】 
あなたは日本のナンバープレートを読み取る専門家です。
カメラからモーション検知機能によって取得された静止画が入力されます。
ナンバープレートに記載されているすべての文字と数字を、一字一句正確に読み取ってください。

# ターゲット
自動車のナンバープレートです。
紛らわしい場合は、読み取りをしてください。

#出力形式
必ず以下のJSON構造および指定の型に従ってフォーマットしてください。
"Target"はナンバープレートがある場合は、1、ない場合は0とします。

## フォーマット
{
    "Target": integer
    "IssuingOffice":"string",
    "VehicleClassCode":"string",
    "HiraganaCharacter":"string",
    "SerialNumber":"string"
}

## 例1
品川(Top Left) 300(Top Right) あ(Bottom Left) 12-34(Bottom Center) の場合
{
    "Target":1,
    "IssuingOffice":"品川",
    "VehicleClassCode":"300",
    "HiraganaCharacter":"あ",
    "SerialNumber":"12-34"
}

## 例2
ナンバープレートがない場合
{
    "Target":0
    "IssuingOffice":"Null",
    "VehicleClassCode":"Null",
    "HiraganaCharacter":"Null",
    "SerialNumber":"Null"
}

このプロンプトのポイントは、厳密な出力形式(JSON)を指定している点です。これにより、AIの回答がブレなくなり、後続の処理で安定して情報を扱えるようになります。

5. 【通知】Slack 通知

最後に、AIが読み取ったナンバー情報をSlackに通知して、結果を確認できるようにしました。AIが出力したJSON形式のデータをパースし、以下のようなメッセージが送信されます。

Hello from Flux! ${event.payload.deviceName} でナンバーを検知しました!
・地名    :${payload.output.IssuingOffice}
・分類番号  :${payload.output.VehicleClassCode}
・ひらがな  :${payload.output.HiraganaCharacter}
・一連指定番号:${payload.output.SerialNumber}
→ イベントの映像は、<[https://console.soracom.io/sora_cam/devices/$](https://console.soracom.io/sora_cam/devices/$){event.payload.deviceId}?coverage_type=jp#event|SORACOMユーザーコンソール> で確認して下さい。

工夫した点・ハマった点

今回の検証で、特にこだわった点や工夫した点をまとめます。

  • 最適な撮影タイミングの模索:
    当初はモーション検知後すぐに撮影していましたが、ブレた画像が多く認識に失敗していました。Republishによる30秒の遅延を入れることで、AIが認識しやすい静止状態の画像を得られるようになり、認識率が格段に向上しました。

  • コストと精度のバランスを取ったAI選定:
    最高性能のAIモデルを使えば精度は上がるかもしれませんが、コストが跳ね上がります。今回は「Gemini 2.0 Flash-Lite」という軽量なモデルで要件を満たせるか検証することで、実運用を見据えたコスト意識のある構成を目指しました。

  • AIを"調教"するプロンプトエンジニアリング:
    AIに「ナンバーを読んで」とお願いするだけでは、出力形式が毎回異なったり、不要な文章が混じったりします。「専門家」としての役割を与え、厳密なJSONフォーマットと具体例を指定することで、AIをシステムの一部として安定して組み込むことができました。

結果

実際にシステムを稼働させ、駐車場に出入りする車両でナンバー認識を試してみました。

ソラカメは図3のように設置しました。

図3: ソラカメの設置場所

結果は、昼間の明るい環境はもちろん、人間の目でも視認が難しい夜間の環境でも、ナンバープレートを正確に認識できることを確認しました。
下記添付画像では、ナンバープレート情報を隠しています。

明るい環境

図4: 明るい環境での駐車の様子

図5: 明るい環境でのAIの認識に使用された画像

図6: 明るい環境でのSlackの通知

暗い環境

図7: 暗い環境での駐車の様子

図8: 暗い環境でのAIの認識に使用された画像

図9: 暗い環境でのSlackの通知

懸念していた夜間や暗所での認識もクリアできたことから、地下駐車場など様々な環境での応用が期待できる、非常に満足のいく結果となりました。

まとめ

今回は、未来のEV充電体験「プラグアンドチャージ」の実現に向けた第一歩として、SORACOMのサービスを活用し、カメラ映像からリアルタイムでナンバープレートを認識するシステムを構築しました。

SORACOM Fluxを使うことで、モーション検知からAI連携、Slack通知までの一連の流れを、ほとんどコードを書くことなく、直感的な操作でスピーディーに検証することができました。特に、Republishによる遅延処理や、外部のAI(Gemini)との簡単な連携は、SORACOMプラットフォームの柔軟性と強力さを実感する良い機会となりました。

また、軽量なAIモデルと詳細なプロンプトエンジニアリングを組み合わせることで、コストを意識しながらも実用的な精度を達成できるという、エッジAI開発における重要な知見も得られました。

この記事が、SORACOM Fluxやソラカメを使って「何か面白いものを作ってみたい!」と考えている方々の、最初の一歩を踏み出すきっかけになれば幸いです。

Discussion