Riconoscimento ottico dei caratteri (OCR) con Tesseract, OpenCV e Python

Contenuti

Questo articolo è stato pubblicato nell'ambito del Blogathon sulla scienza dei dati

Introduzione

NOI, gli umani, leggiamo testi quasi ogni minuto della nostra vita. Non sarebbe fantastico se anche le nostre macchine o i nostri sistemi potessero leggere il testo come facciamo noi?? Ma la domanda più importante è “Come facciamo leggere le nostre macchine”? È qui che entra in gioco il riconoscimento ottico dei caratteri. (OCR).

Riconoscimento ottico dei caratteri (OCR)

riconoscimento ottico dei caratteri (OCR) è una tecnica di lettura o acquisizione di testo da fotografie stampate o scansionate, immagini scritte a mano e convertirle in un formato digitale che può essere modificato e ricercato.

Applicazioni

L'OCR ha molte applicazioni nel mondo degli affari oggi.. Alcuni di loro sono elencati di seguito:

  • Riconoscimento dei passaporti negli aeroporti
  • Automazione dell'immissione dei dati
  • riconoscimento targa
  • Estrarre le informazioni sui biglietti da visita da un elenco di contatti
  • Conversione di documenti manoscritti in immagini elettroniche
  • Creazione di PDF ricercabili
  • Creare file udibili (dal testo all'audio)

Alcuni degli strumenti OCR open source sono Tesseract, OCRopus.

In questo articolo, ci concentreremo su Tesseract OCR. E per leggere le immagini abbiamo bisogno di OpenCV.

Installazione di Tesseract OCR:

Scarica il programma di installazione più recente per Windows 10 a partire dal “https://github.com/UB-Mannheim/tesseract/wiki“. Esegui il file .exe una volta scaricato.

Nota: Non dimenticare di copiare il percorso di installazione del file software. Ne avremo bisogno in seguito in quanto dobbiamo aggiungere il percorso dell'eseguibile tesseract nel codice se la directory di installazione è diversa da quella predefinita.

Il percorso di installazione tipico nei sistemi Windows è C: Programmi.

Quindi, nel mio caso, è “C: Archivos de programa Tesseract-OCRtesseract.exe“.

Prossimo, per installare il contenitore Python per Tesseract, Aprire il prompt dei comandi ed eseguire il comando “pip installare pytesseract“.

OpenCV

OpenCV (Visione artificiale open source) è una libreria open source per applicazioni di elaborazione delle immagini, apprendimento automatico e visione artificiale.

OpenCV-Python è l'API Python per OpenCV.

Per installarlo, Aprire il prompt dei comandi ed eseguire il comando “pip instalar opencv-python“.

Creare uno script OCR di esempio

1. Leggi un'immagine di esempio

importa cv2

Leggere l'immagine utilizzando il metodo cv2.imread () y guárdela en una variabile “img”.

img = cv2.imread("immagine.jpg")

Se richiesto, Ridimensionare l'immagine utilizzando il metodo Cv2.resize ()

img = cv2.resize(img, (400, 400))

Visualizzare l'immagine utilizzando il metodo cv2.imshow ()

cv2.imshow("Immagine", img)

Visualizza la finestra all'infinito (Per evitare che il kernel si arresti in modo anomalo)

cv2.waitKey(0)

Chiudi tutte le finestre aperte

cv2.destroyAllWindows()

2. Conversione di immagini a catena

importazione pytesseract

Impostare il percorso tesseract nel codice

pytesseract.pytesseract.tesseract_cmd=r'C:ProgrammiTesseract-OCRtesseract.exe'

Il seguente errore si verifica se non si imposta il percorso.

39840errore-7169515

Per convertire un'immagine in una stringa, utilizzare pytesseract.image_to_string (img) e salvarlo in una variabile “testo”

testo = pytesseract.image_to_string(img)

Stampare il risultato

Stampa(testo)

Codice completo:

import cv2
import pytesseract
pytesseract.pytesseract.tesseract_cmd=r'C:Program FilesTesseract-OCRtesseract.exe'
img = cv2.imread("immagine.jpg")
img = cv2.resize(img, (400, 450))
cv2.imshow("Immagine", img)
testo = pytesseract.image_to_string(img)
Stampa(testo)
cv2.waitKey(0)
cv2.destroyAllWindows()

L'output del codice precedente:

58994uscita-7193438

L'output del codice precedente

Se guardiamo il risultato, l'appuntamento principale viene estratto perfettamente, ma non si ottiene il nome del filosofo e il testo in fondo all'immagine.

Per estrarre il testo in modo accurato ed evitare cadute di precisione, dobbiamo eseguire una precedente elaborazione dell'immagine. Ho trovato questo articolo (https://versodatascience.com/pre-processing-in-ocr-fc231c6035a7) abbastanza utile. Dai un'occhiata per comprendere meglio le tecniche di pre-elaborazione.

Perfetto! Ora che abbiamo le basi richieste, diamo un'occhiata ad alcune semplici applicazioni OCR.

1. Creazione di nuvole di parole nelle immagini delle recensioni

La nuvola di parole è una rappresentazione visiva della frequenza delle parole. Più grande è la parola che appare in una nuvola di parole, parola più comunemente usata nel testo.

Per questo, Ho scattato alcune istantanee delle recensioni di Amazon per il prodotto Apple iPad di 8a generazione.

immagine di esempio

7429015-8893161
Immagine di revisione di esempio

Passi:

  1. Creare un elenco di tutte le immagini di recensione disponibili
  2. Se richiesto, Visualizzare le immagini utilizzando il metodo Cv2.imshow ()
  3. Leggere il testo dalle immagini usando pytesseract
  4. Creare un framework di dati
  5. Pre-elaborare il testo: Eliminare caratteri speciali, ferma le parole
  6. Crea nuvole di parole positive e negative

passo 1: crea un elenco di tutte le immagini di recensione disponibili

importare il sistema operativo
percorsocartella = "Recensioni"
myRevList = os.listdir(percorsocartella)

passo 2: Se richiesto, Visualizzare le immagini utilizzando il metodo Cv2.imshow ()

per l'immagine in myRevList:
    img = cv2.imread(F'{percorsocartella}/{Immagine}')
    cv2.imshow("Immagine", img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

passo 3: legge il testo dalle immagini usando pytesseract

import cv2
import pytesseract
pytesseract.pytesseract.tesseract_cmd=r'C:Program FilesTesseract-OCRtesseract.exe'
corpus = []
per le immagini in myRevList:
    img = cv2.imread(F'{percorsocartella}/{immagini}')
    se img è Nessuno:
        corpus.append("Impossibile leggere l'immagine.")
    altro:
        rev = pytesseract.image_to_string(img)
        corpus.append(rev)
elenco(corpus)
corpus
30320pytesseract_output-8845577
L'output del codice precedente

passo 4: crea un framework di dati

import pandas as pd
data = pd.DataFrame(elenco(corpus), colonne=['Recensione'])
dati
25529dataframe-9579722

passo 5: pre-elaborazione del testo: Eliminare caratteri speciali, parole vuote

#removing special characters
import re
def clean(testo):
    restituisci re.sub('[^A-Za-z0-9" "]+', ' ', testo)
dati['Recensione pulita'] = dati['Recensione'].applicare(pulire)
dati
25761pulito-5396591

Rimozione di parole vuote dalla "Revisione pulita"’ e l'aggiunta di tutte le parole rimanenti a una variabile di elenco “final_list”.

  1. # removing stopwords
    import nltk
    from nltk.corpus import stopwords
    nltk.download("Punkt")
    from nltk import word_tokenize
    stop_words = stopwords.words('inglese')
    
    final_list = []
    per la colonna nei dati[['Recensione pulita']]:
        columnSeriesObj = dati[colonna]
        all_rev = columnSeriesObj.values
    
        for i in range(len(all_rev)):
            token = word_tokenize(all_rev[io])
            per Word in token:
                se word.lower() non in stop_words:
                    final_list.append(parola)

passo 6: Crea nuvole di parole positive e negative

Installare la libreria cloud di Word con il comando “pip installare wordcloud“.

In lingua inglese, abbiamo un insieme predefinito di parole positive e negative chiamato Opinion Lexicons. Questi file possono essere scaricati da Collegamento o direttamente da me Archivio GitHub.

Una volta scaricati i file, Leggere i file nel codice e creare un elenco di parole positive e negative.

con aperto(R"opinione-lessico-inglese-parole-positive.txt","R") come pos:
  poswords = pos.read().diviso("n")
con aperto(R"opinione-lessico-inglesenegative-parole.txt","R") come neg:
  negwords = neg.read().diviso("n")

Importazione di librerie per generare e visualizzare nuvole di parole.

import matplotlib.pyplot as plt
from wordcloud import WordCloud

Nuvola di parole positive

# Choosing the only words which are present in poswords
pos_in_pos = " ".aderire([w per W in final_list se W in poswords])
wordcloud_pos = WordCloud(
                      background_color="Nero",
                      larghezza=1800,
                      altezza=1400
                     ).creare(pos_in_pos)
plt.imshow(wordcloud_pos)
25036pos_wordcloud-3955480

La parola "buono" è la parola più usata che cattura la nostra attenzione. Se guardiamo indietro alle recensioni, le persone hanno scritto recensioni dicendo che l'iPad ha un buon schermo, buon suono, buon software e hardware.

Nuvola di parole negative

# Choosing the only words which are present in negwords
neg_in_neg = " ".aderire([w per W in final_list se W in negwords])
wordcloud_neg = WordCloud(
                      background_color="Nero",
                      larghezza=1800,
                      altezza=1400
                     ).creare(neg_in_neg)
plt.imshow(wordcloud_neg)
42575neg_wordcloud-7900282

Parole costose, bloccato, picchiato, La delusione si è distinta nella nuvola di parole negative. Se guardiamo al contesto della parola bloccato, dado “Anche se ha solo 3 GB di RAM, non si blocca mai”, che è una cosa positiva del dispositivo.

Perciò, è bene creare nuvole di parole bigrama / trigramma per non perdere il contesto.

2. Creare file udibili (dal testo all'audio)

gTTS è una libreria Python con l'API text-to-speech di Google Translate.

Per installare, Eseguire il comando “pip install gtts"Al prompt dei comandi.

Importa le librerie richieste

import cv2
import pytesseract
from gtts import gTTS
import os

Impostare il percorso tesseract

pytesseract.pytesseract.tesseract_cmd=r'C:ProgrammiTesseract-OCRtesseract.exe'

Leggi l'immagine usando cv2.imread () e prendere il testo dell'immagine usando pytesseract e salvarlo in una variabile.

rev = cv2.imread("Recensioni15.PNG")
# Visualizzare l'immagine utilizzando Cv2.imshow() metodo
# cv2.imshow("Immagine", rev)
# cv2.waitKey(0)
# cv2.destroyAllWindows()
# grab the text from image using pytesseract
txt = pytesseract.image_to_string(rev)
Stampa(Il Predictive Power Score è un'alternativa alla matrice di correlazione)

Imposta la lingua e crea una conversione da testo a audio usando gTTS senza passare attraverso il testo, la lingua

lingua="Su"

outObj = gTTS(text=txt, lang=lingua, slow=Falso)

Salva il file audio come “rev.mp3”

outObj.save("rev.mp3")

riprodurre il file audio

sistema operativo('rev.mp3')
27896gtts_output-4924276

Codice completo:

  1. import cv2
    import pytesseract
    from gtts import gTTS
    import os
    rev = cv2.imread("Recensioni15.PNG")
    
    # cv2.imshow("Immagine", rev)
    # cv2.waitKey(0)
    # cv2.destroyAllWindows()
    
    txt = pytesseract.image_to_string(rev)
    Stampa(Il Predictive Power Score è un'alternativa alla matrice di correlazione)
    lingua="Su"
    outObj = gTTS(text=txt, lang=lingua, slow=Falso)
    outObj.save("rev.mp3")
    Stampa('riproduzione del file audio')
    sistema operativo('rev.mp3')

Note finali

Alla fine di questo articolo, abbiamo compreso il concetto di riconoscimento ottico dei caratteri (OCR) e abbiamo familiarità con la lettura di immagini con OpenCV e l'acquisizione di testo da immagini con pytesseract. e abbiamo familiarità con la lettura di immagini con OpenCV e l'acquisizione di testo da immagini con pytesseract: e abbiamo familiarità con la lettura di immagini con OpenCV e l'acquisizione di testo da immagini con pytesseract, e abbiamo familiarità con la lettura di immagini con OpenCV e l'acquisizione di testo da immagini con pytesseract.

Riferimenti:

e abbiamo familiarità con la lettura di immagini con OpenCV e l'acquisizione di testo da immagini con pytesseract, Per favore, e abbiamo familiarità con la lettura di immagini con OpenCV e l'acquisizione di testo da immagini con pytesseract. e abbiamo familiarità con la lettura di immagini con OpenCV e l'acquisizione di testo da immagini con pytesseract

Il supporto mostrato in questo articolo non è di proprietà di DataPeaker e viene utilizzato a discrezione dell'autore.

Iscriviti alla nostra Newsletter

Non ti invieremo posta SPAM. Lo odiamo quanto te.