Media > AI活用ユースケース > カスタマーサポート > 住民から届く道路・公園の不具合の通報を写真で見分けて、担当課と緊急度を振り分ける

住民から届く道路・公園の不具合の通報を写真で見分けて、担当課と緊急度を振り分ける

実装ステータス:構成例 技術的に実現可能な構成として設計したもの。自社未検証

住民がWebフォームで送る道路・公園の不具合の写真をAIが見て、対象物と損傷の種類、危険の程度を決まった形で返します。位置と所管の対応表から担当課を決め、受付の担当者は確かめて回付するだけになります。

サマリー
生成AI
ChatGPT/Claude/Gemini
連携・自動化
Google Apps Script/Power Automate
対象業界
自治体
対象部門
カスタマーサポート/総務
対象業務
分類・仕分け/問い合わせ対応
主な課題
人手が足りない/判断に時間がかかる/問い合わせが多い
AIで行う処理
画像認識
主な効果
判断支援/対応スピード向上/工数削減
導入難易度
★★★☆☆
実装レベル
半自動化
費用感
API連携(中)
人間の確認
条件付き
現在工数
60h/月
AI導入後
25h/月
想定削減
58%
年間削減
420h
モデル条件による試算値です。実在企業の実績ではありません。

01導入前 / 導入後の業務フロー

導入前(Before)
  1. 受付の担当者が、フォームの回答が入ったスプレッドシートを1件ずつ開く
  2. 写真を拡大して、何が写っているか、どれくらい壊れているかを見る
  3. 位置を地図システムで確かめ、市道か国道・県道か、公園の中か外かを調べる
  4. 過去の通報一覧を開き、同じ場所の通報がすでに来ていないかを探す
  5. 担当課を決め、写真と位置を付けてメールで回付する
  6. 受付台帳に回付先と日時を書き、必要なら住民へ受付の連絡をする
導入後(After)
  1. 【住民】 フォームで写真・位置・説明を送る。「今すぐ通行に危険がありますか」の設問に答える
  2. 自動送信をきっかけにスクリプトが動き、危険の設問と説明文の語句を先に見る
  3. 自動危険ありと出たものは、AIを待たずに担当者へ即時に通知する
  4. 自動写真と説明をGemini APIに渡し、対象物・損傷・危険の程度を決まった形で受け取る
  5. 自動対象物の種類と位置から、所管の対応表で担当課の候補を決める
  6. 自動同じ場所・同じ対象物の通報が直近にあれば、同じ案件としてまとめる候補にする
  7. 自動顔や車のナンバーが写っている写真に印を付ける
  8. 人受付の担当者が、AIの読み取り・担当課の候補・重複の候補を確かめて回付する
  9. 人読み取れなかったもの、所管が決まらなかったものは、従来どおり調べる
各工程の詳しい説明を読む
  1. 受付の担当者が、フォームの回答が入ったスプレッドシートを1件ずつ開く
  2. 写真を拡大して、何が写っているか、どれくらい壊れているかを見る
  3. 位置を地図システムで確かめ、市道か国道・県道か、公園の中か外かを調べる
  4. 過去の通報一覧を開き、同じ場所の通報がすでに来ていないかを探す
  5. 担当課を決め、写真と位置を付けてメールで回付する
  6. 受付台帳に回付先と日時を書き、必要なら住民へ受付の連絡をする

(a)危ない通報が他の通報に埋もれる。 届いた順に開くので、朝のうちに届いた「道路に穴があいて危ない」が、昼まで開かれないことがあります。緊急度は開いてみるまで分かりません。

(b)所管を調べる時間がいちばん長い。 写真の中身が分かっても、その場所の道路が市道か県道かは地図を見ないと分かりません。境目の場所ほど調べる時間がかかります。

(c)同じ場所の通報が何件も届く。 目立つ倒木や街路灯の球切れには、複数の住民から通報が来ます。重複に気づかず別々に回付すると、担当課が同じ現場に2度向かいます。

