レストラン・フードチーム向け

メニュー写真を構造化データテーブルに変換 — セクション見出しが料理行にならない

メニューはデータ抽出ではなく視覚的な魅力のためにデザインされています。価格は料理の横に配置されていますが、位置は一定ではありません。説明文は不規則な改行で複数行にわたります。セクション見出し(前菜、メイン、デザート)はカテゴリを視覚的に分けますが、従来のOCRで読み取ると幻のデータ行になります。このツールは視覚的な階層を読み取ります。セクションラベルはカテゴリ列に、料理名と価格はそれぞれの列に整列され、抽出されたすべてのフィールドは正しい位置に配置されます。印刷メニュー、ラミネート加工、手書きの黒板、複数ページのPDFなど、あらゆる形式に対応します。

レストラン運営者・メニューデジタル化チーム・競合調査アナリスト

JPG / PNG / PDF
あらゆるメニューレイアウト
XLSX / CSV / JSON
バッチ処理

メニュー写真から抽出できるデータ

必要な列名を入力するだけで、AIがメニュー上のどこに書かれているかではなく、その意味を理解して各値を抽出します。手書きの黒板スペシャルメニューも、PDFの高級レストランのラミネートメニューも、同じ列で構造化された出力になります。

基本料理データ

品名
説明
価格
カテゴリ / セクション

食事制限・栄養・運用属性

食事制限タグ (V, GF, NF)
辛さレベル
カロリー(記載がある場合)
商品コード

これは固定リストではありません。メニューに含まれる任意のフィールド名を入力できます。アレルゲン警告、ワインペアリング、産地表示など、同じ抽出ロジックが適用されます。

従来のOCRがメニューを文字化けさせる理由と、ビジュアルAIが構造を読み取る仕組み

メニューは、デザインが階層構造を伝える唯一のビジネス文書です。太字で中央揃えの「メイン料理」はデータ行ではなく、カテゴリの指示です。従来のOCRはテキストを読み順で処理し、視覚的な構造を単一のテキストストリームに平坦化します。料理名とセクション見出しの違いは完全に失われてしまいます。

問題点

01 価格が料理の横に浮いており、位置が揃っていない — OCRが誤った品目に価格を紐付けてしまう

メニューはグリッドではありません。価格は説明文の末尾に置かれ、タブのような空白で区切られている場合があります。また、列内で右揃えになり、左側の料理名と空白やリーダードットで視覚的につながっている場合もあります。料理名の直後に区切り文字なしでインラインで置かれることもあります。従来のOCRエンジンはページを上から下、左から右に読み取り、「グリルサーモン — レモンバターソースと季節の野菜添え — 28.00 — パン焼きリブアイ — 12オンスの牧草飼育牛にトリュフフライ添え — 34.50」のようなテキストを、ひとまとまりのブロックとして出力します。価格の$28.00はサーモンの説明文に紐付けられ、$34.50はリブアイから完全に切り離されてしまいます。その後、数時間に及ぶ手作業での修正が待っています — そしてそれは、半ダースものカテゴリにまたがる複数セクションのメニューを扱う前の話です。

02 説明文が不規則な改行で折り返される — パーサーが各断片を別々のフィールドとして扱う

「自家製パスタ、じっくり煮込んだラグーソース、ペコリーノ・ロマーノ、フレッシュバジル」のような料理の説明文は、列幅やフォントサイズによって2行から3行にわたることがあります。従来のOCRは各行の改行をデータの区切りとして読み取り、その説明文を3つの断片に分割して、それぞれを別々の行に割り当てるか、断片を連結するものの2行目と3行目を架空の料理に帰属させます。一方、その料理の実際の価格 — $26.00 — は1行目の右端に孤立したままです。その結果、1つの料理が3つの不完全な行を生成し、そのいずれにも完全な説明文と正しい価格の両方が含まれないスプレッドシートができあがります。4つのセクションに40品目があるメニューの場合、手作業による修正の負担は急速に増大します — レストラン運営フォーラムのユーザーは一貫して報告しており、専用ツールなしでのメニューのデジタル化にはメニュー1枚あたり60〜90分かかります。

03 セクション見出しがテーブル構造を壊す理由:OCRはタイトルと料理名を区別できない

「前菜」「メイン」「デザート」「サイド」— これらのセクションラベルは、料理名と同じ組版表現(太字、大きめのサイズ、目立つ配置)を使用しています。従来のパーサーは「前菜」を読み取り、1行目の料理として扱い、2行目に「トリュフシーザーサラダ | $16.50」を割り当てます。その結果、カテゴリラベルが価格列の空のデータ行として表示され、すべての料理がセクションの文脈を失い、40品のメニューが8行の幻の行を含む48行のスプレッドシートになります。これらの出力からデジタルメニューデータベースを構築しようとするレストラン運営者は、セクション見出しの行を削除し、カテゴリを手動で再割り当てするのに、ゼロからデータを入力するのと同じくらいの時間を費やします。

