Convertissez n'importe quelle photo de menu en tableau de données structuré — sans que les en-têtes de section ne 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 principaux, Desserts — séparent visuellement les catégories mais deviennent des lignes fantômes lors d'une lecture OCR traditionnelle. Cet outil lit la hiérarchie visuelle : les libellés 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 un tableau noir ou un PDF multipage.
Restaurateurs · Équipes de numérisation de menus · Analystes de veille concurrentielle
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, et non où elle se trouve sur la page. Un tableau noir manuscrit avec les plats du jour et un menu gastronomique plastifié dans un PDF produisent une sortie structurée dans les mêmes colonnes.
Données principales des plats
Attributs diététiques, nutritionnels et opérationnels
Ce n'est pas une liste exhaustive — saisissez n'importe quel nom de champ présent dans vos menus. Avertissements d'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
Le menu est 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 flux de texte unique. La différence entre un nom de plat et un en-tête de section est entièrement perdue.
Le problème
Une photo de menu n'est pas un tableau. 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 conduite. Ils peuvent être intégrés après le nom du plat sans aucun séparateur. Un moteur OCR traditionnel lit la page de haut en bas, de gauche à droite, produisant un texte où « Saumon grillé — servi avec sauce au beurre citronné et légumes de saison — 28,00 — Entrecôte poêlée — bœuf nourri à l'herbe de 12 oz avec frites truffées — 34,50 » devient un bloc indifférencié. Le prix de 28,00 $ est associé à la description du saumon ; le prix de 34,50 $ est complètement séparé de l'entrecôte. Des heures de nettoyage manuel s'ensuivent — et c'est avant de gérer les menus multi-sections couvrant une demi-douzaine de catégories.
Une description de plat comme « Pâtes maison, ragù d'agneau mijoté lentement, pecorino romano, basilic frais » peut s'étendre sur deux ou trois lignes selon la largeur de colonne et la taille de 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 tout à droite de la ligne 1. Le résultat est une feuille de calcul où un plat produit trois lignes partielles, dont aucune ne contient à 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 signalent systématiquement que la numérisation de menus sans outils spécialisés prend 60 à 90 minutes par menu.
« Entrées », « Plats », « Desserts », « Accompagnements » — ces libellés de section utilisent le même vocabulaire typographique que les noms de plats : police en gras, taille plus grande, emplacement proéminent. Un analyseur traditionnel lit « Entrées » et le traite comme un plat sur la ligne 1, puis attribue « Salade César à la truffe | 16,50 $ » à la ligne 2. Le résultat est une feuille de calcul où les libellés 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 une feuille de calcul de 48 lignes avec 8 lignes fantômes. Les restaurateurs qui tentent de créer 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éattribuer manuellement les catégories qu'ils en passeraient à saisir les données de zéro.
Comment l'extraction de colonnes personnalisées résout ce problème
Extraction de colonnes personnalisées — le mécanisme derrière ImageToTable.ai — ne lit pas le texte de manière séquentielle. Lorsque vous saisissez des noms de colonnes comme « Nom de l'article », « Description » et « Prix », l'IA localise chaque valeur sur l'ensemble de la page en comprenant ce qu'elle est sémantiquement et à quoi elle appartient visuellement. 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. Cela signifie qu'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 — quel que soit l'alignement choisi par le créateur du menu — produit un résultat propre où chaque ligne de plat a son prix correct dans la colonne Prix.
Lorsque l'IA rencontre « Entrées » en gras, centré, 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 suivant — « Plats principaux » — apparaît, l'attribution de 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 multipages 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 section à travers les sauts de page, afin qu'aucun plat ne soit orphelin sans catégorie.
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'épices peut être représenté par une à cinq icônes de piment, les mots « doux/moyen/fort », ou un chiffre 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 leur signification ni à quel plat ils se rapportent. L'IA lit ces attributs sémantiquement : elle comprend que « (v) » près d'un nom de plat indique une étiquette végétarienne, que « 🔥🔥🔥 » indique un niveau d'épices 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 chiffre), l'IA peut toujours interpréter le nombre d'icônes comme un niveau de chaleur lorsque vous définissez une colonne Niveau d'épices.
De la photo de menu à la feuille de calcul structurée : à quoi ressemble le flux de travail
Que vous numérisiez des menus pour une plateforme de commande en ligne, que vous construisiez une base de données de prix concurrentiels entre restaurants, ou que vous 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.
Téléversez vos photos de menu — n'importe quel format, n'importe quelle mise en page, de n'importe quelle source
Déposez des images de menu ou des PDF de n'importe quelle source : une photo de smartphone d'un tableau d'offres spéciales à la craie, un PDF scanné d'un menu de restaurant laminé, une capture d'écran d'un menu numérique avec code QR, ou un dépliant de plats à emporter de plusieurs pages. L'outil accepte JPG, PNG, WebP et PDF. Pour les groupes de restaurants avec plusieurs emplacements, utilisez le traitement par lots : téléversez les menus de tous les emplacements en une seule session et recevez une feuille de calcul consolidée unique où chaque plat est une ligne avec un identifiant d'emplacement — aucun travail séparé par établissement. Pour collecter des menus auprès de contributeurs externes — franchisés, chercheurs de terrain ou partenaires fournisseurs — générez un Lien de collecte : une URL partageable où n'importe qui peut téléverser des photos de menu directement dans votre file de traitement en saisissant un court code de vérification, sans compte ni connexion requis de leur côté.
Nommez vos colonnes une seule fois — chaque menu est traité selon la même liste de champs
Saisissez les colonnes souhaitées : « Nom de l'article », « Description », « Prix », « Catégorie », « Étiquettes diététiques », « Niveau d'épices », « Calories », « Code de l'article ». La même définition de colonnes traite chaque menu du lot — un PDF gastronomique laminé et une photo de tableau à la craie manuscrit produisent une sortie dans le même format structuré. Pour l'extraction des calories en particulier, saisissez « Calories (si imprimées) » comme nom de colonne — l'IA extrait les valeurs de calories lorsqu'elles apparaissent sur le menu et laisse la cellule vide dans le cas contraire, afin d'obtenir un jeu de données complet sans perdre de lignes à cause de données manquantes. Pour les cycles de mise à jour récurrents des menus — changements 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 ressaisir les noms de champs. La fonction colonne calculée vous permet également de définir des calculs exécutés pendant l'extraction : par exemple, une colonne « Prix en USD (Prix × 1,0 si la devise est USD) » normalise les menus multi-devises en une seule colonne de sortie.
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 articles répartis sur quatre sections produit 45 lignes — et non 49 avec quatre lignes d'en-tête de section fantômes à supprimer. Les noms des plats remplissent la colonne Nom de l'article, les descriptions remplissent la colonne Description, les prix remplissent la colonne Prix, et l'en-tête de section de chaque ligne remplit la colonne Catégorie. Les étiquettes diététiques, les niveaux d'épices et les données caloriques apparaissent dans leurs colonnes respectives lorsque le menu les incluait. Exportez en XLSX pour la gestion de la base de données de menus dans Excel, en CSV pour l'importation dans les systèmes de point de vente ou les plateformes de commande en ligne, ou en JSON pour une intégration API directe. Un lot de 10 menus de restaurants qui prendrait une journée complète de saisie manuelle de données s'achève en quelques minutes — et le format de sortie est cohérent pour chaque emplacement, quelle que soit la différence de conception de chaque menu.
Quand l'extraction de menus fonctionne le mieux — et quand une vérification ponctuelle s'avère utile
Quand ça fonctionne le mieux
Menus imprimés standard, quelle que soit la mise en page ou la configuration des colonnes. Les menus à une colonne, deux colonnes ou multi-sections avec des relations claires entre le nom du plat et le prix s'extraient de manière fiable. 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 menu cohérents dans tous leurs établissements produisent un traitement par lots quasi parfait.
Tableaux noirs manuscrits et menus du jour photographiés de face avec un bon éclairage. L'IA lit différentes écritures manuscrites — lettres moulées, cursive standard, marqueur feutre sur tableau noir — et extrait les noms des plats, les descriptions et les prix. Les photos prises de face avec un éclairage uniforme donnent les meilleurs résultats. Les reflets sur les surfaces plastifiées ou les reflets du tableau noir peuvent masquer les caractères ; inclinez légèrement l'appareil photo pour réduire les reflets.
Menus multi-sections avec des 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 qui les suit. Un menu avec six sections produit une sortie où chaque ligne de plat a sa catégorie correcte renseignée — aucun étiquetage manuel des catégories après l'extraction. Les menus multi-pages où une section s'étend sur plusieurs sauts de page maintiennent le contexte de la 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 » se prolonge dans un jambage trois fois plus haut que la normale — peuvent provoquer des erreurs de reconnaissance au niveau des caractères. Un nom de plat fortement calligraphié 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, sont extraits 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. Toutefois, 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 sont bien extraits ; les kanji manuscrits denses ou la calligraphie arabe très stylisée peuvent donner une précision moindre.
Photos inclinées, pliées ou ombragé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 traversant le centre 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 » — extraient correctement les noms de plats et les descriptions ; la colonne Prix reste simplement vide. L'IA n'invente pas de prix lorsqu'il n'y en a pas sur l'image source.
Questions fréquemment posées
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. L'OCR traditionnel lit le texte de manière linéaire 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 de structure et attribue chaque plat qui les suit à 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 menu ?
Oui. Lorsque vous définissez une colonne « Étiquettes diététiques », l'IA lit les indicateurs diététiques dans n'importe quel format : étiquettes textuelles (V, VG, GF, NF, DF), indicateurs à base d'icônes (symboles de feuille, icônes de blé barré) ou abréviations en ligne dans les descriptions de plats (par ex. « (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 équivalents textuels, définissez la colonne avec des options (par ex. « É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.
Et si un menu n'imprime pas les calories — chaque ligne échouera-t-elle ou l'outil ignorera-t-il la colonne ?
Ni l'un ni l'autre. Lorsque vous saisissez « Calories (si imprimées) » comme nom de colonne, l'IA extrait les valeurs de calories partout où elles apparaissent sur le menu et laisse la cellule vide pour les plats où aucune information calorique n'est 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 de calories 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 emplacements de restaurant à la fois — et garder les données de chaque emplacement séparées ?
Oui. Téléchargez les photos de menu de tous les emplacements en un seul lot. Pour garder les données séparées par emplacement, incluez une colonne « Emplacement » 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 des fichiers de lot : nommez chaque fichier avec l'identifiant de l'emplacement avant le téléchargement, et la feuille de calcul de sortie inclut une colonne de nom de fichier qui sert de clé d'emplacement. Vous pouvez aussi télécharger les menus de chaque emplacement comme un travail de 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 qui mettent à jour leurs menus trimestriellement sur plus de 20 emplacements, 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 tableaux de spécialités du jour écrits à 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 majuscules, l'écriture en script mixte et la cursive standard. Un tableau de spécialités photographié de face avec un éclairage uniforme et diffus produit de bons résultats d'extraction — les noms de plats, les prix et les 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 tableaux noirs obscurcissent les caractères), l'angle (les photos prises en biais déforment la géométrie du texte) et la stylisation des lettres (la lettrine très décorative avec des hampes et des jambages ornés réduit la précision au niveau des caractères). Pour de meilleurs résultats : photographiez le tableau de face sous une lumière naturelle ou artificielle uniforme, remplissez le cadre avec la zone du menu et vérifiez qu'aucun texte n'est à l'ombre. Si quelques caractères sont mal lus — « TomatO » au lieu de « Tomato » — l'erreur est généralement mineure et facile à vérifier dans le tableau de sortie.
En savoir plus : Extraction de tableaux d'images vers Excel : ce qui fonctionne et ce qui ne fonctionne pas · Extraction de documents IA sans modèle : pourquoi les données d'entraînement ne devraient pas être un prérequis · Pourquoi l'OCR traditionnel échoue sur l'écriture manuscrite — et comment les modèles de vision IA réussissent