(d)写真の中身の見分けが、人によって違う。 側溝の蓋のずれを舗装の穴として回付する、防犯灯を街路灯として回付する、といった取り違えが起き、担当課から差し戻されて回付をやり直します。 見分けの基準が担当者の経験の中にしかありません。

  1. 【住民】 フォームで写真・位置・説明を送る。「今すぐ通行に危険がありますか」の設問に答える
  2. 【自動】 送信をきっかけにスクリプトが動き、危険の設問と説明文の語句を先に見る
  3. 【自動】 危険ありと出たものは、AIを待たずに担当者へ即時に通知する
  4. 【自動】 写真と説明をGemini APIに渡し、対象物・損傷・危険の程度を決まった形で受け取る
  5. 【自動】 対象物の種類と位置から、所管の対応表で担当課の候補を決める
  6. 【自動】 同じ場所・同じ対象物の通報が直近にあれば、同じ案件としてまとめる候補にする
  7. 【自動】 顔や車のナンバーが写っている写真に印を付ける
  8. 【人】 受付の担当者が、AIの読み取り・担当課の候補・重複の候補を確かめて回付する
  9. 【人】 読み取れなかったもの、所管が決まらなかったものは、従来どおり調べる

3番目がこの設計の分かれ目です。 AIの判定は数秒で返りますが、エラーや待ちで遅れることがあります。危険の疑いがある通報は、その遅れに付き合わせません。

8番目で人が見るのは全件です。 回付は住民への約束の第一歩なので、AIの結果だけで回付を確定させません。ただし、見るのは「候補が合っているか」だけになります。

5番目と6番目を規則で行うのも、意図してのことです。 所管と重複はAIに聞けば答えを返しますが、根拠が写真の見た目になります。位置と対応表で決めておけば、候補が外れたときに直す場所が表の1行に決まります。

02今回想定するシステム構成

構成図
住民(スマートフォン)
   │  写真・位置・説明・危険の設問
   ▼【トリガー】フォームの送信
Googleフォーム ── 回答のスプレッドシート
   ▼
Google Apps Script
   ├──▶ 危険の設問・説明文の語句を先に確認 ──▶ 危険なら担当者へ即時通知
   ▼
Gemini API ── 写真と説明を読み取る
   │   ① 対象物(舗装・側溝・カーブミラー・街路灯・公園遊具・倒木 など)
   │   ② 損傷の種類   ③ 危険の程度   ④ 顔・ナンバーの写り込み
   ▼
Google Apps Script
   ├──▶ 所管の対応表で担当課の候補を決める
   ├──▶ 直近の通報と照合し、重複の候補を付ける
   ▼
【受付の担当者が確認】 ──▶ 担当課へ回付/市の外の管理者へ回付
役割想定する製品代替候補
処理Gemini APIClaude API、OpenAI API
連携Google Apps ScriptPower Automate

フォームとスプレッドシートは新しく足すものではありません。 すでに通報の受付に使っているものに、スクリプトを1本つなぎます。担当課への回付もメールのままです。

Gemini API を選ぶのは、写真の理解と決まった形での出力が1回の呼び出しで済むからです。 画像の理解のページでは、入力できる形式が PNG、JPEG、WEBP、HEIC、HEIF とされています。スマートフォンの写真はHEICで届くことがあるため、変換せずに渡せるのは受付の用途に合っています。

写真の渡し方は2通りあります。 1つはリクエストに直接埋め込む方法で、テキストの指示・システムの指示・画像を合わせたリクエスト全体が20MBまでです。もう1つは Files API で、大きいファイルや同じ画像を何度も使う場合に勧められています。Files API に上げたファイルは48時間で自動的に削除され、手動でも削除できます。

決まった形での出力は、構造化出力の機能で指定します。 JSONスキーマを渡すと、構文として正しいJSONが返ることが保証されます。 ただし公式ページは、値の中身が正しいかは保証されず、アプリの側で必ず確かめるよう書いています。対象物を選択肢(enum)で縛れるので、後段の対応表と照らしやすくなります。

