Pour Restaurants & Équipes Culinaires

Convertissez n'importe quelle photo de menu en tableau structuré — sans que les en-têtes de section deviennent des lignes de plats

Les menus sont conçus pour l'attrait visuel, pas pour l'extraction de données. Les prix flottent à côté des plats sans alignement cohérent. Les descriptions s'étendent sur plusieurs sauts de ligne irréguliers. Les en-têtes de section — Entrées, Plats, Desserts — séparent visuellement les catégories mais deviennent des lignes de données fantômes lues par l'OCR traditionnel. Cet outil lit la hiérarchie visuelle : les étiquettes de section restent dans une colonne Catégorie, les noms de plats et les prix s'alignent dans leurs propres colonnes, et chaque champ extrait atterrit là où il doit être — que le menu soit imprimé, plastifié, écrit à la main sur une ardoise, ou un PDF multipage.

Exploitants de restaurant · Équipes de numérisation de menus · Analystes de veille concurrentielle

JPG / PNG / PDF
Toute disposition de menu
XLSX / CSV / JSON
Traitement par lots

Ce que vous pouvez extraire d'une photo de menu

Saisissez les noms de colonnes dont vous avez besoin — l'IA trouve chaque valeur sur n'importe quel menu en comprenant ce qu'elle signifie, pas où elle se trouve sur la page. Un tableau d'ardoise manuscrite et un menu gastronomique plastifié en PDF produisent une sortie structurée dans les mêmes colonnes.

Données principales du plat

Nom du plat
Description
Prix
Catégorie / Section

Attributs diététiques, nutritionnels et opérationnels

Labels diététiques (V, GF, NF)
Niveau d'épices
Calories (si indiquées)
Code article

Ce n'est pas une liste exhaustive — saisissez tout nom de champ présent dans vos menus. Allergènes, accords mets-vins, labels d'origine : la même logique d'extraction s'applique.

Pourquoi l'OCR traditionnel transforme un menu en texte illisible — et comment l'IA visuelle lit la structure

Les menus sont le seul document professionnel où le design communique la hiérarchie : un « Plats » en gras et centré n'est pas une ligne de données — c'est une instruction de catégorie. L'OCR traditionnel lit le texte dans l'ordre de lecture et aplatit la structure visuelle en un seul flux textuel. La différence entre un nom de plat et un en-tête de section est totalement perdue.

Le problème

01 Les prix flottent à côté des plats sans alignement cohérent — et l'OCR les rattache au mauvais élément

Un menu n'est pas une grille. Les prix peuvent se trouver à la fin d'une ligne de description, séparés par un espace de type tabulation. Ils peuvent être alignés à droite dans une colonne, visuellement reliés au nom du plat à gauche par des espaces et des points de suite. Ils peuvent être en ligne après le nom du plat sans aucun séparateur. Un moteur d'OCR traditionnel lit la page de haut en bas, de gauche à droite, produisant un texte où « Saumon Grillé — Accompagné d'une sauce au beurre citronné et de légumes de saison — 28.00 — Entrecôte Poêlée — 340g de bœuf nourri à l'herbe avec frites truffées — 34.50 » devient un bloc indifférencié. Le prix 28,00 € est rattaché à la description du saumon ; le prix 34,50 € est complètement séparé de l'entrecôte. Des heures de nettoyage manuel suivent — et ce, avant même de traiter les menus multi-sections couvrant une demi-douzaine de catégories.

02 Les descriptions se répartissent sur des sauts de ligne irréguliers — et l'analyseur traite chaque fragment comme un champ distinct

Une description de plat comme « Pâtes maison, ragù d'agneau mijoté, pecorino romano, basilic frais » peut s'étendre sur deux ou trois lignes selon la largeur de la colonne et la taille de la police. L'OCR traditionnel interprète chaque saut de ligne comme une limite de données : il divise cette description en trois fragments et attribue chaque fragment à une ligne distincte, ou concatène les fragments mais attribue les lignes 2 et 3 à des plats fantômes. Pendant ce temps, le prix réel de ce plat — 26,00 € — reste isolé dans l'espace d'extrême droite de la ligne 1. Le résultat est un tableur où un plat produit trois lignes partielles, dont aucune n'a à la fois une description complète et le bon prix. Pour un menu de 40 plats répartis en quatre sections, la charge de correction manuelle se multiplie rapidement — les utilisateurs sur les forums d'exploitation de restaurants rapportent régulièrement que la numérisation de menus sans outils spécialisés prend 60 à 90 minutes par menu.

