Fiş ve faturaların fotoğrafından veri çıkarmak — OCR (Optik Karakter Tanıma) — muhasebe ve gider takibinde en çok istenen otomasyonlardan biri. Bu yazıda mantığını ve temel kodunu anlatıyoruz. (Bu, ana sayfadaki örnek işimizin konusudur.)
OCR nedir?
OCR, bir görüntüdeki yazıyı düzenlenebilir metne çevirir. Açık kaynak Tesseract motoru bunu ücretsiz ve offline (internetsiz) yapar — verileriniz cihazdan çıkmaz, bu da gizlilik açısından kritiktir.
Kurulum
Önce Tesseract programı kurulur (Windows için UB-Mannheim paketi), sonra Python arayüzü:
pip install pytesseract pillow
Görüntüden metin okumak
import pytesseract
from PIL import Image
# Turkce dil paketi (tur) icin lang='tur'
metin = pytesseract.image_to_string(Image.open("fis.jpg"), lang="tur")
print(metin)
Alanları ayıklamak
Ham metni aldıktan sonra iş, doğru alanları bulmaktır. Tarih ve tutar gibi kalıplar için düzenli ifadeler (regex) kullanılır:
import re
def tutar_bul(metin):
# "TOPLAM 127,50" gibi bir kalibi yakala
eslesme = re.search(r"TOPLAM\s*[:]?\s*([0-9.]+,[0-9]{2})", metin.upper())
return eslesme.group(1) if eslesme else None
def tarih_bul(metin):
eslesme = re.search(r"([0-3][0-9][./][0-1][0-9][./]20[0-9]{2})", metin)
return eslesme.group(1) if eslesme else None
Gerçek fişlerde metin hiç temiz gelmez: eğik fotoğraf, sönük yazı, Türkçe karakter hataları (ş, ğ, İ). Üretim kalitesinde bir çözüm; görüntü ön-işleme, Türkçe karakter onarımı ve alanların akıllıca eşlenmesini gerektirir.
Neden basit görünüp zor olur?
Yukarıdaki kod bir başlangıçtır ama gerçek dünyada doğruluk için ek katmanlar gerekir: görüntüyü düzeltme, başlığı ayrı okuma, sözlükle karakter onarımı, düşük güvende alanları kontrol etme. Biz tam da bunu çözen, offline çalışan bir sistem geliştirdik. Benzer bir ihtiyacınız varsa konuşalım.