写真の中の位置を示す枠も返せます。 物体検出では、枠が [ymin, xmin, ymax, xmax] の形で、画像の大きさに対して0〜1000に正規化されて返ります。この構成では、損傷の場所と、顔・ナンバーの写り込みの場所を示すのに使います。

03どうやって実装するのか

Step1

処理の起点を決める

フォームの送信を起点にします。 Apps Script のフォーム送信時のトリガーで1件ずつ動かし、定時にまとめて処理することはしません。まとめると、危険な通報が次の実行まで待たされます。

最初に動くのはAIではなく、危険の確認です。 送信直後に、次の2つを規則だけで見ます。

見るもの危険ありとする条件
フォームの設問「今すぐ通行に危険がありますか」に「はい」
説明文の語句「陥没」「穴」「倒木」「ふさいで」「落ちそう」「けが」など、窓口で決めた一覧に当たる

どちらか1つでも当たれば、担当者へ即時に通知します。 語句の一覧は広めに取ります。空振りの通知は数秒で閉じられますが、見逃しは取り返せません。この通知の後で、同じ通報をAIの処理にも回します。

Step2

入力データを集める

データ中身取得元
写真1〜3枚。JPEGまたはHEICが多いフォームのファイル添付
位置地図で指した緯度経度、または住所の文字列フォームの回答
説明住民が書いた自由文フォームの回答
危険の設問はい/いいえ/分からないフォームの回答
所管の対応表対象物の種類×場所の区分 → 担当課窓口で用意するスプレッドシート
直近の通報過去30日の通報の位置・対象物・状態回答のスプレッドシート

質を決めるのは、所管の対応表です。 「市道の舗装は道路管理の課」「公園の中の遊具は公園の課」「国道・県道は市の外へ回付」といった組み合わせを、窓口の担当者が知っている形のまま一覧にします。AIの読み取りがどれほど正しくても、この表が無ければ担当課は決まりません。

object_type場所の区分回付先
舗装・側溝市道道路管理の課
舗装・側溝国道・県道市の外の管理者(回付の連絡先を列に持つ)
舗装・樹木・倒木公園の中公園の課
カーブミラー・ガードレール市道交通安全の課
街路灯市道道路管理の課(自治会が管理する防犯灯は別の行にする)
公園遊具どこでも公園の課
樹木・倒木市道道路管理の課。夜間・休日は当番の連絡先

この表は一例です。 同じ街路灯でも、市が持つものと自治会が持つものがあるなど、実際の区分は自治体ごとに違います。 窓口の担当者が回付のたびに迷っている組み合わせを、行として足していきます。

Step3

データの取得方法を決める

写真はフォームの添付ファイルとして Google ドライブに入ります。 スクリプトはそのファイルを読み、Gemini API に渡します。写真が3枚で合計が大きいときは Files API に上げ、それ以外はリクエストに直接埋め込みます。

位置は、緯度経度と住所の2通りで届きます。 場所の区分(市道/国道・県道/公園の中/その他)を決めるのは、庁内の地図システムの道路・公園の区域の情報です。この照合をどう組むかは、各自治体の地図システムに応じた個別実装になります。 最初は、対応表に「路線名」「公園名」の列を持たせ、住所の文字列で引く形でも始められます。

直近の通報は、同じスプレッドシートから引きます。 位置が近く、対象物が同じで、状態が未完了のものだけを取り出します。

Step4

AIへ渡す前に整形する

  1. 写真の有無と形式の確認 … PNG、JPEG、WEBP、HEIC、HEIF 以外は、担当者へ回して形式を確かめます
  2. サイズの確認 … 直接埋め込むときはリクエスト全体で20MBまで。超えるときは Files API に上げます
  3. 向きの確認 … 公式ページは、画像の向きが正しいかを確かめるよう勧めています。横倒しの写真は、損傷の読み取りを誤らせます
  4. 位置の正規化 … 緯度経度は小数の桁をそろえ、住所は町名までを取り出します
  5. 説明文の整形 … 電話番号やメールアドレスが書かれていれば、AIに渡す前に伏せます
  6. 近くの通報の抽出 … 直近の通報から、同じ町名または近い緯度経度のものを取り出します