03 Les en-têtes de section brisent la structure du tableau, car l'OCR ne distingue pas un titre d'un nom de plat

« Entrées », « Plats », « Desserts », « Accompagnements » — ces étiquettes de section utilisent le même vocabulaire typographique que les noms de plats : gras, taille plus grande, emplacement proéminent. Un analyseur classique lit « Entrées » et le traite comme un plat à la ligne 1, puis attribue « Salade Caesar à la truffe | 16,50 $ » à la ligne 2. Le résultat est un tableur où les étiquettes de catégorie apparaissent comme des lignes de données avec des colonnes de prix vides, chaque plat perd son contexte de section, et un menu de 40 articles produit un tableur de 48 lignes avec 8 lignes fantômes. Les restaurateurs qui tentent de construire une base de données de menus numériques à partir de ces sorties passent autant de temps à supprimer les lignes d'en-tête de section et à réaffecter manuellement les catégories qu'à saisir les données eux-mêmes.

Comment l'extraction par colonne personnalisée résout ce problème

01 Lit la proximité visuelle, pas l'ordre linéaire du texte — les prix restent liés à leurs plats

L'extraction personnalisée de colonnes — le mécanisme derrière ImageToTable.ai — ne lit pas le texte séquentiellement. Lorsque vous saisissez des noms de colonnes comme « Nom du plat », « Description » et « Prix », l'IA localise chaque valeur sur l'ensemble de la page en comprenant sa sémantique et son appartenance visuelle. Un prix aligné à droite d'un nom de plat est compris comme appartenant à ce plat car il partage une proximité visuelle, et non parce qu'il apparaît sur la même ligne de texte. Une description s'étendant sur deux lignes est lue comme un bloc de texte continu, et non comme des fragments séparés. Ainsi, un menu avec des prix alignés à droite derrière des points de conduite, des prix empilés sous les noms de plats dans une mise en page sur deux lignes, et des prix en ligne après les descriptions — quelle que soit l'alignement choisi par le créateur du menu — produit une sortie propre où chaque ligne de plat a son prix correct dans la colonne Prix.

02 Les en-têtes de section sont reconnus comme structure, pas comme données — et deviennent une colonne Catégorie

Lorsque l'IA rencontre « Entrées » en gras, centré et avec un espace blanc au-dessus, elle ne l'extrait pas comme un nom de plat. Elle lit le contexte visuel complet : le libellé « Entrées » est suivi de plusieurs plats avec leurs propres noms, descriptions et prix. Elle comprend que « Entrées » est une désignation de catégorie, pas un élément de menu, et attribue chaque plat en dessous à la colonne Catégorie comme « Entrées » ou « Hors-d'œuvre ». Lorsque l'en-tête de section suivante — « Plats principaux » — apparaît, l'attribution de la catégorie change en conséquence. Le résultat est un tableau propre où chaque ligne a un champ Catégorie renseigné, et aucun en-tête de section n'apparaît comme une ligne de plat fantôme. Pour les menus de plusieurs pages où une catégorie peut s'étendre du bas de la page 2 au haut de la page 3, l'IA continue de suivre le contexte de la section à travers les sauts de page, afin qu'aucun plat ne soit orphelin sans catégorie.

03 Les champs d'attributs — étiquettes diététiques, niveaux d'épices, calories — sont extraits par reconnaissance sémantique, et non par correspondance de motifs

