Saltar al contenido principal

Mistral OCR: Una guía con ejemplos prácticos

Aprende a utilizar la API de OCR de Mistral con Python para extraer texto e imágenes de documentos e integrar funciones de OCR en las aplicaciones.
Actualizado 13 mar 2025  · 12 min de lectura

La semana pasada, Mistral lanzó Mistral OCR, una innovadora API de reconocimiento óptico de caracteres (OCR). Su API establece un nuevo estándar de capacidades de IA para comprender documentos e imágenes. Es capaz de procesar y analizar documentos con imágenes, matemáticas, tablas y mucho más con un alto grado de precisión.

En este artículo, te explicaré paso a paso cómo utilizar Mistral OCR utilizando Python. Te mostraré cómo puedes utilizarlo con documentos, imágenes y cómo combinarlo con el chat para combinar avisos con documentos.

¿Qué es Mistral OCR?

El reconocimiento óptico de caracteres, o OCR, es una tecnología que convierte distintos tipos de documentos -como documentos en papel escaneados, archivos PDF o imágenes capturadas por una cámara digital- en datos editables y que permiten realizar búsquedas.

El OCR funciona identificando caracteres de texto en las imágenes, analizando sus patrones y traduciendo estos elementos visuales en texto codificado por la máquina. Esta tecnología ha transformado la forma en que interactuamos con los materiales impresos, permitiendo desde digitalizar archivos históricos hasta automatizar la introducción de datos de formularios comerciales.

La API de OCR de Mistral representa un avance significativo en este campo, ya que ofrece a los desarrolladores una potente herramienta para extraer texto de imágenes y documentos con notable precisión.

Ejemplo de OCR Mistral

Fuente: Mistral

A diferencia de las soluciones tradicionales de OCR que se limitan a identificar el texto, la API de Mistral utiliza modelos avanzados de IA para comprender el contexto y la estructura de los documentos, manteniendo el formato mientras extrae el contenido. Esto significa que puede reconocer diseños complejos, diferenciar entre cabeceras y cuerpo de texto, e interpretar correctamente tablas y formatos de varias columnas.

Lo que hace especialmente especial a la API de OCR de Mistral es su integración con las capacidades de comprensión lingüística de Mistral. El sistema no sólo extrae texto, sino que lo comprende.

Esto permite flujos de trabajo de procesamiento de documentos más sofisticados, en los que la API no sólo puede reconocer texto, sino también responder a preguntas sobre el contenido del documento, resumir información o extraer puntos de datos concretos.

Además, la API de OCR de Mistral está diseñada para funcionar en varios idiomas y conjuntos de caracteres, lo que la hace versátil para aplicaciones globales. Esta combinación de reconocimiento de texto preciso con comprensión profunda del lenguaje posiciona la oferta de Mistral como una solución de inteligencia documental de nueva generación, y no como una simple herramienta de OCR.

Precios y límites del Mistral OCR

La API Mistral OCR no es gratuita, pero sólo cuesta 1 $ por cada 1.000 páginas (o 0,001 $ por página). En mi opinión, es un precio muy competitivo y asequible.

Los archivos de los documentos no deben superar los 50 MB de tamaño y no deben tener más de 1.000 páginas.

Puedes encontrar más información en su página de precios.

Configuración de la API Mistral OCR

Navega hasta la página de la clave API de Mistral y haz clic en el botón "Crear nueva clave".

En el formulario de creación de claves, podemos darle un nombre y una fecha de caducidad.

  • El nombre es útil a efectos organizativos si tenemos varios proyectos, cada uno de los cuales utiliza una clave diferente. Para este tutorial, podemos dejarlo en blanco.
  • La fecha de caducidad es útil para garantizar que si la compartimos accidentalmente, la gente no tendrá acceso a nuestra clave para siempre.

Formulario de clave API mistral

Después de crear la clave, cópiala y crea un archivo llamado .env en la misma carpeta donde escribiremos el script. 

Crear una clave API para utilizar mistral OCR

Pega la clave en el archivo utilizando el siguiente formato:

MISTRAL_API_KEY=<paste_api_key_here>

Si utilizas GitHub, asegúrate de añadir este archivo a .gitignore para evitar subir la clave API a GitHub.

