Üretken Veri Zekası

Tesseract, OpenCV ve Python ile OCR Nasıl Yapılır?

Tarih:

Bu blog yazısında, optik karakter tanıma konusunda araştırılan en son bilgilerle güncellenen, en çok kullanılan Tesseract Motorunun arkasındaki teknolojiyi açıklamaya çalışacağız.

Bu makale aynı zamanda nasıl yapılır kılavuzu/eğiticisi olarak da hizmet verecektir. OCR python'da Tesseract motorunu kullanarak. Aşağıdaki modüllerden geçeceğiz:

  • Tesseract OCR Özellikleri
  • OpenCV kullanarak OCR için önişleme
  • Tesseract'ı CLI ve Python ile çalıştırmak
  • Tesseract motorunun sınırlamaları

Giriş

OCR = Optik Karakter Tanıma. Başka bir deyişle, OCR sistemleri, makine tarafından yazdırılan veya el yazısıyla yazılmış metni içerebilen iki boyutlu bir metin görüntüsünü, görüntü temsilinden makine tarafından okunabilir metne dönüştürür. Bir süreç olarak OCR, genellikle mümkün olduğu kadar doğru bir şekilde gerçekleştirilecek birkaç alt süreçten oluşur. Alt süreçler şunlardır:

  • Görüntünün Önişlenmesi
  • Metin Yerelleştirme
  • Karakter Bölümleme
  • Karakter tanıma
  • İşleme Ver

Yukarıdaki listedeki alt süreçler elbette farklı olabilir, ancak bunlar otomatik karakter tanımaya yaklaşmak için kabaca gerekli adımlardır. OCR yazılımında ana amaç, yazılı metin karakterlerinden farklı dilleri kullanarak tüm benzersiz kelimeleri tanımlamak ve yakalamaktır.

Neredeyse yirmi yıldır, optik karakter tanıma sistemleri, bilgisayarlı sistemlere otomatik metin girişi sağlamak için yaygın olarak kullanılmaktadır. Ancak tüm bu zaman içinde, geleneksel çevrimiçi OCR sistemler (gibi bölgesel OCR) bir avuç yazı tipinden ve sayfa biçiminden fazlasını okuyamamalarının üstesinden asla gelemediler. Orantılı aralıklı yazı (neredeyse tüm dizgi kopyalarını içerir), lazer yazıcı yazı tipleri ve hatta orantısız birçok daktilo yazı tipi bu sistemlerin erişiminin ötesinde kalmıştır. Sonuç olarak, geleneksel OCR, dijital forma dönüştürülmesi gereken toplam belge sayısı üzerinde hiçbir zaman marjinal bir etkiden fazlasını başaramadı.

Optik Karakter Tanıma süreci (Nezaket)

Yeni nesil OCR motorları, derin öğrenme alanındaki en son araştırmaları kullanarak yukarıda bahsedilen bu sorunlarla gerçekten iyi ilgilenir. Halka açık olan derin modellerin ve büyük veri kümelerinin birleşimini kullanarak modeller, verilen görevlerde en son teknolojiye sahip doğrulukları elde eder. Bugünlerde sentetik veri üret üretken çekişmeli ağlar kullanan farklı yazı tipleri ve diğer birkaç üretken yaklaşımla.

Optik Karakter Tanıma zorlu problem metin kısıtlanmamış ortamlarda ortaya çıktığında, örneğin doğal sahneler, geometrik bozulmalar, karmaşık arka planlar ve çeşitli yazı tipleri nedeniyle. Teknoloji, derin öğrenme tabanlı OCR gibi çeşitli kullanım durumları nedeniyle hala büyük bir potansiyele sahiptir.


Aklınızda bir OCR sorunu mu var? Kuruluşunuzun veri girişi maliyetlerini azaltmak mı istiyorsunuz? Başını aşmak Nanonetler ve OCR modelleri oluşturmak için resimlerden metin çıkar or PDF'lerden veri çıkarmak AI tabanlı PDF OCR'si!


Bir yeri vardır optik karakter tanıma kullanılabilir yazılım. Aralarında herhangi bir kalite karşılaştırması bulamadım, ancak en geliştirici dostu gibi görünen bazıları hakkında yazacağım.

teserakt - OCR geliştiricileri arasında popülerlik kazanan açık kaynaklı bir OCR motoru. Bazen uygulamak ve değiştirmek acı verici olsa da, piyasada en uzun süre çok fazla ücretsiz ve güçlü OCR alternatifi yoktu. Tesseract, doktora olarak başladı. HP Labs, Bristol'daki araştırma projesi. Popülerlik kazandı ve 1984 ile 1994 arasında HP tarafından geliştirildi. 2005 yılında HP, Tesseract'ı açık kaynaklı bir yazılım olarak piyasaya sürdü. 2006'dan beri Google tarafından geliştirilmiştir.

farklı açık kaynaklı OCR araçları için google trend karşılaştırması

OCRopus - OCRopus, OCR bileşenlerinin hem araştırmacılar hem de şirketler tarafından kolayca değerlendirilmesine ve yeniden kullanılmasına olanak tanıyan açık kaynaklı bir OCR sistemidir. Anahtar teslimi bir OCR sistemi değil, bir doküman analiz programları koleksiyonu. Belgelerinize uygulamak için görüntü önişleme yapmanız ve muhtemelen yeni modeller eğitmeniz gerekebilir. Tanıma komut dosyalarının yanı sıra, zemin hakikati düzenleme ve düzeltme, hata oranlarını ölçme, kullanımı ve düzenleme kolaylığı sağlayan karışıklık matrislerini belirleme için çeşitli komut dosyaları vardır.