Les menus communiquent les informations diététiques et nutritionnelles de manière incohérente. Un indicateur végétarien peut être une icône "V", un symbole de feuille verte, le mot "Vegan" ou "(v)". Un niveau d'épice peut être représenté par une à cinq icônes de piment, les mots "doux/moyen/fort", ou un nombre sur une échelle de chaleur. Les calories peuvent être imprimées comme "(450 cal)" en ligne après la description ou comme une colonne "Cal" distincte avec son propre en-tête. L'OCR traditionnel peut lire les caractères — "V", "450 cal", "🌶️🌶️" — mais ne peut pas interpréter ce qu'ils signifient ni à quel plat ils appartiennent. L'IA lit ces attributs de manière sémantique : elle comprend que "(v)" près d'un nom de plat indique une étiquette végétarienne, que "🔥🔥🔥" indique un niveau d'épice de 3/5, et elle attribue chacun à la bonne ligne de plat et à la bonne colonne dans votre sortie. Si un menu utilise des icônes sans étiquettes textuelles (un emoji piment sans nombre), l'IA peut toujours interpréter le nombre d'icônes comme un niveau de chaleur lorsque vous définissez une colonne Niveau d'épice.

De la photo du menu au tableur structuré : à quoi ressemble le flux de travail

Que vous numérisiez des menus pour une plateforme de commande en ligne, construisiez une base de données de prix concurrentiels dans plusieurs restaurants, ou archiviez des menus historiques pour un projet de recherche culinaire, voici comment l'outil transforme une photo en données structurées sans configuration par menu.

1

Importez vos photos de menu — tout format, toute mise en page, toute source

Déposez des images ou PDF de menu de n'importe quelle source : une photo smartphone d'une ardoise spéciale, un PDF scanné d'un menu plastifié, une capture d'écran d'un menu QR-code numérique, ou un dépliant à emporter. L'outil accepte JPG, PNG, WebP et PDF. Pour les groupes de restaurants avec plusieurs établissements, utilisez le traitement par lots : importez les menus de tous les sites en une seule session et recevez un tableur consolidé où chaque plat est une ligne avec un identifiant de lieu — pas de traitement séparé par établissement. Pour collecter des menus auprès de contributeurs externes — franchisés, chercheurs terrain ou partenaires — générez un Lien de collecte : une URL partageable où chacun peut importer des photos de menu directement dans votre file de traitement en saisissant un court code de vérification, sans compte ni connexion requis.

2

Nommez vos colonnes une fois — chaque menu est traité avec la même liste de champs

Saisissez les colonnes souhaitées : « Nom du plat », « Description », « Prix », « Catégorie », « Étiquettes diététiques », « Niveau d'épice », « Calories », « Code article ». La même définition de colonne traite chaque menu du lot — un PDF gastronomique plastifié et une photo d'ardoise manuscrite produisent un résultat dans le même format structuré. Pour l'extraction des calories, tapez « Calories (si imprimées) » comme nom de colonne — l'IA extrait les valeurs caloriques lorsqu'elles figurent sur le menu et laisse la cellule vide dans le cas contraire, vous obtenez ainsi un jeu de données complet sans perdre de lignes. Pour les cycles de mise à jour récurrents — changements de menu trimestriels dans un groupe de restaurants — connectez-vous et enregistrez votre configuration de colonnes comme modèle : réutilisez-la sur chaque nouveau lot sans retaper les noms de champs. La fonction Colonnes calculées permet aussi de définir des calculs exécutés lors de l'extraction : par exemple, une colonne « Prix en USD (Prix × 1,0 si devise = USD) » normalise les menus multidevises en une seule colonne de sortie.

3

Téléchargez le tableur structuré — une ligne par plat, chaque champ dans la bonne colonne

Chaque plat devient une ligne dans le fichier de sortie. Un menu de 45 plats répartis en quatre sections produit 45 lignes — pas 49 avec quatre lignes d'en-tête de section à supprimer. Les noms des plats remplissent la colonne Nom de l'article, les descriptions la colonne Description, les prix la colonne Prix, et l'en-tête de chaque section remplit la colonne Catégorie. Les étiquettes diététiques, niveaux d'épices et calories apparaissent dans leurs colonnes respectives si le menu les inclut. Exportez en XLSX pour la gestion de base de données de menus dans Excel, en CSV pour l'importation dans les systèmes de caisse ou les plateformes de commande en ligne, ou en JSON pour une intégration API directe. Un lot de 10 menus par établissement qui nécessiterait une journée complète de saisie manuelle est traité en quelques minutes — et le format de sortie est cohérent pour chaque établissement, quelle que soit la diversité de conception des menus.

Quand l'extraction de menu fonctionne le mieux — et quand une vérification ponctuelle est utile

