ホテルのリネン室で撮ったシーツ・タオルのしみと破れの写真から、再洗い・補修・廃棄の区分を付け、品目ごとの廃棄枚数を補充の発注に使える形で集計する
リネン工場から戻ったシーツやタオルのうち、客室に出せないものをリネン室で撮影し、写真からしみ・破れの種類と大きさ、位置を見分けます。 自社の基準表で再洗い・補修・廃棄の区分を付け、品目ごとの廃棄枚数を補充の発注に使える形で集計します。
- 生成AI
- ChatGPT/Claude/Gemini
- 連携・自動化
- Google Apps Script/Make/Power Automate
- 対象業界
- 介護/医療/宿泊
- 対象部門
- 品質管理/購買
- 対象業務
- 分類・仕分け/集計・分析
- 主な課題
- データ分析に時間がかかる/人手が足りない/属人化している
- AIで行う処理
- 画像認識
- 主な効果
- 判断支援/品質標準化/工数削減
- 導入難易度
- ★★★☆☆
- 実装レベル
- 本格構成
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- リネン室の担当が、工場から戻ったリネンを広げ、不良のものを除く
- 除いたものを1枚ずつ見て、損傷の種類と大きさから区分を決める
- 品目ごと・区分ごとに、手書きの集計表に正の字で記入する
- 再洗いのものは工場の返却の袋に、補修のものは補修の棚に、廃棄のものは廃棄の袋に入れる
- 迷うものは課長の判断の棚に置き、課長が夕方にまとめて見る
- 月末に購買課の担当が集計表を数え直し、在庫表と合わせて補充の発注の数を決める
- 工場の扱いによると思われる破れが目立つ月は、購買課が実物を集めて工場に申し入れる
- 人リネン室の担当が、不良のものを除き、品目ごとにまとめる
- 人タブレットで品目のフォルダを選び、格子の付いた撮影台に1枚ずつ損傷の部分を広げて撮る
- 自動10分ごとに Google Apps Script が新しい写真を取り出し、Gemini API に渡す
- 自動Gemini API が、損傷の種類・大きさ(格子のマス数)・位置・再洗いの札の有無を返す
- 自動Apps Script が、基準表に当てはめて区分を付け、判定の一覧に書く
- 人担当が、タブレットの一覧で区分を見て、袋・棚に仕分ける。廃棄と「判断できない」は、写真と実物を見て確かめる
- 自動毎日の終わりに、品目ごと・区分ごとの枚数を集計表に書く
- 人購買課の担当が、毎週の集計で廃棄の増え方を見て、補充の発注の数を決める
- 人月に1回、購買課が「工場の扱いが疑われる損傷」の写真の一覧を見て、工場への申し入れを決める
各工程の詳しい説明を読む
- リネン室の担当が、工場から戻ったリネンを広げ、不良のものを除く
- 除いたものを1枚ずつ見て、損傷の種類と大きさから区分を決める
- 品目ごと・区分ごとに、手書きの集計表に正の字で記入する
- 再洗いのものは工場の返却の袋に、補修のものは補修の棚に、廃棄のものは廃棄の袋に入れる
- 迷うものは課長の判断の棚に置き、課長が夕方にまとめて見る
- 月末に購買課の担当が集計表を数え直し、在庫表と合わせて補充の発注の数を決める
- 工場の扱いによると思われる破れが目立つ月は、購買課が実物を集めて工場に申し入れる
(a)区分の判断が担当によって違う。 「このしみは落ちる」と見る担当は再洗いに、「何度洗っても残る」と見る担当は廃棄に回します。同じ月でも、早番と遅番で廃棄の割合が倍近く違うことがあります。 廃棄に寄れば補充の費用が増え、再洗いに寄れば工場の再洗いの費用と、同じリネンが何度も戻ってくる手間が増えます。
(b)再洗いが何度目かが分からない。 再洗いから戻って、まだしみが残っているリネンを、初めて見たものとして再び再洗いに回してしまいます。 2回目なら廃棄、と決めていても、1枚ずつの履歴が無いので守られません。
(c)集計が月末にしか分からない。 正の字の集計表は、月末に購買課が数え直すまで誰も合計を見ません。バスタオルの廃棄が月の前半に急に増えていても、気づくのは翌月です。
(d)工場への申し入れに根拠が残らない。 工場の機械による裂けと思われるものが続いても、実物は廃棄の袋に入ってしまい、申し入れのときには手元に数枚しかありません。 工場からは「たまたまでは」と返されます。
- 【人】 リネン室の担当が、不良のものを除き、品目ごとにまとめる
- 【人】 タブレットで品目のフォルダを選び、格子の付いた撮影台に1枚ずつ損傷の部分を広げて撮る
- 【自動】 10分ごとに Google Apps Script が新しい写真を取り出し、Gemini API に渡す
- 【自動】 Gemini API が、損傷の種類・大きさ(格子のマス数)・位置・再洗いの札の有無を返す
- 【自動】 Apps Script が、基準表に当てはめて区分を付け、判定の一覧に書く
- 【人】 担当が、タブレットの一覧で区分を見て、袋・棚に仕分ける。廃棄と「判断できない」は、写真と実物を見て確かめる
- 【自動】 毎日の終わりに、品目ごと・区分ごとの枚数を集計表に書く
- 【人】 購買課の担当が、毎週の集計で廃棄の増え方を見て、補充の発注の数を決める
- 【人】 月に1回、購買課が「工場の扱いが疑われる損傷」の写真の一覧を見て、工場への申し入れを決める
5番目が、この設計の分かれ目です。 区分はAIの答えではなく、AIが見た事実を基準表に当てはめた結果です。基準表は課長と購買課で決め、「縁の破れは1マス未満なら補修」「再洗いの札が付いていてしみが残れば廃棄」のように書きます。
6番目で人が確かめるのは、廃棄と「判断できない」だけです。 廃棄は取り返しがつかないので、写真と実物の両方を担当が見てから袋に入れます。 再洗いと補修は、間違えても次の工程で気づけるので、一覧で区分を見て仕分けるだけにします。
02今回想定するシステム構成
リネン室の撮影台(格子のマット)+タブレット │ 品目ごとのフォルダ(シーツ_シングル/シーツ_ダブル/枕カバー/バスタオル/フェイスタオル/バスマット) ▼ Google ドライブに保存 【トリガー】Google Apps Script の時間主導型トリガー(10分ごと) Google Apps Script ├── 処理済みの一覧と照らし、新しい写真だけを取り出す ▼ Gemini API ── 損傷の種類/大きさ(マス数)/位置(縁・中央)/再洗いの札の有無/写りの良し悪し ▼ Google Apps Script ── 基準表(スプレッドシート)に当てはめて区分を付ける ├──▶ 判定の一覧(タブレットで見る)── 区分、写真へのリンク、確認の要否 ├──▶ 日次の集計(品目×区分の枚数) └──▶ 工場の扱いが疑われる損傷の一覧(写真付き) ▼【人】廃棄と「判断できない」を確かめる/購買課が発注の数を決める
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 処理 | Gemini API(損傷の種類・大きさ・位置・札の有無の判定) | Claude API、OpenAI API |
| 連携 | Google Apps Script(写真の取り出し、呼び出し、基準表への当てはめ、集計) | Make、Power Automate |
| 連携 | Google スプレッドシート(基準表、判定の一覧、集計) | Microsoft Lists |
| 撮影 | タブレットと格子の付いた撮影台 | スマートフォンと三脚 |
| 保管 | Google ドライブ(品目ごとの写真のフォルダ) | Microsoft OneDrive |
新しく足すのは、撮影台とタブレット、Gemini API の利用だけです。 スプレッドシートとドライブは、在庫表で使っているものをそのまま使います。
判定の土台は、Gemini API の画像理解です。 対応する形式は PNG、JPEG、WEBP、HEIC、HEIF です。画像を直接リクエストに入れる場合、指示などと合わせたリクエスト全体が20MBまでとされています。タブレットの写真1枚と指示なら収まります。物体の位置は box_2d として [ymin, xmin, ymax, xmax] の形で、0から1000に正規化した座標で返せるとされているので、損傷の位置を写真の上に枠で示すこともできます。
呼び出しは、Interactions の書き方で行います。 公式のページの例は、POST https://generativelanguage.googleapis.com/v1beta/interactions を使っています。構造化出力も、response_format に mime_type: "application/json" とスキーマを入れて指定します。
Apps Script は、時間主導型トリガーで10分ごとに動かします。 1回の実行は6分までなので、1回に処理する写真の枚数を決めて、残りは次の回に回します。 1日の撮影は80枚前後で、10分ごとなら1回に数枚です。
03どうやって実装するのか
処理の起点を決める
時間主導型トリガーを10分ごとに動かし、品目のフォルダに新しく入った写真を処理します。 写真の保存そのものを起点にする方法もありますが、タブレットのアップロードの遅れで写真が途中の状態のまま処理されることがあるので、保存から2分以上たった写真だけを取り出します。
トリガーは、リネン室の共有のアカウントで作ります。 インストール型トリガーは、作った人のアカウントで動くとされています。担当者個人のアカウントで作ると、その人が異動したときに止まります。時刻は少しずれることがあるとされていますが、10分ごとの処理なら問題になりません。
リネンの到着の時間帯に合わせて、処理する時間を決めます。 工場の便は朝と午後の2回です。スクリプトの最初で時刻を見て、7時から20時の外なら何もせずに終わります。 夜間のトリガーの実行時間を節約できます。
トリガーの合計の実行時間には、1日の上限があります。 公式のページでは、一般のアカウントで1日90分、Google Workspace のアカウントで1日6時間とされています。7時から20時に10分ごとに動かすと1日78回で、写真の無い回は数秒で終わりますが、写真のある回は API の応答を待つ時間がかかります。 一般のアカウントでは足りなくなることがあるので、Google Workspace のアカウントで動かす前提にします。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 写真 | 撮影台に広げた不良のリネン1枚の写真 | 品目ごとのドライブのフォルダ |
| 品目 | シーツ_シングル、バスタオルなど | フォルダの名前 |
| 撮影台の決まり | 格子の1マスの大きさ(10cm)、札の色 | 指示の中に書く |
| 基準表 | 損傷の種類・大きさ・位置・札の有無の組み合わせごとの区分 | スプレッドシート |
| 処理済みの一覧 | 処理した写真のファイルID と結果 | スプレッドシート |
質を決めるのは、撮影台です。 格子のマットの上に広げれば、AIは損傷の大きさを「何マスか」で答えられます。 格子が無いと「大きい」「小さい」としか言えず、基準表に当てはめられません。マットは白いリネンが映える濃い色にし、格子は10cmの線で引きます。
再洗いの札は、2回目の不良を見分けるための決まりです。 再洗いに回すとき、リネンの角に赤い洗濯ばさみを付けます。工場から戻って再び不良になったものは、札が付いたまま撮影台に載ります。AIは札の有無だけを見て、基準表が「札があってしみが残れば廃棄」と決めます。 第3章の(b)を、写真に写る印で解きます。
データの取得方法を決める
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 新しい写真 | Apps Script でドライブの品目のフォルダを見る | 判定の対象 |
| 品目 | 写真が入っているフォルダの名前 | 判定の一覧と集計の品目 |
| 基準表 | Apps Script でスプレッドシートを読む | 区分の当てはめ |
| 処理済みの一覧 | 同上 | 同じ写真を二度処理しない |
品目は、AIに見分けさせずにフォルダで決めます。 シングルとダブルのシーツは、広げて撮った写真では見分けがつきません。担当が品目ごとにまとめて撮るので、フォルダを選ぶ手間は1束に1回です。 AIには、写真の品目がフォルダの品目と食い違って見えるときだけ、印を付けさせます。
写真は、ファイルの内容を Base64 にしてリクエストに入れます。 タブレットの写真は数MBなので、20MBの上限に収まります。撮影の解像度をタブレットの既定より下げると、しみの輪郭が粗くなるので、下げずに撮ります。
返ってきた box_2d は、写真の縦横の大きさに掛け直して使います。 座標は0から1000に正規化されているので、元の写真の幅と高さを掛けて1000で割れば、ピクセルの位置になります。 判定の一覧から写真を開いたときに、その位置に枠を重ねて見せれば、担当は大きなシーツの上で小さなしみを探さずに済みます。
AIへ渡す前に整形する
- 保存から2分以上たった写真だけを取る … アップロードの途中のファイルを処理しません
- 処理済みの一覧と照らす … ファイルID で照らし、二度処理しません
- ファイルの形式を確かめる … JPEG か HEIC 以外は、判定の一覧に「形式の確認が要る」と書きます
- 画像の向きを確かめる … 公式のページでも、画像の回転が正しいかを確かめるよう勧めています。タブレットの向きの設定を固定します
- ぶれた写真を除く … AIに写りの良し悪しを返させ、「ぶれ」「暗い」「格子が写っていない」は撮り直しに回します
5番目は、AIにさせる前処理です。 写りの悪い写真で判定させると、しみが「無い」と出て、不良のリネンが客室に戻ります。 写りの判定を先に置き、悪ければ損傷の判定をさせません。
AIに処理させる
させるのは、写真に写っている損傷の事実を、決まった選択肢で答えることだけです。
| 見るもの | 選択肢 | 判断できないときの扱い |
|---|---|---|
| 写りの良し悪し | ok / blurred / dark / no_grid | 悪ければ損傷を判定しない |
| 損傷の種類 | stain(しみ)/ tear(破れ)/ fray(ほつれ)/ burn(焦げ・穴)/ yellowing(全体の黄ばみ)/ none | 複数あればすべて挙げる |
| 大きさ | 格子のマス数で under_1 / 1_to_3 / over_3 | 格子が見えなければ unknown |
| 位置 | hem(縁から5cm以内)/ body(それ以外) | 分からなければ unknown |
| しみの色 | light(薄い)/ colored(色付き) | unknown |
| 破れの形 | straight(直線の裂け)/ irregular(不規則) | unknown |
| 再洗いの札 | present / absent | 写りで見えなければ unknown |
| 品目の食い違い | フォルダの品目と違って見えれば mismatch | - |
| させないこと | 理由 |
|---|---|
| 再洗い・補修・廃棄の区分を決める | 区分は基準表で決める。基準は後から変わる |
| しみの成分を推し量る | 血液か油かを写真で決めない。衛生の判断は人が行う |
| 工場の責任かどうかを決める | 「直線の裂け」という形を記録するだけ |
損傷を見つけられないときに none と決める | 写りが悪いなら写りの側で止める |
1行目が、この構成の要です。 AIに「廃棄すべきか」と聞けば答えますが、その答えの基準は誰も決めていません。 事実だけを返させ、区分は基準表で決めます。基準表の例です。
| 損傷 | 条件 | 区分 |
|---|---|---|
| しみ | 札なし | 再洗い |
| しみ | 札あり | 廃棄 |
| ほつれ・破れ | 縁、under_1 | 補修 |
| 破れ | 縁で 1_to_3 以上、または中央 | 廃棄 |
| 焦げ・穴、全体の黄ばみ | - | 廃棄 |
| いずれか | unknown を含む | 判断できない |
破れの形を記録するのは、第3章の(d)のためです。 直線の裂けは、機械に引っかけたときにできやすい形と現場で言われますが、それを工場の責任と決めるのは購買課と工場の話し合いです。AIは形を記録するだけで、写真付きの一覧が話し合いの材料になります。
指示内容を固定する
あなたはホテルのリネン室で、洗濯から戻った不良のリネンの写真を見て、
損傷の事実を記録する担当です。区分(再洗い・補修・廃棄)は決めないでください。
【撮影台の決まり】
- リネンは濃い色のマットの上に広げてあり、マットには10cm間隔の格子が引いてあります。
- 2回目の不良のリネンには、角に赤い洗濯ばさみ(再洗いの札)が付いています。
- この写真の品目は「{item}」です(フォルダの名前)。
【手順】
1. 最初に写りを判定してください(ok/blurred/dark/no_grid)。
ok でなければ、損傷の判定はせず damages を空にしてください。
2. 写っている損傷をすべて挙げてください。1枚に複数の損傷があれば、それぞれ1件にします。
3. 損傷ごとに、種類、格子のマス数での大きさ、位置(縁から5cm以内なら hem)、
しみなら色、破れなら形を選んでください。
4. 再洗いの札の有無を答えてください。
【厳守事項】
- 選択肢にないものは選ばず、分からなければ unknown にしてください。
- 損傷が見当たらないとき、写りが ok であれば none を1件だけ返してください。
写りが悪いのに none を返さないでください。
- しみの成分(血液、油、化粧品など)を推し量って書かないでください。
- 誰の責任か、工場の扱いによるものかを書かないでください。
- 写真の品目が「{item}」と違って見えるときは item_mismatch を true にしてください。
- note には、判断に迷った理由だけを短く書いてください。
「区分を決めないでください」を冒頭に書いているのは、何も言わなければ区分を答えるからです。 写真を見せて損傷を聞けば、AIは親切に「廃棄をおすすめします」と付け足します。その一言が判定の一覧に紛れ込むと、基準表の区分と食い違う答えが2つ並びます。
「写りが悪いのに none を返さない」も同じくらい大事です。 ぶれた写真の中のしみは、見えないだけで、無いわけではありません。写りの悪い写真が1日に何枚あったかを数えておくと、撮影台の照明や担当の撮り方を直す目安になります。
出力形式を固定する
次の形のJSONで受け取ります。 スキーマは response_format に入れ、選択肢は enum で決めます。
{
"photo_quality": "ok | blurred | dark | no_grid",
"damages": [
{
"type": "stain | tear | fray | burn | yellowing | none",
"size": "under_1 | 1_to_3 | over_3 | unknown",
"position": "hem | body | unknown",
"stain_color": "light | colored | unknown",
"tear_shape": "straight | irregular | unknown",
"box_2d": [0, 0, 0, 0]
}
],
"rewash_tag": "present | absent | unknown",
"item_mismatch": false,
"note": ""
}
1つ目の理由は、選択肢を enum で縛れることです。 公式のページでは、スキーマに合ったJSONでも値が意味の上で誤っていることがあり、アプリケーションの側で値を確かめるよう案内されています。選択肢が決まっていれば、基準表との突き合わせは文字列の一致で済み、想定外の値は Apps Script の側で「判断できない」に落とせます。
2つ目は、damages を配列にして複数の損傷を持てることです。 縁のほつれと中央のしみが同じシーツにあれば、基準表はいちばん重い区分を採ります。 1件にまとめさせると、どちらかが落ちます。
3つ目は、box_2d で損傷の位置を写真の上に示せることです。 判定の一覧で写真を開いたとき、枠の付いた写真なら担当は損傷を探さずに済みます。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| Google ドライブ | Apps Script の DriveApp | 品目のフォルダの新しい写真を読む |
| Gemini API | Apps Script の UrlFetchApp | 写真と指示を送り、JSONを受け取る |
| 基準表 | Apps Script の SpreadsheetApp | 区分を当てはめる |
| 判定の一覧 | 同上 | 区分、写真のリンク、確認の要否を書く |
| 集計表 | 同上(日次) | 品目×区分の枚数 |
| 在庫表 | 購買課が集計表と並べて見る | 自動では書き換えない |
在庫表は、この構成からは書き換えません。 廃棄の枚数を在庫から引くのは、担当が廃棄を確かめて袋に入れた後です。判定の一覧で「廃棄(確認済み)」になった枚数だけを、購買課が週に1回在庫表に反映します。
リネン工場には、この構成から何も送りません。 工場への申し入れは、購買課が写真付きの一覧を見て決め、話し合いの場で見せます。
人が確認する
人が必ず確かめるのは、廃棄と「判断できない」です。 再洗いと補修は、一覧で区分を見て仕分けます。
- 廃棄は写真と実物の両方を見る … 写真の枠の位置を実物で確かめ、廃棄の袋に入れたら一覧で「確認済み」にします
- 「判断できない」は課長の棚に置く … 課長が夕方にまとめて見て、区分を決めます。決めた区分は一覧に書き、基準表に足すかを週に1回考えます
- 撮り直しは、その場で撮る … 写りが悪いと出たものは、すぐに撮り直します
- 品目の食い違いは、フォルダを確かめる … 別の品目のフォルダで撮っていれば、ファイルを移します
- 再洗いと補修で違うと思ったら直す … 直した区分と理由を一覧に残します
2番目の「基準表に足すか」が、この構成を育てる部分です。 課長が「判断できない」に下した区分は、基準表に書かれていない組み合わせです。同じ組み合わせが続けば、基準表に1行足します。
タブレットで見る判定の一覧は、確認の要るものが上に来る並びにします。 「判断できない」「撮り直し」「廃棄(未確認)」を先頭に、再洗いと補修をその下に並べます。担当は上から順に片付ければ、確認の漏れが一覧の上に残って見えます。
目標は、2,400枚をならして1枚1分です。 撮影に数十秒、廃棄の確認に1分前後、再洗いと補修は一覧を見て仕分けるだけです。
例外に対処する
| 起きること | 対応 |
|---|---|
| 写真がぶれている・暗い | 損傷を判定しない。その場で撮り直す |
| 格子が写っていない | 大きさが unknown になる。撮影台の上で撮り直す |
| しみの色が分からない | 札が無ければ再洗い。2回目で残れば札で廃棄に回る |
| 1枚に損傷が複数ある | 基準表のいちばん重い区分を採る |
| 品目のフォルダを間違えた | item_mismatch が出る。担当がファイルを移す |
| Gemini API が応答しない | 処理済みにせず、次の回に再び取る |
| 想定外の値が返った | 「判断できない」に落とし、課長の棚へ |
| 血液などの汚れが疑われる | AIに判断させない。 担当が衛生の手順に沿って別に扱う |
| 1回の実行で写真が多すぎる | 6分の上限の前に止め、残りは次の回に回す |
| 再洗いの札が工場で外れて戻った | 札が無いので、しみは再洗いになる。同じしみの写真が続く品目を、購買課が月次の一覧で見る |
| 新しい品目を入れた | 品目のフォルダと、基準表の品目の列を先に足す。足す前に撮った写真は「判断できない」になる |
| 工場の便が遅れて夕方に集中した | 20時の外の写真は翌朝の最初の回で処理する |
上から3行目は、写真の限界です。 色の薄いしみは、照明によって見え方が変わります。それを写真で決めきろうとせず、再洗いの札で2回目に拾う設計にしています。
記録を残す
- 写真(品目のフォルダ)と、処理済みの一覧(ファイルID、処理の日時)
- Gemini API が返したJSONの全文と、そのときの基準表の版
- 区分と、人が直した区分と理由
- 廃棄を確かめた担当と日時
- 日次・月次の品目×区分の枚数
- 直線の裂けの件数と写真の一覧
基準表の版を残すのは、基準を変えたときに過去の集計の意味が変わるからです。 「札ありのしみは廃棄」を後から変えると、変える前の月の廃棄の枚数と比べられなくなります。
04実装レベルの3段階
最小構成では枚数がさばけません。 1日80枚を手で貼るのは続かないので、確かめるための段階です。 本記事の想定は本格構成です。 1枚3分が1分になるのは、区分を考える時間、集計表への記入、月末の数え直しが無くなるからです。 半自動化の段で1か月、損傷の事実の一覧だけを見てください。 基準表の当てはめを足す前に、どの品目にどの損傷が多いか、写りの悪い写真がどれくらい出るかが分かります。そこで撮影台と基準表の案を直してから区分を出すほうが、「判断できない」が少なく始められます。 本格構成の次に、発注の数の案まで出すことも考えられます。 品目ごとの廃棄の枚数と在庫表から、基準の在庫を下回る見込みの品目を出せます。ただし、発注の数を決めるのは購買課です。 繁忙期の予約の入り方や、新しい品目への切り替えは、表には出ません。
05工数削減シミュレーション
導入後 2,400件 × 1分 ÷ 60 = 40 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- シーツ・タオルなどのリネンを自社で保有し、洗濯をリネン工場に出しているホテル・旅館。工場から戻ったリネンのうち、しみや破れで客室に出せないものをリネン室の担当が見分けて、再洗いに戻すか、補修に回すか、捨てるかを決めている場合。その判断が担当によって違い、廃棄の枚数が月ごとに大きくぶれて、補充の発注の数が読めない場合。リネン室にタブレットを置ける場合。寝具やタオルを自前で持つ病院や介護施設にも当てはまります。
- リネンをリネンサプライ会社から借りており、不良品の交換を会社が行っている場合(自社で区分を付ける必要がない)。不良の枚数が月に数十枚で、目で見て数えれば足りる場合。リネンに個体の識別(RFIDのタグなど)を付けて、洗濯の回数で入れ替えを管理している場合は、別の設計が向きます。なお、しみの成分の判定、衛生上の安全の判断、リネン工場の責任の有無の判断は、この構成では代替できません。
07最小構成で試す方法
- リネン室の不良品から50枚を選び、ベテランの担当に区分を付けてもらう
- 格子のマットの上で50枚を撮る
- 手元のAIサービスに1枚ずつ写真を貼り、「損傷の種類、格子のマス数での大きさ、縁か中央かを答えてください。区分は決めないでください」と指示する
- 出てきた答えを基準表の案に当てはめ、ベテランの区分と突き合わせる
50枚には、担当によって区分が割れそうなものを入れてください。 基準表の案で、ベテランの判断がどこまで再現できるかを確かめます。
| 出てきた内容 | 判断 |
|---|---|
| 基準表で当てはめた区分がベテランとほぼ一致した | Apps Script でつなぐ |
| 大きさがずれる | 格子の写り方を見直す。撮影台の照明と高さを決める |
| ベテランと基準表の区分が割れる | 基準表が先。 ベテランが何を見ていたかを聞いて、表に足す |
3行目が出ることは珍しくありません。 ベテランの目は、基準表に書かれていない何かを見ています。それを聞き出して表に書くことが、この構成のいちばんの成果になることもあります。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| AIが区分を答えてしまう | 指示の冒頭で禁じ、スキーマに区分の欄を作らない |
| ぶれた写真でしみが無いと出る | 写りの判定を先に置き、悪ければ損傷を判定させない |
| 大きさが「大きい」としか出ない | 格子のマットで撮る。 選択肢をマス数にする |
| シングルとダブルのシーツを取り違える | 品目はフォルダで決める |
| 2回目の不良が再び再洗いに回る | 再洗いの札を付け、札の有無を見させる |
| 1回の実行が6分を超える | 1回の枚数を決め、残りを次の回に回す |
| 担当の異動でトリガーが止まる | 共有のアカウントでトリガーを作る |
| 基準表の変更で過去の集計が比べられない | 基準表の版を結果と一緒に残す |
| 衛生上の汚れまでAIに見させたくなる | AIに判断させず、衛生の手順で扱う |
| 撮影台の照明が時間帯で変わる | 窓の光の入らない場所に置き、撮影台の上の照明を固定する |
| 「判断できない」が減らない | 課長が下した区分を週に1回見直し、同じ組み合わせが続けば基準表に1行足す |
上の2行が、この構成の失敗のほとんどです。 どちらも、AIに答えを言わせすぎる失敗です。区分を言わせれば基準が消え、写りの悪い写真で判定させれば見逃しが出ます。事実だけを、決まった選択肢で、写りが良いときだけ答えさせれば、毎回同じように防げます。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: リネンの写真、品目、損傷の記録、廃棄の枚数です。個人の情報は扱わない設計にします。
- 撮影台の周りを写さない … 撮影台はリネン室の奥に置き、宿泊客の私物、客室の番号、従業員の顔が写らない向きにします。リネンに客の忘れ物が付いていれば、外してから撮ります
- 有料の枠で使う … Gemini API の規約では、無料の枠では送った内容が製品の改善に使われ、人が読むことがあり、機密や個人の情報を送らないよう求めているとされています。有料の枠では、プロンプトや応答を製品の改善に使わず、禁止事項の違反を見つけるために限った期間だけ記録するとされています
- 利用者の条件を確かめる … 規約では、18歳以上であることが必要とされ、18歳未満が使うか使う見込みのあるサービスでの利用を禁じています。 この構成はリネン室と購買課の従業員だけが使う社内の仕組みで、アルバイトに高校生がいる場合は、撮影とタブレットの操作をその人に任せない運用にします
- 衛生の判断をAIに任せない … 血液や体液が疑われる汚れは、写真の判定の対象から外し、施設の衛生の手順で扱います
- 工場の責任を写真だけで決めない … 直線の裂けの一覧は話し合いの材料です。工場との契約の取り決めに沿って、購買課が申し入れを決めます
- 廃棄を自動で確定させない … 廃棄は人が写真と実物を見てから確定します
誤りが起きた場合のリスクは、不良のリネンを客室に戻すことと、使えるリネンを捨てることの2つです。 前者は写りの悪い写真で判定させると起き、後者は廃棄を人が確かめないと起きます。写りの判定と廃棄の確認の2か所を、設計で守ります。
10まず何から始めるか
1週目:撮影台と基準表の案を作る
濃い色のマットに10cmの格子を引いた撮影台を作り、リネン室の奥に置きます。課長とベテランの担当で、損傷の種類・大きさ・位置・札の組み合わせごとの区分を、基準表の案に書き出します。
2週目:50枚で試す
不良品から50枚を選び、ベテランの区分を付けてから撮ります。手元のAIサービスで損傷の事実を答えさせ、基準表の案で当てはめた区分がベテランとどこまで一致するかを最優先で見ます。
3週目:再洗いの札を始める
再洗いに回すリネンに赤い洗濯ばさみを付ける決まりを、リネン室とリネン工場で始めます。工場には、札を外さずに洗って戻してもらうよう頼みます。
4週目:Apps Script でつなぐ
品目のフォルダ、Gemini API の呼び出し、判定の一覧までを作ります。この時点では区分を出さず、損傷の事実の一覧だけを見ます。
2か月目: 基準表への当てはめと日次の集計を足し、「判断できない」の件数を毎週数えます。3か月目以降: 1枚3分が何分になったかを実測し、購買課が月の途中で補充の発注を前倒しできるようになった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
対応する画像の形式が PNG、JPEG、WEBP、HEIC、HEIF であること。画像を直接入れる場合、指示などと合わせたリクエスト全体が20MBまでであること。物体の位置を box_2d として [ymin, xmin, ymax, xmax] の0〜1000の座標で返すこと。縦横とも384ピクセル以下の画像が258トークン、それより大きい画像は768×768の区画ごとに258トークンであること。画像の回転が正しいかを確かめるよう勧めていること。例が /v1beta/interactions を使っていること | Gemini API: Image understanding | 2026-10-08 |
構造化出力を /v1beta/interactions の response_format に mime_type: "application/json" とスキーマを入れて指定すること。enum と required が使えること。スキーマに合ったJSONでも値はアプリケーションの側で確かめるよう案内されていること | Gemini API: Structured output | 2026-10-08 |
| 18歳以上であることが必要で、18歳未満が使うか使う見込みのあるサービスでの利用を禁じていること。無料の枠では送った内容が製品の改善に使われ、人が読むことがあり、機密や個人の情報を送らないよう求めていること。有料の枠ではプロンプトや応答を製品の改善に使わず、禁止事項の違反を見つけるために限った期間だけ記録すること | Gemini API Additional Terms of Service | 2026-10-08 |
| インストール型トリガーが作った人のアカウントで動くこと。時間主導型トリガーの時刻が少しずれることがあること | Google Apps Script: Installable triggers | 2026-10-08 |
| 1回の実行時間が6分までであること。トリガーの合計の実行時間が一般のアカウントで1日90分、Google Workspace のアカウントで1日6時間であること | Google Apps Script: Quotas for Google Services | 2026-10-08 |
再洗い・補修・廃棄の基準、衛生上の扱い、リネン工場との取り決めは、施設の責任者と購買の担当が決めてください。 本記事は公開されている製品の仕様で確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-1140)についてのご相談はこちらから。