Configuración del entorno Python

Para utilizar la API OCR de Mistral con Python, instala los siguientes paquetes:

  • mistralai: Este es el paquete proporcionado por Mistral para interactuar con su API.
  • python-dotenv: Un paquete para facilitar la carga de la clave API desde el archivo .env.
  • datauri: Este paquete se utiliza para procesar los datos de la imagen y guardarlos en archivos.

Podemos instalarlos utilizando el comando

pip install mistralai python-dotenv datauri

Te recomiendo que crees un entorno para asegurarte de que tu instalación no entra en conflicto con tu instalación por defecto de Python. Una forma de hacerlo es utilizar Anaconda:

conda create -n mistral -y python=3.9
conda activate mistral
pip install mistralai python-dotenv datauri

El primer comando crea un entorno llamado mistral que utiliza Python 3.9. A continuación, activamos ese entorno e instalamos los paquetes mencionados anteriormente.

Creación del script Python para interactuar con Mistral OCR

Veamos cómo podemos hacer nuestra primera petición a la API OCR de Mistral.

Importa las dependencias necesarias

En la misma carpeta que el archivo .env, crea un nuevo script de Python llamado ocr.py e importa los paquetes necesarios:

from mistralai import Mistral
from dotenv import load_dotenv
import datauri
import os

Ten en cuenta que también importamos os, que utilizamos para cargar la clave API del entorno en una variable. No necesitamos instalarlo porque es un paquete incorporado.

Carga la clave API e inicializa el cliente Mistral

A continuación, añadimos las siguientes líneas para cargar la clave API e inicializar el cliente Mistral:

load_dotenv()
api_key = os.environ["MISTRAL_API_KEY"]
client = Mistral(api_key=api_key)

Realizar una solicitud a la API Mistral OCR

La forma más sencilla de utilizar la API de OCR es con la URL de un PDF alojado en Internet. Para este ejemplo, vamos a utilizar este artículo Mistral 7B alojado en arXiv (una plataforma que aloja versiones previas a la presentación de trabajos de investigación):

ocr_response = client.ocr.process(
  model="mistral-ocr-latest",
  document={
    "type": "document_url",
    "document_url": "https://arxiv.org/pdf/2501.00663",
  },
)
print(ocr_response)

A continuación, podemos ejecutar el script utilizando el comando python ocr.py. Esto generará la siguiente respuesta:

