Görüntülerden ve belgelerden metni elle çıkarmak oldukça zahmetli ve zaman alıcı olabilir. Neyse ki OCR (Optical Character Recognition), bu süreci otomatikleştirerek görüntüleri düzenlenebilir ve aranabilir metin dosyalarına dönüştürmenizi sağlar.
Öğreneceğiniz teknikler pek çok uygulamada kullanılabilir:
Fiziksel belgeleri dijitalleştirme: Tarama belgeleri, PDF’leri veya metin fotoğraflarını düzenlenebilir ve aranabilir dosyalara dönüştürün.
Veri girişini otomatikleştirme: Formlar, faturalar, fişler ve diğer belgelerden bilgi çıkarıp veritabanlarını veya e-tabloları otomatik doldurun.
Erişilebilirliği artırma: Kitaplar, menüler veya tabelalar için görme engelli kişiler adına dijital metin sürümleri oluşturun. Ardından metni seslendirmek için metin okuma araçlarını kullanabilirsiniz.
Sürücüsüz araçlar: Güvenli gezinme için trafik işaretlerini ve plaka numaralarını tanıyın.
Bu eğitim, Tesseract OCR motoruna ve onun Python API’si olan PyTesseract’a odaklanacak. Koda başlamadan önce, OCR’a adanmış bazı popüler kütüphanelere kısaca göz atalım.
Python’daki En İyi Açık Kaynak OCR Kütüphaneleri
OCR yaygın ve güncel bir problem olduğundan, bunu çözmeye çalışan birçok açık kaynak kütüphane vardır. Bu bölümde, yüksek performans ve doğrulukları sayesinde en çok popülerlik kazananları ele alacağız.
Tesseract
Tesseract OCR, geliştiriciler arasında en popüler olan açık kaynak bir optik karakter tanıma motorudur. Bu listedeki diğer araçlar gibi Tesseract da metin içeren görüntüleri alıp düzenlenebilir metne dönüştürebilir.
Avantajlar
Geniş topluluğa sahip, yaygın kullanılan ve olgun bir kütüphane
100’den fazla dili destekler
Ücretsiz ve açık kaynak
Dezavantajlar
Bazı derin öğrenme tabanlı çözümlere kıyasla doğruluk daha düşük olabilir
Sınırlı yapılandırma seçenekleri
Easy OCR
EasyOCR, zahmetsiz Optik Karakter Tanıma (OCR) için tasarlanmış bir Python kütüphanesidir. Görüntülerden metin çıkarma konusunda kullanıcı dostu bir yaklaşım sunarak adına uygun hareket eder.
Avantajlar
Kullanıcı dostu ve kurulumu kolay
Derin öğrenme modelleriyle yüksek doğruluk
Kutudan çıktığı haliyle çeşitli dilleri destekler
Dezavantajlar
Önceden eğitilmiş modellere bağımlıdır; bu modeller büyük boyutlu olabilir
Basit görevlerde Tesseract’tan daha yavaş olabilir
Keras OCR
Keras-OCR, popüler bir derin öğrenme çerçevesi olan Keras üzerine inşa edilmiş bir Python kütüphanesidir. Hazır OCR modelleri ve yeni OCR modelleri oluşturmak için uçtan uca bir eğitim hattı sunar.
Avantajlar
Derin öğrenme tabanlı yaklaşım; çeşitli metin türlerinde yüksek doğruluk sunar
Özelleştirilebilir model seçimi ve eğitimi
Karmaşık yerleşimler veya el yazısında daha doğru olabilir
Dezavantajlar
En iyi performans için GPU gerektirir
Derin öğrenme doğası nedeniyle daha dik bir öğrenme eğrisi
Özel modelleri eğitmek zaman alabilir
İşte aralarındaki farkları, avantajları ve dezavantajları özetleyen bir tablo:
Paket Adı
Avantaj
Dezavantajlar
Tesseract (pytesseract)
Olgun, yaygın kullanılan, kapsamlı destek
Daha yavaş, karmaşık yerleşimlerde daha düşük doğruluk
EasyOCR
Kullanımı basit, birden fazla model
Daha düşük doğruluk, sınırlı özelleştirme
Keras-OCR
Daha yüksek doğruluk, özelleştirilebilir
GPU gerektirir, daha dik öğrenme eğrisi
Bu eğitimde, Tesseract’ın Python API’si olan PyTesseract’a odaklanacağız. Basit görsellerden metin çıkarmayı, metin etrafına sınırlayıcı kutular çizmeyi ve taranmış bir belgeyle vaka çalışması yapmayı öğreneceğiz.
PyTesseract & OpenCV ile OCR: Adım Adım Rehber
Kurulum
PyTesseract, ayrı bir CLI yazılımı olan resmi Tesseract motorunun üzerinde çalışır. Pytesseract’ı kurmadan önce motorun kurulu olması gerekir. Aşağıda farklı platformlar için kurulum talimatları yer alıyor.
Bu kadar kolay! Şimdi yaptığımızı bir fonksiyona dönüştürelim:
defimage_to_text(input_path):"""
A function to read text from images.
"""
img = cv2.imread(input_path)
text = pytesseract.image_to_string(img)return text.strip()Altyapı:
Fonksiyonu biraz daha zor bir görüntüde kullanalım:
Görüntüde daha fazla noktalama işareti ve farklı yazı tiplerinde metin olduğu için daha zorlu.
Home > Tutorials » Data Engineering
Snowflake Tutorial For Beginners:
From Architecture to Running
Databases
Learn the fundamentals of cloud data warehouse management using
Snowflake. Snowflake is a cloud-based platform that offers significant
benefits for companies wanting to extract as much insight from their data as
quickly and efficiently as possible.
Jan 2024 - 12 min read
Altyapı:
Fonksiyonumuz neredeyse kusursuz çalıştı. Bir noktayı ve “>” işaretini karıştırdı ancak sonuç genel olarak kabul edilebilir.
Metin etrafına sınırlayıcı kutular çizme
OCR’de yaygın bir işlem, metin etrafına sınırlayıcı kutular çizmektir. Bu işlem PyTesseract’ta desteklenir.
Önce, yüklü bir görüntüyü image_to_data fonksiyonuna iletiyoruz:
from pytesseract import Output
# Extract recognized data from easy text
data = pytesseract.image_to_data(easy_img, output_type=Output.DICT)Altyapı:
Output.DICT bölümü, görüntü ayrıntılarının bir sözlük olarak döndürülmesini sağlar. İçine bakalım:
Bu, pytesseract’ın 11 kutu çizdiği anlamına gelir. conf, güveni (confidence) ifade eder. -1’e eşitse, ilgili kutu tek tek kelimeler yerine metin bloklarının etrafına çizilmiştir.
Örneğin, ilk dört width ve height değerine bakarsanız, geri kalanlara göre daha büyüktür; çünkü bu kutular önce ortadaki tüm metnin, sonra her bir metin satırının ve tüm görüntünün etrafına çizilmiştir.
Ayrıca:
left, sınırlayıcı kutunun sol üst köşesinden görüntünün sol kenarına olan mesafedir.
top, sınırlayıcı kutunun sol üst köşesinden görüntünün üst kenarına olan mesafedir.
width ve height, sınırlayıcı kutunun genişliği ve yüksekliğidir.
Bu bilgileri kullanarak, OpenCV’de görüntünün üzerine kutuları çizelim.
Önce verileri ve uzunluğunu tekrar çıkarıyoruz:
from pytesseract import Output
# Extract recognized data
data = pytesseract.image_to_data(easy_img, output_type=Output.DICT)
n_boxes =len(data["text"])Altyapı:
Ardından, bulunan kutu sayısı kadar bir döngü oluşturuyoruz:
for i inrange(n_boxes):if data["conf"][i]==-1:continueAltyapı:
Döngünün içinde, conf -1’e eşitse mevcut yinelemeyi atlayan bir koşul oluşturuyoruz. Daha büyük sınırlayıcı kutuları atlamak görüntümüzü temiz tutacaktır.
Daha sonra mevcut kutunun koordinatlarını, özellikle sol üst ve sağ alt köşelerin konumlarını tanımlıyoruz:
for i inrange(n_boxes):if data["conf"][i]==-1:continue# Coordinates
x, y = data["left"][i], data["top"][i]
w, h = data["width"][i], data["height"][i]# Corners
top_left =(x, y)
bottom_right =(x + w, y + h)Altyapı:
Kutu rengi ve piksel cinsinden kalınlık gibi bazı parametreleri belirledikten sonra tüm bilgileri cv2.rectangle fonksiyonuna iletiyoruz:
for i inrange(n_boxes):if data["conf"][i]==-1:continue# Coordinates
x, y = data["left"][i], data["top"][i]
w, h = data["width"][i], data["height"][i]# Corners
top_left =(x, y)
bottom_right =(x + w, y + h)# Box params
green =(0,255,0)
thickness =3# pixels
cv2.rectangle(
img=easy_img, pt1=top_left, pt2=bottom_right, color=green, thickness=thickness
)Altyapı:
Fonksiyon, kutuları orijinal görüntülerin üzerine çizecek. Görüntüyü kaydedip bakalım:
# Save the image
output_image_path ="images/text_with_boxes.jpg"
cv2.imwrite(output_image_path, easy_img)Altyapı:
Kurulumdan sonra ilgili modülleri içe aktarıyoruz:
import pathlib
from pathlib import Path
from pdf2image import convert_from_path
Altyapı:
convert_from_path fonksiyonu, verilen bir PDF’yi bir dizi görüntüye dönüştürür. İşte bir PDF dosyasının her sayfasını belirtilen bir dizine görüntü olarak kaydeden bir fonksiyon:
defpdf_to_image(pdf_path, output_folder:str="."):"""
A function to convert PDF files to images
"""# Create the output folder if it doesn't existifnot Path(output_folder).exists():
Path(output_folder).mkdir()
pages = convert_from_path(pdf_path, output_folder=output_folder, fmt="png")return pages
Altyapı:
PEU Business report
New customer's development
and increasing the sale of product
My country economy at this season keeps escaping from Odoba of business though holds a crude oil
high so on unstable element that continues still, and recovering gradually and well.
In the IT industry, there is an influence such as competing intensification in narrowing investment field.
Altyapı:
Metni dosyayla karşılaştırırsak, her şey yolunda çalışıyor—biçimlendirme ve aralıklar korunmuş, metin doğru. Peki çıkarılan metni nasıl paylaşırız?
Pekâlâ, çıkarılan PDF metnini paylaşmak için en iyi format yine bir PDF dosyasıdır! PyTesseract, metin içeren herhangi bir görüntüyü ham, metin içinde arama yapılabilir bir PDF dosyasına dönüştüren image_to_pdf_or_hocr fonksiyonuna sahiptir. Bunu taranmış görüntümüzde kullanalım:
Gördüğünüz gibi dosyadan metni vurgulayıp kopyalayabiliyorum. Ayrıca, orijinal PDF’nin tüm öğeleri korunmuş.
OpenCV’de OCR için Görüntü Ön İşleme Teknikleri
OCR için tek bir herkese uyan yaklaşım yoktur. Bugün ele aldığımız teknikler, diğer görüntü türlerinde çalışmayabilir. Belirli görüntüler için en uygun ayarları bulmak adına farklı görüntü ön işleme tekniklerini ve Tesseract yapılandırmalarını denemenizi öneririm.
OCR’de en önemli faktör görüntü kalitesidir. Doğru taranmış, tamamen dik ve yüksek kontrastlı (siyah beyaz) görüntüler, herhangi bir OCR yazılımıyla en iyi sonucu verme eğilimindedir. Unutmayın, siz metni okuyabiliyor olsanız bile bilgisayarınız aynı derecede okuyamayabilir.
Görüntüleriniz Tesseract’ın yüksek kalite standartlarını karşılamıyorsa ve çıktı anlamsızsa, uygulayabileceğiniz bazı ön işleme adımları vardır.
1. Gri tonlamaya dönüştürme
Öncelikle, renkli görüntüleri gri tona dönüştürerek başlayın. Bu, tanıma sürecini şaşırtabilecek renk farklılıklarını ortadan kaldırarak doğruluğu artırabilir. OpenCV’de bu işlem şu şekilde görünür:
defgrayscale(image):"""Converts an image to grayscale.
Args:
image: The input image in BGR format.
Returns:
The grayscale image.
"""return cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)Altyapı:
2. Gürültü azaltma
Özellikle taranmış belgeler, her zaman tertemiz ve tekdüze arka planlarla gelmez. Ayrıca bazı görüntüler, yaş nedeniyle yıpranmış eski belgelerden olabilir. İşte bir örnek:
Görüntüdeki gürültü kaynaklı yapıtları azaltmak için (ör. medyan bulanıklaştırma) gibi gürültü giderme filtreleri uygulayın; aksi halde OCR sırasında yanlış yorumlamalara yol açabilirler. OpenCV’de medianBlur fonksiyonunu kullanabilirsiniz:
defdenoise(image):"""Reduces noise in the image using a median blur filter.
Args:
image: The input grayscale image.
Returns:
The denoised image.
"""return cv2.medianBlur(image,5)# Adjust kernel size as neededAltyapı:
3. Keskinleştirme
Bazı durumlarda görüntüyü keskinleştirmek, kenarları belirginleştirerek özellikle bulanık veya düşük çözünürlüklü görüntülerde karakter tanımayı iyileştirebilir. OpenCV’de Laplace filtresi uygulayarak keskinleştirme yapılabilir:
defsharpen(image):"""Sharpens the image using a Laplacian filter.
Args:
image: The input grayscale image.
Returns:
The sharpened image (be cautious with sharpening).
"""
kernel = np.array([[0,-1,0],[-1,5,-1],[0,-1,0]])return cv2.filter2D(image,-1, kernel)Altyapı:
4. Binarizasyon
Bazı görüntüler için binarizasyon (görüntüyü siyah beyaza dönüştürme) faydalı olabilir. Ön plan (metin) ile arka plan arasındaki en uygun ayrımı bulmak için farklı eşikleme tekniklerini deneyin.
Ancak, binarizasyon aydınlatma farklılıklarına duyarlı olabilir ve her zaman gerekli olmayabilir. İşte binarize edilmiş bir görüntünün nasıl göründüğüne dair bir örnek:
Binarizasyonu OpenCV’de gerçekleştirmek için adaptiveThreshold fonksiyonunu kullanabilirsiniz:
defbinarize(image):"""Binarizes the image using adaptive thresholding.
Args:
image: The input grayscale image.
Returns:
The binary image.
"""
thresh = cv2.adaptiveThreshold(
image,255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY,11,2)return thresh
Altyapı:
5. Diğer teknikler
Pek çok başka ön işleme tekniği vardır, örneğin:
Genişletme (Dilation): küçük ve ince yazı tiplerini kalınlaştırarak tanımayı iyileştirme
Aşındırma (Erosion): kalın metni aşındırarak doğruluğu artırma. Kalın yazı tipli tarihî belgelerde yaygındır.
Bu yazıda, OCR gibi dinamik bir problemi öğrenmeye ilk adımları attınız. Önce basit görüntülerden metin çıkarmayı ele aldık, ardından karmaşık biçimlendirmeye sahip daha zor görüntülere geçtik.
Ayrıca, taranmış PDF’lerden metin çıkarmak için uçtan uca bir iş akışı ve çıkarılan metni tekrar aranabilir hale gelecek şekilde PDF olarak kaydetmeyi öğrendik. Makaleyi, Tesseract’a vermeden önce OpenCV ile görüntü kalitesini artırmaya yönelik bazı ipuçlarıyla tamamladık.
Görüntüyle ilgili problemleri çözme konusunda daha fazla bilgi edinmek isterseniz, göz atabileceğiniz bazı bilgisayarla görme kaynakları şunlar:
2 yılı aşkın deneyime sahip bir veri bilimi içerik üreticisiyim ve Medium’da en büyük takipçi kitlelerinden birine sahibim. Yapay zekâ ve makine öğrenimi üzerine, biraz da alaycı bir üslupla yazılmış, ayrıntılı makaleler kaleme almayı seviyorum; çünkü onları biraz daha az sıkıcı hale getirmek için bir şeyler yapmak gerekiyor. 130’un üzerinde makale ve bir de DataCamp kursu ürettim; bir diğeri de hazırlık aşamasında. İçeriklerim 5 milyondan fazla kişi tarafından görüldü; bunların 20 bini Medium ve LinkedIn’de takipçim oldu.
Algoritmalar, sistem tasarımı ve davranışsal senaryoları kapsayan bu temel sorularla teknik mülakat sürecine hakim olun. Uzman cevapları, kod örnekleri ve kanıtlanmış hazırlık stratejileri edinin.
Git deponuzu temiz tutmak için .gitignore’u nasıl kullanacağınızı öğrenin. Bu eğitim; temelleri, yaygın kullanım durumlarını ve başlamanıza yardımcı olacak pratik örnekleri kapsar!
Programlama becerilerinizi geliştirin. Kodu nasıl optimize edeceğinizi, fonksiyonları ve testleri nasıl yazacağınızı ve en iyi uygulama yazılım mühendisliği tekniklerini nasıl kullanacağınızı öğrenin.
Görüntü verilerini ele almak için Python becerilerinizi uygulayın! Ön işlemeden derin öğrenmeye kadar, görüntü verilerinden yararlanabileceğiniz birçok yolu keşfedeceksiniz.
Neden Optik Karakter Tanıma (OCR) Öğrenmelisiniz?
Görüntülerden ve belgelerden metni elle çıkarmak oldukça zahmetli ve zaman alıcı olabilir. Neyse ki OCR (Optical Character Recognition), bu süreci otomatikleştirerek görüntüleri düzenlenebilir ve aranabilir metin dosyalarına dönüştürmenizi sağlar.
Öğreneceğiniz teknikler pek çok uygulamada kullanılabilir:
Bu eğitim, Tesseract OCR motoruna ve onun Python API’si olan PyTesseract’a odaklanacak. Koda başlamadan önce, OCR’a adanmış bazı popüler kütüphanelere kısaca göz atalım.
Python’daki En İyi Açık Kaynak OCR Kütüphaneleri
OCR yaygın ve güncel bir problem olduğundan, bunu çözmeye çalışan birçok açık kaynak kütüphane vardır. Bu bölümde, yüksek performans ve doğrulukları sayesinde en çok popülerlik kazananları ele alacağız.
Tesseract
Tesseract OCR, geliştiriciler arasında en popüler olan açık kaynak bir optik karakter tanıma motorudur. Bu listedeki diğer araçlar gibi Tesseract da metin içeren görüntüleri alıp düzenlenebilir metne dönüştürebilir.
Avantajlar
Dezavantajlar
Easy OCR
EasyOCR, zahmetsiz Optik Karakter Tanıma (OCR) için tasarlanmış bir Python kütüphanesidir. Görüntülerden metin çıkarma konusunda kullanıcı dostu bir yaklaşım sunarak adına uygun hareket eder.
Avantajlar
Dezavantajlar
Keras OCR
Keras-OCR, popüler bir derin öğrenme çerçevesi olan Keras üzerine inşa edilmiş bir Python kütüphanesidir. Hazır OCR modelleri ve yeni OCR modelleri oluşturmak için uçtan uca bir eğitim hattı sunar.
Avantajlar
Dezavantajlar
İşte aralarındaki farkları, avantajları ve dezavantajları özetleyen bir tablo:
Paket Adı
Avantaj
Dezavantajlar
Tesseract (pytesseract)
Olgun, yaygın kullanılan, kapsamlı destek
Daha yavaş, karmaşık yerleşimlerde daha düşük doğruluk
EasyOCR
Kullanımı basit, birden fazla model
Daha düşük doğruluk, sınırlı özelleştirme
Keras-OCR
Daha yüksek doğruluk, özelleştirilebilir
GPU gerektirir, daha dik öğrenme eğrisi
Bu eğitimde, Tesseract’ın Python API’si olan
PyTesseract’a odaklanacağız. Basit görsellerden metin çıkarmayı, metin etrafına sınırlayıcı kutular çizmeyi ve taranmış bir belgeyle vaka çalışması yapmayı öğreneceğiz.PyTesseract & OpenCV ile OCR: Adım Adım Rehber
Kurulum
PyTesseract, ayrı bir CLI yazılımı olan resmi Tesseract motorunun üzerinde çalışır. Pytesseract’ı kurmadan önce motorun kurulu olması gerekir. Aşağıda farklı platformlar için kurulum talimatları yer alıyor.
Ubuntu veya WSL2 için (benim tercihim):
Homebrew kullanan Mac için:
Windows için, bu GitHub sayfasındaki talimatları izleyin.
Sonrasında yeni bir sanal ortam oluşturun. Ben Conda kullanacağım:
Daha sonra OCR için
pytesseract’ı ve görüntü işleme içinopencv’yi kurmanız gerekir:Bu eğitimi Jupyter’da takip ediyorsanız, yeni sanal ortamınızın bir çekirdek olarak eklenmesi için bu komutları aynı terminal oturumunda çalıştırın:
Artık kod yazmaya başlayabiliriz.
Temel kullanım
Gerekli kütüphaneleri içe aktararak başlıyoruz:
Görevimiz aşağıdaki görüntüden metni okumak:
Önce görüntü yolunu tanımlayıp
cv2.imreadfonksiyonuna veriyoruz:Ardından, yüklü görüntüyü metni çıkarmak için
pytesseract’ınimage_to_stringfonksiyonuna iletiyoruz:Bu kadar kolay! Şimdi yaptığımızı bir fonksiyona dönüştürelim:
Fonksiyonu biraz daha zor bir görüntüde kullanalım:
Görüntüde daha fazla noktalama işareti ve farklı yazı tiplerinde metin olduğu için daha zorlu.
Fonksiyonumuz neredeyse kusursuz çalıştı. Bir noktayı ve “>” işaretini karıştırdı ancak sonuç genel olarak kabul edilebilir.
Metin etrafına sınırlayıcı kutular çizme
OCR’de yaygın bir işlem, metin etrafına sınırlayıcı kutular çizmektir. Bu işlem PyTesseract’ta desteklenir.
Önce, yüklü bir görüntüyü
image_to_datafonksiyonuna iletiyoruz:Output.DICTbölümü, görüntü ayrıntılarının bir sözlük olarak döndürülmesini sağlar. İçine bakalım:Sözlük, görüntü hakkında çok sayıda bilgi içerir. Öncelikle
confvetextanahtarlarına dikkat edin. İkisi de 11 uzunluğunda:Bu,
pytesseract’ın 11 kutu çizdiği anlamına gelir.conf, güveni (confidence) ifade eder. -1’e eşitse, ilgili kutu tek tek kelimeler yerine metin bloklarının etrafına çizilmiştir.Örneğin, ilk dört
widthveheightdeğerine bakarsanız, geri kalanlara göre daha büyüktür; çünkü bu kutular önce ortadaki tüm metnin, sonra her bir metin satırının ve tüm görüntünün etrafına çizilmiştir.Ayrıca:
left, sınırlayıcı kutunun sol üst köşesinden görüntünün sol kenarına olan mesafedir.top, sınırlayıcı kutunun sol üst köşesinden görüntünün üst kenarına olan mesafedir.widthveheight, sınırlayıcı kutunun genişliği ve yüksekliğidir.Bu bilgileri kullanarak, OpenCV’de görüntünün üzerine kutuları çizelim.
Önce verileri ve uzunluğunu tekrar çıkarıyoruz:
Ardından, bulunan kutu sayısı kadar bir döngü oluşturuyoruz:
Döngünün içinde,
conf-1’e eşitse mevcut yinelemeyi atlayan bir koşul oluşturuyoruz. Daha büyük sınırlayıcı kutuları atlamak görüntümüzü temiz tutacaktır.Daha sonra mevcut kutunun koordinatlarını, özellikle sol üst ve sağ alt köşelerin konumlarını tanımlıyoruz:
Kutu rengi ve piksel cinsinden kalınlık gibi bazı parametreleri belirledikten sonra tüm bilgileri
cv2.rectanglefonksiyonuna iletiyoruz:Fonksiyon, kutuları orijinal görüntülerin üzerine çizecek. Görüntüyü kaydedip bakalım:
Sonuç tam istediğimiz gibi!
Şimdi, yaptıklarımızın hepsini yine bir fonksiyona koyalım:
Ve fonksiyonu orta zorluktaki metinde kullanalım:
Daha zor görüntü için bile sonuç mükemmel!
Vaka Çalışması: Python ile Bir PDF Dosyasında OCR
Örnek bir taranmış PDF dosyası üzerinde bir vaka çalışması yapalım. Pratikte, görüntüler yerine böyle taranmış PDF’lerle çalışmanız oldukça olasıdır:
PDF’yi GitHub’daki bu sayfadan indirebilirsiniz.
Sonraki adım, Poppler adlı bir PDF işleme yazılımı gerektiren
pdf2imagekütüphanesini kurmaktır. İşte platforma özgü talimatlar:Mac için:
Linux ve WSL2 için:
Windows için, PDF2Image dokümanlarındaki talimatları izleyebilirsiniz.
Kurulumdan sonra ilgili modülleri içe aktarıyoruz:
convert_from_pathfonksiyonu, verilen bir PDF’yi bir dizi görüntüye dönüştürür. İşte bir PDF dosyasının her sayfasını belirtilen bir dizine görüntü olarak kaydeden bir fonksiyon:Bunu belgemizde çalıştıralım:
Çıktı, tek bir görüntü
PngImageFilenesnesi içeren bir listedir.documentsdizinine bakalım:Görüntü orada; o halde başta oluşturduğumuz
image_to_textfonksiyonuna verip çıkarılan metnin ilk birkaç yüz karakterini yazdıralım:Metni dosyayla karşılaştırırsak, her şey yolunda çalışıyor—biçimlendirme ve aralıklar korunmuş, metin doğru. Peki çıkarılan metni nasıl paylaşırız?
Pekâlâ, çıkarılan PDF metnini paylaşmak için en iyi format yine bir PDF dosyasıdır! PyTesseract, metin içeren herhangi bir görüntüyü ham, metin içinde arama yapılabilir bir PDF dosyasına dönüştüren
image_to_pdf_or_hocrfonksiyonuna sahiptir. Bunu taranmış görüntümüzde kullanalım:searchable_pdf’nin görünümü şöyle:Gördüğünüz gibi dosyadan metni vurgulayıp kopyalayabiliyorum. Ayrıca, orijinal PDF’nin tüm öğeleri korunmuş.
OpenCV’de OCR için Görüntü Ön İşleme Teknikleri
OCR için tek bir herkese uyan yaklaşım yoktur. Bugün ele aldığımız teknikler, diğer görüntü türlerinde çalışmayabilir. Belirli görüntüler için en uygun ayarları bulmak adına farklı görüntü ön işleme tekniklerini ve Tesseract yapılandırmalarını denemenizi öneririm.
OCR’de en önemli faktör görüntü kalitesidir. Doğru taranmış, tamamen dik ve yüksek kontrastlı (siyah beyaz) görüntüler, herhangi bir OCR yazılımıyla en iyi sonucu verme eğilimindedir. Unutmayın, siz metni okuyabiliyor olsanız bile bilgisayarınız aynı derecede okuyamayabilir.
Görüntüleriniz Tesseract’ın yüksek kalite standartlarını karşılamıyorsa ve çıktı anlamsızsa, uygulayabileceğiniz bazı ön işleme adımları vardır.
1. Gri tonlamaya dönüştürme
Öncelikle, renkli görüntüleri gri tona dönüştürerek başlayın. Bu, tanıma sürecini şaşırtabilecek renk farklılıklarını ortadan kaldırarak doğruluğu artırabilir. OpenCV’de bu işlem şu şekilde görünür:
2. Gürültü azaltma
Özellikle taranmış belgeler, her zaman tertemiz ve tekdüze arka planlarla gelmez. Ayrıca bazı görüntüler, yaş nedeniyle yıpranmış eski belgelerden olabilir. İşte bir örnek:
Görüntüdeki gürültü kaynaklı yapıtları azaltmak için (ör. medyan bulanıklaştırma) gibi gürültü giderme filtreleri uygulayın; aksi halde OCR sırasında yanlış yorumlamalara yol açabilirler. OpenCV’de
medianBlurfonksiyonunu kullanabilirsiniz:3. Keskinleştirme
Bazı durumlarda görüntüyü keskinleştirmek, kenarları belirginleştirerek özellikle bulanık veya düşük çözünürlüklü görüntülerde karakter tanımayı iyileştirebilir. OpenCV’de Laplace filtresi uygulayarak keskinleştirme yapılabilir:
4. Binarizasyon
Bazı görüntüler için binarizasyon (görüntüyü siyah beyaza dönüştürme) faydalı olabilir. Ön plan (metin) ile arka plan arasındaki en uygun ayrımı bulmak için farklı eşikleme tekniklerini deneyin.
Ancak, binarizasyon aydınlatma farklılıklarına duyarlı olabilir ve her zaman gerekli olmayabilir. İşte binarize edilmiş bir görüntünün nasıl göründüğüne dair bir örnek:
Binarizasyonu OpenCV’de gerçekleştirmek için
adaptiveThresholdfonksiyonunu kullanabilirsiniz:5. Diğer teknikler
Pek çok başka ön işleme tekniği vardır, örneğin:
Görüntü kalitesini artırma hakkında daha fazla bilgiyi Tesseract dokümantasyonunun bu sayfasından edinebilirsiniz.
Sonuç
Bu yazıda, OCR gibi dinamik bir problemi öğrenmeye ilk adımları attınız. Önce basit görüntülerden metin çıkarmayı ele aldık, ardından karmaşık biçimlendirmeye sahip daha zor görüntülere geçtik.
Ayrıca, taranmış PDF’lerden metin çıkarmak için uçtan uca bir iş akışı ve çıkarılan metni tekrar aranabilir hale gelecek şekilde PDF olarak kaydetmeyi öğrendik. Makaleyi, Tesseract’a vermeden önce OpenCV ile görüntü kalitesini artırmaya yönelik bazı ipuçlarıyla tamamladık.
Görüntüyle ilgili problemleri çözme konusunda daha fazla bilgi edinmek isterseniz, göz atabileceğiniz bazı bilgisayarla görme kaynakları şunlar: