La plupart des outils de reconnaissance optique de caractères s'arrêtent à une page. Ils traitent un document comme une collection d'images indépendantes et perdent la structure qui n'apparaît qu'entre les pages, comme les tableaux à cheval sur un pli, les notes de bas de page qui continuent ou les titres qui appartiennent à une section commencée plus tôt. Unlimited-OCR, publié par Baidu en 2026 avec une seconde version en octobre de la même année, repose sur une idée différente. Il analyse un document entier en une seule requête, en exploitant le contexte inter pages, et il le fait avec un modèle de trois milliards de paramètres publié sous licence MIT. Le modèle fonctionne sur un seul GPU NVIDIA, ce qui en fait un choix pratique pour les équipes qui ne peuvent pas envoyer leurs documents à une API cloud.
Ce que fait réellement le modèle
Unlimited-OCR est un modèle de langage multimodal entraîné à l'analyse de documents. Il prolonge l'approche de DeepSeek-OCR, et la seconde version introduit le mécanisme Sparse Reference Sliding Window Attention, qui compresse les interactions d'attention longues en un ensemble fixe de références de travail, si bien que le coût de décodage reste quasi constant lorsque le document grandit. C'est ce que le projet appelle l'analyse à horizon illimité. Concrètement, un PDF multipage est converti en images, toutes les pages sont passées en une seule requête, et la sortie est marquée par des séparateurs de page afin que le texte, les tableaux et la mise en page puissent être reconstruits dans l'ordre. Le modèle affiche des résultats à l'état de l'art sur des bancs d'essai de documents longs, y compris des documents de cent pages, bien que ces longueurs exigent plus de mémoire graphique qu'une seule page.
Deux modes d'inférence sont fournis. Le mode gundam utilise un découpage dynamique pour une seule page et est le comportement par défaut pour une image. Le mode base encode chaque page comme une vue globale et sert aux documents multipages et aux PDF. Choisir le mauvais mode ne fait pas échouer l'exécution, mais il modifie la précision et l'usage de la mémoire, aussi la distinction est elle importante en production.
Ce qu'il faut avant d'installer
Le parcours local exige trois éléments. Python 3.10, un GPU NVIDIA avec CUDA et au moins huit gigaoctets de mémoire pour le modèle de trois milliards de paramètres en bfloat16, et assez d'espace disque pour les poids du modèle, qui se téléchargent automatiquement lors de la première exécution. Une configuration sans GPU n'est pas pratique pour ce modèle. Les commandes ci dessous utilisent le parcours natif Transformers, le plus simple pour vérifier le modèle sur une machine. Pour un service de production avec de la concurrence, le projet recommande SGLang, et vLLM est également pris en charge.
Installation locale étape par étape
Chaque commande ci dessous est sur sa propre ligne afin de pouvoir être sélectionnée et copiée directement. Ouvrez un terminal et suivez les dans l'ordre.
python3.10 -m venv venv
source venv/bin/activate
pip install torch==2.13.0 torchvision pillow transformers==4.52.1 huggingface-hub==0.36.0 tokenizers==0.21.4 addict==2.4.0 einops==0.8.2 easydict==1.13 pymupdf==1.27.2.2
Ces versions sont celles testées par le projet. Mélanger d'autres versions peut produire des erreurs silencieuses dans le code personnalisé du modèle, aussi il est recommandé de les figer. Ensuite, créez un fichier nommé ocr.py et copiez y les lignes suivantes, dans l'ordre.
import torch
from transformers import AutoModel, AutoTokenizer
model_name = "baidu/Unlimited-OCR-2"
tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
model = AutoModel.from_pretrained(model_name, trust_remote_code=True, use_safetensors=True, torch_dtype=torch.bfloat16).eval().cuda()
text = model.infer(tokenizer, image_file="your_page.jpg", output_path="output/single", save_results=True)
print(text)
Exécutez le avec la commande ci dessous. La première exécution télécharge les poids du modèle depuis Hugging Face, ce qui peut prendre plusieurs minutes selon la connexion.
python ocr.py
Pour un document multipage, remplacez la ligne d'inférence par infer_multi et passez une liste d'images de pages dans l'ordre. Le modèle construit l'invite automatiquement et renvoie un bloc de texte unique avec des marqueurs de page. Pour un PDF, convertissez chaque page en image avec PyMuPDF, installé sous le nom pymupdf dans la commande ci dessus, puis passez la liste des chemins d'images à infer_multi. Le dépôt inclut aussi infer.py, qui démarre un serveur de traitement par lots et traite un répertoire d'images ou un PDF avec une concurrence configurable. Pour l'utiliser, clonez le dépôt avec la commande ci dessous et exécutez infer.py avec les arguments décrits dans son README.
git clone https://github.com/baidu/Unlimited-OCR.git
Quand utiliser les parcours de service à la place
Le parcours Transformers convient aux tests et aux petits volumes. Pour un service recevant des requêtes concurrentes, SGLang est recommandé. Il nécessite un paquet personnalisé fourni dans le répertoire wheel du dépôt, et il expose une API compatible OpenAI sur le port 10000. La commande de démarrage définit la fenêtre de pages, le plafond de jetons par page et les fractions de mémoire qui doivent être ajustées au GPU. vLLM est la troisième option, avec une commande de service en une ligne et des images Docker officielles. Ces deux parcours de service échangent la complexité d'installation contre le débit, et aucun n'est nécessaire pour une première exécution locale.
Les limites à garder en tête
Trois mises en garde comptent. Premièrement, le modèle se charge avec trust_remote_code=True, ce qui signifie qu'il exécute du code personnalisé issu du dépôt du modèle. C'est la norme pour les modèles multimodaux, mais cela doit être pris en compte lorsque le modèle est exécuté dans un réseau sensible. Deuxièmement, la sortie brute contient des marqueurs de mise en page, comme des balises de détection, qui doivent être retirés avant que le texte ne soit utilisable, et le dépôt fournit une fonction de post traitement à cet effet. Troisièmement, les documents très longs exigent plus de mémoire graphique, et les notes de service du projet documentent plusieurs variables d'environnement qui contrôlent les pics de mémoire. Une seule page est confortable sur un GPU modeste. Un livre de cent pages ne l'est pas.
D'autres notes sur l'ingénierie de l'IA appliquée sont publiées sur le blog, et les questions de déploiement peuvent être adressées via la page contact. Le code et le modèle sont publiés sur github.com/baidu/Unlimited-OCR et huggingface.co/baidu/Unlimited-OCR-2, avec l'article de recherche sur arXiv:2606.23050.


