OCR med Python, OpenCV og PyTesseract
optisk tegngenkendelse (OCR) er konvertering af billeder af skrevet, håndskrevet eller trykt tekst til maskinkodet tekst, hvad enten det er fra et scannet dokument, et foto af et dokument, et foto fra en scene (reklametavler i et landskabsfoto) eller fra en tekst, der er overlejret på et billede (undertekster på en TV-udsendelse).
OCR består generelt af delprocesser, der skal udføres så nøjagtigt som muligt.
- forbehandling
- tekstdetektering
- tekstgenkendelse
- efterbehandling
underprocesserne kan naturligvis variere afhængigt af brugssagen, men disse er generelt de trin, der er nødvendige for at udføre optisk tegngenkendelse.
Tesseract OCR :
Tesseract er en open source tekstgenkendelsesmotor (OCR), der er tilgængelig under Apache 2.0-licensen. Det kan bruges direkte, eller (for programmører) ved hjælp af en API til at udtrække udskrevet tekst fra billeder. Det understøtter en bred vifte af sprog. Tesseract har ikke en indbygget GUI, men der er flere tilgængelige fra 3.partysiden. Tesseract er kompatibel med mange programmeringssprog og rammer gennem indpakninger, der kan findes her. Det kan bruges med den eksisterende layoutanalyse til at genkende tekst i et stort dokument, eller det kan bruges sammen med en ekstern tekstdetektor til at genkende tekst fra et billede af en enkelt tekstlinje.
Tesseract 4.00 inkluderer et nyt neuralt netværksundersystem konfigureret som en tekstlinjegenkendelse. Det har sin oprindelse i OCRopus ‘ Python-baserede LSTM implementering, men er blevet redesignet til Tesseract i C++. Det neurale netværkssystem i Tesseract foruddaterer Tensorstrøm, men er kompatibelt med det, da der er et netværksbeskrivelsessprog kaldet variabelt Grafspecifikationssprog (VGSL), der også er tilgængeligt for Tensorstrøm.
for at genkende et billede, der indeholder et enkelt tegn, bruger vi typisk et indviklet neuralt netværk (CNN). Tekst af vilkårlig længde er en sekvens af tegn, og sådanne problemer løses ved hjælp af RNNs og LSTM er en populær form for RNN. Læs dette indlæg for at lære mere om LSTM.
Tesseract udviklet fra OCRopus model i Python, som var en gaffel af en LSMT i C++, kaldet CLSTM. CLSTM er en implementering af LSTM tilbagevendende neurale netværksmodel i C++.
Tesseract var en indsats på kode rengøring og tilføje en ny LSTM model. Inputbilledet behandles i kasser (rektangel) linje for linje, der føres ind i LSTM-modellen og giver output. På billedet nedenfor kan vi visualisere, hvordan det fungerer.
installation af Tesseract
installation af Tesseract på vinduer er let med de forudkompilerede binære filer, der findes her. Glem ikke at redigere “sti” miljøvariabel og tilføje Tesseract sti. Det er installeret med få kommandoer.
Som standard forventer Tesseract en side med tekst, når den segmenterer et billede. Hvis du bare søger at OCR en lille region, kan du prøve en anden segmenteringstilstand ved hjælp af argumentet — psm. Der er 14 tilstande til rådighed, som kan findes her. Som standard automatiserer Tesseract fuldt ud sidesegmenteringen, men udfører ikke orientering og scriptdetektion. For at angive parameteren skal du skrive følgende:
0 Orientation and script detection (OSD) only.
1 Automatic page segmentation with OSD.
2 Automatic page segmentation, but no OSD, or OCR.
3 Fully automatic page segmentation, but no OSD. (Default)
4 Assume a single column of text of variable sizes.
5 Assume a single uniform block of vertically aligned text.
6 Assume a single uniform block of text.
7 Treat the image as a single text line.
8 Treat the image as a single word.
9 Treat the image as a single word in a circle.
10 Treat the image as a single character.
11 Sparse text. Find as much text as possible in no particular order.
12 Sparse text with OSD.
13 Raw line. Treat the image as a single text line,
bypassing hacks that are Tesseract-specific.
Der er også endnu et vigtigt argument, OCR-motortilstand (oem). Tesseract 4 har to OCR-motorer-Legacy Tesseract engine og LSTM engine. Der er fire driftsformer valgt ved hjælp af-oem-indstillingen.
0. Kun ældre motor.
1 . Kun neurale net LSTM-motor.
2 . Legacy + LSTM motorer.
3. Standard, baseret på hvad der er tilgængeligt.
OCR med Pytesseract og OpenCV:
Pytesseract er en indpakning til Tesseract-OCR motor. Det er også nyttigt som en stand-alone påkaldelse script til tesseract, da det kan læse alle billedtyper understøttes af puden og leptonica billedbehandling biblioteker, herunder jpeg, png, gif, bmp, tiff, og andre. Mere info om Python tilgang læs her.
forbehandling til Tesseract:
Vi skal sørge for, at billedet er korrekt forbehandlet. for at sikre en vis grad af nøjagtighed.
Dette inkluderer omskalering, binarisering, fjernelse af støj, deskvingning osv.
for at forbehandle billedet til OCR skal du bruge en af følgende python-funktioner eller følge OpenCV-dokumentationen.
Our input is this image :
Here’s what we get :
Getting boxes around text :
Vi kan bestemme afgrænsningsboksoplysningerne med PyTesseradt ved hjælp af følgende kode.
scriptet nedenfor giver dig oplysninger om afgrænsningsfeltet for hvert tegn, der registreres af tesseract under OCR.
Hvis du vil have bokse omkring ord i stedet for tegn, vil funktionenimage_to_data
komme til nytte. Du kan bruge funktionen image_to_data
med Outputtype angivet med pytesseract Output
.
Vi bruger prøvekvitteringsbilledet nedenfor som input til at teste tesseract .
Her er koden:
udgangen er en ordbog med følgende nøgler:
Leave a Reply