Quand ça fonctionne le mieux

Menus imprimés standard, quelle que soit la mise en page ou la configuration des colonnes. Menus à une ou deux colonnes, ou multi-sections avec des relations claires entre noms de plats et prix. Que les prix soient placés en ligne après les descriptions, alignés dans une colonne de droite, ou empilés sous les noms des plats — l'IA lit la proximité visuelle pour attribuer chaque prix au bon plat. Les chaînes de restaurants avec des formats de menus cohérents d'un établissement à l'autre produisent des résultats quasi parfaits en lot.

Menus manuscrits sur ardoise et suggestions du jour photographiés de face avec un bon éclairage. L'IA lit différentes écritures — lettres capitales, cursive standard, marqueur sur ardoise — et extrait les noms des plats, descriptions et prix. Les photos de face avec un éclairage uniforme donnent les meilleurs résultats. Les reflets sur les surfaces plastifiées ou les ardoises peuvent masquer les caractères ; inclinez légèrement l'appareil pour réduire la réflexion.

Menus multi-sections avec en-têtes de catégories comme Entrées, Plats principaux et Desserts. Les libellés de section sont reconnus comme des étiquettes de structure et attribués à la colonne Catégorie pour chaque plat en dessous. Un menu avec six sections produit un résultat où chaque ligne de plat a sa catégorie correcte renseignée — aucun étiquetage manuel après extraction. Les menus multipages où une section s'étend sur plusieurs pages conservent le contexte de catégorie en continu.

Quand être prudent

Calligraphie très décorative ou polices d'affichage ornées. Les lettres stylisées — empattements fleuris, ligatures extrêmes, lettrage manuscrit où un 'g' forme une boucle trois fois plus haute que la normale — peuvent provoquer des erreurs de reconnaissance au niveau des caractères. Un nom de plat avec une calligraphie lourde pourrait donner "Caesat Sa[ad" au lieu de "Caesar Salad". Les menus utilisant des polices serif ou sans-serif propres, même en grandes tailles décoratives, s'extraient de manière fiable. Si votre menu utilise une police d'en-tête conçue par un calligraphe pour les noms de plats, vérifiez ces éléments dans le résultat.

Menus en écriture non latine (chinois, japonais, arabe, coréen, thaï). L'outil extrait les noms de plats et la structure des menus dans n'importe quelle écriture — la même reconnaissance de hiérarchie visuelle fonctionne quelle que soit la langue. Cependant, vérifiez la précision sur les premiers éléments d'une nouvelle écriture : la reconnaissance au niveau des caractères pour les systèmes d'écriture non latins dépend de la clarté de la police et de la densité des caractères. Les menus chinois et japonais imprimés avec des polices claires s'extraient bien ; les kanji manuscrits denses ou la calligraphie arabe très stylisée peuvent donner une précision moindre.

Photos inclinées, pliées ou ombrées — et menus sans aucun prix. Les photos prises sous un angle prononcé déforment la géométrie du texte et réduisent la précision de l'extraction. Un menu photographié avec un pli au milieu peut perdre des caractères le long de la ligne de pliure. Les menus sans prix imprimés — menus dégustation, prix fixe, « demandez à votre serveur » — extrairont correctement les noms de plats et les descriptions ; la colonne Prix reste simplement vide. L'IA n'invente pas de prix quand il n'y en a pas sur l'image source.

Questions fréquentes

L'outil peut-il distinguer les en-têtes de section comme « Entrées » des noms de plats réels ?

Oui — c'est la fonctionnalité principale. La ROC traditionnelle lit le texte linéairement et traite « Entrées » comme une ligne de données. Cet outil lit la disposition visuelle et le contexte sémantique : il reconnaît les en-têtes de section comme des étiquettes structurelles et attribue chaque plat en dessous à la colonne Catégorie. Le résultat est un tableau où chaque ligne de plat a sa catégorie correcte renseignée, et aucun en-tête de section n'apparaît comme un plat fantôme avec un champ de prix vide. Cela fonctionne sur les menus imprimés, les tableaux noirs manuscrits et les PDF multipages.

Peut-il extraire des étiquettes diététiques comme végétarien, sans gluten ou sans noix à partir de photos de menus ?

