Let’s Build : scanner IA de cartes de visite avec Transloadit
Transformez une image de carte de visite ou un PDF en fichier JSON local contenant les coordonnées. Cet exemple TypeScript envoie une carte à Transloadit, demande à un modèle d’IA d’extraire les champs visibles et enregistre le résultat pour que vous puissiez le comparer à l’original avant d’ajouter un contact à votre CRM.
Ce que nous allons créer
- Accepter une image de carte au format PNG/JPEG ou un PDF.
- Optimiser les images avec 🤖 /image/optimize, tandis que les PDF passent directement au Step d’extraction.
- Extraire les coordonnées avec 🤖 /ai/chat et télécharger le résultat JSON.
Il s’agit d’un exemple local en ligne de commande, pas d’une application de prise de vue. Vous devez disposer d’une Auth Key et d’un Auth Secret de votre Workspace Transloadit, choisir explicitement un jeu d’informations d’identification pour l’IA et avoir l’autorisation d’envoyer la carte à Transloadit et à Anthropic. Le traitement est facturé, y compris avec l’option d’informations d’accès de test pour l’IA. Commencez par une carte fictive ne contenant aucune donnée personnelle.
Le schéma d’abord (zod)
Le script d’exemple exporte businessCardSchema pour
que vous puissiez réutiliser le même contrat au lieu de maintenir une seconde liste de champs.
Ses champs facultatifs sont
full_name, title,
company, email,
phones, address,
website, socials et notes.
Les numéros de téléphone restent des chaînes de caractères afin de conserver un éventuel
+ initial. Les champs inconnus doivent être omis.
Après la configuration ci-dessous, enregistrez ce code dans schema.ts dans
le répertoire de votre projet et exécutez node schema.ts
pour examiner le schéma envoyé au modèle :
import { zodToJsonSchema } from 'zod-to-json-schema'
import { businessCardSchema } from './business-card-scanner/run.ts'
console.log(JSON.stringify(zodToJsonSchema(businessCardSchema), null, 2))
Un schéma vérifie les types des champs ; il ne peut pas établir si un nom ou une adresse e-mail a été lu correctement. Le programme rejette le JSON mal formé, les résultats non conformes au schéma et les objets sans champ reconnu. Un résultat non vide et conforme au schéma doit tout de même être vérifié en le comparant à la carte.
Vue d’ensemble du pipeline
| Entrée | Parcours de traitement |
|---|---|
| Carte au format PDF | /ai/chat |
| Carte au format PNG/JPEG | /image/optimize → /ai/chat |
Les filtres de fichiers orientent les PDF séparément des images. Malgré son nom
pdf_verified, le filtre PDF sélectionne uniquement le type MIME déclaré ;
il ne prouve pas qu’un document est intact ou lisible.
Extrait d’Assembly
La recette exportée par l’application fournit les filtres, le prompt, le schéma et
le modèle anthropic/claude-sonnet-4-6. Pour examiner ses
Assembly Instructions, enregistrez ce code dans
instructions.ts à côté de schema.ts et exécutez node instructions.ts :
import { example } from './business-card-scanner/run.ts'
const steps = example.steps({ test_credentials: true })
console.log(JSON.stringify({ steps }, null, 2))
Ce code affiche uniquement la recette. L’outil en ligne de commande ci-dessous la soumet, attend la fin du traitement, télécharge le résultat, le valide et enregistre les coordonnées localement. C’est le fichier local que vous conservez ; l’URL du résultat du traitement est temporaire.
Essayer l’application d’exemple
Utilisez Node.js 26.12.1,
Corepack installé séparément, cURL et un nouveau répertoire vide
en dehors de tout projet existant. Suivez les instructions de configuration
pour installer Yarn 4.12.0, @transloadit/node 4.14.0, Zod 3.25.76 et
zod-to-json-schema 3.25.2, puis télécharger
business-card-scanner/run.ts et shared/runtime.ts. Conservez cette arborescence :
l’application importe le module d’exécution partagé. Aucune copie locale d’un dépôt privé n’est nécessaire.
Ces versions ont été testées. L’exemple conserve Zod 3 et son convertisseur ;
zod-to-json-schema est déprécié, et Zod 4
prend nativement en charge JSON Schema. La mise à niveau de ce contrat constitue une modification
distincte de l’application.
Dans le shell où vous exécuterez le programme, remplacez ces valeurs fictives par celles de votre Workspace :
export TRANSLOADIT_AUTH_KEY='YOUR_AUTH_KEY'
export TRANSLOADIT_AUTH_SECRET='YOUR_AUTH_SECRET'
Ne placez pas de secrets dans le code versionné ni dans le code exécuté par le navigateur. Le programme lit l’environnement du processus ; il ne charge pas de fichier d’environnement et ne crée pas d’informations d’accès.
Placez votre carte dans card.png dans le répertoire du projet, ou remplacez
le chemin d’entrée. Choisissez une sortie qui n’existe pas, puis autorisez explicitement
l’utilisation facturée des informations d’accès de test pour l’IA :
node business-card-scanner/run.ts --input ./card.png --output ./result.json --test-credentials
Vous pouvez aussi définir TRANSLOADIT_AI_CREDENTIALS sur le nom d’un jeu d’informations
d’identification IA Anthropic existant et omettre --test-credentials. Sélectionnez exactement
un mode. Consultez les instructions de configuration pour configurer votre propre jeu
d’informations d’identification pour le fournisseur avant d’exécuter l’application.
En cas de réussite, ouvrez result.json et comparez le nom, l’adresse e-mail
et les numéros de téléphone extraits avec la carte. L’absence de champs facultatifs est autorisée.
L’application laisse l’entrée inchangée et refuse une sortie existante avant de soumettre le
traitement ; utilisez donc une nouvelle destination pour une autre exécution. Elle limite l’entrée
et la sortie téléchargée à 20 MiB, attend jusqu’à cinq minutes pour le traitement et accorde un
délai distinct de 30 secondes au téléchargement du résultat. Ce sont les limites de l’exemple,
pas celles du produit.
Si une exécution échoue après avoir affiché un identifiant d’Assembly, examinez cette Assembly dans la Console avant de réessayer. Un dépassement de délai ou une interruption ne prouve pas que le traitement distant s’est arrêté, et celui-ci peut tout de même être facturé. Le script ne relance pas automatiquement une Assembly.
Exemples d’entrées
Utilisez une carte fictive lisible contenant un nom, une entreprise, une adresse e-mail et un numéro de téléphone que vous pouvez vérifier. Traitez une seule carte par fichier ; pour un PDF, commencez par une page. Pour tester le parcours PDF, passez son nom de fichier à la même commande et choisissez une seconde sortie JSON. Une extraction réussie à partir d’une image ne prouve pas qu’un PDF donné est lisible, et l’optimisation des images ne garantit pas une meilleure reconnaissance.
Étapes suivantes
Vérifiez chaque extraction avant d’insérer des contacts dans votre CRM. Le schéma ne renvoie aucun score de confiance ; il ne peut donc pas sélectionner pour vous les contacts « à faible score de confiance ». Après vérification, normalisez les numéros de téléphone et les adresses selon les conventions locales, puis dédupliquez les contacts en suivant les règles de votre CRM.

