Come faccio a scegliere tra Tesseract e OpenCV? [chiuso]


94

Di recente mi sono imbattuto in Tesseract e OpenCV . Sembra che Tesseract sia un vero e proprio motore OCR e OpenCV può essere utilizzato come framework per creare un'applicazione / servizio OCR.

Ho provato a usare Tesseract su alcune delle mie immagini e la sua accuratezza sembra decente. Successivamente, mi sono imbattuto in un tutorial molto semplice sull'uso di OpenCV per eseguire l'OCR utilizzando Python e sono rimasto colpito. In pochi minuti ho finito di allenare il sistema e la sua precisione era buona. Ma ovviamente, adottare questo approccio significa che ho bisogno di addestrare ampiamente il mio sistema utilizzando un ampio set di addestramento.

Le mie domande specifiche sono le seguenti:

  • Come si sceglie tra Tesseract e l'utilizzo di OpenCV per creare un'app OCR personalizzata?
  • Sono disponibili set di dati di formazione per Tesseract per diverse lingue. OpenCV ha qualcosa di simile in modo che non debba iniziare da zero per ottenere l'OCR?
  • Qual è il migliore per un'applicazione commerciale aspirante?

Eventuali suggerimenti?


8
Le risposte seguenti sono davvero ottime, ma poiché ha lavorato con l'OCR posso dirti che la qualità del riconoscimento in Tesseract è inferiore alle aspettative di un utente di app commerciale. Tesseract è fantastico, ma l'OCR è difficile: cose come la formazione online o i miglioramenti al volo sono hmmm ... ancora ricerca. Google, il grande sponsor dietro TS ultimamente, ha deciso di costruire il proprio motore - OCROpus. E mentre prometteva di aprirlo, il motore di riconoscimento principale non è ancora disponibile - hanno pubblicato solo un framework - che è un'API da tesseract.
Sam

3
@vasile: è molto istruttivo. Non ero a conoscenza di OCROpus. Grazie. Avresti qualche suggerimento per delle alternative se il mio obiettivo finale fosse scrivere un biglietto da visita OCR (o dire, uno che legge le ricevute delle stazioni di servizio come quello che ho collegato: upload.wikimedia.org/wikipedia/en/3/34/… )? Te lo chiedo perché sono curioso di sapere cosa usano le numerose app mobili per ottenere questo risultato. Non mi dispiace fare l'OCR sul lato server. Sono stato tentato di utilizzare OpenCV dopo aver visto questa fantastica demo: youtube.com/watch?v=OkcOfS1lTxs
Legend

6
Esistono numerosi motori OCR commerciali, solo google OCR accuracy testse troverai alcuni grafici. E parlando di app mobili, la maggior parte di esse utilizza tesseract. Ma se ti preoccupi di scaricarne alcuni vedrai che i risultati sono leggermente diversi dalle promesse. Di solito fanno una demo video in un ambiente attentamente controllato e la pubblicano su youtube, ma in natura, se esegui la scansione di una pagina / ricetta / scheda / qualsiasi cosa otterrai risultati divertenti.
Sam

1
@vasile: grazie. Qualcosa per tenermi occupato per stasera. Apprezzo davvero il tuo tempo.
Legenda

Risposte:


77
  • Tesseract è un motore OCR. È utilizzato, lavorato e finanziato da Google specificamente per leggere il testo dalle immagini, eseguire la segmentazione di documenti di base e operare su input di immagini specifici (una singola parola, riga, paragrafo, pagina, dizionari limitati, ecc.).

  • OpenCV, d'altra parte, è una libreria di visione artificiale che include funzionalità che consentono di eseguire l'estrazione di alcune funzionalità e la classificazione dei dati. Puoi creare un semplice segmentatore e classificatore di lettere che esegue l'OCR di base, ma non è un ottimo motore OCR (ne ho già fatto uno in Python da zero. È davvero impreciso per l'input che devia dai dati di addestramento).

Se vuoi avere una comprensione di base di quanto sia difficile l'OCR, prova OpenCV. Tesseract è per l' OCR reale .


3
Dipende dalle immagini in ingresso. Tesseract funziona meglio quando le lettere sono nitide, in una linea orizzontale, distanziate, non collegate e perfettamente in bianco e nero. Ho armeggiato nella comunità di scansione / conservazione dei libri fai-da-te per circa un anno e ho lavorato su software nel mio tempo libero per facilitare il processo. Il miglior software disponibile (commerciale o meno) per la post-elaborazione di qualsiasi immagine con testo è Scan Tailor . Ha alcune opzioni della CLI, ma se ti prendi del tempo per vedere come funziona, è abbastanza sorprendente.
Blender

2
Ho lavorato un po 'sul codice sorgente di Scan Tailor e non utilizza OpenCV internamente, ma molti degli algoritmi che sono stati creati possono essere riscritti con le funzioni di OpenCV molto facilmente. Se le tue immagini non sono deformate e non sono degradate, devi solo implementare la binarizzazione adattiva e qualche semplice eliminazione delle macchie prima di inserire la tua immagine in Tesseract.
Blender