5番目は、住民の連絡先をAIに渡さないためです。 通報の中身を判断するのに連絡先は要りません。

写真は、長い辺を決めた大きさまで縮めてから渡すことも検討します。 スマートフォンの写真はそのままだと数MBあり、区画の数に応じてトークンが増えます。ただし、縮めすぎると側溝の蓋のずれや細いひび割れが見えなくなります。 第8章の30件で、縮めた写真でも読み取りが変わらない大きさを確かめてから決めます。

写真が複数あるときは、まとめて1回で渡します。 1枚目が遠景、2枚目が近景という送り方が多く、両方を見て初めて対象物と損傷が分かるからです。

Step5

AIに処理させる

させるのは、写真と説明から4つを読み取ることだけです。

読み取るもの返し方判断できないとき
対象物決めた選択肢から1つ(舗装、側溝、カーブミラー、街路灯、ガードレール、公園遊具、樹木・倒木、標識、その他)unknown
損傷の種類穴・ひび割れ、蓋のずれ、向きのずれ、点灯しない、破損、倒れ、その他unknown
危険の程度high(通行や利用にすぐ危険)/medium/low迷えば上の段階
写り込み顔・車のナンバーが写っているか。写っていればその枠uncertain

危険の程度だけは「迷えば上」にします。 他の項目は迷えば unknown にしますが、危険の程度を unknown にすると、後段の規則で低く扱われる恐れがあるからです。

させないこと理由
担当課の決定場所の区分で決まる。写真では分からない
補修の要否や時期の判断担当課が現地で決める
住民の説明の否定「写真では危険に見えない」でも、住民が危険と書けば危険として扱う
位置の推測写真の景色から場所を当てない
重複の確定候補までにして、同じ案件かは人が決める

3行目がいちばん大事です。 写真は一瞬を切り取ったもので、夜の暗さや雨の日の水たまりは写りません。住民の申告より低い緊急度を、AIの判断で付けることは認めません。

Step6

指示内容を固定する

あなたは市役所で、住民から届いた道路・公園の不具合の通報を受け付ける立場です。
写真と説明文だけを見て、写っている内容を決まった形で返してください。

【読み取る項目】
1. object_type:写っている対象物を選択肢から1つ選ぶ
2. damage_type:損傷の種類を選択肢から1つ選ぶ
3. danger_level:high / medium / low
   - high …… 車・自転車・歩行者の通行、または遊具の利用に、すぐ危険がある
     (例:車輪が落ちる大きさの穴、道をふさぐ倒木、外れた側溝の蓋、壊れた遊具)
   - medium … すぐの危険はないが、放置すると危険になる
   - low …… 見た目の不具合で、危険はない
4. privacy:人の顔、車のナンバープレートが判別できる状態で写っているか

【厳守事項】
- 写真で判断できない項目は unknown にしてください。推測で埋めないでください。
- danger_level で迷ったときは、必ず上の段階を選んでください。
- 説明文に危険だと書かれている場合は、写真で危険に見えなくても
  danger_level を low にしないでください。
- 担当課、補修の要否、補修の時期は書かないでください。
- 写真の景色から場所を推測しないでください。
- 説明文に書かれていない事実を書き足さないでください。
- evidence には、判断の根拠にした写真の特徴を短く書いてください。
- 顔またはナンバーが写っていれば、その位置を枠で返してください。
  枠は [ymin, xmin, ymax, xmax] で、0〜1000に正規化した値にしてください。
- 道路・公園の不具合の写真でないと判断した場合は、object_type を
  not_applicable にしてください。

【説明文】{description}
【住民が選んだ危険の設問】{danger_answer}

指示を画像の前に置きます。 公式ページは、画像1枚とテキストを使う場合、テキストの指示を画像の前に置くよう勧めています。

