(+351) 21 24 10006  ·  info@bconcepts.pt
Carnaxide, Lisboa

Cómo extraer texto de imágenes con Azure AI Vision (OCR)

João Barros 14 de July de 2026 4 min de lectura

Digitalizar facturas, tickets o documentos en papel deja de ser un problema cuando el texto se lee automáticamente. Con Azure AI Vision puedes extraer texto de imágenes (OCR) en pocos minutos, mediante la funcionalidad Read de Image Analysis. El resultado es texto que se puede buscar, listo para guardar en una base de datos o enviar a un informe.

Requisitos previos

  • Una suscripción activa de Azure.
  • Un recurso de Azure AI Services (o Computer Vision) creado en el portal, en una región compatible con Image Analysis 4.0.
  • Python 3.8 o superior instalado.
  • La clave y el endpoint del recurso a mano.
  • Una imagen de prueba con texto (por ejemplo, la foto de un ticket).

Paso 1: Crear el recurso y guardar las credenciales

En el portal de Azure, crea un recurso Azure AI Services. Una vez creado, abre la sección Keys and Endpoint y copia la KEY 1 y el Endpoint. Nunca pongas la clave dentro del código: guárdala en variables de entorno.

setx VISION_KEY "tu-clave"
setx VISION_ENDPOINT "https://tu-recurso.cognitiveservices.azure.com/"

En macOS o Linux, usa export VISION_KEY="..." y export VISION_ENDPOINT="...". Cierra y vuelve a abrir el terminal para que las variables se activen.

Paso 2: Instalar el SDK de Image Analysis

El paquete oficial gestiona toda la comunicación con el servicio, así que no necesitas construir peticiones HTTP a mano.

pip install azure-ai-vision-imageanalysis

Paso 3: Extraer texto de una imagen local

Este es el ejemplo mínimo de OCR. Abres la imagen en modo binario, solicitas la funcionalidad READ y recorres el resultado. El servicio devuelve el texto organizado en bloques y líneas.

import os
from azure.ai.vision.imageanalysis import ImageAnalysisClient
from azure.ai.vision.imageanalysis.models import VisualFeatures
from azure.core.credentials import AzureKeyCredential

client = ImageAnalysisClient(
    endpoint=os.environ["VISION_ENDPOINT"],
    credential=AzureKeyCredential(os.environ["VISION_KEY"]),
)

with open("ticket.png", "rb") as f:
    image_data = f.read()

result = client.analyze(
    image_data=image_data,
    visual_features=[VisualFeatures.READ],
)

if result.read is not None:
    for block in result.read.blocks:
        for line in block.lines:
            print(line.text)

Si todo va bien, verás en el terminal cada línea de texto de la imagen, en el orden en que aparece.

Paso 4: Leer texto desde una URL

Cuando la imagen ya está en línea (en un blob público, por ejemplo), no hace falta descargarla. Basta con cambiar el método.

result = client.analyze_from_url(
    image_url="https://ejemplo-publico/imagen.png",
    visual_features=[VisualFeatures.READ],
)

texto = "\n".join(
    line.text
    for block in result.read.blocks
    for line in block.lines
)
print(texto)

Fíjate en que lo hemos unido todo en una única cadena. Así es como normalmente se guarda el OCR en una columna de texto.

Paso 5: Ver la confianza de cada palabra

El OCR nunca es perfecto. Cada palabra llega con un valor de confianza entre 0 y 1, lo que te permite decidir qué aceptas automáticamente y qué envías a revisión humana.

LIMITE = 0.8

for block in result.read.blocks:
    for line in block.lines:
        for word in line.words:
            if word.confidence < LIMITE:
                print("Revisar:", word.text, round(word.confidence, 2))

Una regla sencilla y eficaz: aceptar por encima de 0,8 y marcar el resto para validación.

Verificar el resultado

Compara el texto impreso con la imagen original: los números y las fechas deben coincidir. Errores comunes y cómo resolverlos:

  • 401 / Access denied: la clave o el endpoint están cambiados, o el recurso está en otra región.
  • 400 InvalidImageSize: la imagen debe tener como mínimo 50x50 píxeles y no puede superar los límites de tamaño del servicio (las imágenes muy grandes deben redimensionarse).
  • Resultado vacío: la foto está borrosa o con poca luz. Fotografía el documento de frente, con buen contraste, y repite.
Consejo: antes de invertir en preprocesamiento de imagen, prueba simplemente con una foto mejor. Suele resolver la mayoría de los casos.

Conclusión

Ya tienes un OCR funcional en Python con Azure AI Vision, con lectura de archivos locales y de URLs, y con un filtro de confianza para controlar la calidad. El siguiente paso natural es guardar el texto extraído en una tabla (SQL Server, Lakehouse o Fabric) y buscar sobre él. ¿Y si lo que necesitas no es texto suelto, sino campos estructurados de facturas y formularios? En ese caso, Azure AI Document Intelligence es el servicio adecuado: ¿cuál de los dos encaja mejor con los documentos que tienes entre manos?