Oküler - Oküler, birden çok dilde yazılanlar da dahil olmak üzere, el presi kullanılarak yazdırılan belgelerde en iyi sonucu verir. Komut satırını kullanarak çalışır. Modern bir tarihi OCR sistemidir. Birincil özellikleri:

  • Bilinmeyen yazı tiplerinin denetimsiz olarak öğrenilmesi: yalnızca belge resimleri ve metin grubu gerektirir.
  • Gürültülü belgeleri işleme yeteneği: tutarsız mürekkep, aralık, dikey hizalama
  • Önemli düzeyde kelime düzeyinde kod geçişi olanlar da dahil olmak üzere çok dilli belgeler için destek.
  • Arkaik yazımlar ve yazıcı stenografi de dahil olmak üzere ortografik varyasyon modellerinin denetimsiz öğrenimi.
  • Hem diplomatik (gerçek) hem de normalleştirilmiş biçimlere eşzamanlı, ortak transkripsiyon.

SwiftOCR - Swift'in derin öğrenme için kullanılan geliştirme programlama dili olarak kullanımının ilerletilmesi konusunda büyük bir gelişme olduğu için Swift ile yazılmış OCR motorundan da bahsedeceğim. Ödeme blog nedenini öğrenmek için. SwiftOCR, görüntü tanıma için sinir ağlarını kullanan hızlı ve basit bir OCR kütüphanesidir. SwiftOCR, motorlarının iyi bilinen Tessaract kütüphanesinden daha iyi performans gösterdiğini iddia ediyor.

Bu blog yazısında, Tesseract OCR'a odaklan nasıl çalıştığı ve nasıl kullanıldığı hakkında daha fazla bilgi edinin.


Tesseract OCR

Tesseract, Apache 2.0 lisansı altında bulunan açık kaynaklı bir metin tanıma (OCR) Motorudur. Doğrudan veya (programcılar için) görüntülerden basılı metni çıkarmak için bir API kullanılarak kullanılabilir. Çok çeşitli dilleri destekler. Tesseract'ın yerleşik bir GUI'si yoktur, ancak 3.Parti sayfası. Tesseract, bulunabilen sarmalayıcılar aracılığıyla birçok programlama dili ve çerçevesiyle uyumludur okuyun. Büyük bir belgedeki metni tanımak için mevcut mizanpaj analizi ile kullanılabilir veya tek bir metin satırındaki bir görüntüden metni tanımak için harici bir metin detektörü ile birlikte kullanılabilir.

OCR Process Flow, Tesseract ile API oluşturmak için blog yazısı

Tesseract 4.00, metin satırı tanıyıcı olarak yapılandırılmış yeni bir sinir ağı alt sistemi içerir. Kökeni OCRopus'un Python tabanlı LSTM'si C ++ 'da Tesseract için yeniden tasarlandı. Tesseract'taki sinir ağı sistemi, TensorFlow'dan önce gelir, ancak TensorFlow için de kullanılabilen Değişken Grafik Spesifikasyon Dili (VGSL) adı verilen bir ağ açıklama dili olduğundan, onunla uyumludur.

Tek bir karakter içeren bir görüntüyü tanımak için, genellikle bir Evrişimli Sinir Ağı (CNN) kullanırız. Keyfi uzunluktaki metin bir karakter dizisidir ve bu tür problemler RNN'ler kullanılarak çözülür ve LSTM popüler bir RNN biçimidir. Hakkında daha fazla bilgi edinmek için bu yayını okuyun LSTM.


Teknoloji - Nasıl çalışır

LSTM'ler öğrenme dizilerinde mükemmeldir, ancak durum sayısı çok fazla olduğunda yavaşlar. LSTM'den uzun bir dizi öğrenmesini birçok sınıfın kısa bir dizisinden daha iyi istemenin daha iyi olduğunu gösteren ampirik sonuçlar vardır. Tesseract, C ++ 'da bir LSMT çatal olan Python'daki OCRopus modelinden CLSTM olarak geliştirildi. CLSTM, sayısal hesaplamalar için Eigen kütüphanesini kullanan C ++ 'da LSTM tekrarlayan sinir ağı modelinin bir uygulamasıdır.

Tesseract 3 OCR süreci kâğıt

Eski Tesseract 3.x, adımları ayırt edebileceğimiz çok aşamalı sürece bağlıydı:

  • Kelime bulma
  • Satır bulma
  • Karakter sınıflandırması

Kelime bulma metin satırlarını damlalar halinde düzenleyerek yapıldı ve çizgiler ve bölgeler sabit aralık veya orantılı metin için analiz edildi. Metin satırları, karakter aralığı türüne göre kelimelere farklı şekilde bölünür. Daha sonra tanıma iki geçişli bir süreç olarak ilerler. İlk geçişte, her kelimeyi sırayla tanıma girişiminde bulunulur. Tatmin edici olan her sözcük, eğitim verisi olarak uyarlanabilir bir sınıflandırıcıya geçirilir. Uyarlanabilir sınıflandırıcı daha sonra sayfanın altındaki metni daha doğru bir şekilde tanıma şansı elde eder.

Tesseract aracının modernizasyonu, kod temizleme ve yeni bir LSTM modeli ekleme çabasıydı. Giriş görüntüsü, LSTM modeline satır besleme ve çıktı verme yoluyla kutularda (dikdörtgen) satır halinde işlenir. Aşağıdaki resimde nasıl çalıştığını görselleştirebiliriz.

Tesseract LSTM modelini nasıl kullanır? sunum

Yeni bir eğitim aracı ekledikten ve modeli çok fazla veri ve yazı tipi ile eğittikten sonra Tesseract daha iyi performans elde eder. Yine de, el yazısı metin ve garip yazı tipleri üzerinde çalışmak için yeterince iyi değil. Deney için üst katmanları ince ayarlamak veya yeniden eğitmek mümkündür.