「説明文に危険と書かれていれば low にしない」を明記しないと、写真だけで判断します。 写真が遠く小さな穴にしか見えなければ low を返し、住民が一番伝えたかったことが消えます。

Step7

出力形式を固定する

構造化出力で、次の形のJSONを受け取ります。

{
  "report_id": "",
  "object_type": "pavement | gutter | curve_mirror | street_light | guardrail | playground | tree | sign | other | unknown | not_applicable",
  "damage_type": "hole_crack | lid_shift | misaligned | not_lit | broken | fallen | other | unknown",
  "danger_level": "high | medium | low",
  "evidence": "",
  "privacy": {
    "contains_face": "yes | no | uncertain",
    "contains_plate": "yes | no | uncertain",
    "boxes": [ { "label": "face | plate", "box_2d": [0, 0, 0, 0] } ]
  },
  "damage_box": [0, 0, 0, 0]
}

1つ目の理由は、選択肢(enum)で縛れることです。 構造化出力では文字列に enum を指定できます。対象物が決まった語で返るので、所管の対応表をそのまま引けます。 自由文で返すと「アスファルトの穴」「道路のくぼみ」のように言い方が散り、表と照らせません。

2つ目は、AIが埋める項目と規則が決める項目を分けられることです。 このJSONに担当課の欄はありません。スクリプトが後から department と final_danger を足します。

規則内容
担当課object_type × 場所の区分で対応表を引く。引けなければ needs_human
最終の緊急度住民の申告・語句の確認・AIの danger_level のうち最も高いもの
重複の候補同じ object_type で、位置が近く、未完了の通報があれば候補にする

3つ目は、値を確かめられることです。 公式ページのとおり、構文が正しくても値が正しいとは限りません。box_2d が0〜1000の範囲にあるか、enum の外の値が無いかをスクリプトで確かめ、外れたものは人へ回します。

Step8

システムへ連携する

つなぎ先方式内容
GoogleフォームApps Script のフォーム送信時トリガー通報の受付を検知する
Gemini APIAPI呼び出し写真と説明の読み取り
回答のスプレッドシートApps Script で読み書き読み取り結果・担当課の候補・重複の候補を行に書く
所管の対応表Apps Script で読み取り担当課の候補を引く
担当者への通知メール危険の疑いがある通報の即時通知
担当課への回付メール人が確認した後に送る

回付のメールは自動で送りません。 スクリプトが作るのは下書きと宛先の候補までです。国道・県道の管理者への回付は市の外への連絡なので、特に人が送ります。

Step9

人が確認する

  1. 危険の通知を最初に見る … 即時に通知されたものは、AIの結果を待たずに写真を開き、担当課へ電話で連絡するかを決めます
  2. 担当課の候補を確かめる … 写真・位置・対象物の読み取りを並べて見て、候補が合っていれば回付します
  3. 重複の候補を確かめる … 同じ案件と判断すれば、既存の通報にまとめ、住民には受付済みと連絡します
  4. 写り込みの印があるものは、回付の前に扱いを決める … 担当課に渡す写真を加工するか、そのまま庁内で扱うかを決めます
  5. 読み取りを直したら記録する … どの項目を、何から何に変えたかを残します

1番目を「AIの結果を見てから」にしないでください。 通知の意味は、AIの処理を待たないことにあります。

確認の画面は、1行に写真の縮小版・対象物・損傷・最終の緊急度・担当課の候補・重複の候補を並べます。 候補が合っていれば行の「回付」を押すだけにし、合っていないものだけ写真を開く形にすると、第10章の5分に収まります。

Step10

例外に対処する

起きること対応
写真が無いAIに回さず、説明と位置だけで人が判断する
対応していない形式PNG、JPEG、WEBP、HEIC、HEIF 以外は人へ
リクエストが20MBを超えるFiles API に上げて渡す
AIが応答しない・エラー3回まで再試行し、だめなら「未判定」で人へ。危険の確認は先に済んでいる
object_type が unknown人が写真を見て決める
not_applicable道路・公園以外の相談として、通常の窓口に回す
対応表で担当課が引けないneeds_human。境目の場所として、対応表に行を足す候補にする
位置が書かれていない住民へ場所を聞き返す。写真から推測しない
enum の外の値、枠が範囲外値を採用せず人へ
夜間・休日に危険の通知が出る当番の連絡先へ通知する。窓口の勤務時間だけに通知を送らない
写真ごとに写っているものが違う複数の対象物の通報として人へ。1件にまとめない