カスタム列抽出が解決する方法

01 視覚的な近接性を読み取る — 価格は料理に対応付けられる

カスタム列抽出 — ImageToTable.ai の基盤となる仕組み — はテキストを順番に読み取りません。「品名」「説明」「価格」などの列名を入力すると、AIはページ全体から各値を、意味的に何であるか、視覚的に何に属するかを理解して特定します。料理名の右側に配置された価格は、同じテキスト行に表示されるからではなく、視覚的な近接性を共有しているため、その料理に属すると理解されます。2行にまたがる説明は、別々の断片ではなく、1つの連続したテキストブロックとして読み取られます。つまり、リーダードットの後ろに右寄せされた価格、2行レイアウトで料理名の下に積み重ねられた価格、説明の後ろにインラインで配置された価格 — メニュー設計者が選んだどの配置でも — 各料理行の価格が「価格」列に正しく入ったクリーンな出力が得られます。

02 セクション見出しは構造として認識され、データとしては扱われない — 「カテゴリ」列になる

AIが太字・中央寄せ・上部に空白のある「前菜」を検出した場合、それを料理名として抽出しません。完全な視覚的コンテキストを読み取ります。「前菜」というラベルの後には、それぞれ独自の名前・説明・価格を持つ複数の料理が続きます。AIは「前菜」がメニュー項目ではなくカテゴリ指定であることを理解し、その下にあるすべての料理を「カテゴリ」列に「前菜」または「オードブル」として割り当てます。次のセクション見出し「メイン」が現れると、カテゴリの割り当てはそれに応じて切り替わります。出力は、各行にカテゴリフィールドが入力され、セクション見出しが幽霊のような料理行として現れないクリーンなテーブルです。カテゴリが2ページ目の下部から3ページ目の上部にまたがる複数ページのメニューの場合、AIはページ区切りを越えてセクションコンテキストを追跡し続けるため、カテゴリなしで取り残される料理はありません。

03 属性フィールド(食事制限タグ、辛さレベル、カロリーなど)は、パターンマッチングではなく意味認識によって抽出されます

メニューは食事制限や栄養情報を一貫性のない方法で伝えます。ベジタリアン表示は「V」アイコン、緑の葉のシンボル、「Vegan」という文字、または「(v)」の場合があります。辛さレベルは、チリアイコン1〜5個、「mild/medium/hot」という言葉、または辛さスケールの数字で表されることがあります。カロリーは説明の後に「(450 cal)」とインラインで印刷されたり、独自のヘッダーを持つ別の「Cal」列として表示されたりします。従来のOCRは「V」「450 cal」「🌶️🌶️」などの文字を読み取ることはできますが、それらが何を意味するのか、どの料理に属するのかを解釈することはできません。AIはこれらの属性を意味的に読み取ります。「(v)」が料理名の近くにあればベジタリアンタグを示すこと、「🔥🔥🔥」が辛さレベル3/5を示すことを理解し、それぞれを出力の正しい料理行と正しい列に割り当てます。メニューがテキストラベルのないアイコン(数字のないチリ絵文字など)を使用している場合でも、辛さレベル列を定義すれば、AIはアイコンの数を辛さレベルとして解釈できます。

メニュー写真から構造化されたスプレッドシートへ:ワークフローの流れ

オンライン注文プラットフォーム用にメニューをデジタル化する場合、複数のレストラン拠点にわたる競争力のある価格データベースを構築する場合、または料理研究プロジェクト用に過去のメニューをアーカイブする場合、このツールがメニューごとの設定なしで写真を構造化データに変換する方法をご紹介します。

1

メニュー写真をアップロード — 形式、レイアウト、ソースは問いません

スマートフォンで撮影した黒板のスペシャルメニュー写真、ラミネート加工された店内メニューのスキャンPDF、デジタルQRコードメニューのスクリーンショット、複数ページのテイクアウトメニューなど、あらゆるソースからメニュー画像やPDFを取り込めます。JPG、PNG、WebP、PDFに対応。複数店舗を展開するレストラングループでは、バッチ処理をご利用ください。全店舗のメニューを1回のセッションでアップロードすると、各料理が1行にまとめられ、店舗識別子が付いた単一の統合スプレッドシートが出力されます。店舗ごとに個別のジョブを実行する必要はありません。フランチャイズ加盟店、フィールドリサーチャー、ベンダーパートナーなど外部の協力者からメニューを収集する場合は、コレクションリンクを生成してください。短い認証コードを入力するだけで、誰でもメニュー写真を処理キューに直接アップロードできる共有URLです。アップロード側のアカウントやログインは不要です。

2

列名を一度設定するだけで、すべてのメニューが同じフィールドリストで処理されます

