Ultralytics YOLO27: Iscriviti alla lista d'attesa.
Inizia

OCR del testo nelle scene con Ultralytics YOLO26

Che cos'è l'OCR del testo nelle scene?#

Il riconoscimento ottico dei caratteri (OCR) rileva e legge il testo nelle immagini. La soluzione OCR combina un rilevatore di testo Ultralytics YOLO26 con un backend di riconoscimento del testo. Supporta riquadri di rilevamento allineati agli assi, riquadri orientati (OBB) e poligoni di segmentazione, quindi restituisce il testo riconosciuto nell'ordine di lettura.

Il rilevamento e il riconoscimento restano componenti separati, quindi puoi abbinare il tuo rilevatore di testo nelle scene a PaddleOCR o a un tuo modello di riconoscimento.

Perché usare l'OCR del testo nelle scene?#

  • Geometria del testo flessibile: usa modelli di rilevamento, OBB o segmentazione per il testo orizzontale, ruotato o irregolare.
  • Riconoscimento intercambiabile: usa PaddleOCR senza codice di integrazione aggiuntivo oppure passa una funzione richiamabile per un altro modello.
  • Output strutturato: accedi al testo riconosciuto, ai livelli di confidenza del riconoscimento e del rilevamento, alla geometria di origine e a un'immagine annotata da un unico oggetto dei risultati.

Esegui l'OCR del testo nelle scene con YOLO26#

PaddleOCR è facoltativo e viene caricato quando OCR viene creato con recognizer="paddleocr", installando PaddleOCR 3.x e la build di PaddlePaddle per CPU, se non sono già presenti. Per il riconoscimento su GPU, installa prima una build compatibile di paddlepaddle-gpu; non vengono aggiunti pacchetti OCR alle dipendenze di base di Ultralytics.

Passa un'immagine e un rilevatore di testo alla soluzione OCR. Il risultato contiene l'immagine annotata e il testo riconosciuto:

OCR del testo nelle scene con Ultralytics YOLO26
yolo solutions ocr model="scene-text-obb.pt" source="path/to/video.mp4" recognizer="paddleocr"

Checkpoint YOLO26-Text#

La famiglia pubblica YOLO26-Text offre checkpoint OBB n, s, m, l e x. Imposta ULTRALYTICS_API_KEY sulla tua chiave API della piattaforma Ultralytics, quindi carica un checkpoint usando il relativo URI della piattaforma:

export ULTRALYTICS_API_KEY="your-api-key"
ocr = solutions.OCR(model="ul://ultralytics-yolo/yolo26-text/yolo26n-text", recognizer="paddleocr")
result = ocr(im0)

Sostituisci yolo26n-text con yolo26s-text, yolo26m-text, yolo26l-text o yolo26x-text per usare un modello più grande.

Argomenti di OCR#

Ecco una tabella con gli argomenti di OCR:

ArgomentoTipoPredefinitoDescrizione
modelstrNonePercorso a un file modello Ultralytics YOLO.
recognizerstr o Callable'paddleocr'Backend di riconoscimento del testo o funzione richiamabile che accetta un ritaglio BGR e restituisce (text, confidence).
line_widthint2Spessore delle linee dei riquadri, dei punti chiave e dei conteggi disegnati dalla soluzione.
verboseboolTrueAbilita il log per frame della soluzione, con forma dell'input, conteggi per classe e velocità di elaborazione. La chiamata di tracking è sempre silenziosa.

Sono supportate anche le seguenti impostazioni di visualizzazione:

ArgomentoTipoPredefinitoDescrizione
showboolFalseSe True, mostra le immagini o i video annotati in una finestra. Utile per ottenere un riscontro visivo immediato durante lo sviluppo o i test.
show_confboolTrueMostra il punteggio di confidenza di ogni rilevamento accanto all'etichetta. Fornisce indicazioni sul grado di certezza del modello per ciascun rilevamento.
show_labelsboolTrueMostra le etichette di ogni rilevamento nell'output visivo. Permette di identificare immediatamente gli oggetti rilevati.