7行目を放っておかないでください。 担当課が引けなかった場所は、対応表の穴です。同じ場所が2度出たら、表に1行足します。

Step11

記録を残す

  • 通報の原文(写真・位置・説明・危険の設問)と受付日時
  • Gemini API に渡した指示とJSONの全文、呼び出した日時
  • 危険の通知を出したか、何に当たって出したか(設問か語句か)
  • 担当課の候補と、人が回付した先。両者が違ったときの記録
  • 重複としてまとめた通報の組み合わせ
  • 写り込みの印と、写真の扱いをどう決めたか

3つ目は、見逃しを後から調べるためです。 危険な通報に通知が出なかった場合、設問に答えていなかったのか、語句が一覧に無かったのかで直す場所が違います。

Files API に上げた写真は48時間で消えます。 写真の原本は Google ドライブの側に残し、Files API のほうは使い終わったら削除します。

4つ目の「候補と回付先が違ったとき」の記録は、月に1回まとめて読みます。 同じ対象物で同じ取り違えが続くなら選択肢の定義を、同じ場所で続くなら対応表を直します。直す場所が記録から決まるように、違いの理由を一言添えて残します。

04実装レベルの3段階

最小構成:写真と説明を手でAIの画面に貼り、対象物と危険の程度を答えさせる / 写真の見分け
半自動化:上記+フォームの送信でスクリプトが動き、読み取り・担当課の候補・重複の候補を一覧に書く。危険の即時通知も付ける / 見分け・所管の候補・重複の候補・危険の通知
本格構成:上記+庁内の地図システムと位置を照合し、担当課の業務システムへ案件として登録する / 受付から担当課の案件登録まで

本記事が推すのは半自動です。 1件12分を5分にする想定は、この段階のものです。所管を調べる4分のうち大半は、対象物が分かれば対応表で片づきます。 本格構成は、地図システムとの照合ができるかで決まります。 境目の場所の判定が自動になれば、残る確認はさらに短くなります。ただし、担当課の業務システムへの登録は、担当課の側の運用を変えることになります。 窓口だけで決めずに進めてください。 段階を飛ばさないでください。 半自動の一覧を1か月見ると、担当課が引けなかった場所と、対象物を取り違えやすい組み合わせが先に分かります。そこを対応表と選択肢に反映してから本格構成に進むほうが、担当課からの差し戻しが減ります。

05工数削減シミュレーション

前提値(モデル条件)
対象人数
3 名
月間件数
300 件
1件あたり現在時間
12 分
1件あたり導入後時間
5 分
現在  300件 × 12分 ÷ 60 = 60 時間/月
導入後 300件 × 5分 ÷ 60 = 25 時間/月
月間削減時間
35h
削減率
58%
年間削減時間
420h
年間金額換算(時間単価3,000円)
126万円
モデル条件による試算であり、実際の効果は業務内容・運用方法によって異なります。

自社条件で導入効果を整理したい方へ

このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。

AI活用について相談する

06向いている企業・向いていない企業

向いている
  1. 道路の穴や街路灯の球切れ、公園遊具の破損などの通報をWebフォームで受け付けており、写真付きの通報が月に数百件ある市区町村。受付の担当者が写真を見て、道路・公園・下水道などの担当課や、国道・県道の管理者へ振り分けている場合。所管の対応表(路線や公園ごとの担当課)を一覧にできる場合。
向いていない
  1. 通報の大半が電話で、写真が付かない場合。月の件数が数十件で、受付の担当者が目で見て足りている場合。通報を受けた時点で担当課が現地に出る体制ができており、振り分けの工程がそもそも無い場合。なお、補修するか・いつ直すかという判断は、この構成では代替できません。