Oui. Lorsque vous définissez une colonne « Étiquettes diététiques », l'IA lit les indicateurs diététiques dans tous les formats : étiquettes textuelles (V, VG, GF, NF, DF), indicateurs basés sur des icônes (symboles de feuille, icônes de blé barré) ou abréviations en ligne dans les descriptions de plats (par exemple « (v) » ou « (gf) » à la fin d'une description). L'IA lit chaque indicateur dans le contexte du plat auquel il appartient — une étiquette « GF » à côté de « Pasta Primavera » remplit la colonne Étiquettes diététiques pour cette ligne de plat uniquement. Si un menu utilise des icônes sans équivalent textuel, définissez la colonne avec des options (par exemple « Étiquettes diététiques (options : Végétarien, Végétalien, Sans gluten, Sans noix, Sans produits laitiers) ») — l'IA interprétera les icônes et les associera à vos catégories spécifiées.

Que se passe-t-il si un menu n'imprime pas les calories — chaque ligne échoue-t-elle ou l'outil ignore-t-il la colonne ?

Ni l'un ni l'autre. Lorsque vous tapez « Calories (si imprimées) » comme nom de colonne, l'IA extrait les valeurs caloriques partout où elles apparaissent sur le menu et laisse la cellule vide pour les plats sans information calorique imprimée. Un menu de 45 articles où seulement 15 plats ont des données caloriques produit 45 lignes — les 45 avec des noms de plats, descriptions et prix complets, 15 avec des valeurs caloriques renseignées, et 30 avec une cellule Calories vide. Le résultat est un ensemble de données complet sans ligne supprimée et sans donnée fabriquée. La même logique s'applique à tout champ qui peut ne pas être présent sur chaque menu : indicateurs de niveau d'épices, codes d'article ou étiquettes diététiques qui n'apparaissent que sur un sous-ensemble d'articles.

Puis-je traiter par lots des menus de plusieurs établissements à la fois — et garder les données de chaque établissement séparées ?

Oui. Téléchargez les photos de menus de tous les établissements en un seul lot. Pour garder les données séparées par établissement, incluez une colonne « Établissement » ou « Nom du restaurant » dans votre liste de champs — l'IA ne l'extraira pas du menu lui-même (les menus impriment rarement le nom du restaurant sur chaque page), mais vous pouvez utiliser la dénomination par lot : nommez chaque fichier avec l'identifiant de l'établissement avant le téléchargement, et le tableur de sortie inclut une colonne de nom de fichier qui sert de clé d'établissement. Alternativement, téléchargez les menus de chaque établissement comme un travail par lot séparé — la configuration des colonnes reste la même, et chaque lot produit son propre fichier de sortie. Pour les groupes de restaurants mettant à jour les menus trimestriellement dans plus de 20 établissements, enregistrez votre modèle d'extraction une fois et exécutez-le sur chaque lot de mise à jour trimestrielle.

L'outil fonctionne-t-il sur les menus manuscrits — comme les ardoises de suggestions quotidiennes écrites à la craie ou au marqueur ?

Oui, avec des conditions qui affectent la précision. L'IA est entraînée sur diverses écritures manuscrites, y compris les lettres capitales, l'écriture mixte et la cursive standard. Un menu sur ardoise photographié de face, sous un éclairage diffus et uniforme, donne de bons résultats d'extraction — noms de plats, prix et courtes descriptions sont extraits de manière fiable. Trois facteurs affectent le plus la précision de l'écriture manuscrite : l'éclairage (les ombres sur les surfaces incurvées des ardoises obscurcissent les caractères), l'angle (les photos prises en biais déforment la géométrie du texte) et la stylisation des lettres (les lettrages très décoratifs avec des hampes et des jambages ornés réduisent la précision au niveau des caractères). Pour de meilleurs résultats : photographiez l'ardoise de face sous une lumière naturelle ou artificielle uniforme, cadrez la zone du menu, et vérifiez qu'aucun texte n'est dans l'ombre. Si quelques caractères sont mal lus — « TomatO » au lieu de « Tomato » — l'erreur est généralement mineure et facile à repérer dans le fichier de sortie.

📮 contact email: [email protected]