Tesseract Kurulumu

Windows'ta tesseract kurmak, önceden derlenmiş ikili dosyalar sayesinde kolaydır okuyun. “Yol” ortam değişkenini düzenlemeyi ve tesseract yolu eklemeyi unutmayın. Linux veya Mac kurulumu için birkaç komut.

Kurulumdan sonra terminalde veya cmd'de komut yazarak her şeyin çalıştığını doğrulayın:

$ tesseract --version

Ve çıktıyı şuna benzer göreceksiniz:

tesseract 4.0.0
leptonica-1.76.0
libjpeg 9c : libpng 1.6.34 : libtiff 4.0.9 : zlib 1.2.8
Found AVX2
Found AVX
Found SSE

Bundan sonra tesserat için python sarıcısını pip kullanarak kurabilirsiniz.
$ pip install pytesseract

Tesseract kütüphanesi, tesseract adlı kullanışlı bir komut satırı aracıyla birlikte gönderilir. Bu aracı görüntülerde OCR yapmak için kullanabiliriz ve çıktı bir metin dosyasında saklanır. Tesseract'ı C ++ veya Python kodumuza entegre etmek istiyorsak Tesseract'ın API'sını kullanacağız.


Tesseract'ı CLI ile çalıştırma

Görüntüdeki Tesseract motorunu IMAGE_PATH ve aşağıdakileri yazarak komut isteminde satır satır yazarak görüntüyü metne dönüştürün:

$ tesseract image_path stdout

Çıktı metnini bir dosyaya yazmak için:

$ tesseract image_path text_result.txt

Dil modeli adını belirtmek için, sonra dil kısayolunu yazın -l bayrak, varsayılan olarak İngilizce dilini alır:

$ tesseract image_path text_result.txt -l eng

Varsayılan olarak, Tesseract bir görüntüyü böldüğünde bir metin sayfası bekler. Yalnızca küçük bir bölge OCR'yi arıyorsanız, farklı bir segmentasyon modunu deneyin. -Psm argüman. Bulunabilecek 14 mod vardır okuyun. Varsayılan olarak, Tesseract sayfa segmentasyonunu tamamen otomatik hale getirir, ancak yönlendirme ve komut dosyası algılama gerçekleştirmez. Parametreyi belirtmek için aşağıdakileri yazın:

$ tesseract image_path text_result.txt -l eng --psm 6

Daha önemli bir argüman daha var, OCR motor modu (oem). Tesseract 4, iki OCR motoruna sahiptir - Eski Tesseract motoru ve LSTM motoru. –Oem seçeneği kullanılarak seçilen dört işlem modu vardır.
0 Yalnızca eski motor.
1 Sinir ağları yalnızca LSTM motoru.
2 Eski + LSTM motorları.
3 Mevcut olana göre varsayılan.

Tesseract OCR motorunun sonucu

Pytesseract ve OpenCV ile OCR

Pytesseract veya Python-tesseract, python için aynı zamanda Tesseract-OCR Motoru için bir sarmalayıcı görevi gören bir OCR aracıdır. Görüntülerdeki metni okuyabilir ve tanıyabilir ve python ocr görüntüden metne kullanım durumlarında yaygın olarak kullanılır.

Jpeg, png, gif, bmp, tiff ve diğerleri de dahil olmak üzere Pillow ve Leptonica görüntüleme kitaplıkları tarafından desteklenen tüm görüntü türlerini okuyabildiğinden, tesseract için bağımsız bir çağırma komut dosyası olarak da yararlıdır.

Python yaklaşımı hakkında daha fazla bilgi okuyun okuyun. Bu öğreticinin kodu bu sayfada bulunabilir Depo.

import cv2 
import pytesseract

img = cv2.imread('image.jpg')

# Adding custom options
custom_config = r'--oem 3 --psm 6'
pytesseract.image_to_string(img, config=custom_config)

Tesseract için önişleme

Yorucu çıkış hassasiyetinizin düşebileceği tüm yollardan kaçınmak için görüntünün uygun olduğundan emin olmanız gerekir önceden işlenmiş.

Bu, yeniden ölçekleme, ikileme, gürültü giderme, masa üstü düzeltme vb.

Görüntüyü OCR için önişlemek için aşağıdaki python işlevlerinden birini kullanın veya OpenCV belgeleri.

import cv2
import numpy as np

img = cv2.imread('image.jpg')

# get grayscale image
def get_grayscale(image):
    return cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# noise removal
def remove_noise(image):
    return cv2.medianBlur(image,5)
 
#thresholding
def thresholding(image):
    return cv2.threshold(image, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]

#dilation
def dilate(image):
    kernel = np.ones((5,5),np.uint8)
    return cv2.dilate(image, kernel, iterations = 1)
    
#erosion
def erode(image):
    kernel = np.ones((5,5),np.uint8)
    return cv2.erode(image, kernel, iterations = 1)

#opening - erosion followed by dilation
def opening(image):
    kernel = np.ones((5,5),np.uint8)
    return cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel)

#canny edge detection
def canny(image):
    return cv2.Canny(image, 100, 200)

