Lorsqu'une équipe en Chine intègre une API OCR, le premier réflexe est souvent de comparer les taux de reconnaissance, puis d'appeler l'interface directement. Une fois en production, elle découvre que l'essentiel du temps passe dans la couche d'accès : les images montent-elles de façon stable, le lien tient-il pendant les heures de pointe, la facture est-elle libellée en dollars ou en yuans, peut-elle être comptabilisée, et comment reprendre un traitement par lots interrompu à mi-parcours ?
L'API OCR diffère d'une API de chat parce que l'entrée est une image ou un PDF : le corps de requête est plus volumineux, les expirations sont plus fréquentes et les nouvelles tentatives génèrent plus facilement des doublons facturés. Cet article compare trois approches — accès direct au fournisseur, proxy auto-hébergé et passerelle IA locale — en insistant sur l'envoi des images, la limitation de débit, la bascule et la liste de vérification. Les services et la facturation relèvent de la page Tarifs des modèles et de la documentation du fournisseur.
Note : OpenAI, Claude, Gemini, Baidu AI Cloud, Tencent Cloud et Alibaba Cloud sont des marques de leurs titulaires respectifs ; cet article est purement technique et n'implique aucune affiliation ni représentation. Les réseaux transfrontaliers, le transfert de données et les règlements doivent respecter la législation locale et les conditions des plateformes.
1. Trois approches à poser clairement
L'accès direct appelle l'interface du fournisseur OCR ou du fournisseur de modèles. Avec un fournisseur cloud chinois, le lien réseau et le paiement restent dans le pays, ce qui est souvent le plus simple ; avec un modèle de vision étranger, il faut gérer soi-même le réseau transfrontalier, la facture en dollars et le taux de change.
Le proxy auto-hébergé consiste à déployer un reverse proxy ou une passerelle sur un serveur conforme, pour centraliser l'authentification, les journaux, les tentatives et la limitation. Le contrôle est fort, mais le serveur, les certificats, les mises à jour et l'astreinte restent à votre charge. En OCR, il faut en plus ajuster la taille maximale du corps de requête et les délais, sinon les grandes images sont tronquées dans la couche proxy.
La passerelle IA locale fournit une entrée compatible OpenAI, un règlement en yuans et, généralement, une console, des statistiques d'usage et des factures. Le coût d'intégration est faible et plusieurs modèles peuvent être unifiés ; vérifiez l'entité prestataire, les clauses sur les données, les règles de quota et le mode de réponse aux incidents.
| Dimension | Accès direct | Proxy auto-hébergé | Passerelle IA locale |
|---|---|---|---|
| Réseau et accès | lien court chez un fournisseur chinois ; transfrontalier pour un modèle étranger | liaison au choix, exploitation à votre charge | entrée locale, généralement prête à l'emploi |
| Envoi des images | limité par le corps et le format du fournisseur | limites du proxy à ajuster en même temps | dépend de la configuration du corps et des délais |
| Paiement et factures | yuans chez un fournisseur chinois ; dollars pour un modèle étranger | selon le compte et l'entité du serveur | règlement en yuans, facture généralement possible |
| Lots et limitation | contraint par le QPS, la concurrence et les quotas | file possible, mais toujours limité par l'amont | dépend des quotas, de l'ordonnancement et des tentatives |
| Périmètre des données | évaluation des transferts et des clauses à votre charge | emplacement des données sous votre responsabilité | clauses et qualifications du prestataire à vérifier |
| Coût d'exploitation | moyen, surtout réseau et comptes | élevé : serveur, certificats, supervision | faible, gestion centralisée par console |
| Couverture des modèles | principalement un fournisseur | extensible librement | généralement plusieurs fournisseurs |
2. Réseau et envoi des images : traiter d'abord les 413 et les expirations
Le corps d'une requête OCR est bien plus gros que celui d'une requête texte. Une image de 3 Mo encodée en Base64 grossit d'environ un tiers, soit près de 4 Mo ; si l'interface n'accepte que Base64, le client, le reverse proxy et la passerelle doivent tous relever leur limite de corps de requête. Les pannes courantes ne sont pas « une reconnaissance imprécise », mais des 413, des connexions réinitialisées, des expirations et des réponses tronquées.
Quelques recommandations pratiques :
- si l'interface accepte une URL ou une adresse pré-signée, privilégiez l'URL pour réduire le corps ; vérifiez que le lien reste valide jusqu'à la fin de la reconnaissance et qu'il ne demande pas de session authentifiée ;
- compressez selon la résolution acceptable par le métier, sans exagérer ; les petits caractères, tampons, écritures manuscrites et lignes de tableau sont sensibles à la netteté. Appliquez un double seuil, côté long et taille de fichier, et conservez l'original pour la relecture ;
- faites pivoter l'image selon l'orientation EXIF avant l'envoi, pour éviter une page couchée qui désordonne la reconnaissance ;
- ajustez aussi, dans la couche proxy,
client_max_body_size,proxy_read_timeoutetproxy_send_timeout, et pas seulement le délai côté application ; - pour un PDF multipage, préférez une interface de tâche asynchrone plutôt que d'envoyer tout le fichier dans une requête synchrone.
Si le fournisseur récupère lui-même l'URL de l'image, vérifiez que l'adresse est accessible publiquement, sans authentification, et que la signature reste valide pendant le temps d'attente dans la file.
3. Paiement, contrat et factures
Le point de blocage fréquent, en Chine, est l'entité payeuse. Un rechargement par carte personnelle, un paiement pour le compte d'un tiers ou des justificatifs incohérents empêchent souvent la comptabilité d'enregistrer la dépense. Avant de choisir, demandez avec qui le contrat est signé, la devise de règlement, le type de facture, la validité du prépaiement et les règles de remboursement.
Pour la facturation à l'usage, vérifiez aussi la base de calcul : nombre d'images, pages PDF, appels ou tokens ; les requêtes en échec sont-elles comptées ; les tentatives sont-elles facturées deux fois ; l'usage peut-il être ventilé par projet ou par clé. Inscrivez ces points dans le tableau comparatif et testez avec le même lot d'images pour estimer le coût réel. Les montants exacts dépendent de la page Tarifs des modèles et du contrat.
4. Limitation, concurrence et traitements par lots
Une interface OCR est généralement contrainte à la fois par le QPS, la concurrence, la taille d'une image, le nombre de pages PDF et le quota quotidien du compte. Un 429 ne signifie pas forcément une panne : il peut refléter un pic de concurrence. Pour la reconnaissance par lots, procédez dans cet ordre :
- Calculez un SHA-256 pour chaque image ou PDF comme clé d'idempotence, puis consultez la table de résultats locale avant de soumettre.
- Découpez les tâches selon les limites de l'interface : taille d'image, pages par requête et concurrence maximale ont chacune leur seuil.
- Démarrez avec une concurrence faible, par exemple 2 à 4 appels parallèles, observez le taux de 429 et la latence P95, puis augmentez progressivement.
- Appliquez un backoff exponentiel avec jitter sur les 429 et les 5xx transitoires ; ne réessayez pas les 401, 403 et erreurs de paramètres, corrigez d'abord la configuration.
- Pour les tâches asynchrones, enregistrez
task_id, l'heure de soumission, l'état et l'adresse du résultat ; téléchargez le résultat rapidement, car le lien expire souvent. - À la fin de chaque lot, comptez les succès, les échecs, les images facturées et la durée ; placez les échecs dans une file de reprise séparée.
- Après le traitement complet, faites un contrôle humain par échantillonnage et comparez le nombre d'enregistrements en base au nombre de fichiers d'origine.
5. Tentatives, idempotence et bascule
L'idempotence doit précéder les tentatives, sinon une simple instabilité réseau peut produire deux facturations et deux enregistrements. L'exemple marque la requête avec l'empreinte de l'image et applique un backoff aux erreurs réessayables :
import base64
import hashlib
import os
import time
from openai import OpenAI
client = OpenAI(
api_key=os.environ["ZSQH_API_KEY"],
base_url=os.environ["ZSQH_BASE_URL"],
timeout=90.0,
max_retries=0,
)
def ocr_image(path, model, attempts=4):
raw = open(path, "rb").read()
key = hashlib.sha256(raw).hexdigest()
data_url = "data:image/jpeg;base64," + base64.b64encode(raw).decode()
for i in range(attempts):
try:
resp = client.chat.completions.create(
model=model,
messages=[{
"role": "user",
"content": [
{"type": "text", "text": "Reconnais tout le texte de l'image et conserve l'ordre d'origine."},
{"type": "image_url", "image_url": {"url": data_url}},
],
}],
)
return key, resp.choices[0].message.content
except Exception as exc:
if i == attempts - 1:
raise
wait = min(2 ** i, 30) + 0.5 * (i + 1)
print(key[:8], type(exc).__name__, "nouvelle tentative dans", wait)
time.sleep(wait)
key, text = ocr_image("invoice.jpg", os.environ["VISION_MODEL"])
print(key[:12], len(text))
La bascule comporte une limite souvent négligée : les sorties de moteurs OCR différents ne se mélangent pas directement. Un OCR classique renvoie du texte et des coordonnées, un grand modèle de vision renvoie du langage naturel ou du JSON, avec des noms de champs et des systèmes de coordonnées potentiellement différents. Avant de basculer, figez des échantillons réels et comparez la précision des caractères, la précision des champs et le taux de sorties structurées valides ; le code d'analyse et le processus de relecture doivent être adaptés ensemble, pas seulement le nom du modèle.
6. Liste de vérification avant mise en production
- Liaison : testez séparément les grandes images, les PDF multipages et les heures de pointe, en relevant les taux de 413, d'expiration et de 5xx.
- Précision : utilisez 50 à 100 images réelles couvrant le net, le flou, l'inclinaison, le manuscrit, les tableaux et les mises en page multicolonnes.
- Volume : les
usageou le nombre d'images renvoyés correspondent-ils à la facture de la console, et les tentatives sont-elles facturées en double ? - Limitation : le plafond de concurrence, le taux de 429 et le taux de succès après backoff sont-ils acceptables ?
- Données : les images contiennent-elles des informations personnelles ou des secrets commerciaux, et les politiques de conservation, de journalisation et de suppression du prestataire sont-elles explicites ?
- Sortie : les clés peuvent-elles être renouvelées, le solde remboursé, et l'ancien service ainsi que la voie de retour sont-ils conservés ?
Si un point reste flou, lancez d'abord un petit flux de test ; ne basculez pas directement le trafic de production.
7. Choisir selon les contraintes
L'ordre de sélection est le suivant : le réseau et le paiement peuvent-ils rester stables dans la durée, faut-il une sortie fixe et un audit, puis seulement la couverture des modèles et les capacités de facturation. Un OCR cloud chinois au flux fluide peut être appelé directement ; avec un modèle de vision étranger et sans équipe d'exploitation transfrontalière, une passerelle locale mérite une évaluation. Pour une entrée unifiée et un règlement en yuans, créez une clé de test dans ZSQH AI Gateway, faites tourner un petit lot d'images avant de monter en charge ; la facturation est décrite dans Tarifs des modèles.
Questions fréquentes
L'accès direct depuis la Chine aux interfaces OCR étrangères est-il stable ?
Cela dépend de la sortie réseau locale, de l'heure, de la région cible et du quota du compte ; aucune réponse générale n'est possible. Observez plusieurs jours avec de vraies images et une concurrence réelle, en relevant le taux d'erreur et la latence P95, puis comparez avec la passerelle ; ne concluez pas à partir d'une seule requête réussie.
Faut-il envoyer l'image en Base64 ou par URL ?
Pour une petite image, Base64 est simple et direct ; pour une grande image, un PDF multipage ou une forte concurrence, privilégiez une URL ou une adresse pré-signée vers un stockage objet, ce qui réduit nettement le corps. Dans les deux cas, vérifiez les limites de taille, les formats acceptés et la durée de validité du lien.
Comment reprendre une reconnaissance par lots interrompue ?
Utilisez le hash du contenu de l'image comme clé d'idempotence, écrivez les résultats par lot et ne reprenez que les éléments manquants. Avant de relancer, comparez le nombre d'enregistrements déjà en base au nombre de fichiers pour éviter les doublons et ne pas prendre un demi-lot pour un lot complet.
Le format des résultats change-t-il après un changement de service OCR ?
En général, oui. Les noms de champs, les systèmes de coordonnées, les scores de confiance et la structure des erreurs varient d'un moteur à l'autre, et les sorties structurées doivent repasser la validation de schéma. Lors d'une migration, conservez les anciens résultats un certain temps et comparez anciennes et nouvelles sorties sur des échantillons fixes.
Peut-on ventiler factures et usage par projet ?
Cela dépend du prestataire. Avant de signer, vérifiez si l'usage peut être exporté par projet, clé ou modèle, si la base de facturation inclut les échecs et les tentatives, et si le libellé de facture correspond aux exigences d'achat.
Et ensuite
Le choix dépend surtout de la stabilité durable du réseau et du paiement, puis de la couverture des modèles. Pour un accès unifié et un règlement en yuans, créez une clé de test dans ZSQH AI Gateway et validez le flux avec un petit lot avant d'augmenter le volume ; les modèles et la facturation figurent sur la page Tarifs des modèles.
Lectures associées :