1
Per quanto riguarda la tua domanda, ieri stavo provando alcune immagini di input casuali. Ho provato una ricevuta da una stazione di servizio: upload.wikimedia.org/wikipedia/en/3/34/… Riconosceva il 0come 8(per un totale di $ 20,00). Ammetto che la cifra era difficile da decifrare anche per me, ma non ero sicuro di cos'altro si può fare per adattare Tesseract a queste situazioni o forse introdurre una componente di apprendimento se avrò una base di utenti attiva.
Legenda

5
Tesseract è addestrato per leggere set di caratteri specifici. Quelle lettere a blocchi non sono una di queste. Dovrai presentare a Google un sacrificio animale e provare ad addestrare Tesseract da solo: code.google.com/p/tesseract-ocr/wiki/TrainingTesseract3
Blender

1
Inoltre, prima di iniziare a scrivere un motore OCR personalizzato per leggere quelle lettere, non aspettarti che sia accurato. Ne ho scritto uno per automatizzare la Ruota della fortuna e le immagini di esempio (screenshot di un gioco online) erano JPEG. Gli artefatti della compressione JPEG erano sufficienti per rovinare il classificatore di immagini a meno che non fornissi circa 10-20 immagini campione di ogni singolo carattere.
Blender

65

Sono l'autore di quel tutorial sul riconoscimento delle cifre che hai citato e , direi, che non è in alcun modo un sostituto per tesseract.

Tesseract è un ottimo motore OCR, potrebbe essere il miglior motore OCR OpenSource.

Il tutorial che hai citato è solo una prova, per capire il funzionamento più semplice dell'OCR.

Quindi, se stai cercando un'app OCR, ti consiglio di utilizzare OpenCV per preelaborare l'immagine e quindi applicare il motore tesseract.


1
+1 Grazie. Prima di tutto, grazie per il tutorial :) È stata una lettura davvero interessante. Sei a conoscenza di riferimenti / tutorial su come utilizzare OpenCV insieme a Tesseract? Non si parla di interfacciamento ma del tipo di trasformazioni dell'immagine o di pre-elaborazione che è necessario fare per migliorare la precisione di Tesseract?
Legenda

2
Vorrei solo dire che mentre Tesseract è un buon motore OCR rispetto ad altri, è ancora abbastanza impreciso, ho avuto una percentuale di successo di circa il 40% nel far riconoscere il testo corretto. Si spera che andrà meglio tra un paio d'anni.
GangstaGraham

4
@GangstaGraham Hai solo bisogno di addestrare tesseract e puoi ottenere risultati migliori in poche ore o giorni, non anni. opensource.newmediaist.com/tesseract-training.html
valentt

1
Uso PyTesseract per l'estrazione del testo in tempo reale. Funziona bene su PC Linux ma è molto lento sull'ambiente Raspberry Pi ... Qualche modo per installare la versione leggera? Ad esempio, elaborare solo cifre e lettere maiuscole dell'alfabeto inglese?
Yuriy Chernyshov

9

I due possono essere complementari. Se leggi l'articolo su OpenCV: https://github.com/tesseract-ocr/docs/blob/master/tesseracticdar2007.pdf

Sottolinea che "Poiché HP disponeva di una tecnologia di analisi del layout di pagina sviluppata in modo indipendente che veniva utilizzata nei prodotti, (e quindi non rilasciata per l'open-source) Tesseract non ha mai avuto bisogno della propria analisi del layout di pagina. Tesseract presume quindi che il suo input sia un'immagine binaria con regioni di testo poligonali facoltative definite. "

Questo tipo di attività può essere eseguita da OpenCV e l'immagine risultante può essere passata a Tesseract. È possibile trovare un esempio di questo tipo di codice nel repository Git: https://github.com/Itseez/opencv_contrib/tree/master/modules/text/samples Gli esempi utilizzano le API Tesseract per eseguire la conversione da immagine a testo.


3

OpenCV è una libreria per CV , utilizzata per analizzare ed elaborare le immagini in generale. Tesseract è una libreria per OCR , che è un sottoinsieme specializzato di CV dedicato all'estrazione di testo dalle immagini.

Da OpenCV.org

..... utilizzato per rilevare e riconoscere volti, identificare oggetti, classificare azioni umane nei video, tracciare i movimenti della telecamera, tracciare oggetti in movimento, estrarre modelli 3D di oggetti, produrre nuvole di punti 3D da telecamere stereo, unire immagini insieme per produrre un effetto immagine ad alta risoluzione di un'intera scena, trova immagini simili da un database di immagini, rimuovi gli occhi rossi dalle immagini scattate utilizzando il flash, segui i movimenti degli occhi, riconosci lo scenario e stabilisci dei marker per sovrapporlo alla realtà aumentata, ecc.

Da Tesseract Github :

..... può essere utilizzato direttamente o (per i programmatori) utilizzando un'API per estrarre testo digitato, scritto a mano o stampato dalle immagini. Supporta un'ampia varietà di lingue.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.