#skew correction
def deskew(image):
    coords = np.column_stack(np.where(image > 0))
    angle = cv2.minAreaRect(coords)[-1]
     if angle < -45:
        angle = -(90 + angle)
    else:
        angle = -angle
    (h, w) = image.shape[:2]
    center = (w // 2, h // 2)
    M = cv2.getRotationMatrix2D(center, angle, 1.0)
    rotated = cv2.warpAffine(image, M, (w, h), flags=cv2.INTER_CUBIC, borderMode=cv2.BORDER_REPLICATE)
    return rotated

#template matching
def match_template(image, template):
    return cv2.matchTemplate(image, template, cv2.TM_CCOEFF_NORMED) 

Her şeyi daha iyi görmek için bir örnekle çalışalım. Orijinal resmimiz böyle görünüyor -

Aurebesh yazı sistemi

Aşağıdaki kodla ön işlem yaptıktan sonra

image = cv2.imread('aurebesh.jpg')

gray = get_grayscale(image)
thresh = thresholding(gray)
opening = opening(gray)
canny = canny(gray)

ve ortaya çıkan görüntüleri çizerek, aşağıdaki sonuçları elde ederiz.

Önişlemeden sonraki görüntü

Orijinal görüntünün çıktısı şuna benzer -

GALACTIC BASIC
(AUREBESH)

RE HFVMEVEIiZwoyv Ze
ABC DE F GH I JK LM
N—0- PQ RST Uv WX
2 | Ff 8 G& Pf fF § 5 op 7
ee
5, jf FF Ty ee ee
=
334 477 OED

Önceden işlenmiş farklı görüntülerin çıktısı şuna benzer:

Canny edge görüntü (çok iyi değil) -

CAE Cn Cae AS
(AUREBESE)

EA Na
oe SS
(Ne CI (ENE
a, ee oe ea
2
a a A: rc
|, |
a
Sear eo/e

ecm emclomt Cia cuoomct mi im

Eşikli görüntü -

GALACTIC BASIC
(AVREBESH)
RS 7FVMeEVEi1iFf o£
A B C D EF GH IJ K LM
AOoder7Nnvroroava
N O P Q@R S$ TU VW XK Y¥ Z
7 ee For 8 Ro Pf F Boao om #
0 12 3 4 5 6 7 8 9 , . !
>» 1kr7 @ by FEN
2? S$ ( Por Foy of ee
ASGSANDIE
CH AE EO KH NG OO SH TH

Açılış resmi -

GALACTIC BASIC
(AUREZEBELSH)
KEE VTMEUOU EB iw oN es
A BC D EF F @ H | J K LT Ww
AOGdrcrT7WTt HYOAVa4
WO P Q R BS T U VW WK y Z
i J
Oo 1 2 3 46 8 7 SC Ps,
VY ir- -rp,ptUuY?
a a a
AGoOAnNnoOID
CH AE BO KH ®@ OO SH TH

Kutuları metin etrafında dolaşma

Pytesseract kullanarak, aşağıdakileri kullanarak OCR sonuçlarınız için sınırlayıcı kutu bilgilerini alabilirsiniz kod.

Aşağıdaki komut dosyası, OCR sırasında tesseract tarafından algılanan her karakter için sınırlayıcı kutu bilgileri verecektir.

import cv2
import pytesseract

img = cv2.imread('image.jpg')

h, w, c = img.shape
boxes = pytesseract.image_to_boxes(img) 
for b in boxes.splitlines():
    b = b.split(' ')
    img = cv2.rectangle(img, (int(b[1]), h - int(b[2])), (int(b[3]), h - int(b[4])), (0, 255, 0), 2)

cv2.imshow('img', img)
cv2.waitKey(0)

Karakterler yerine kelimelerin etrafında kutular istiyorsanız, işlev image_to_data kullanışlı olacak. Kullanabilirsiniz image_to_data pytesseract ile belirtilen çıktı tipli fonksiyon Output.


Akılda bir OCR sorunu mu var? Faturaları, PDF'leri veya plakaları dijitalleştirmek ister misiniz? Başını aşmak Nanonetler ve inşa et ücretsiz çevrimiçi OCR ücretsiz modeller!


Yorucu çıktılarımızı test etmek için yukarıdaki örnek fatura görüntüsünü kullanacağız.

import cv2
import pytesseract
from pytesseract import Output

img = cv2.imread('invoice-sample.jpg')

d = pytesseract.image_to_data(img, output_type=Output.DICT)
print(d.keys())

Bu size aşağıdaki çıktıyı vermelidir -
dict_keys(['level', 'page_num', 'block_num', 'par_num', 'line_num', 'word_num', 'left', 'top', 'width', 'height', 'conf', 'text'])

Bu sözlüğü kullanarak, algılanan her kelimeyi, sınırlayıcı kutu bilgilerini, içindeki metni ve her birinin güven puanını elde edebiliriz.

Aşağıdaki kodu kullanarak kutuları çizebilirsiniz -

n_boxes = len(d['text'])
for i in range(n_boxes):
    if int(d['conf'][i]) > 60:
        (x, y, w, h) = (d['left'][i], d['top'][i], d['width'][i], d['height'][i])
        img = cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)

cv2.imshow('img', img)
cv2.waitKey(0)

Örnek bir fatura görüntüsü için bu şöyle görünecektir.


Metin şablonu eşleşmesi

Bir görüntünün içinde bir tarihin nerede olduğunu bulmaya çalışma örneğini ele alalım. Burada şablonumuz, uygun sınırlayıcı kutuları bulmak için OCR sonuçlarımızla eşleştireceğimiz normal bir ifade deseni olacaktır. Kullanacağız regex modülü ve image_to_data Bunun için işlev.

import re
import cv2
import pytesseract
from pytesseract import Output

img = cv2.imread('invoice-sample.jpg')
d = pytesseract.image_to_data(img, output_type=Output.DICT)
keys = list(d.keys())

date_pattern = '^(0[1-9]|[12][0-9]|3[01])/(0[1-9]|1[012])/(19|20)dd$'

n_boxes = len(d['text'])
for i in range(n_boxes):
    if int(d['conf'][i]) > 60:
    	if re.match(date_pattern, d['text'][i]):
	        (x, y, w, h) = (d['left'][i], d['top'][i], d['width'][i], d['height'][i])
	        img = cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)

cv2.imshow('img', img)
cv2.waitKey(0)

Beklendiği gibi, resimde fatura tarihi etrafında bir kutu alırız.


Sayfa bölümleme modları

Bir metin sayfasının analiz edilmesinin birkaç yolu vardır. Tesseract api, OCR'yi yalnızca küçük bir bölgede veya farklı yönlerde vb. Çalıştırmak istiyorsanız birkaç sayfa segmentasyon modu sağlar.

İşte tesseract tarafından desteklenen sayfa segmentasyon modlarının bir listesi -

0 Yalnızca yönlendirme ve komut dosyası algılama (OSD).
1 OSD ile otomatik sayfa bölümleme.
2 Otomatik sayfa bölümleme, ancak OSD veya OCR yok.
3 Tam otomatik sayfa bölümleme, ancak OSD yok. (Varsayılan)
4 Değişken boyutlarda tek bir metin sütunu varsayın.
5 Dikey olarak hizalanmış tek bir metin bloğu varsayın.
6 Tek bir metin bloğu varsayın.
7 Görüntüye tek bir metin satırı gibi davranın.
8 Resmi tek bir kelime olarak ele alın.
9 Resmi bir daire içindeki tek bir kelime olarak ele alın.
10 Görüntüye tek bir karakter gibi davranın.
11 Seyrek metin. Belirli bir sırayla mümkün olduğunca fazla metin bulun.
12 OSD ile seyrek metin.
13 Ham satır. Görüntüyü, Tesseract'a özgü saldırıları atlayarak tek bir metin satırı olarak ele alın.

Sayfa segmentasyon modunuzu değiştirmek için --psm özel yapılandırma dizenizde, yukarıda belirtilen mod kodlarından herhangi birine ait bağımsız değişken.


Yönü ve komut dosyasını algılama

Resminizdeki metnin yönünü ve ayrıca yazıldığı metni de tespit edebilirsiniz. Aşağıdaki resim -
görüntü
aşağıdaki kodu çalıştırdıktan sonra -

osd = pytesseract.image_to_osd(img)
angle = re.search('(?<=Rotate: )d+', osd).group(0)
script = re.search('(?<=Script: )d+', osd).group(0)
print("angle: ", angle)
print("script: ", script)

aşağıdaki çıktıyı basacaktır.

angle: 90
script: Latin

Yalnızca rakamları algıla

Örneğin bu resmi ele alalım -
görüntü
Bu resimden çıkarılan metin şuna benzer.

‘Customer name Hallium Energy services
Project NEHINS-HIB-HSA
lavoice no 43876324
Dated 17%h Nov2018
Pono 76496234

Yalnızca yapılandırmayı aşağıdaki gibi değiştirerek rakamları tanıyabilirsiniz

custom_config = r'--oem 3 --psm 6 outputbase digits'
print(pytesseract.image_to_string(img, config=custom_config))

Çıktı böyle görünecektir.

--

. 43876324
172018
0 76496234

Beyaz listeye eklenen karakterler

Yalnızca belirli bir görüntüden belirli karakterleri algılamak ve geri kalanını yoksaymak istediğinizi varsayalım. Aşağıdaki yapılandırmayı kullanarak karakterlerin beyaz listenizi belirtebilirsiniz (burada, yalnızca a'dan z'ye tüm küçük karakterleri kullandık).

custom_config = r'-c tessedit_char_whitelist=abcdefghijklmnopqrstuvwxyz --psm 6'
print(pytesseract.image_to_string(img, config=custom_config))

Çıktı -

customername
roject
tnvoleeno
ated

alliumenergyservices
e
thovo

Kara listeye alınan karakterler

Bazı karakterlerin veya ifadelerin metninizde kesinlikle görünmeyeceğinden eminseniz (OCR, kara listede bulunan karakterler yerine yanlış metin döndürür), aşağıdaki yapılandırmayı kullanarak bu karakterleri kara listeye alabilirsiniz.

custom_config = r'-c tessedit_char_blacklist=0123456789 --psm 6'
pytesseract.image_to_string(img, config=custom_config)

Çıktı -

Customer name Hallium Energy services
Project NEHINS-HIB-HSA
lavoice no
Dated %h Nov%
Pono

Birden çok dilde algılama

Kullanabileceğiniz dilleri terminale yazarak kontrol edebilirsiniz.

$ tesseract --list-langs

Belirli bir dil kullanımı için tesseract'ı indirmek için

$ sudo apt-get install tesseract-ocr-LANG

burada LANG, ihtiyacınız olan dil için üç harfli koddur. LANG değerlerini bulabilirsiniz okuyun.

Sen indirebilirsiniz .traindata ihtiyacınız olan dil için dosya okuyun ve içine koy $TESSDATA_PREFIX dizini (bu, tessdata dizini yüklü) ve kullanıma hazır olmalıdır.

not - Yalnızca bir .traineddata dosya formatı tesseract tarafından desteklenir.

OCR çıktısına ihtiyacınız olan dili belirtmek için, -l LANG LANG, hangi dilin kullanmak istediğinizin 3 harfli kod olduğu yapılandırmadaki argüman.

custom_config = r'-l eng --psm 6'
pytesseract.image_to_string(img, config=custom_config)

Örneğin bu resmi ele alalım -
görüntü
LANG parametresini değiştirerek birden çok dilde çalışabilirsiniz -

custom_config = r'-l grc+tha+eng --psm 6'
pytesseract.image_to_string(img, config=custom_config)

ve aşağıdaki çıktıyı alacaksınız -

Here’s some Greek:

Οδιο διστα ιμπεδιτ φιμ ει, αδ φελ αβχορρεανθ ελωκυενθιαμ, εξ εσε εξερσι γυ-
βεργρεν ηας. Ατ μει σολετ σριπτορεμ. ἴυς αλια λαβωρε θε. Σιθ κυωτ νυσκυαμ
τρασυνδια αν, ὠμνιυμ ελιγενδι τιν πρι. Παρτεμ φερθερεμ συσιπιαντὺυρ εξ ιυς,ναμ
%0790 แ ร เง ๑ ๕ 80 ๕ 6 ๑ อ 06 ส 0 เง น อ ๓ , πρω πρωπριαε σαεφολα ιδ. Ατ πρι δολορ νυ-
σκυαμ.

6 Thai

Here’s some Thai: ν᾿

ค อ ร ั ป ซั น จ ุ ้ ย โป ร ด ิ ว เซ อ ร ์ ส ถา ป ั ต ย ์ จ ๊ า บ แจ ็ ก พ ็ อ ต ม ้ า ห ิ น อ ่ อ น ซา ก ุ ร ะ ค ั น ถ ธ ุ ร ะ ฟิ ด ส ต า ร ์ ท ง ี ้ บ อ ย
ค อ ต อ ื ่ ม แป ร ั ส ั ง โฆ ค ํ า ส า ป แฟ น ซี ศิ ล ป ว ั ฒ น ธร ร ม ไฟ ล ท ์ จ ิ ๊ ก โก ๋ ก ั บ ด ั ก เจ ล พ ล ็ อ ต ม า ม ่ า ซา ก ุ ร ะ ด ี ล เล อ
ร ์ ซี น ด ั ม พ ์ แฮ ป ป ี ้ เอ ๊ ้ า ะ อ ุ ร ั ง ค ธา ต ุ ซิ ม ฟิ น ิ ก ซ์ เท ร ล เล ่ อ ร ์ อ ว อ ร ์ ด แค น ย อ น ส ม า พ ั น ธ์ ค ร ั ว ซอ ง ฮั ม อ า
ข่ า เอ ็ ก ซ์ เพ ร ส

not - İlk olarak belirtilen dil -l parametresi birincil dildir.

Ne yazık ki tesseract'ın görüntüdeki metnin dilini otomatik olarak algılama özelliği yoktur. Alternatif bir çözüm, başka bir python modülü tarafından sağlanır. langdetect boru ile monte edilebilir.

$ pip install langdetect

Bu modül tekrar, bir görüntü kullanarak metin dilini algılamaz, ancak dili algılamak için dize girişine ihtiyaç duyar. Bunu yapmanın en iyi yolu ilk önce tesseract kullanmak ve orada hissedebileceğiniz dillerde OCR metni almaktır. langdetect OCR metninde hangi dillerin yer aldığını bulmak için ve ardından bulunan dillerle OCR'yi tekrar çalıştırın.

İngilizce ve Portekizce olduğunu düşündüğümüz bir metin var diyelim.

custom_config = r'-l eng+por --psm 6'
txt = pytesseract.image_to_string(img, config=custom_config)

from langdetect import detect_langs
detect_langs(txt)

Bu, metindeki dillerin bir listesini ve olasılıklarını ortaya koymalıdır.

[en:0.714282468983554, es:0.2857145605644145]

Tarafından kullanılan dil kodları langdetect ISO 639-1 kodlarına uyun. Karşılaştırmak için lütfen kontrol edin Re-Tweet ve Re-Tweet. Metinde kullanılan dilin İngilizce ve İspanyolca olduğunu görüyoruz.

Yapılandırma ayarını değiştirerek metni tekrar alırız.

custom_config = r'-l eng+spa --psm 6'
txt = pytesseract.image_to_string(img, config=custom_config)

not - Tesseract, birden çok dil içeren bir görüntüde, yapılandırmada belirtilen diller yanlış olduğunda veya hiç bahsedilmediğinde kötü performans gösterir. Bu, langdetect modülünü de biraz yanıltabilir.


Tessdata_fast kullanma

Hız sizin için büyük bir endişe kaynağıysa, tessdata dil modellerinizi, tessdata modellerinin 8 bit tamsayı sürümleri olan tessdata_fast modelleriyle değiştirebilirsiniz.

Tessdata_fast göre github -

Bu depo, aşağıdakiler için eğitilmiş modellerin hızlı tamsayı sürümlerini içerir Tesseract Açık Kaynak OCR Motoru.

Bu modeller yalnızca Tesseract 4'ün LSTM OCR motoruyla çalışır.

  • Bunlar, hız ve doğruluk açısından en iyi "paranın karşılığını" sunan şeyin hız / doğruluk uzlaşmasıdır.
  • Bazı diller için bu hala en iyisidir, ancak çoğu için değildir.
  • "Paranın en iyi karşılığı" ağ yapılandırması daha sonra daha fazla hız için bütünleştirildi.
  • Çoğu kullanıcı bu eğitimli veri dosyalarını OCR yapmak için kullanmak isteyecektir ve bunlar Linux dağıtımlarının bir parçası olarak gönderilecektir. Ubuntu 18.04.
  • İnce ayar / artımlı eğitim DEĞİL bunlardan mümkün olmak fast 8 bit tamsayı olduğu için modeller.
  • Bu depodaki modelleri kullanırken, yalnızca yeni LSTM tabanlı OCR motoru desteklenir. Miras tesseract motor bu dosyalarla desteklenmez, bu nedenle Tesseract'ın oem modları '0' ve '2' onlarla çalışmaz.

Kullanmak için tessdata_fast yerine modeller tessdata, yapmanız gereken tek şey tessdata_fast dil veri dosyası okuyun ve içine yerleştirin $TESSDATA_PREFIX dizin.


Belgeleri, makbuzları veya faturaları dijitalleştirmeniz gerekiyor, ancak kodlamak için çok tembel misiniz? Başını aşmak Nanonetler ve OCR modellerini ücretsiz oluşturun!


Tesseract'ı özel veriler hakkında eğitme

Tesseract 4.00, belge görüntülerinde önemli ölçüde daha yüksek doğruluk sağlayan yeni bir sinir ağı tabanlı tanıma motoru içerir. Sinir ağları, Tesseract'dan çok daha fazla eğitim verisi gerektirir ve çok daha yavaş eğitilir. Latin tabanlı diller için, sağlanan mevcut model verileri yaklaşık 400000 yazı tipini kapsayan yaklaşık 4500 metin satırında eğitilmiştir.

Tesseract 4.0 LSTM eğitim eğitimini başarıyla çalıştırmak için, Tesseract 4 ve Tesseract 4 Eğitim Araçları'nın çalışan bir kurulumuna sahip olmanız ve ayrıca belirli dizinlerde eğitim komut dosyalarına ve gerekli eğitimli veri dosyalarına sahip olmanız gerekir. Ziyaret etmek github deposu dosyalar ve araçlar için.

Tesseract 4.00, sıfırdan eğitim için birkaç gün ila birkaç hafta sürer. Tüm bu yeni egzersiz verileriyle bile, bu nedenle eğitim için birkaç seçenek vardır:

  • İnce ayar - Mevcut eğitimli bir dille başlayarak, özel ek verileriniz üzerinde eğitim alın. Örneğin, elle yazılmış bir veri seti ve bazı ek yazı tipleri ile ilgili eğitim.
  • Üst katmanı kesin - ağdan ve yeni verileri kullanarak yeni bir üst katmanı yeniden eğitin. İnce ayar işe yaramazsa, bu büyük olasılıkla bir sonraki en iyi seçenektir. Bunun neden yararlı olduğu benzetme, ImageNet veri kümesinde eğitilmiş bir örnek modelini ele alalım. Amaç, bir kedi veya köpek sınıflandırıcı oluşturmaktır, modeldeki daha düşük katmanlar, köşeler, yatay ve dikey çizgiler gibi düşük seviyeli soyutlamada iyidir, ancak modeldeki daha yüksek katmanlar bu özellikleri birleştirir ve kedi veya köpek kulaklarını, gözlerini, burnunu tespit eder. ve bunun gibi. Yalnızca en üst katmanları yeniden eğiterek, alt katmanlardan gelen bilgileri kullanır ve yeni farklı veri kümenizle birleştirirsiniz.
  • Sıfırdan yeniden eğit - Probleminiz için çok temsili ve yeterince büyük bir eğitim setiniz yoksa bu çok yavaş bir yaklaşımdır. Sıfırdan eğitim için en iyi kaynak bunu takip etmektir github deposu.

Özel verilerinizi nasıl eğiteceğiniz ve oluşturacağınız konusunda kılavuz .traineddata dosyalar bulunabilir okuyun, okuyun ve okuyun.

Bu blog yazısında Tesseract kullanarak eğitim kodunu ele almayacağız.

Tesseract'ın Sınırlamaları

Tesseract, arka plandan ön plan metninin temiz bir bölümlenmesi olduğunda en iyi sonucu verir. Uygulamada, bu tür kurulumları garanti etmek son derece zor olabilir. Görüntüde arka plan gürültüsü varsa, Tesseract'tan kaliteli çıktı almamanızın çeşitli nedenleri vardır. Görüntü kalitesi (boyut, kontrast, yıldırım) ne kadar iyi olursa tanıma sonucu o kadar iyi olur. OCR sonuçlarını iyileştirmek için biraz önişleme gerektirir, görüntülerin uygun şekilde ölçeklendirilmesi, mümkün olduğunca fazla görüntü kontrastına sahip olması ve metnin yatay olarak hizalanması gerekir. Tesseract OCR oldukça güçlüdür ancak aşağıdaki sınırlamalara sahiptir.

Tesseract sınırlamaları listede toplandı.

  • OCR, kullanabileceğimiz bazı ticari çözümler kadar doğru değildir.
  • Kısmi kapanma, çarpık perspektif ve karmaşık arka plan dahil olmak üzere yapay nesnelerden etkilenen görüntülerde iyi sonuç vermez.
  • El yazısını tanıyamaz.
  • Anlamsızlık bulabilir ve bunu OCR çıktısı olarak rapor edebilir.
  • Bir belge -l LANG bağımsız değişkenlerinde verilen diller dışında diller içeriyorsa, sonuçlar kötü olabilir.
  • Belgelerin doğal okuma düzenini analiz etmek her zaman iyi değildir. Örneğin, bir belgenin iki sütun içerdiğini algılayamayabilir ve metni sütunlar arasında birleştirmeye çalışabilir.
  • Düşük kaliteli taramalar düşük kaliteli OCR üretebilir.
  • Hangi font ailesi metninin ait olduğu hakkında bilgi göstermez.

OCR görevlerini gerçekleştirmenin elbette daha iyi, çok daha basit ve daha sezgisel bir yolu var.


Nanonets ile OCR

The Nanonets OCR API'sı OCR modellerini kolaylıkla oluşturmanıza olanak tanır. OCR modelinizin doğruluğunu artırmak için resimlerinizi ön işleme veya şablonlar eşleştirme veya kural tabanlı motorlar oluşturma konusunda endişelenmenize gerek yoktur.

Tek bir kod satırı yazmadan, GPU'lar hakkında endişelenmeden veya derin öğrenme modelleriniz için doğru mimarileri bulmadan verilerinizi yükleyebilir, açıklama ekleyebilir, modeli eğitecek ve tarayıcı tabanlı bir kullanıcı arayüzü üzerinden tahminler almak için bekleyecek şekilde ayarlayabilirsiniz. Ayrıca, kendi sisteminizle entegre etmek ve en gelişmiş algoritmalar ve güçlü bir altyapı üzerine kurulu makine öğrenimi destekli uygulamalar oluşturmak için her bir tahminin JSON yanıtlarını alabilirsiniz.

GUI'yi kullanma: https://app.nanonets.com/

Nanonets-OCR API'sını aşağıdaki adımları izleyerek de kullanabilirsiniz: ‌

Adım 1: Repo'yu kopyalayın, bağımlılıkları yükleyin

git clone https://github.com/NanoNets/nanonets-ocr-sample-python.git
cd nanonets-ocr-sample-python
sudo pip install requests tqdm

2. Adım: Ücretsiz API Anahtarınızı edinin
Ücretsiz API Anahtarınızı şuradan alın: https://app.nanonets.com/#/keys

sayısı plakasız algılama-GIF

3. Adım: API anahtarını Ortam Değişkeni olarak ayarlayın

export NANONETS_API_KEY=YOUR_API_KEY_GOES_HERE

4. Adım: Yeni Model Oluşturun

python ./code/create-model.py

Not: Bu, bir sonraki adım için ihtiyacınız olan bir MODEL_ID değeri oluşturur

5. Adım: Model Kimliğini Ortam Değişkeni olarak ekleyin

export NANONETS_MODEL_ID=YOUR_MODEL_ID

Not: önceki adımdan YOUR_MODEL_ID alacaksınız

6. Adım: Egzersiz Verilerini Yükleme
Eğitim verileri şurada bulunur: images (resim dosyaları) ve annotations (resim dosyaları için ek açıklamalar)

python ./code/upload-training.py

Adım 7: Tren Modeli
Görüntüler yüklendikten sonra Modeli eğitmeye başlayın

python ./code/train-model.py

8. Adım: Model Durumunu Alın
Modelin eğitilmesi ~ 2 saat sürer. Model eğitildikten sonra bir e-posta alacaksınız. Bu arada modelin durumunu kontrol edersiniz

python ./code/model-state.py

Adım 9: Tahmin Yap
Model eğitildikten sonra. Modeli kullanarak tahminler yapabilirsiniz

python ./code/prediction.py ./images/151.jpg

Döngüdeki Nanonetler ve İnsanlar

‌‌ 'Orta' ekranı, düzeltme ve giriş süreçlerine yardımcı olur ve manuel incelemecinin iş yükünü yaklaşık% 90 azaltır ve kuruluş için maliyetleri% 50 azaltır.

Özellikler

  1. Doğru tahminleri izleyin
  2. Hangilerinin yanlış olduğunu izle
  3. Hatalı olanları düzeltin
  4. Yanlış olanları silin
  5. Eksik tahminleri doldurun
  6. Görüntüleri tarih aralıklarıyla filtreleme
  7. Denetlenmeyenlere karşı denetlenen görüntü sayısı elde edin

Tüm alanlar, kullanıcının OCR teknolojisinden faydalanmasına ve herhangi bir kod yazmasına veya teknolojinin nasıl çalıştığını anlamadan, gittikçe daha iyi hale gelmesine yardımcı olan, kullanımı kolay bir GUI'ye yapılandırılmıştır.


Aklınızda bir OCR sorunu mu var? Kuruluşunuzun veri girişi maliyetlerini azaltmak mı istiyorsunuz? Başını aşmak Nanonetler ve OCR modelleri oluşturmak için resimlerden metin çıkar or PDF'lerden veri çıkarmak!


Sonuç

Derin öğrenmenin bilgisayar görüşünün neredeyse her yönünü etkilemesi gibi, aynı şey karakter tanıma ve el yazısı tanıma için de geçerlidir. Derin öğrenme tabanlı modeller, gelenekselin çok ötesinde, benzeri görülmemiş metin tanıma doğruluğu elde etmeyi başardı. bilgi çıkarma ve makine öğrenimi görüntü işleme yaklaşımlar.

Tesseract, belge görüntüleri aşağıdaki yönergeleri izlediğinde iyi performans gösterir:

  • Ön plan metninin arka plandan temiz bölümlenmesi
  • Yatay olarak hizalanmış ve uygun şekilde ölçeklendirilmiş
  • Bulanıklık ve gürültüsüz yüksek kaliteli görüntü

Tesseract 4.0'ın son sürümü, daha doğru olan derin öğrenme tabanlı OCR'yi desteklemektedir. OCR motorunun kendisi, bir çeşit Tekrarlayan Sinir Ağı (RNN) olan Uzun Kısa Süreli Bellek (LSTM) ağı üzerine kurulmuştur.

Tesseract, temiz belgeleri taramak için mükemmeldir ve eğitimi kapsamlı olduğundan oldukça yüksek doğruluk ve yazı tipi değişkenliği ile birlikte gelir. Göreviniz kitapların, belgelerin ve basılı metinlerin temiz beyaz bir arka planda taranması durumunda Tesseract'ın bir araç olduğunu söyleyebilirim.


Daha fazla Okuma

Güncelleme:
Pek çok kişi, listeye ekleyebilmek için tarih veya diğer belirli verileri algıladığında metin biçiminde veya kullanarak nasıl tarih alabileceklerini sordu.
İşte cevap:
Tarih kutusunun etrafına sınırlayıcı bir kutu çizme kodunda, normal ifade kalıbıyla eşleşen bir çizgi göreceksiniz. d['text']. Yalnızca desen eşleşirse bir kutu çizer. Değerleri basitçe çıkarabilirsiniz d['text'] desen eşleştiğinde ve bunları bir listeye ekleyin.

Güncelleme 2:
İngilizce olmayan OCR ile ilgili soruları ele almak için ek okuma listelerini güncelledik.

spot_img

En Son İstihbarat

spot_img

Bizimle sohbet

Merhaba! Size nasıl yardım edebilirim?