07最小構成で試す方法

  1. 先月届いた通報から30件を選ぶ(うち数件は、担当課の判断に迷ったものと、危険だったものを入れる)
  2. 当時の回付先と、回付までにかかった時間を受付台帳から書き出す
  3. 30件の写真と説明を、1件ずつ手元のAIサービスの画面に貼る
  4. 「写っている対象物、損傷の種類、危険の程度(高・中・低)を答えてください。分からない項目は『不明』としてください。担当課は書かないでください」と指示する
  5. 対象物の答えから、窓口の担当者が知っている所管で担当課を当て、当時の回付先と突き合わせる

住民の写真を外部のサービスに貼るときは、利用条件を先に確かめてください。 Gemini API の規約では、無料の枠に機密情報や個人情報を送らないよう求めています。試すときも、顔やナンバーが写っていない写真を選ぶか、有料の枠を使います。

出てきた内容判断
対象物がほぼ当たり、当時の回付先と合うスクリプトとの連携に進む
対象物は当たるが担当課が合わない対応表の問題。所管の一覧を先に作る
写真が遠く、対象物が分からない件が多いフォームの案内を先に直す(近くと遠くの2枚を撮ってもらう)

危険だった数件は、必ず high が返るかを見てください。 30件のうちで最も大事なのはそこで、1件でも low が返れば、指示の書き方か選択肢の定義を直してから次に進みます。

08実装時につまずきやすいポイント

問題対策
AIの結果を待ってから危険を見る設計になる危険の確認はAIの前に置く。 設問と語句だけで通知する
写真が低い緊急度を付けて住民の申告が消える最終の緊急度は最も高いものを採る。AIは下げない
担当課をAIに決めさせる写真では所管は分からない。対応表で決める
対象物の言い方が散って表と照らせない構造化出力の enum で選択肢に縛る
JSONは返るが値がおかしい構文は保証されるが値は保証されない。スクリプトで範囲を確かめる
横倒しの写真で読み取りを誤る向きを確かめてから渡す
写真が遠すぎて何か分からないフォームで「近くと遠くの2枚」を案内する
同じ倒木に何件も通報が来る重複の候補を出し、まとめるかは人が決める
位置が無い・あいまい聞き返す。写真の景色から場所を当てさせない
無料の枠で住民の写真を送る有料の枠を使う。 無料の枠には個人情報を送らない
Files API に写真が残ったまま48時間で消えるが、使い終わったら削除する
語句の一覧が狭く、危険の通知が出ない見逃した通報の説明文から語を足す。保存した通知の記録で原因を分ける
対応表に無い組み合わせが続く担当課が引けなかった場所を月ごとに数え、表に行を足す
大雨の翌日に呼び出しが集中する再試行の間隔を空け、危険の通知はAIと切り離して動かす

上の3行が、この構成の失敗のほとんどです。 どれも「AIが一番よく分かっている」という前提から出ています。危険の判断・所管の判断をAIの外に置いてあるかどうかで、住民に対して安全な仕組みになるかが決まります。

09セキュリティ・AIガバナンス上の注意点

