Let's Build: escáner de tarjetas de visita con IA en Transloadit
Los escáneres de tarjetas de visita son un gran ejemplo de cómo convertir flujos de trabajo de archivos en un producto. Capturas una imagen, la limpias y luego extraes los datos de contacto en campos estructurados. Las primitivas de Transloadit te permiten armar ese pipeline en unos pocos pasos.
Qué vamos a construir
- Aceptar tarjetas en PNG/JPEG o PDF
- Optimizar las imágenes con 🤖 /image/optimize
- Extraer los campos de contacto con 🤖 /ai/chat (English)
Primero el esquema (zod)
import { z } from 'zod'
import { zodToJsonSchema } from 'zod-to-json-schema'
const businessCardSchema = z.object({
full_name: z.string().optional(),
title: z.string().optional(),
company: z.string().optional(),
email: z.string().optional(),
phones: z.array(z.string()).optional(),
address: z.string().optional(),
website: z.string().optional(),
socials: z.array(z.string()).optional(),
})
const toJsonSchema = (schema: z.ZodTypeAny): unknown =>
typeof (z as { toJSONSchema?: typeof zodToJsonSchema }).toJSONSchema === 'function'
? (z as { toJSONSchema: typeof zodToJsonSchema }).toJSONSchema(schema)
: zodToJsonSchema(schema)
const businessCardJsonSchema = toJsonSchema(businessCardSchema)
Descripción general del pipeline
PDF cards ──▶ /ai/chat
Images ──▶ /image/optimize ──▶ /ai/chat
Fragmento de Assembly
const assembly = await transloadit.createAssembly({
params: {
steps: {
pdf_verified: {
robot: '/file/filter',
use: ':original',
accepts: [['${file.mime}', '==', 'application/pdf']],
},
non_pdf: {
robot: '/file/filter',
use: ':original',
accepts: [['${file.mime}', '!=', 'application/pdf']],
},
card_image: {
robot: '/image/optimize',
use: 'non_pdf',
progressive: true,
},
extract_card: {
robot: '/ai/chat',
use: ['pdf_verified', 'card_image'],
model: 'anthropic/claude-4-sonnet-20250514',
format: 'json',
schema: JSON.stringify(businessCardJsonSchema),
messages: 'Extract business card fields. Omit keys if unknown.',
result: true,
},
},
},
files: {
card: filePath,
},
waitForCompletion: true,
})
Prueba la app de ejemplo
El script de ejemplo completo y las instrucciones de configuración están incluidos en este repositorio. Desde la raíz del repositorio, ejecuta:
node public/example_apps/business-card-scanner/run.ts
Entradas de ejemplo
Las imágenes incluidas sirven para ejercitar la ruta de procesamiento de imágenes. Usa el escaneo de una tarjeta de visita real para probar la extracción de datos de contacto:
_assets/demos/inputs/streetsign1.jpg_assets/demos/inputs/streetsign2.jpg_assets/demos/inputs/transloadit-padded.png
Próximos pasos
- Agrega deduplicación antes de insertar los contactos en tu CRM.
- Normaliza los números de teléfono y las direcciones según la configuración regional.
- Agrega un paso de revisión manual para las extracciones con baja confianza.