「品名」「説明」「価格」「カテゴリ」「食事制限タグ」「辛さレベル」「カロリー」「商品コード」など、必要な列を入力します。同じ列定義がバッチ内のすべてのメニューに適用されるため、ラミネート加工された高級レストランのPDFも手書きの黒板メニューの写真も、同じ構造化形式で出力されます。カロリー抽出に特化する場合は、列名に「カロリー(印刷されている場合)」と入力してください。AIがメニューにカロリー値が記載されている場合のみ抽出し、記載がない場合はセルを空白のままにするため、データ欠落による行の損失なく完全なデータセットが得られます。定期的なメニュー更新サイクル(レストラングループの四半期ごとのメニュー変更など)では、ログインして列設定をテンプレートとして保存できます。新しいバッチごとにフィールド名を再入力する必要なく、テンプレートを再利用できます。計算列機能を使用すると、抽出中に実行される計算を定義することもできます。たとえば、「USDでの価格(通貨がUSDの場合は価格×1.0)」という列は、複数通貨のメニューを単一の出力列に正規化します。

3

構造化されたスプレッドシートをダウンロード — 料理ごとに1行、すべてのフィールドが正しい列に

各料理は出力で1行になります。4つのセクションにわたる45項目のメニューは45行を生成します — 削除が必要な4行のセクションヘッダー行が追加される49行ではありません。料理名は品名列に、説明は説明列に、価格は価格列に入力され、各行のセクションヘッダーはカテゴリ列に入力されます。食事制限タグ、辛さレベル、カロリーデータは、メニューに含まれていた場合、それぞれの列に表示されます。Excelでのメニューデータベース管理用にXLSX、POSシステムやオンライン注文プラットフォームへのインポート用にCSV、API直接統合用にJSONとしてエクスポートできます。手動データ入力に丸1日かかる10店舗分のメニューのバッチが数分で完了します — そして、各店舗のメニューデザインがどれほど異なっていても、出力形式は全店舗で一貫しています。

メニュー抽出が最も効果的なケースと、スポットチェックが役立つケース

最適なケース

レイアウトや列構成を問わない標準的な印刷メニュー。 1列、2列、複数セクションのメニューでも、料理名と価格の対応が明確であれば確実に抽出できます。価格が説明文の後ろにある場合、右列に揃っている場合、料理名の下に積み重なっている場合でも、AIが視覚的な近接性を読み取り、各価格を正しい料理に割り当てます。店舗間で一貫したメニュー形式を持つレストランチェーンでは、ほぼ完璧なバッチ出力が得られます。

照明が良く、正面から撮影した手書きの黒板メニューや日替わりメニュー。 AIはブロック体、標準的な筆記体、黒板へのフェルトペン書きなど、さまざまな手書き文字を読み取り、料理名、説明、価格を抽出します。正面から均一な照明で撮影した写真が最良の結果をもたらします。ラミネート面の映り込みや黒板の反射で文字が読みにくくなる場合があるため、カメラの角度を少し変えて反射を抑えてください。

前菜、メイン、デザートなどのカテゴリ見出しがある複数セクションのメニュー。 セクションラベルは構造ラベルとして認識され、その下のすべての料理のカテゴリ列に割り当てられます。6つのセクションがあるメニューでは、各料理行に正しいカテゴリが入力された出力が生成され、抽出後の手動カテゴリタグ付けは不要です。セクションがページをまたいで続く複数ページのメニューでも、カテゴリのコンテキストは継続的に維持されます。

注意が必要な場合

