OCR de texte dans les scènes avec Ultralytics YOLO26
Qu’est-ce que l’OCR de texte dans les scènes ?#
La reconnaissance optique de caractères (OCR) détecte et lit le texte dans les images. La solution OCR combine un détecteur de texte Ultralytics YOLO26 avec un backend de reconnaissance de texte. Elle prend en charge les boîtes de détection alignées sur les axes, les boîtes orientées (OBB) et les polygones de segmentation, puis renvoie le texte reconnu dans l’ordre de lecture.
La détection et la reconnaissance restent des composants distincts : tu peux donc associer ton détecteur de texte dans les scènes à PaddleOCR ou à ton propre modèle de reconnaissance.
Pourquoi utiliser l’OCR de texte dans les scènes ?#
- Géométrie du texte flexible : utilise des modèles de détection, OBB ou de segmentation pour le texte horizontal, pivoté ou irrégulier.
- Reconnaissance interchangeable : utilise PaddleOCR sans code d’intégration supplémentaire ou passe une fonction appelable pour un autre modèle.
- Sortie structurée : accède au texte reconnu, aux scores de confiance de reconnaissance et de détection, à la géométrie source et à une image annotée depuis un seul objet de résultats.
Exécuter l’OCR de texte dans les scènes avec YOLO26#
PaddleOCR est facultatif et se charge lors de la création de OCR avec recognizer="paddleocr", qui installe PaddleOCR 3.x et la version CPU de PaddlePaddle si ces dépendances sont absentes. Pour la reconnaissance sur GPU, installe d’abord une version correspondante de paddlepaddle-gpu ; aucun paquet OCR n’est ajouté aux dépendances de base d’Ultralytics.
Passe une image et un détecteur de texte à la solution OCR. Le résultat contient l’image annotée et le texte reconnu :
yolo solutions ocr model="scene-text-obb.pt" source="path/to/video.mp4" recognizer="paddleocr"Points de contrôle YOLO26-Text#
La famille publique YOLO26-Text comprend les points de contrôle OBB n, s, m, l et x. Définis ULTRALYTICS_API_KEY sur ta propre clé API Ultralytics Platform, puis charge un point de contrôle à l’aide de son URI Platform :
export ULTRALYTICS_API_KEY="your-api-key"ocr = solutions.OCR(model="ul://ultralytics-yolo/yolo26-text/yolo26n-text", recognizer="paddleocr")
result = ocr(im0)Remplace yolo26n-text par yolo26s-text, yolo26m-text, yolo26l-text ou yolo26x-text pour utiliser un modèle plus grand.
Arguments de OCR#
Voici un tableau des arguments de OCR :
| Argument | Type | Valeur par défaut | Description |
|---|---|---|---|
model | str | None | Chemin vers un fichier de modèle Ultralytics YOLO. |
recognizer | str ou Callable | 'paddleocr' | Backend de reconnaissance de texte ou fonction appelable qui accepte un recadrage BGR et renvoie (text, confidence). |
line_width | int | 2 | Épaisseur des lignes des boîtes, des points clés et des compteurs dessinés par la solution. |
verbose | bool | True | Active le journal de la solution pour chaque image, qui indique la forme de l'entrée, le nombre d'éléments par classe et la vitesse de traitement. L'appel de suivi reste toujours silencieux. |
Les paramètres de visualisation suivants sont également pris en charge :
| Argument | Type | Valeur par défaut | Description |
|---|---|---|---|
show | bool | False | Si True, affiche les images ou vidéos annotées dans une fenêtre. Utile pour obtenir un retour visuel immédiat pendant le développement ou les tests. |
show_conf | bool | True | Affiche le score de confiance de chaque détection à côté de son étiquette. Donne une indication du degré de certitude du modèle pour chaque détection. |
show_labels | bool | True | Affiche les étiquettes de chaque détection dans le résultat visuel. Permet d'identifier immédiatement les objets détectés. |
Fonctionnement de l’OCR de texte dans les scènes#
- Détection du texte : YOLO26 produit des boîtes alignées sur les axes, des boîtes orientées ou des polygones de segmentation.
- Création des recadrages pour la reconnaissance : les boîtes sont découpées aux limites de l’image. Les OBB sont rectifiées par transformation affine selon le bord qui s’étend le plus de gauche à droite, de sorte que les boîtes presque carrées restent droites et que les lignes de texte inclinées soient horizontales dans le sens de la lecture. Pour les polygones de segmentation, le rectangle pivoté d’aire minimale est rectifié tandis que le polygone d’origine est conservé. Les recadrages dont la hauteur est au moins 1,5 fois supérieure à la largeur sont pivotés de 90° dans le sens antihoraire, comme dans PaddleOCR.
- Reconnaissance du texte : PaddleOCR traite tous les recadrages par lots de 16. Les systèmes de reconnaissance personnalisés reçoivent un recadrage à la fois.
- Ordonnancement et rendu des résultats : le texte est regroupé en lignes horizontales et ordonné de haut en bas et de gauche à droite. La visualisation utilise une police Unicode pour les caractères non ASCII, comme le chinois.
Les coordonnées se rapportent toujours à l’image d’origine, et non à l’entrée du détecteur ou au recadrage de reconnaissance.
Utiliser un système de reconnaissance personnalisé#
Passe une fonction appelable pour intégrer un autre modèle de reconnaissance sans modifier le chemin de détection, de géométrie ou d’ordonnancement. La fonction appelable est exécutée une fois pour chaque recadrage BGR numpy.ndarray non vide. Renvoie un tuple (text, confidence) par appel, et non une liste de résultats par lot :
| Élément du tuple | Type accepté | Description |
|---|---|---|
text | str | Texte décodé pour ce recadrage. Renvoie "" si aucun texte n’est reconnu. |
confidence | float, int ou numpy.floating | Score de confiance numérique de la reconnaissance, converti en float par la solution. |
def recognize(crop):
# Exécute ton modèle de reconnaissance sur le recadrage BGR et décode sa sortie ici.
return "example", 0.95
ocr = solutions.OCR(model="custom-text.pt", recognizer=recognize)
result = ocr(im0)Les noms de backend non pris en charge déclenchent une ValueError. Si aucun texte n’est détecté, result.texts est vide et le système de reconnaissance n’est pas appelé.
Résultats OCR#
Chaque appel renvoie un objet SolutionResults. Utilise result.plot_im pour l’image annotée et result.texts pour les enregistrements dans un ordre de lecture déterministe :
| Clé | Type | Description |
|---|---|---|
text | str | Texte reconnu. |
confidence | float | Score de confiance de la reconnaissance, distinct du score de confiance de la détection. |
detection_confidence | float | Score de confiance du détecteur YOLO. |
detection_index | int | Indice de détection source avant le tri selon l’ordre de lecture. |
polygon | list[list[float]] | Polygone dans l’image d’origine : quatre coins pour les détections par boîte et OBB, ou le contour du masque. |
Dépendances et licences#
| Composant | Obligatoire | Rôle | Licence |
|---|---|---|---|
| Ultralytics | Oui | Détection YOLO, géométrie des recadrages et orchestration des résultats | AGPL-3.0 |
| PaddlePaddle | Uniquement pour recognizer="paddleocr" | Moteur de reconnaissance | Apache-2.0 |
| PaddleOCR 3.x | Uniquement pour recognizer="paddleocr" | Modèles de reconnaissance de lignes de texte et adaptateur d’inférence | Apache-2.0 |
| Fonction appelable personnalisée | Non | Intégration de reconnaissance appartenant à l’utilisateur | Défini par le backend |
PaddleOCR peut télécharger les poids de reconnaissance lors de sa première utilisation. Consulte la fiche du modèle sélectionné et les conditions de redistribution avant d’empaqueter ou de déployer ces artefacts. Les licences des points de contrôle personnalisés sont distinctes.
FAQ#
Oui. Passe une fonction appelable comme
recognizeret renvoie(text, confidence)pour chaque recadrage BGR. Consulte Utiliser un système de reconnaissance personnalisé pour connaître le contrat d’entrée et de sortie.Non. L’OCR traite chaque image d’entrée indépendamment, sans ID de suivi ni reconnaissance mise en cache. Traite chaque image vidéo comme une entrée distincte lorsque tu as besoin d’effectuer l’OCR image par image.
Tu peux exporter le détecteur YOLO avec le mode Export habituel, mais PaddleOCR ou un système de reconnaissance personnalisé n’est pas intégré à l’artefact ONNX, TensorRT ou à tout autre artefact du détecteur. Déploie le détecteur exporté et le moteur de reconnaissance comme composants distincts, ou conserve cette couche de composition Python.
Commentaires
Pose une question, partage tes résultats ou aide quelqu’un d’autre.