Come funziona l'OCR del testo nelle scene#

  1. Rilevamento del testo: YOLO26 produce riquadri allineati agli assi, riquadri orientati o poligoni di segmentazione.
  2. Creazione dei ritagli per il riconoscimento: i riquadri vengono ritagliati in base ai limiti dell'immagine. Gli OBB vengono rettificati con una trasformazione affine lungo il lato che si estende maggiormente da sinistra a destra, così i riquadri quasi quadrati rimangono dritti e le righe di testo inclinate sono disposte orizzontalmente nella direzione di lettura. Per i poligoni di segmentazione, viene rettificato il rettangolo ruotato di area minima, mentre il poligono originale viene mantenuto. I ritagli almeno 1,5 volte più alti che larghi vengono ruotati di 90° in senso antiorario, come in PaddleOCR.
  3. Riconoscimento del testo: PaddleOCR elabora tutti i ritagli in batch da 16. I riconoscitori personalizzati ricevono un ritaglio alla volta.
  4. Ordinamento e visualizzazione dei risultati: il testo viene raggruppato in righe orizzontali e ordinato dall'alto verso il basso e da sinistra a destra. La visualizzazione usa un font Unicode per il testo non ASCII, ad esempio il cinese.

Le coordinate fanno sempre riferimento all'immagine originale, non all'input del rilevatore né al ritaglio usato per il riconoscimento.

Usare un riconoscitore personalizzato#

Passa una funzione richiamabile per integrare un altro modello di riconoscimento senza modificare il percorso di rilevamento, geometria o ordinamento. La funzione richiamabile viene eseguita una volta per ogni ritaglio BGR numpy.ndarray non vuoto. Restituisci una tupla (text, confidence) per chiamata, non un elenco di risultati in batch:

Elemento della tuplaTipo accettatoDescrizione
textstrTesto decodificato per questo ritaglio. Restituisci "" se non viene riconosciuto alcun testo.
confidencefloat, int o numpy.floatingConfidenza del riconoscimento numerica, convertita dalla soluzione in float.
def recognize(crop):
    # Esegui il tuo modello di riconoscimento sul ritaglio BGR e decodificane qui l'output.
    return "example", 0.95

ocr = solutions.OCR(model="custom-text.pt", recognizer=recognize)
result = ocr(im0)

I nomi di backend non supportati generano un'eccezione ValueError. Se non viene rilevato testo, result.texts è vuoto e il riconoscitore non viene chiamato.

Risultati OCR#

Ogni chiamata restituisce un oggetto SolutionResults. Usa result.plot_im per l'immagine annotata e result.texts per i record nell'ordine di lettura deterministico:

ChiaveTipoDescrizione
textstrTesto riconosciuto.
confidencefloatConfidenza del riconoscimento, separata dalla confidenza del rilevamento.
detection_confidencefloatConfidenza del rilevatore YOLO.
detection_indexintIndice di rilevamento di origine prima dell'ordinamento di lettura.
polygonlist[list[float]]Poligono nell'immagine originale: quattro vertici per i rilevamenti con riquadri e OBB, oppure il contorno della maschera.

Dipendenze e licenze#

ComponenteObbligatorioRuoloLicenza
UltralyticsSìRilevamento YOLO, geometria dei ritagli e orchestrazione dei risultatiAGPL-3.0
PaddlePaddleSolo per recognizer="paddleocr"Runtime di riconoscimentoApache-2.0
PaddleOCR 3.xSolo per recognizer="paddleocr"Modelli di riconoscimento delle righe di testo e adattatore di inferenzaApache-2.0
Funzione richiamabile personalizzataNoIntegrazione del riconoscimento gestita dall'utenteDefinito dal backend

PaddleOCR potrebbe scaricare i pesi di riconoscimento al primo utilizzo. Consulta la scheda del modello selezionato e i relativi termini di ridistribuzione prima di includere o distribuire questi artefatti. Le licenze dei checkpoint personalizzati sono separate.

Domande frequenti#

  • Sì. Passa una funzione richiamabile come recognizer e restituisci (text, confidence) per ogni ritaglio BGR. Consulta Usare un riconoscitore personalizzato per le specifiche dell'input e dell'output.

  • No. L'OCR elabora ogni immagine di input in modo indipendente, senza ID di tracciamento né riconoscimento memorizzato nella cache. Se è necessario eseguire l'OCR fotogramma per fotogramma, elabora ogni fotogramma video come input separato.

  • Puoi esportare il rilevatore YOLO con la normale modalità di esportazione, ma PaddleOCR o un riconoscitore personalizzato non è incorporato nell'artefatto del rilevatore ONNX, TensorRT o di un altro formato. Distribuisci il rilevatore esportato e il runtime di riconoscimento come componenti separati oppure mantieni questo livello di composizione Python.

Collaboratori

Commenti

Fai una domanda, condividi i tuoi risultati o aiuta qualcun altro.