装飾性の高いカリグラフィーや凝った表示フォント。 様式化された文字形(過度なセリフ、極端な合字、通常の高さの3倍にもなる降部にループする手書き文字など)は、文字レベルの認識エラーを引き起こす可能性があります。カリグラフィー風の装飾が施された料理名は、「Caesar Salad」ではなく「Caesat Sa[ad」と出力されることがあります。クリーンなセリフ体やサンセリフ体を使用したメニューは、大きな装飾サイズでも確実に抽出できます。メニューで料理名にカリグラファーがデザインした見出しフォントを使用している場合は、出力内の該当項目をスポットチェックしてください。

非ラテン文字のメニュー(中国語、日本語、アラビア語、韓国語、タイ語)。 このツールは、あらゆる文字のメニューから料理名と構造を抽出します。視覚的な階層認識は言語に関係なく機能します。ただし、新しい文字の最初の数項目については精度を確認してください。非ラテン文字体系の文字レベル認識は、フォントの明瞭さと文字密度に依存します。明瞭な書体で印刷された中国語・日本語のメニューは良好に抽出されますが、密度の高い手書き漢字や高度に様式化されたアラビア語カリグラフィーは精度が低下する可能性があります。

斜め・折り目・影のある写真、および価格の記載がないメニュー。 急な角度で撮影された写真はテキストの形状を歪め、抽出精度を低下させます。中央に折り目が入った状態で撮影されたメニューは、折り線に沿って文字が欠落する可能性があります。価格が印刷されていないメニュー(テイスティングメニュー、プリフィックス、「店員にお尋ねください」方式など)は、料理名と説明は正しく抽出されますが、価格列は単に空のままになります。AIはソース画像に存在しない価格を生成することはありません。

よくある質問

「Appetizers」などのセクション見出しと実際の料理名を区別できますか?

はい、これが本ツールの核となる機能です。従来のOCRはテキストを直線的に読み取り、「Appetizers」をデータ行として扱います。本ツールは視覚的なレイアウトと意味的な文脈を読み取ります。セクション見出しを構造ラベルとして認識し、その下にあるすべての料理を「カテゴリ」列に割り当てます。その結果、各料理行に正しいカテゴリが入力され、価格欄が空の「幽霊料理」としてセクション見出しが表示されることはありません。これは印刷メニュー、手書きの黒板メニュー、複数ページのPDFでも機能します。

ベジタリアン、グルテンフリー、ナッツフリーなどの食事制限タグをメニュー写真から抽出できますか?

はい。AIは「食事制限タグ」列を定義すると、あらゆる形式の食事制限表示を読み取ります。テキストラベル(V、VG、GF、NF、DF)、アイコン表示(葉のシンボル、麦に取り消し線のアイコン)、料理の説明文内の略語(例:説明文末尾の「(v)」や「(gf)」)などです。AIは各表示が属する料理の文脈で読み取ります。「Pasta Primavera」の横にある「GF」ラベルは、その料理行の「食事制限タグ」列にのみ入力されます。メニューがテキストなしのアイコンのみを使用している場合は、オプション付きで列を定義してください(例:「食事制限タグ(オプション:ベジタリアン、ビーガン、グルテンフリー、ナッツフリー、乳製品フリー)」)。AIがアイコンを解釈し、指定したカテゴリにマッピングします。

メニューにカロリーが記載されていない場合、すべての行がエラーになりますか、それともツールが列をスキップしますか?

どちらでもありません。「カロリー(記載がある場合)」を列名として入力すると、AIはメニューにカロリー値が表示されている箇所を抽出し、カロリー情報が印刷されていない料理のセルは空白のままにします。45品目のメニューで15品目のみにカロリーデータがある場合、45行が生成されます。全45行に完全な料理名、説明、価格が入力され、15行にカロリー値が入力され、30行のカロリーセルは空白になります。出力は行が欠落したり、データが捏造されたりしない完全なデータセットです。同じロジックは、すべてのメニューに存在するとは限らないあらゆるフィールド(辛さレベルの表示、商品コード、一部の品目にのみ表示される食事制限タグなど)にも適用されます。

複数の店舗のメニューを一度にバッチ処理し、各店舗のデータを分離できますか?

はい。すべての店舗のメニュー写真を1つのバッチでアップロードできます。店舗ごとにデータを分離するには、フィールドリストに「店舗」または「レストラン名」列を含めます。AIはこれをメニュー自体から抽出しません(メニューにレストラン名がすべてのページに印刷されることはほとんどありません)が、バッチアップロード時のファイル名を利用できます。アップロード前に各ファイルに店舗識別子を付け、出力スプレッドシートには店舗キーとして機能するファイル名列が含まれます。あるいは、各店舗のメニューを別々のバッチジョブとしてアップロードすることもできます。列設定は同じままで、各バッチが独自の出力ファイルを生成します。20以上の店舗で四半期ごとにメニューを更新するレストラングループの場合、抽出テンプレートを一度保存し、各四半期の更新バッチに対して実行できます。

手書きのメニュー(チョークやマーカーで書かれた日替わりスペシャルボードなど)でも機能しますか?

はい、精度に影響する条件はありますが、機能します。AIはブロック体、大文字小文字混在の活字体、標準的な筆記体など、さまざまな手書き文字でトレーニングされています。均一で拡散した照明の下で正面から撮影したチョークボードのスペシャルメニューは、良好な抽出結果が得られます。料理名、価格、短い説明文は確実に抽出されます。手書きの精度に最も影響する3つの要因は、照明(曲面のチョークボードに影がかかると文字が不明瞭になる)、角度(斜めから撮影した写真は文字の形状が歪む)、文字の装飾性(装飾的なはねや払いのある高度に装飾された手書き文字は、文字レベルの精度を低下させる)です。最良の結果を得るには、ボードを自然光または均一な人工光の下で正面から撮影し、メニューエリアでフレームを埋め、文字に影がかからないようにしてください。数文字が誤認識された場合(「Tomato」ではなく「TomatO」など)、エラーは通常軽微で、出力されたスプレッドシートで簡単に確認できます。

📮 contact email: [email protected]