この構成で扱うデータ: 住民が撮った写真(通行人の顔、車のナンバー、家の外観が写りうる)、位置、説明文、住民の連絡先です。

  1. 有料の枠を使う … Gemini API の規約では、無料の枠に送った内容は製品の改善に使われ、人が読むことがあり、機密情報や個人情報を送らないよう求めています。有料の枠では、プロンプトや画像を製品の改善に使わないとされています。住民の写真を扱う以上、有料の枠が前提です
  2. 有料の枠でも記録は一定期間残る … 規約では、禁止された利用の検知などのために、プロンプトと応答を限られた期間記録するとされています。住民への案内に、写真を外部のサービスで処理することを書いておきます
  3. 顔とナンバーの写った写真の扱いを決める … AIは写り込みに印と枠を付けるだけです。担当課に回す写真や、外部の管理者に渡す写真を加工するかは、個人情報の取り扱いの規程に沿って人が決めます
  4. 連絡先をAIに渡さない … 前処理で伏せ、判断に必要な写真・位置・説明だけを渡します
  5. 緊急度を下げる判断をAIにさせない … 住民の申告・語句の確認・AIのうち最も高いものを採ります。誤って低く付けた1件は、削減した時間よりはるかに重くなります
  6. 補修するか・いつ直すかは担当課が決める … この構成が出すのは「何が写っているか」と「どこへ回すかの候補」だけです
  7. 市の外へ渡す範囲を絞る … 国道・県道の管理者へ回付するときに渡すのは、写真・位置・不具合の内容までです。住民の氏名や連絡先を渡すかは、住民の同意と規程で決めます
  8. 写真と位置の保存期間を決める … 位置と写真を組み合わせると、住民の自宅の近くが分かることがあります。案件が完了した後にいつまで残すかを、文書の保存の規程に合わせて決めておきます

誤りが起きた場合のリスクは、危険な通報を遅らせることと、誤った担当課へ回すことの2つです。 前者はAIの前に危険の確認を置くことで、後者は担当課を規則で決めて人が確かめることで防ぎます。

10まず何から始めるか

1週目:所管の対応表を作る

窓口の3名が知っている「この対象物は、この場所なら、この課」を一覧にします。境目になりやすい場所(市道と県道の交差点、公園の外周の歩道など)を先に書き出します。

2週目:30件で試す

先月の通報から30件を選び、手元のAIサービスで対象物と危険の程度を答えさせます。顔やナンバーが写っていない写真を選んでください。 当時の回付先と突き合わせます。

3週目:危険の通知だけを先に作る

フォームに「今すぐ通行に危険がありますか」の設問を足し、設問と語句で担当者へ通知するスクリプトを作ります。AIをつなぐ前に、この部分だけで運用を始められます。 夜間・休日の通知先もこの週に決めます。

4週目:AIの読み取りと対応表をつなぐ

有料の枠で Gemini API を呼び、読み取り結果と担当課の候補をスプレッドシートに書き出します。この時点では回付を人が従来どおり行い、候補が合っていたかを数えます。

2か月目以降: 重複の候補と写り込みの印を足し、1件12分が何分になったかを実測します。担当課が引けなかった場所を対応表に足し続け、引けない件数が月に数件になった時点で、この構成は完成です。


11関連ユースケース

12この仕組みを理解するための記事

13技術仕様の確認日・参考情報

技術仕様確認日:2026-09-28/最終更新:2026-09-28
確認した内容情報源確認日
入力できる形式がPNG、JPEG、WEBP、HEIC、HEIFであること。直接埋め込む場合はリクエスト全体で20MBまでで、大きいファイルや再利用には Files API が勧められること。枠が [ymin, xmin, ymax, xmax] で0〜1000に正規化されること。384ピクセル以下は258トークン、それより大きい画像は768×768の区画ごとに258トークンであること。向きの確認と、テキストを画像の前に置くことが勧められていることGoogle AI for Developers: Image understanding2026-09-28
JSONスキーマで出力の形を指定でき、文字列に enum を使えること。構文として正しいJSONは保証されるが、値はアプリ側で確かめるよう求められていることGoogle AI for Developers: Structured outputs2026-09-28
Files API のファイルが48時間で自動削除され、手動でも削除できることGoogle AI for Developers: Files API2026-09-28
無料の枠では内容が製品の改善に使われ、人が読むことがあり、機密情報・個人情報を送らないよう求められること。有料の枠では改善に使わず、禁止された利用の検知のために限られた期間記録されることGemini API Additional Terms of Service2026-09-28

所管の区分や個人情報の取り扱いは、各自治体の規程に従ってください。 本記事は Google の公開ページで確認できた範囲だけを扱っています。

実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。

自社の業務に使えるAI活用候補を整理します

このユースケース(UC-0261)についてのご相談はこちらから。

AI活用について相談する
目次