pages=[OCRPageObject(index=0, markdown='# Mistral 7B \n\nAlbert Q. Jiang,
...

Estructura de respuesta

La respuesta contiene varios campos. Encontrarás todos los detalles en la documentación de la API de Mistral. Nos interesa en particular el campo pages, que contiene, para cada página, el texto de la página en formato markdown.

Podemos imprimir el número de páginas para ver que coincide con el archivo PDF:

print(len(ocr_response.pages))

Resultado:

9

Cada página tiene varios campos. Los más importantes son:

  • markdown: El contenido markdown de la página.
  • images: Las imágenes de la página.

Por ejemplo, podemos imprimir el contenido markdown de la primera página utilizando:

print(ocr_response.pages[0].markdown)
# Mistral 7B 

Albert Q. Jiang, Alexandre Sablayrolles, Arthur Mensch, Chris Bamford, Devendra Singh Chaplot, Diego de las Casas, Florian Bressand, Gianna Lengyel, Guillaume Lample, Lucile Saulnier, Lélio Renard Lavaud, Marie-Anne Lachaux, Pierre Stock, Teven Le Scao, Thibaut Lavril, Thomas Wang, Timothée Lacroix, William El Sayed

![img-0.jpeg](img-0.jpeg)

#### Abstract

We introduce Mistral 7B, a 7-billion-parameter language
...

Convertir un archivo PDF a Markdown

Para convertir un PDF en Markdown, hacemos un bucle sobre todas las páginas y escribimos el contenido Markdown de cada una de ellas en un archivo. Aquí tienes una función para hacerlo.

def create_markdown_file(ocr_response, output_filename = "output.md"):
  with open(output_filename, "wt") as f:
    for page in ocr_response.pages:
      f.write(page.markdown)

Aquí tienes una comparación entre el archivo PDF original y el archivo Markdown que hemos generado:

Convertir un PDF a markdown utilizando Mistral OCR

Tratamiento de imágenes

En el ejemplo anterior, vimos que el archivo Markdown no tenía las imágenes del PDF. Eso es porque no hemos creado los archivos de imagen, sino sólo el texto Markdown.

Si miramos la salida markdown, vemos que tiene una referencia de imagen:

...
![img-0.jpeg](img-0.jpeg)
...

Sin embargo, esa imagen no se renderiza. Las imágenes de cada página se almacenan en el atributo images.

for page in ocr_response.pages:
  print(page.images)

Salida:

[OCRImageObject(id='img-0.jpeg', top_left_x=425, top_left_y=600, bottom_right_x=1283, bottom_right_y=893, image_base64=None)]
[OCRImageObject(id='img-1.jpeg', top_left_x=294, top_left_y=638, bottom_right_x=1405, bottom_right_y=1064, image_base64=None)]
[OCRImageObject(id='img-2.jpeg', top_left_x=294, top_left_y=191, bottom_right_x=1405, bottom_right_y=380, image_base64=None)]
[OCRImageObject(id='img-3.jpeg', top_left_x=292, top_left_y=204, bottom_right_x=1390, bottom_right_y=552, image_base64=None)]
[OCRImageObject(id='img-4.jpeg', top_left_x=464, top_left_y=202, bottom_right_x=1232, bottom_right_y=734, image_base64=None)]
[]
[OCRImageObject(id='img-5.jpeg', top_left_x=727, top_left_y=794, bottom_right_x=975, bottom_right_y=1047, image_base64=None)]
[]
[]

En la salida anterior, vemos que efectivamente tenemos una referencia a img-0.jpeg. Sin embargo, los datos no están presentes: image_base64=None.

Para obtener los datos de la imagen, tenemos que modificar la petición OCR para incluir los datos de la imagen añadiendo el parámetro include_image_base64=True.

ocr_response = client.ocr.process(
  model="mistral-ocr-latest",
  document={
    "type": "document_url",
    "document_url": "https://arxiv.org/pdf/2310.06825",
  },
  include_image_base64=True,
)

Si volvemos a imprimir las imágenes, veremos que los campos image_base_64 están ahora rellenos. Como indica el nombre del campo, los datos de la imagen se almacenan en base 64. No vamos a entrar en los detalles de cómo funciona la representación de imágenes en base-64. En su lugar, proporcionamos una función que utiliza el paquete datauri que instalamos antes para escribir una imagen en un archivo:

def save_image(image):
    parsed = datauri.parse(image.image_base64)
    with open(image.id, "wb") as file:
      file.write(parsed.data)

Ahora podemos actualizar la función create_markdown_file() para que también escriba todas las imágenes en archivos:

def create_markdown_file(ocr_response, output_filename = "output.md"):
  with open(output_filename, "wt") as f:
    for page in ocr_response.pages:
      f.write(page.markdown)
      for image in page.images:
        save_image(image)

Si ejecutamos el código actualizado y volvemos a renderizar la vista previa de Markdown, veremos las imágenes.

Procesar imágenes de documentos

Utilizar un archivo local

En el ejemplo anterior, hemos utilizado un archivo que ya estaba alojado. Para trabajar con un archivo PDF desde nuestro ordenador, la API de Mistral nos permite subir un archivo utilizando la función client.files.upload(). Suponiendo que el archivo PDF, myfile.pdf esté en la misma carpeta que el script, así es como se hace:

filename = "myfile.pdf"
uploaded_pdf = client.files.upload(
  file={
    "file_name": filename,
    "content": open(filename, "rb"),
  },
  purpose="ocr"
)

Cada archivo subido de esta forma tiene asociado un ID único, que es necesario para referirse a ese archivo. Podemos acceder a él utilizando el atributo id del resultado, así:

print(uploaded_pdf.id)

Para realizar el OCR en ese archivo, necesitamos proporcionar su URL. Podemos obtenerlo utilizando la función client.files.get_signed_url() proporcionando el ID del archivo:

signed_url = client.files.get_signed_url(file_id=uploaded_pdf.id)

Juntándolo todo, podemos implementar una función que suba un archivo utilizando la API de Mistral y recupere su URL:

def upload_pdf(filename):
  uploaded_pdf = client.files.upload(
    file={
      "file_name": filename,
      "content": open(filename, "rb"),
    },
    purpose="ocr"
  )
  signed_url = client.files.get_signed_url(file_id=uploaded_pdf.id)
  return signed_url.url

Aquí tienes un ejemplo de solicitud de OCR con un archivo local:

ocr_response = client.ocr.process(
  model="mistral-ocr-latest",
  document={
    "type": "document_url",
    "document_url": upload_pdf("myfile.pdf"),
  },
  include_image_base64=True,
)

Para utilizar otro archivo, sustituimos myfile.pdf por el nombre del archivo que queremos utilizar.

OCR en una imagen

La API de OCR también funciona con entradas de imágenes. Para utilizar una imagen, utilizamos el tipo image_url en lugar de document_url:

ocr_response = client.ocr.process(
  model="mistral-ocr-latest",
  document={
    "type": "image_url",
    "image_url": <url of the image>,
  },
)

En el ejemplo anterior, tendríamos que sustituir por la URL de la imagen. 

Para utilizar una imagen local, podemos utilizar la siguiente función para cargarla:

def load_image(image_path):
  import base64
  mime_type, _ = mimetypes.guess_type(image_path)
  with open(image_path, "rb") as image_file:
    image_data = image_file.read()
  base64_encoded = base64.b64encode(image_data).decode('utf-8')
  base64_url = f"data:{mime_type};base64,{base64_encoded}"
  return base64_url

Esta función utiliza el paquete base64, que es un paquete incorporado, por lo que no necesitamos instalarlo.

Intentemos realizar un reconocimiento óptico de caracteres en este recibo que hemos guardado en un archivo llamado receipt.jpeg:

Utilizar Mistral OCR con imágenes

Podemos realizar la solicitud de OCR utilizando la función load_image() para cargar la imagen desde nuestro ordenador:

ocr_response = client.ocr.process(
  model="mistral-ocr-latest",
  document={
    "type": "image_url",
    "image_url": load_image("receipt.jpeg"),
  },
)

Puedes ver el resultado en la imagen superior. Está lejos de ser perfecto, pero el resultado no está tan lejos.

Combinar Mistral OCR con Chat

El OCR proporciona una forma eficaz de convertir los datos en un formato de texto listo para ser utilizado por los LLM. La API de Mistral permite a los usuarios combinar documentos y peticiones en las solicitudes LLM. Entre bastidores, la API de OCR se utiliza para procesar los documentos para el consumo de LLM.

Intentemos utilizarlo para resumir el artículo al que hemos hecho referencia a lo largo de este tutorial.

Si es la primera vez que utilizas la API de chat de Mistral, quizá quieras leer esta completa guía de Mistral ya que no entraremos en detalles sobre su funcionamiento.

Aquí tienes un ejemplo completo en Python para pedir una explicación fácil de entender del artículo:

from mistralai import Mistral
import os
from dotenv import load_dotenv
load_dotenv()
api_key = os.environ["MISTRAL_API_KEY"]
client = Mistral(api_key=api_key)
messages = [
  {
    "role": "user",
    "content": [
      {
        "type": "text",
        "text": "Explain this article in detail to someone who doesn't have a technical background",
      },
      {
        "type": "document_url",
        "document_url": "https://arxiv.org/pdf/2310.06825",
      },
    ],
  }
]
chat_response = client.chat.complete(
  model="mistral-small-latest",
  messages=messages,
)
print(chat_response.choices[0].message.content)

Ten en cuenta que el archivo se proporciona utilizando el mismo formato que aprendimos anteriormente:

{
  "type": "document_url",
  "document_url": "https://arxiv.org/pdf/2310.06825",
}

Aplicaciones reales del OCR Mistral

Ahora que has aprendido a implementar Mistral OCR en tus proyectos de Python, vamos a explorar algunas aplicaciones prácticas en las que podrías aplicar lo que hemos aprendido.

Análisis de trabajos de investigación

Puedes extraer texto, ecuaciones, tablas y figuras de artículos científicos para construir un asistente de investigación personalizado. Podrías crear un sistema que resuma las conclusiones clave, extraiga detalles metodológicos o cree una base de datos de artículos de tu campo en la que se puedan hacer búsquedas.

Proyectos de digitalización de documentos

Puedes transformar archivos físicos o documentos escaneados en colecciones digitales en las que se puedan realizar búsquedas. Esto es especialmente valioso para documentos históricos, registros familiares o archivos de organizaciones que necesitan conservación y fácil acceso.

Tratamiento multilingüe de documentos

Puedes utilizar las funciones multilingües de Mistral OCR para procesar documentos en varios idiomas. Esto podría ser útil para empresas internacionales, servicios de traducción o proyectos de investigación globales que necesiten extraer información de documentos en diferentes alfabetos.

Gestión de contenidos educativos

Puedes convertir libros de texto, diapositivas de clases y apuntes escritos a mano en formatos digitales. Crea un sistema que extraiga conceptos clave, fórmulas y diagramas para construir materiales de estudio personalizados o bancos de preguntas.

Tratamiento de documentos financieros

Puedes automatizar la extracción de datos de facturas, recibos, estados financieros o documentos fiscales. Esto podría agilizar los procesos contables o ayudar en la gestión de gastos y el análisis financiero.

Conclusión

La API de OCR de Mistral proporciona una potente herramienta para extraer y comprender texto de documentos e imágenes. En este tutorial, hemos explorado cómo configurar y utilizar esta capacidad para diversas tareas de tratamiento de documentos.

Siguiendo los pasos descritos en este tutorial, podrás incorporar el OCR de Mistral a tus aplicaciones, tanto si digitalizas archivos como si automatizas la entrada de datos o creas sistemas inteligentes de gestión de documentos. A medida que la tecnología siga evolucionando, podemos esperar capacidades de procesamiento de documentos aún más precisas y conscientes del contexto, que acorten aún más la distancia entre los documentos físicos y los flujos de trabajo digitales.

Temas

Aprende IA con estos cursos

Curso

Retrieval Augmented Generation (RAG) with LangChain

3 hr
4.5K
Learn cutting-edge methods for integrating external data with LLMs using Retrieval Augmented Generation (RAG) with LangChain.
Ver detallesRight Arrow
Comienza el curso
Ver másRight Arrow
Relacionado

blog

¿Qué es Mistral Large 2? Cómo funciona, casos de uso y más

Mistral Large 2 es el último modelo lingüístico de Mistral AI, que compite con modelos como GPT-4o, Llama 3.1 y Claude 3 Opus.
Ryan Ong's photo

Ryan Ong

8 min

Tutorial

Tutorial Mistral 7B: Guía paso a paso para utilizar y ajustar Mistral 7B

El tutorial cubre el acceso, la cuantización, el ajuste fino, la fusión y el almacenamiento de este potente modelo lingüístico de código abierto con 7300 millones de parámetros.
Abid Ali Awan's photo

Abid Ali Awan

12 min

Tutorial

Guía para principiantes de la API de OpenAI: Tutorial práctico y prácticas recomendadas

Este tutorial te presenta la API de OpenAI, sus casos de uso, un enfoque práctico para utilizar la API y todas las prácticas recomendadas que debes seguir.
Arunn Thevapalan's photo

Arunn Thevapalan

13 min

Tutorial

Clasificación de textos en Python

Descubra qué es la clasificación de textos, cómo funciona y casos de uso con éxito. Explore ejemplos de principio a fin sobre cómo crear un canal de preprocesamiento de texto seguido de un modelo de clasificación de texto en Python.
Moez Ali's photo

Moez Ali

12 min

An AI transcribes audio to text

Tutorial

Convertir voz en texto con la API Whisper de OpenAI

Descubra las potentes funciones de la API Python de OpenAI Whisper para transcripción y traducción. Dispone de soporte multilingüe y mejora rápida para una transcripción precisa.
Abid Ali Awan's photo

Abid Ali Awan

9 min

Tutorial

Tutorial de Generación de nubes de palabras en Python

Aprende a realizar Análisis exploratorios de datos para el Procesamiento del lenguaje natural utilizando WordCloud en Python.
Duong Vu's photo

Duong Vu

11 min

Ver másVer más