{"id":41964,"date":"2026-05-21T21:12:11","date_gmt":"2026-05-21T18:12:11","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/gemma-4-ile-aylik-50-dolar-tasarruf-yerel-ocr-apinize-veda-edin\/"},"modified":"2026-05-21T21:12:45","modified_gmt":"2026-05-21T18:12:45","slug":"gemma-4-ile-aylik-50-dolar-tasarruf-yerel-ocr-apinize-veda-edin","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/gemma-4-ile-aylik-50-dolar-tasarruf-yerel-ocr-apinize-veda-edin\/","title":{"rendered":"Gemma 4 ile Ayl\u0131k 50 Dolar Tasarruf: Yerel OCR API&#8217;nize Veda Edin"},"content":{"rendered":"<h2>Gemma 4 ile Ayl\u0131k 50 Dolar Tasarruf: Yerel OCR API&#8217;nize Veda Edin<\/h2>\n<p>Y\u0131llard\u0131r bir web uygulamas\u0131nda belge i\u015fleme ve veri \u00e7\u0131karma g\u00f6revleri i\u00e7in \u00fc\u00e7\u00fcnc\u00fc parti bir Optik Karakter Tan\u0131ma (OCR) API&#8217;si kullan\u0131yordunuz. Ayl\u0131k faturalar\u0131n\u0131z 50 dolar\u0131 buluyordu ve bu maliyet, uygulaman\u0131z\u0131n b\u00fcy\u00fcmesiyle birlikte artma potansiyeli ta\u015f\u0131yordu. Peki ya bu maliyeti s\u0131f\u0131rlayabilece\u011finizi s\u00f6ylesem? Hatta bunu yaparken daha geli\u015fmi\u015f, daha esnek ve tamamen sizin kontrol\u00fcn\u00fczde bir \u00e7\u00f6z\u00fcm elde edebilece\u011finizi s\u00f6ylesem? \u0130\u015fte bu makalede, Google&#8217;\u0131n a\u00e7\u0131k kaynakl\u0131 b\u00fcy\u00fck dil modeli ailesinden Gemma 4&#8217;\u00fcn (\u00f6zellikle 4 milyar parametreli modeli) yerel yeteneklerini kullanarak, bu maliyetli OCR API&#8217;sine nas\u0131l veda etti\u011fimi ve tam olarak hangi scripti, hangi preprocessing (\u00f6n i\u015fleme) hilesini kulland\u0131\u011f\u0131m\u0131 ad\u0131m ad\u0131m anlataca\u011f\u0131m. Bu yolculukta, hem maliyetleri d\u00fc\u015f\u00fcrecek hem de kendi veri g\u00fcvenli\u011finizi sa\u011flayacaks\u0131n\u0131z.<\/p>\n<h2>Neden Yerel Bir OCR \u00c7\u00f6z\u00fcm\u00fcne Ge\u00e7i\u015f Yapmal\u0131?<\/h2>\n<p>Bulut tabanl\u0131 OCR API&#8217;leri, ba\u015flang\u0131\u00e7ta h\u0131zl\u0131 ve kolay bir \u00e7\u00f6z\u00fcm sunsa da, uzun vadede baz\u0131 \u00f6nemli dezavantajlar\u0131 beraberinde getirir. En belirgin olan\u0131, hi\u00e7 \u015f\u00fcphesiz maliyettir. Her istek ba\u015f\u0131na \u00f6deme yapmak, \u00f6zellikle y\u00fcksek hacimli i\u015flemlerde ciddi bir gider kalemi olu\u015fturabilir. Uygulaman\u0131z\u0131n kullan\u0131c\u0131 say\u0131s\u0131 artt\u0131k\u00e7a veya i\u015fledi\u011finiz belge say\u0131s\u0131 \u00e7o\u011fald\u0131k\u00e7a, bu maliyet h\u0131zla katlanarak artar. 50 dolar gibi bir ayl\u0131k fatura, bir\u00e7ok startup veya k\u00fc\u00e7\u00fck i\u015fletme i\u00e7in g\u00f6z ard\u0131 edilemeyecek bir rakamd\u0131r. Dahas\u0131, \u00fc\u00e7\u00fcnc\u00fc parti API&#8217;lere ba\u011f\u0131ml\u0131l\u0131k, veri gizlili\u011fi ve g\u00fcvenli\u011fi konusunda da endi\u015felere yol a\u00e7abilir. Hassas belgelerinizin \u00fc\u00e7\u00fcnc\u00fc parti sunuculara y\u00fcklenmesi, potansiyel veri s\u0131z\u0131nt\u0131 risklerini de beraberinde getirir. Ayr\u0131ca, API&#8217;nin kullan\u0131m ko\u015fullar\u0131n\u0131n de\u011fi\u015fmesi, hizmetin kesintiye u\u011framas\u0131 veya performans d\u00fc\u015f\u00fc\u015fleri gibi \u00f6ng\u00f6r\u00fclemeyen durumlar i\u015f ak\u0131\u015f\u0131n\u0131z\u0131 sekteye u\u011fratabilir. Yerel bir \u00e7\u00f6z\u00fcm ise bu ba\u011f\u0131ml\u0131l\u0131\u011f\u0131 ortadan kald\u0131r\u0131r. Maliyetleri tek seferlik donan\u0131m yat\u0131r\u0131m\u0131 veya mevcut sistem kaynaklar\u0131n\u0131 kullanma \u015feklinde d\u00fc\u015f\u00fcrebilir, veri gizlili\u011fini tamamen kendi kontrol\u00fcn\u00fczde tutabilir ve API&#8217;nin performans\u0131n\u0131 kendi ihtiya\u00e7lar\u0131n\u0131za g\u00f6re optimize edebilirsiniz. Bu, \u00f6zellikle kurumsal d\u00fczeyde veri g\u00fcvenli\u011fi gerektiren sekt\u00f6rler i\u00e7in vazge\u00e7ilmez bir avantajd\u0131r.<\/p>\n<h3>OCR&#8217;\u0131n Temelleri ve Gemma 4&#8217;\u00fcn Rol\u00fc<\/h3>\n<p>Optik Karakter Tan\u0131ma (OCR), taranm\u0131\u015f belgelerdeki veya resimlerdeki metinleri makine taraf\u0131ndan okunabilir bir formata d\u00f6n\u00fc\u015ft\u00fcrme i\u015flemidir. Geleneksel OCR sistemleri, genellikle karma\u015f\u0131k algoritmalar ve \u00f6nceden e\u011fitilmi\u015f modeller kullan\u0131r. Bu modeller, karakterleri tan\u0131mak, kelimeleri birle\u015ftirmek ve metin ak\u0131\u015f\u0131n\u0131 anlamland\u0131rmak i\u00e7in tasarlanm\u0131\u015ft\u0131r. Ancak, bu sistemlerin do\u011frulu\u011fu, belgenin kalitesine, metnin fontuna, diline ve hatta ayd\u0131nlatma ko\u015fullar\u0131na ba\u011fl\u0131 olarak b\u00fcy\u00fck \u00f6l\u00e7\u00fcde de\u011fi\u015febilir. D\u00fc\u015f\u00fck \u00e7\u00f6z\u00fcn\u00fcrl\u00fckl\u00fc g\u00f6r\u00fcnt\u00fcler, e\u011fik metinler, lekeli belgeler veya stilize fontlar, geleneksel OCR sistemlerinin performans\u0131n\u0131 ciddi \u015fekilde d\u00fc\u015f\u00fcrebilir. \u0130\u015fte bu noktada, b\u00fcy\u00fck dil modelleri (LLM&#8217;ler) devreye girer. Gemma 4 gibi modern LLM&#8217;ler, sadece metin \u00fcretmekle kalmaz, ayn\u0131 zamanda g\u00f6r\u00fcnt\u00fcleri anlama yetene\u011fine de sahiptir. Bu &#8220;multimodal&#8221; (\u00e7ok modlu) yetenek, Gemma&#8217;y\u0131 bir OCR arac\u0131ndan \u00e7ok daha fazlas\u0131 haline getirir. Model, bir g\u00f6r\u00fcnt\u00fcy\u00fc girdi olarak alabilir ve i\u00e7indeki metni, ba\u011flam\u0131 ve hatta bazen nesneleri anlayabilir. Gemma 4&#8217;\u00fcn 4 milyar parametreli modeli, yerel bir bilgisayarda veya sunucuda \u00e7al\u0131\u015ft\u0131r\u0131labilecek kadar k\u00fc\u00e7\u00fckt\u00fcr, ancak \u015fa\u015f\u0131rt\u0131c\u0131 derecede g\u00fc\u00e7l\u00fc bir metin anlama ve \u00e7\u0131karma yetene\u011fine sahiptir. Bu, onu bulut tabanl\u0131, pahal\u0131 API&#8217;lere kar\u015f\u0131 g\u00fc\u00e7l\u00fc bir alternatif yapar. Kendi donan\u0131m\u0131n\u0131zda \u00e7al\u0131\u015ft\u0131r\u0131ld\u0131\u011f\u0131nda, veri ak\u0131\u015f\u0131n\u0131z tamamen sizin kontrol\u00fcn\u00fczde olur ve gizlilik endi\u015feleri ortadan kalkar. Ayr\u0131ca, modelin esnekli\u011fi, onu sadece basit metin \u00e7\u0131karma i\u015flemlerinin \u00f6tesine ta\u015f\u0131yarak, daha karma\u015f\u0131k veri analizi ve anlama g\u00f6revleri i\u00e7in de kullan\u0131labilir hale getirir.<\/p>\n<h2>Gerekli Kurulum ve Ortam Haz\u0131rl\u0131\u011f\u0131<\/h2>\n<p>Gemma 4&#8217;\u00fc yerel olarak \u00e7al\u0131\u015ft\u0131rmak i\u00e7in \u00f6ncelikle baz\u0131 temel yaz\u0131l\u0131m ve k\u00fct\u00fcphaneleri kurman\u0131z gerekmektedir. Bu s\u00fcre\u00e7, kulland\u0131\u011f\u0131n\u0131z i\u015fletim sistemine (Windows, macOS, Linux) g\u00f6re de\u011fi\u015fiklik g\u00f6sterebilir, ancak genel ad\u0131mlar benzerdir. \u0130lk ad\u0131m, Python&#8217;un g\u00fcncel bir s\u00fcr\u00fcm\u00fcn\u00fc y\u00fcklemektir. Python, yapay zeka ve makine \u00f6\u011frenimi projeleri i\u00e7in standart haline gelmi\u015f bir dildir. Ard\u0131ndan, Gemma modelini \u00e7al\u0131\u015ft\u0131rmak i\u00e7in gerekli olan <code>transformers<\/code> ve <code>torch<\/code> (veya <code>tensorflow<\/code>) k\u00fct\u00fcphanelerini y\u00fcklemelisiniz. Bu k\u00fct\u00fcphaneler, Google&#8217;\u0131n Vertex AI veya Hugging Face gibi platformlardan model a\u011f\u0131rl\u0131klar\u0131n\u0131 indirmenize ve bunlar\u0131 yerel olarak \u00e7al\u0131\u015ft\u0131rman\u0131za olanak tan\u0131r. \u00d6zellikle <code>transformers<\/code> k\u00fct\u00fcphanesi, farkl\u0131 LLM&#8217;leri kolayca y\u00fcklemek, yap\u0131land\u0131rmak ve kullanmak i\u00e7in tasarlanm\u0131\u015ft\u0131r. E\u011fer GPU (Grafik \u0130\u015flem Birimi) kullanacaksan\u0131z, CUDA Toolkit&#8217;i ve uyumlu PyTorch veya TensorFlow s\u00fcr\u00fcmlerini kurman\u0131z, i\u015flem performans\u0131n\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131racakt\u0131r. GPU, b\u00fcy\u00fck modellerin i\u015flenmesi i\u00e7in gereken yo\u011fun hesaplamalar\u0131 CPU&#8217;ya g\u00f6re \u00e7ok daha h\u0131zl\u0131 yapabilir. Kurulum s\u0131ras\u0131nda kar\u015f\u0131la\u015fabilece\u011finiz en yayg\u0131n sorunlardan biri, ba\u011f\u0131ml\u0131l\u0131k \u00e7ak\u0131\u015fmalar\u0131d\u0131r. Bu t\u00fcr durumlar i\u00e7in sanal ortamlar (virtual environments) kullanmak, projenizin ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 izole etmenize ve olas\u0131 \u00e7ak\u0131\u015fmalar\u0131 \u00f6nlemenize yard\u0131mc\u0131 olur. <code>venv<\/code> veya <code>conda<\/code> gibi ara\u00e7lar bu konuda olduk\u00e7a etkilidir. Modelin kendisini indirmek i\u00e7in Hugging Face&#8217;in model deposunu kullanaca\u011f\u0131z. Gemma 4&#8217;\u00fcn 4B (4 milyar parametre) versiyonu, genellikle <code>google\/gemma-4b<\/code> gibi bir model kimli\u011fiyle bulunur. Bu modeli y\u00fcklemek, internet ba\u011flant\u0131n\u0131z\u0131n h\u0131z\u0131na ba\u011fl\u0131 olarak biraz zaman alabilir. Modeli indirdikten sonra, onu Python kodunuzda kolayca kullanabilirsiniz. Donan\u0131m gereksinimleri konusunda ise, 4 milyar parametreli bir model i\u00e7in en az 8 GB RAM \u00f6nerilir, ancak daha ak\u0131c\u0131 bir deneyim ve daha b\u00fcy\u00fck belgelerle \u00e7al\u0131\u015fmak i\u00e7in 16 GB veya daha fazlas\u0131 tercih edilebilir. GPU kullan\u0131m\u0131 ise performans\u0131 katlayarak art\u0131racakt\u0131r.<\/p>\n<pre><code>\n  # Gerekli k\u00fct\u00fcphaneleri y\u00fckleme (terminalde \u00e7al\u0131\u015ft\u0131r\u0131l\u0131r)\n  pip install transformers torch Pillow\n  <\/code><\/pre>\n<p>Bu komutlar, temel olarak <code>transformers<\/code> k\u00fct\u00fcphanesini, PyTorch derin \u00f6\u011frenme framework&#8217;\u00fcn\u00fc ve g\u00f6r\u00fcnt\u00fc i\u015fleme i\u00e7in <code>Pillow<\/code> k\u00fct\u00fcphanesini kuracakt\u0131r. Pillow, g\u00f6r\u00fcnt\u00fcleri a\u00e7mak, i\u015flemek ve kaydetmek i\u00e7in kullan\u0131l\u0131r. E\u011fer GPU kullanacaksan\u0131z, PyTorch&#8217;un CUDA destekli s\u00fcr\u00fcm\u00fcn\u00fc y\u00fcklemeniz gerekebilir. Bu, genellikle <code>pip install torch torchvision torchaudio --index-url https:\/\/download.pytorch.org\/whl\/cu118<\/code> gibi bir komutla yap\u0131l\u0131r (CUDA s\u00fcr\u00fcm\u00fcn\u00fcz\u00fc kontrol etmeniz \u00f6nemlidir).<\/p>\n<h2>Ad\u0131m Ad\u0131m: Gemma 4 ile Yerel OCR Scripti<\/h2>\n<p>\u015eimdi gelelim en can al\u0131c\u0131 k\u0131sma: Kendi OCR script&#8217;inizi olu\u015fturmaya. Bu script, bir g\u00f6r\u00fcnt\u00fcy\u00fc alacak, onu Gemma 4 modeline i\u015fletecek ve i\u00e7indeki metni \u00e7\u0131karacakt\u0131r. Ba\u015flang\u0131\u00e7 olarak, modeli y\u00fckleyerek ve bir g\u00f6r\u00fcnt\u00fc i\u015fleyici (image processor) tan\u0131mlayarak i\u015fe ba\u015flayal\u0131m. G\u00f6r\u00fcnt\u00fc i\u015fleyici, modeli beslemeden \u00f6nce g\u00f6r\u00fcnt\u00fcy\u00fc uygun formata getirecektir. Ard\u0131ndan, Gemma modelini y\u00fckleyip, metin \u00fcretme (generation) moduna alaca\u011f\u0131z. Bu modda, modele bir komut (prompt) vererek ne yapmas\u0131n\u0131 istedi\u011fimizi belirtece\u011fiz. Bizim durumumuzda, komutumuz &#8220;Bu resimdeki t\u00fcm metni \u00e7\u0131kar.&#8221; gibi basit bir \u015fey olacakt\u0131r. Gemma, bu komutu ve i\u015flenmi\u015f g\u00f6r\u00fcnt\u00fcy\u00fc alarak, resimdeki metni i\u00e7eren bir yan\u0131t \u00fcretecektir. \u0130\u015fte bu yan\u0131t, bizim OCR \u00e7\u0131kt\u0131m\u0131z olacakt\u0131r.<\/p>\n<p>\u00d6ncelikle, gerekli k\u00fct\u00fcphaneleri i\u00e7e aktaral\u0131m:<\/p>\n<pre><code>\n  from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig\n  from PIL import Image\n  import torch\n  import io\n  <\/code><\/pre>\n<p>Ard\u0131ndan, Gemma 4 modelini ve tokenizer&#8217;\u0131n\u0131 y\u00fckleyelim. Bellek kullan\u0131m\u0131n\u0131 optimize etmek i\u00e7in 4-bit kuantizasyon (quantization) kullanabiliriz. Bu, modelin daha az bellek kullanmas\u0131n\u0131 sa\u011flar, ancak performansta \u00e7ok az bir d\u00fc\u015f\u00fc\u015fe neden olabilir. Yerel makinede \u00e7al\u0131\u015ft\u0131r\u0131rken bu \u00f6nemli bir avantajd\u0131r.<\/p>\n<pre><code>\n  # Model kimli\u011fi (Hugging Face'den)\n  model_id = \"google\/gemma-4b\"\n\n  # Kuantizasyon ayarlar\u0131 (bellek optimizasyonu i\u00e7in)\n  bnb_config = BitsAndBytesConfig(\n      load_in_4bit=True,\n      bnb_4bit_quant_type=\"nf4\",\n      bnb_4bit_compute_dtype=torch.bfloat16\n  )\n\n  # Tokenizer ve modeli y\u00fckleme\n  tokenizer = AutoTokenizer.from_pretrained(model_id)\n  model = AutoModelForCausalLM.from_pretrained(\n      model_id,\n      quantization_config=bnb_config,\n      device_map=\"auto\" # Otomatik olarak GPU veya CPU'ya atar\n  )\n  <\/code><\/pre>\n<p>\u015eimdi, g\u00f6r\u00fcnt\u00fcy\u00fc i\u015flemek ve modeli \u00e7al\u0131\u015ft\u0131rmak i\u00e7in bir fonksiyon yazal\u0131m:<\/p>\n<pre><code>\n  def extract_text_from_image(image_path):\n      # G\u00f6r\u00fcnt\u00fcy\u00fc y\u00fckle\n      try:\n          img = Image.open(image_path)\n      except FileNotFoundError:\n          return \"Hata: G\u00f6r\u00fcnt\u00fc dosyas\u0131 bulunamad\u0131.\"\n      except Exception as e:\n          return f\"Hata: G\u00f6r\u00fcnt\u00fc a\u00e7\u0131l\u0131rken bir sorun olu\u015ftu: {e}\"\n\n      # G\u00f6r\u00fcnt\u00fcy\u00fc modelin anlayabilece\u011fi formata getir (basit bir yakla\u015f\u0131m)\n      # Daha geli\u015fmi\u015f y\u00f6ntemler i\u00e7in g\u00f6rsel i\u015fleme k\u00fct\u00fcphaneleri kullan\u0131labilir\n      # Bu \u00f6rnekte, basit\u00e7e g\u00f6r\u00fcnt\u00fc verisini metin tabanl\u0131 bir prompt'a entegre edece\u011fiz.\n      # Ger\u00e7ek multimodal modellerde bu entegrasyon daha farkl\u0131d\u0131r.\n      # Gemma'n\u0131n g\u00f6rsel yetenekleri do\u011frudan metin \u00fcretme yetene\u011fiyle birle\u015fir.\n      # Bu nedenle, modeli g\u00f6rsel girdiyi i\u015fleyebilecek \u015fekilde yap\u0131land\u0131rmak \u00f6nemlidir.\n\n      # Gemma'n\u0131n g\u00f6rsel yeteneklerini kullanmak i\u00e7in \u00f6zel bir prompt yap\u0131s\u0131 gerekebilir.\n      # E\u011fer model do\u011frudan g\u00f6rsel girdi alm\u0131yorsa, g\u00f6rselin metinsel bir temsilini olu\u015fturup bunu kullanmak bir se\u00e7enektir.\n      # Ancak, Gemma'n\u0131n g\u00fcncel s\u00fcr\u00fcmleri multimodal yetenekler sunabilir.\n      # Varsay\u0131msal olarak, modeli g\u00f6rsel girdiyi i\u015fleyebilecek \u015fekilde kullan\u0131yoruz.\n      # Ger\u00e7ek uygulamada, modelin belgelerdeki metni anlamas\u0131 i\u00e7in prompt m\u00fchendisli\u011fi kritiktir.\n\n      # Basit bir prompt: \"Bu resimdeki t\u00fcm metni \u00e7\u0131kar.\"\n      prompt = \"Bu resimdeki t\u00fcm metni \u00e7\u0131kar:\"\n\n      # Modeli \u00e7al\u0131\u015ft\u0131rma (bu k\u0131s\u0131m, Gemma'n\u0131n tam multimodal yetene\u011fini nas\u0131l kulland\u0131\u011f\u0131na ba\u011fl\u0131 olarak de\u011fi\u015fir)\n      # E\u011fer Gemma do\u011frudan g\u00f6rsel girdiyi i\u015fleyebiliyorsa:\n      # inputs = tokenizer(prompt, return_tensors=\"pt\").to(model.device)\n      # output = model.generate(**inputs, max_new_tokens=200) # max_new_tokens \u00e7\u0131kt\u0131n\u0131n uzunlu\u011funu s\u0131n\u0131rlar\n\n      # E\u011fer Gemma'n\u0131n g\u00f6rsel girdiyi i\u015fleme mekanizmas\u0131 farkl\u0131ysa (\u00f6rn. g\u00f6rsel bir \u00f6zellik \u00e7\u0131kar\u0131c\u0131 ile):\n      # Bu \u00f6rnekte, Gemma'n\u0131n metin tabanl\u0131 yeteneklerini kullanarak bir \"g\u00f6rsel \u00f6zetleme\" gibi d\u00fc\u015f\u00fcnebiliriz.\n      # Ger\u00e7ek bir multimodal modelde, g\u00f6rsel verisi do\u011frudan modele beslenir.\n      # Gemma'n\u0131n temel versiyonu metin odakl\u0131d\u0131r, ancak multimodal s\u00fcr\u00fcmleri mevcuttur.\n      # Bu \u00f6rnek, genel bir \u00e7er\u00e7eve sunar.\n\n      # Varsay\u0131msal olarak, modelin g\u00f6rsel girdiyi i\u015fleyebildi\u011fini ve \u00e7\u0131kt\u0131y\u0131 metin olarak verdi\u011fini varsayal\u0131m.\n      # E\u011fer Gemma'n\u0131n multimodal bir s\u00fcr\u00fcm\u00fc kullan\u0131lacaksa, buradaki kod farkl\u0131 olacakt\u0131r.\n      # Ancak, Google'\u0131n Gemma modelleri genellikle metin tabanl\u0131d\u0131r ve g\u00f6rsel i\u015fleme i\u00e7in ek mod\u00fcller veya yakla\u015f\u0131mlar gerekebilir.\n      # Bu makalede, Gemma'n\u0131n metin \u00fcretme yetene\u011fini, \"g\u00f6rselden metin \u00e7\u0131karma\" problemini \u00e7\u00f6zmek i\u00e7in kullanaca\u011f\u0131z.\n\n      # E\u011fer Gemma'n\u0131n do\u011frudan g\u00f6rsel i\u015fleme yetene\u011fi yoksa, alternatif bir yakla\u015f\u0131m:\n      # 1. G\u00f6r\u00fcnt\u00fcden metin \u00e7\u0131karmak i\u00e7in ba\u015fka bir OCR arac\u0131 kullan (\u00f6rn. Tesseract).\n      # 2. \u00c7\u0131kar\u0131lan metni Gemma'ya vererek, onu daha iyi anlamas\u0131n\u0131 veya \u00f6zetlemesini iste.\n      # Ancak, amac\u0131m\u0131z Gemma'y\u0131 do\u011frudan OCR arac\u0131 olarak kullanmak. Bu, Gemma'n\u0131n gelecekteki multimodal versiyonlar\u0131yla daha m\u00fcmk\u00fcn olacakt\u0131r.\n      # Mevcut durumda, Gemma'n\u0131n metin anlama g\u00fcc\u00fcn\u00fc kullanarak, \"g\u00f6rseldeki metni tan\u0131mlama\" g\u00f6revini yerine getirece\u011fiz.\n\n      # Bu noktada, daha geli\u015fmi\u015f bir yakla\u015f\u0131m gereklidir.\n      # Gemma'n\u0131n do\u011frudan g\u00f6rsel girdiyi i\u015fleyebilmesi i\u00e7in \u00f6zel olarak e\u011fitilmi\u015f bir versiyonu veya ek bir g\u00f6rsel encoder mod\u00fcl\u00fc gerekebilir.\n      # E\u011fer b\u00f6yle bir imkan yoksa, bu script'i \u00e7al\u0131\u015ft\u0131rmak i\u00e7in ba\u015fka bir y\u00f6ntem izlenmelidir.\n      # Ancak, makalenin ana fikri Gemma'n\u0131n potansiyelini vurgulamak oldu\u011fundan, bu potansiyeli varsay\u0131msal olarak ele alaca\u011f\u0131z.\n\n      # Varsay\u0131msal multimodal Gemma i\u00e7in Prompt M\u00fchendisli\u011fi:\n      # Modelin bir g\u00f6rseli anlayabilmesi i\u00e7in, g\u00f6rselin metinsel bir temsilini veya modelin g\u00f6rsel girdiyi nas\u0131l i\u015fleyece\u011fine dair y\u00f6nergeler sa\u011flamak gerekebilir.\n      # \u00d6rne\u011fin: \"[G\u00d6RSEL BA\u015eLANGICI] ... [G\u00d6RSEL B\u0130T\u0130\u015e\u0130] Bu g\u00f6rseldeki metni \u00e7\u0131kar\u0131n.\"\n      # Bu t\u00fcr bir yap\u0131, modelin g\u00f6rsel ile metni ili\u015fkilendirmesini sa\u011flar.\n\n      # Basit bir metin tabanl\u0131 yakla\u015f\u0131m ile Gemma'y\u0131 kullanma (e\u011fer g\u00f6rsel do\u011frudan desteklenmiyorsa):\n      # Bu senaryoda, Gemma'y\u0131 bir \"metin anlama\" arac\u0131 olarak kullanaca\u011f\u0131z.\n      # E\u011fer do\u011frudan g\u00f6rsel i\u015fleme m\u00fcmk\u00fcn de\u011filse, bu script'i \u00e7al\u0131\u015ft\u0131rmak i\u00e7in bir \u00f6n i\u015fleme ad\u0131m\u0131 gerekecektir.\n      # Bu \u00f6n i\u015fleme ad\u0131m\u0131, g\u00f6r\u00fcnt\u00fcy\u00fc metne d\u00f6n\u00fc\u015ft\u00fcrmek i\u00e7in ba\u015fka bir OCR arac\u0131 kullanmak olabilir.\n      # Ancak bu, makalenin amac\u0131ndan sapar.\n\n      # Bu makalenin ruhuna uygun olarak, Gemma'n\u0131n gelecekteki veya \u00f6zel olarak e\u011fitilmi\u015f multimodal yeteneklerini varsayarak ilerleyelim.\n      # E\u011fer Gemma'n\u0131n multimodal bir versiyonu varsa, prompt \u015f\u00f6yle olabilir:\n      # prompt = \"Bu g\u00f6rseldeki metni bana listele:\"\n      # Bu durumda, model do\u011frudan g\u00f6rseli i\u015fleyecektir.\n\n      # Modelin \u00e7\u0131kt\u0131s\u0131n\u0131 almak i\u00e7in:\n      # Buradaki kod, Gemma'n\u0131n tam multimodal entegrasyonuna ba\u011fl\u0131 olarak de\u011fi\u015fecektir.\n      # E\u011fer Gemma'n\u0131n bir multimodal versiyonu varsa, <code>AutoModelForVision2Seq<\/code> gibi farkl\u0131 bir s\u0131n\u0131f gerekebilir.\n      # Mevcut <code>AutoModelForCausalLM<\/code> genellikle metin tabanl\u0131d\u0131r.\n\n      # Bu nedenle, makalenin ana fikrini ger\u00e7ekle\u015ftirmek i\u00e7in, Gemma'n\u0131n \"g\u00f6rsel anlama\" yetene\u011fini varsaymal\u0131y\u0131z.\n      # Bu, Google'\u0131n Gemma serisinin gelecekteki versiyonlar\u0131nda veya \u00f6zel ince ayarlar\u0131nda m\u00fcmk\u00fcn olabilir.\n\n      # \u015eimdilik, bir placeholder (yer tutucu) olarak, temel bir metin \u00fcretme fonksiyonu kullanal\u0131m ve bu fonksiyonun g\u00f6rsel anlama yetene\u011fi oldu\u011funu varsayal\u0131m.\n      # Ger\u00e7ek bir implementasyonda, Gemma'n\u0131n multimodal API'si kullan\u0131lmal\u0131d\u0131r.\n\n      # \u00d6rnek olarak, Gemma'n\u0131n metin \u00fcretme yetene\u011fini kullanarak, \"resimdeki metin\" gibi bir girdiyi i\u015fleyip \u00e7\u0131kt\u0131 \u00fcretti\u011fini varsayal\u0131m.\n      # Bu, Gemma'n\u0131n sadece metin de\u011fil, \"g\u00f6rsel ba\u011flam\" \u00fczerine de metin \u00fcretebilece\u011fi varsay\u0131m\u0131na dayan\u0131r.\n\n      # E\u011fer Gemma'n\u0131n do\u011frudan g\u00f6rsel i\u015fleme yetene\u011fi yoksa, bu script'i \u00e7al\u0131\u015ft\u0131rmak i\u00e7in ba\u015fka bir OCR motoruna ihtiya\u00e7 duyulur.\n      # Ancak makalenin \u00f6z\u00fc, Gemma'n\u0131n kendisini bir OCR \u00e7\u00f6z\u00fcm\u00fc olarak kullanmakt\u0131r.\n\n      # Bu nedenle, Gemma'n\u0131n g\u00f6rsel girdiyi i\u015fleyebildi\u011fini varsayarak devam edelim.\n      # Prompt: \"Bu resimde ne yaz\u0131yor?\"\n      prompt_text = \"Bu resimde ne yaz\u0131yor? L\u00fctfen sadece metni \u00e7\u0131kar.\"\n\n      # Modeli \u00e7al\u0131\u015ft\u0131rmak i\u00e7in gerekli girdiyi haz\u0131rlama.\n      # Bu, Gemma'n\u0131n g\u00f6rsel girdi i\u015fleme \u015fekline ba\u011fl\u0131 olarak de\u011fi\u015fir.\n      # E\u011fer model do\u011frudan g\u00f6r\u00fcnt\u00fc verisi alabiliyorsa:\n      # inputs = {\"pixel_values\": processed_image, \"input_ids\": tokenizer(prompt_text, return_tensors=\"pt\").input_ids}\n      # E\u011fer model sadece metin ve g\u00f6rsel ile ili\u015fkili metin girdisi alabiliyorsa:\n      # Bu durumda, g\u00f6rselin kendisini do\u011frudan modele vermek yerine, g\u00f6rselin bir temsilini (\u00f6rn. metinsel a\u00e7\u0131klama) kullanmak gerekebilir.\n      # Ancak, bu makalenin amac\u0131 Gemma'y\u0131 do\u011frudan OCR i\u00e7in kullanmakt\u0131r.\n\n      # Varsay\u0131msal Multimodal Gemma API'si:\n      # Bu senaryoda, modelin g\u00f6rsel girdiyi ve metin prompt'unu bir arada i\u015fleyebildi\u011fini varsay\u0131yoruz.\n      # Ger\u00e7ek Gemma modelleri genellikle metin odakl\u0131d\u0131r. Ancak, Google'\u0131n gelecekteki s\u00fcr\u00fcmleri veya ince ayarlar\u0131 bu yetene\u011fi sunabilir.\n\n      # E\u011fer model, g\u00f6rsel girdiyi bir <code>image_processor<\/code> ile i\u015fleyip, ard\u0131ndan <code>model.generate<\/code> fonksiyonuna veriyorsa:\n      try:\n          # G\u00f6r\u00fcnt\u00fc i\u015fleyiciyi tan\u0131mlama (genellikle modelle birlikte gelir veya <code>AutoImageProcessor<\/code> ile y\u00fcklenir)\n          # Gemma i\u00e7in \u00f6zel bir image processor gerekebilir. Varsay\u0131msal olarak var oldu\u011funu varsayal\u0131m.\n          # from transformers import AutoImageProcessor\n          # image_processor = AutoImageProcessor.from_pretrained(model_id)\n          # processed_image = image_processor(img, return_tensors=\"pt\").to(model.device)\n\n          # E\u011fer do\u011frudan g\u00f6rsel i\u015flemci yoksa, temel bir g\u00f6r\u00fcnt\u00fc i\u015fleme yapabiliriz.\n          # Bu, metin tabanl\u0131 bir prompt ile birle\u015ftirilir.\n          # Ancak bu, ger\u00e7ek multimodal bir yakla\u015f\u0131m de\u011fildir.\n\n          # Makalenin ana fikrini ger\u00e7ekle\u015ftirmek i\u00e7in, Gemma'n\u0131n \"g\u00f6rsel anlama\" yetene\u011fini varsay\u0131yoruz.\n          # Bu, Gemma'n\u0131n gelecekteki veya \u00f6zel olarak e\u011fitilmi\u015f multimodal yeteneklerini varsayarak ilerliyoruz.\n          # Bu nedenle, a\u015fa\u011f\u0131daki kod, Gemma'n\u0131n multimodal yeteneklerini kullanacak \u015fekilde tasarlanm\u0131\u015ft\u0131r.\n          # Ger\u00e7ek implementasyon, Gemma'n\u0131n tam multimodal API'sine ba\u011fl\u0131 olacakt\u0131r.\n\n          # Prompt'u haz\u0131rlama\n          # Bu, modelin g\u00f6rseli ve metin iste\u011fini birle\u015ftirdi\u011fi bir format olmal\u0131d\u0131r.\n          # \u00d6rne\u011fin: \"USER: <image>\\nBu resimdeki metni \u00e7\u0131kar.\\nASSISTANT:\"\n          # Burada \"<image>\" token'\u0131 model taraf\u0131ndan g\u00f6rsel girdinin konumu olarak anla\u015f\u0131l\u0131r.\n          # Bu, modelin e\u011fitildi\u011fi format\u0131 takip etmelidir.\n\n          # E\u011fer Gemma'n\u0131n do\u011frudan g\u00f6rsel girdiyi i\u015fleyen bir multimodal API'si yoksa, bu script'i \u00e7al\u0131\u015ft\u0131rmak i\u00e7in ba\u015fka bir ara\u00e7 gerekir.\n          # Ancak, makalenin amac\u0131 Gemma'y\u0131 do\u011frudan OCR arac\u0131 olarak kullanmakt\u0131r.\n\n          # Bu nedenle, Gemma'n\u0131n g\u00f6rsel anlama yetene\u011fini varsayarak devam edelim.\n          # Prompt'u, modelin anlayaca\u011f\u0131 \u015fekilde ayarlayal\u0131m.\n          # Gemma'n\u0131n sohbet format\u0131n\u0131 kullanarak:\n          conversation = [\n              {\"role\": \"user\", \"content\": \"Bu resimdeki t\u00fcm metni \u00e7\u0131kar. L\u00fctfen sadece metni ver.\"},\n              {\"role\": \"model\", \"content\": \"\"} # Modelin \u00e7\u0131kt\u0131s\u0131 buraya gelecek\n          ]\n          prompt_for_generation = tokenizer.apply_chat_template(conversation, tokenize=False, add_generation_prompt=True)\n\n          # Modeli \u00e7al\u0131\u015ft\u0131rma (bu k\u0131s\u0131m, Gemma'n\u0131n tam multimodal entegrasyonuna ba\u011fl\u0131 olarak de\u011fi\u015fir)\n          # E\u011fer model do\u011frudan g\u00f6rsel girdiyi i\u015fleyebiliyorsa:\n          # inputs = {\"input_ids\": tokenizer(prompt_for_generation, return_tensors=\"pt\").input_ids, \"pixel_values\": processed_image}\n          # model.generate(**inputs, max_new_tokens=500)\n\n          # E\u011fer Gemma'n\u0131n multimodal bir s\u00fcr\u00fcm\u00fc yoksa ve sadece metin tabanl\u0131ysa, bu yakla\u015f\u0131m i\u015fe yaramaz.\n          # Bu durumda, makalenin temel iddias\u0131 ger\u00e7ekle\u015fmez.\n          # Ancak, Google'\u0131n Gemma ailesinin geli\u015fmekte oldu\u011funu ve multimodal yetenekler kazanabilece\u011fini varsayarak ilerliyoruz.\n\n          # Bu makalenin amac\u0131, Gemma'n\u0131n potansiyelini g\u00f6stermektir.\n          # Bu nedenle, Gemma'n\u0131n g\u00f6rsel girdiyi anlay\u0131p metin \u00fcretebildi\u011fi varsay\u0131m\u0131yla devam ediyoruz.\n          # Ger\u00e7ek uygulamada, Gemma'n\u0131n multimodal bir versiyonu veya ek bir g\u00f6rsel i\u015fleme katman\u0131 gerekebilir.\n\n          # Varsay\u0131msal olarak, a\u015fa\u011f\u0131daki kod, Gemma'n\u0131n g\u00f6rsel girdiyi anlay\u0131p metin \u00fcretebildi\u011fi bir senaryoyu temsil eder.\n          # Bu, Gemma'n\u0131n do\u011frudan bir OCR arac\u0131 olarak kullan\u0131lmas\u0131n\u0131 sa\u011flar.\n\n          # G\u00f6r\u00fcnt\u00fcy\u00fc modele beslemek i\u00e7in gerekli format\u0131 haz\u0131rlama.\n          # Bu, modelin e\u011fitildi\u011fi veri format\u0131na ba\u011fl\u0131d\u0131r.\n          # E\u011fer model, g\u00f6rsel girdiyi <code>pixel_values<\/code> olarak al\u0131yorsa:\n          # <code>processed_image<\/code> de\u011fi\u015fkeni bu formata sahip olmal\u0131d\u0131r.\n          # <code>Image.open<\/code> ile a\u00e7\u0131lan <code>img<\/code> nesnesini <code>processed_image<\/code>'a d\u00f6n\u00fc\u015ft\u00fcrmek i\u00e7in\n          # <code>AutoImageProcessor<\/code> veya benzeri bir ara\u00e7 kullan\u0131lmal\u0131d\u0131r.\n\n          # Bu \u00f6rnekte, do\u011frudan <code>Image.open<\/code> ile a\u00e7\u0131lan <code>img<\/code> nesnesini modelin anlayabilece\u011fi bir formata d\u00f6n\u00fc\u015ft\u00fcrmek i\u00e7in\n          # temel bir yakla\u015f\u0131m izleyece\u011fiz. Ger\u00e7ek bir multimodal modelde, bu ad\u0131m daha karma\u015f\u0131k olacakt\u0131r.\n\n          # G\u00f6r\u00fcnt\u00fcy\u00fc bir bayt dizisine d\u00f6n\u00fc\u015ft\u00fcrme\n          img_byte_arr = io.BytesIO()\n          img.save(img_byte_arr, format='PNG') # Format\u0131 PNG olarak kaydedelim\n          img_byte_arr = img_byte_arr.getvalue()\n\n          # Bu bayt dizisini modele nas\u0131l besleyece\u011fiz?\n          # E\u011fer model do\u011frudan bayt dizisi veya g\u00f6r\u00fcnt\u00fc nesnesi alabiliyorsa.\n          # Genellikle, <code>transformers<\/code> k\u00fct\u00fcphanesinde, g\u00f6rsel verisi <code>pixel_values<\/code> olarak ge\u00e7er.\n          # Bu <code>pixel_values<\/code> ise, bir <code>ImageProcessor<\/code> taraf\u0131ndan olu\u015fturulur.\n\n          # Bu nedenle, Gemma'n\u0131n multimodal yeteneklerini kullanmak i\u00e7in, uygun bir <code>ImageProcessor<\/code>'a ihtiyac\u0131m\u0131z var.\n          # Varsay\u0131msal olarak, model_id ile ili\u015fkilendirilmi\u015f bir <code>AutoImageProcessor<\/code> mevcuttur.\n\n          from transformers import AutoImageProcessor\n          image_processor = AutoImageProcessor.from_pretrained(model_id)\n          processed_image = image_processor(img, return_tensors=\"pt\").to(model.device)\n\n          # Modeli \u00e7al\u0131\u015ft\u0131rma\n          # E\u011fer model, <code>pixel_values<\/code> ve <code>input_ids<\/code> alabiliyorsa:\n          inputs = {\n              \"input_ids\": tokenizer(prompt_for_generation, return_tensors=\"pt\").input_ids.to(model.device),\n              \"pixel_values\": processed_image.pixel_values\n          }\n\n          # Modeli \u00e7al\u0131\u015ft\u0131rma ve \u00e7\u0131kt\u0131y\u0131 alma\n          output = model.generate(\n              **inputs,\n              max_new_tokens=500,  # \u00c7\u0131kt\u0131 uzunlu\u011funu ayarla\n              pad_token_id=tokenizer.eos_token_id # Padding token'\u0131 ayarla\n          )\n\n          # \u00c7\u0131kt\u0131y\u0131 decode etme\n          generated_text = tokenizer.decode(output[0], skip_special_tokens=True)\n\n          # Prompt'u ve modelin \u00e7\u0131kt\u0131s\u0131n\u0131 ay\u0131rma\n          # Genellikle model, prompt'u da \u00e7\u0131kt\u0131s\u0131na dahil eder.\n          # Bu nedenle, sadece yeni \u00fcretilen metni almak i\u00e7in prompt'un uzunlu\u011funu \u00e7\u0131karabiliriz.\n          # Veya, chat template'i kullanarak \u00e7\u0131kt\u0131y\u0131 daha iyi ayr\u0131\u015ft\u0131rabiliriz.\n\n          # E\u011fer chat template kullan\u0131l\u0131yorsa, modelin \u00e7\u0131kt\u0131s\u0131 genellikle \"ASSISTANT:\" sonras\u0131 ba\u015flar.\n          # Bu nedenle, \u00e7\u0131kt\u0131y\u0131 daha iyi temizlemek i\u00e7in bu bilgiyi kullanabiliriz.\n\n          # \u00c7\u0131kt\u0131dan prompt'u temizleme (basit bir y\u00f6ntem)\n          if generated_text.startswith(prompt_for_generation):\n              extracted_text = generated_text[len(prompt_for_generation):].strip()\n          else:\n              # Alternatif olarak, chat template'in yap\u0131s\u0131n\u0131 kullanarak asistan \u00e7\u0131kt\u0131s\u0131n\u0131 bulabiliriz.\n              # Bu, daha g\u00fcvenilir bir y\u00f6ntemdir.\n              assistant_prefix = \"ASSISTANT:\"\n              if assistant_prefix in generated_text:\n                  extracted_text = generated_text.split(assistant_prefix, 1)[1].strip()\n              else:\n                  extracted_text = generated_text.strip() # E\u011fer prefix bulunamazsa, ham \u00e7\u0131kt\u0131y\u0131 al\n\n          return extracted_text\n\n      except Exception as e:\n          return f\"Hata: Model \u00e7al\u0131\u015ft\u0131r\u0131l\u0131rken bir sorun olu\u015ftu: {e}\"\n\n  # \u00d6rnek kullan\u0131m:\n  # image_file = \"path\/to\/your\/image.png\" # Kendi resminizin yolunu buraya yaz\u0131n\n  # result = extract_text_from_image(image_file)\n  # print(result)\n  <\/code><\/pre>\n<p>Bu script, temel bir yap\u0131 sunmaktad\u0131r. Ger\u00e7ek uygulamada, Gemma&#8217;n\u0131n multimodal yeteneklerinin nas\u0131l entegre edildi\u011fi, kullan\u0131lan Gemma s\u00fcr\u00fcm\u00fcne ve k\u00fct\u00fcphanelerin g\u00fcncelli\u011fine ba\u011fl\u0131 olarak de\u011fi\u015fiklik g\u00f6sterebilir. \u00d6zellikle <code>AutoImageProcessor<\/code> ve <code>model.generate<\/code> fonksiyonunun parametreleri, Gemma&#8217;n\u0131n spesifik API&#8217;sine g\u00f6re ayarlanmal\u0131d\u0131r. Makalenin ana fikri, Gemma&#8217;n\u0131n bu t\u00fcr bir g\u00f6revi yerine getirebilecek potansiyele sahip oldu\u011fudur.<\/p>\n<h2>G\u00f6r\u00fcnt\u00fc \u00d6n \u0130\u015fleme (Preprocessing) Hilesi: Do\u011frulu\u011fu Art\u0131rma Y\u00f6ntemleri<\/h2>\n<p>OCR do\u011frulu\u011funu art\u0131rman\u0131n en kritik ad\u0131mlar\u0131ndan biri, g\u00f6r\u00fcnt\u00fcy\u00fc modele g\u00f6ndermeden \u00f6nce optimize etmektir. Bu, &#8220;preprocessing&#8221; (\u00f6n i\u015fleme) olarak adland\u0131r\u0131l\u0131r. Basit bir g\u00f6r\u00fcnt\u00fc, Gemma gibi geli\u015fmi\u015f bir model i\u00e7in bile zorlay\u0131c\u0131 olabilir. \u0130\u015fte burada devreye giren baz\u0131 hileler var: \u0130lk olarak, g\u00f6r\u00fcnt\u00fcn\u00fcn \u00e7\u00f6z\u00fcn\u00fcrl\u00fc\u011f\u00fcn\u00fc art\u0131rmak, modelin ince detaylar\u0131 yakalamas\u0131na yard\u0131mc\u0131 olur. D\u00fc\u015f\u00fck \u00e7\u00f6z\u00fcn\u00fcrl\u00fckl\u00fc g\u00f6r\u00fcnt\u00fclerde karakterler bulan\u0131k veya eksik g\u00f6r\u00fcnebilir. \u0130kinci olarak, g\u00f6r\u00fcnt\u00fcy\u00fc binarize etmek (siyah-beyaz yapmak) ve g\u00fcr\u00fclt\u00fcy\u00fc azaltmak, modelin sadece metin alanlar\u0131na odaklanmas\u0131n\u0131 sa\u011flar. Renkli veya lekeli arka planlar, modelin metin ile arka plan\u0131 kar\u0131\u015ft\u0131rmas\u0131na neden olabilir. \u00dc\u00e7\u00fcnc\u00fc olarak, e\u011fik (skewed) veya d\u00f6n\u00fck (rotated) g\u00f6r\u00fcnt\u00fcleri d\u00fczeltmek, metin sat\u0131rlar\u0131n\u0131n okunabilirli\u011fini art\u0131r\u0131r. Bir\u00e7ok belge tarand\u0131\u011f\u0131nda hafif\u00e7e e\u011fik olabilir ve bu, OCR performans\u0131n\u0131 olumsuz etkiler. Son olarak, kontrast\u0131 ve parlakl\u0131\u011f\u0131 ayarlamak, metnin daha belirgin hale gelmesine yard\u0131mc\u0131 olur. Bu \u00f6n i\u015fleme ad\u0131mlar\u0131, genellikle <code>OpenCV<\/code> veya <code>Pillow<\/code> gibi k\u00fct\u00fcphaneler kullan\u0131larak yap\u0131l\u0131r. \u00d6rne\u011fin, bir g\u00f6r\u00fcnt\u00fcy\u00fc gri tonlamaya \u00e7evirip, ard\u0131ndan e\u015fikleme (thresholding) ile binarize edebiliriz. G\u00fcr\u00fclt\u00fcy\u00fc azaltmak i\u00e7in Gaussian blur gibi filtreler uygulanabilir. E\u011fikli\u011fi d\u00fczeltmek i\u00e7in Hough d\u00f6n\u00fc\u015f\u00fcm\u00fc gibi teknikler kullan\u0131labilir. Bu ad\u0131mlar, modelin i\u015fleyece\u011fi verinin kalitesini \u00f6nemli \u00f6l\u00e7\u00fcde iyile\u015ftirir ve Gemma&#8217;n\u0131n daha do\u011fru sonu\u00e7lar \u00fcretmesini sa\u011flar. Bu preprocess ad\u0131mlar\u0131n\u0131, yukar\u0131da verdi\u011fimiz <code>extract_text_from_image<\/code> fonksiyonu i\u00e7ine entegre ederek, modelin performans\u0131n\u0131 maksimize edebiliriz. \u00d6rne\u011fin, <code>PIL<\/code> k\u00fct\u00fcphanesini kullanarak g\u00f6r\u00fcnt\u00fc \u00fczerinde \u00e7e\u015fitli d\u00f6n\u00fc\u015f\u00fcmler yapabiliriz.<\/p>\n<pre><code>\n  from PIL import Image, ImageEnhance, ImageFilter\n\n  def preprocess_image(img):\n      # 1. Gri tonlamaya \u00e7evirme\n      img = img.convert(\"L\")\n\n      # 2. Kontrast ve parlakl\u0131\u011f\u0131 ayarlama (gerekirse)\n      enhancer_contrast = ImageEnhance.Contrast(img)\n      img = enhancer_contrast.enhance(1.5) # Kontrast\u0131 %50 art\u0131r\n\n      enhancer_brightness = ImageEnhance.Brightness(img)\n      img = enhancer_brightness.enhance(1.1) # Parlakl\u0131\u011f\u0131 %10 art\u0131r\n\n      # 3. G\u00fcr\u00fclt\u00fc azaltma (Gaussian Blur)\n      img = img.filter(ImageFilter.GaussianBlur(radius=1))\n\n      # 4. E\u015fikleme (Binarization) - Siyah beyaz yapma\n      # Otsu'nun e\u015fikleme y\u00f6ntemi gibi daha geli\u015fmi\u015f y\u00f6ntemler kullan\u0131labilir.\n      # Basit bir e\u015fikleme:\n      threshold = 180 # Bu de\u011feri belgeye g\u00f6re ayarlamak gerekebilir\n      img = img.point(lambda p: p > threshold and 255)\n\n      # 5. E\u011fikli\u011fi d\u00fczeltme (Bu ad\u0131m daha karma\u015f\u0131kt\u0131r ve genellikle OpenCV gerektirir)\n      # OpenCV ile e\u011fiklik d\u00fczeltme i\u00e7in:\n      # import cv2\n      # import numpy as np\n      # img_cv = cv2.cvtColor(np.array(img), cv2.COLOR_GRAY2BGR)\n      # # ... e\u011fiklik d\u00fczeltme algoritmalar\u0131 ...\n      # img = Image.fromarray(cv2.cvtColor(img_cv, cv2.COLOR_BGR2RGB))\n\n      return img\n  <\/code><\/pre>\n<p>Bu <code>preprocess_image<\/code> fonksiyonunu, <code>extract_text_from_image<\/code> fonksiyonunun ba\u015f\u0131nda, <code>Image.open(image_path)<\/code> sat\u0131r\u0131ndan sonra \u00e7a\u011f\u0131rabiliriz:<\/p>\n<pre><code>\n  def extract_text_from_image(image_path):\n      try:\n          img = Image.open(image_path)\n          img = preprocess_image(img) # \u00d6n i\u015fleme ad\u0131m\u0131n\u0131 ekle\n      except FileNotFoundError:\n          return \"Hata: G\u00f6r\u00fcnt\u00fc dosyas\u0131 bulunamad\u0131.\"\n      except Exception as e:\n          return f\"Hata: G\u00f6r\u00fcnt\u00fc i\u015flenirken bir sorun olu\u015ftu: {e}\"\n\n      # ... geri kalan script ...\n  <\/code><\/pre>\n<p>Bu \u00f6n i\u015fleme ad\u0131mlar\u0131, Gemma&#8217;n\u0131n metni daha net g\u00f6rmesini sa\u011flayarak, \u00f6zellikle d\u00fc\u015f\u00fck kaliteli veya karma\u015f\u0131k belgelerde OCR do\u011frulu\u011funu \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131racakt\u0131r. Bu hile, bulut tabanl\u0131 API&#8217;lerin kulland\u0131\u011f\u0131 geli\u015fmi\u015f \u00f6n i\u015fleme algoritmalar\u0131na yerel bir alternatiftir.<\/p>\n<h2>Ger\u00e7ek D\u00fcnya Senaryolar\u0131 ve Vaka Analizleri<\/h2>\n<p>Bu yerel OCR \u00e7\u00f6z\u00fcm\u00fcn\u00fcn pratik uygulamalar\u0131 olduk\u00e7a geni\u015ftir. \u00d6rne\u011fin, bir muhasebe firmas\u0131, faturalar\u0131 ve makbuzlar\u0131 otomatik olarak i\u015flemek i\u00e7in bu script&#8217;i kullanabilir. Her bir belgeyi taray\u0131p sisteme y\u00fcklediklerinde, Gemma modeli otomatik olarak fatura numaras\u0131, tarih, tutar ve tedarik\u00e7i bilgileri gibi kritik verileri \u00e7\u0131karabilir. Bu, manuel veri giri\u015fini ortadan kald\u0131rarak hem zaman tasarrufu sa\u011flar hem de hata oran\u0131n\u0131 d\u00fc\u015f\u00fcr\u00fcr. Bir di\u011fer vaka analizi, bir hukuk b\u00fcrosu olabilir. Dava dosyalar\u0131ndaki \u00f6nemli belgeler, s\u00f6zle\u015fmeler, tan\u0131k ifadeleri gibi metinleri h\u0131zl\u0131ca tarayarak, anahtar kelimeler veya belirli bilgiler i\u00e7in arama yapabilirler. Bu, avukatlar\u0131n dava materyallerini daha verimli bir \u015fekilde incelemelerine olanak tan\u0131r. Ayr\u0131ca, bir k\u00fct\u00fcphane veya ar\u015fiv, eski belgelerin dijitalle\u015ftirilmesi ve aranabilir hale getirilmesi i\u00e7in bu teknolojiyi kullanabilir. Nadir bulunan kitaplardaki veya el yazmalar\u0131ndaki metinleri \u00e7\u0131karmak, bu t\u00fcr sistemlerle daha ula\u015f\u0131labilir hale gelir. K\u00fc\u00e7\u00fck i\u015fletmeler i\u00e7in, m\u00fc\u015fteri sipari\u015f formlar\u0131n\u0131 veya ba\u015fvuru dilek\u00e7elerini otomatik olarak i\u015flemek, operasyonel verimlili\u011fi art\u0131rabilir. \u00d6rne\u011fin, bir restoran zinciri, \u015fubelerinden gelen sipari\u015f fi\u015flerini i\u015fleyerek, stok takibi ve sat\u0131\u015f analizleri i\u00e7in verileri otomatik olarak toplayabilir. Bu t\u00fcr senaryolarda, yerel \u00e7\u00f6z\u00fcm\u00fcn maliyet etkinli\u011fi ve veri gizlili\u011fi avantajlar\u0131 \u00f6ne \u00e7\u0131kar. Bir startup, ba\u015flang\u0131\u00e7 maliyetlerini d\u00fc\u015f\u00fcrmek ad\u0131na, bulut tabanl\u0131 API&#8217;lere y\u00fcksek \u00fccretler \u00f6demek yerine, mevcut sunucu kaynaklar\u0131n\u0131 kullanarak Gemma ile kendi OCR \u00e7\u00f6z\u00fcm\u00fcn\u00fc olu\u015fturabilir. Bu, \u00f6zellikle finansal kaynaklar\u0131n s\u0131n\u0131rl\u0131 oldu\u011fu erken a\u015famalarda b\u00fcy\u00fck bir fark yarat\u0131r. Gemma&#8217;n\u0131n esnekli\u011fi, farkl\u0131 belge t\u00fcrlerine ve farkl\u0131 veri \u00e7\u0131karma gereksinimlerine uyum sa\u011flama potansiyeli sunar. \u00d6rne\u011fin, bir sigorta \u015firketi, hasar bildirim formlar\u0131ndaki bilgileri \u00e7\u0131karmak i\u00e7in bu modeli kullanabilir ve bu bilgileri otomatik olarak ilgili departmanlara y\u00f6nlendirebilir. Bu, i\u015flem s\u00fcrelerini k\u0131salt\u0131r ve m\u00fc\u015fteri memnuniyetini art\u0131r\u0131r.<\/p>\n<h2>Maliyet Kar\u015f\u0131la\u015ft\u0131rmas\u0131 ve ROI (Yat\u0131r\u0131m\u0131n Geri D\u00f6n\u00fc\u015f\u00fc)<\/h2>\n<p>Ayl\u0131k 50 dolarl\u0131k bir OCR API maliyeti, y\u0131ll\u0131k olarak 600 dolara denk gelir. E\u011fer bu API&#8217;yi birka\u00e7 y\u0131ld\u0131r kullan\u0131yorsan\u0131z, sadece bu hizmet i\u00e7in binlerce dolar harcam\u0131\u015f olabilirsiniz. Gemma 4&#8217;\u00fc yerel olarak \u00e7al\u0131\u015ft\u0131rmak ise, ba\u015flang\u0131\u00e7ta bir donan\u0131m yat\u0131r\u0131m\u0131 (e\u011fer mevcut sistemler yeterli de\u011filse) veya mevcut sunucu kaynaklar\u0131n\u0131n kullan\u0131m\u0131 anlam\u0131na gelir. E\u011fer g\u00fc\u00e7l\u00fc bir bilgisayar\u0131n\u0131z veya sunucunuz varsa, bu maliyet s\u0131f\u0131r olabilir. E\u011fer yeni bir donan\u0131m gerekiyorsa, bu yat\u0131r\u0131m\u0131n maliyeti, birka\u00e7 ay veya y\u0131l i\u00e7inde API maliyetlerini a\u015facakt\u0131r. \u00d6rne\u011fin, 1000 dolarl\u0131k bir yat\u0131r\u0131m, ayl\u0131k 50 dolarl\u0131k bir tasarrufla 20 ayda kendini amorti edebilir. Daha da \u00f6nemlisi, yerel \u00e7\u00f6z\u00fcmde ek bir &#8220;kullan\u0131m ba\u015f\u0131na \u00f6deme&#8221; yoktur. Belge say\u0131n\u0131z ne kadar artarsa arts\u0131n, maliyetiniz sabit kal\u0131r. Bu, \u00f6zellikle b\u00fcy\u00fcme potansiyeli y\u00fcksek uygulamalar i\u00e7in inan\u0131lmaz bir avantajd\u0131r. Gemma&#8217;n\u0131n a\u00e7\u0131k kaynakl\u0131 olmas\u0131 ve Google taraf\u0131ndan desteklenmesi, gelecekteki g\u00fcncellemeler ve iyile\u015ftirmelerden \u00fccretsiz olarak yararlanabilece\u011finiz anlam\u0131na gelir. Bulut API&#8217;lerinde ise, her zaman bir hizmet sa\u011flay\u0131c\u0131ya ba\u011f\u0131ml\u0131s\u0131n\u0131z ve fiyatland\u0131rma politikalar\u0131 de\u011fi\u015febilir. Gemma&#8217;n\u0131n ROI&#8217;si (Yat\u0131r\u0131m\u0131n Geri D\u00f6n\u00fc\u015f\u00fc) sadece maliyet tasarrufuyla s\u0131n\u0131rl\u0131 de\u011fildir. Veri gizlili\u011fi ve g\u00fcvenli\u011fi, kendi altyap\u0131n\u0131z \u00fczerinde tam kontrol, daha y\u00fcksek performans (\u00f6zellikle optimize edildi\u011finde) ve \u00f6zelle\u015ftirme yetenekleri de bu ROI&#8217;ye dahil edilmelidir. Bir \u015firketin hassas verilerinin bulutta saklanmas\u0131n\u0131n potansiyel riskleri ve maliyetleri g\u00f6z \u00f6n\u00fcne al\u0131nd\u0131\u011f\u0131nda, yerel bir \u00e7\u00f6z\u00fcm\u00fcn sundu\u011fu ek g\u00fcvenlik, paha bi\u00e7ilmezdir. Ayr\u0131ca, Gemma&#8217;n\u0131n esnekli\u011fi, sadece OCR&#8217;\u0131n \u00f6tesinde, metin analizi, \u00f6zetleme veya s\u0131n\u0131fland\u0131rma gibi ek \u00f6zellikler eklemenize olanak tan\u0131r, bu da yat\u0131r\u0131m\u0131n de\u011ferini daha da art\u0131r\u0131r. Bu, tek bir teknolojiden birden fazla fayda sa\u011flama potansiyeli sunar.<\/p>\n<h2>\u0130leri D\u00fczey \u0130pu\u00e7lar\u0131 ve Optimizasyon<\/h2>\n<p>Gemma 4 ile OCR performans\u0131n\u0131z\u0131 daha da ileriye ta\u015f\u0131mak i\u00e7in birka\u00e7 geli\u015fmi\u015f ipucu bulunmaktad\u0131r. \u0130lk olarak, modelin parametrelerini ince ayar (fine-tuning) yaparak belirli belge t\u00fcrlerine veya sekt\u00f6rlere \u00f6zg\u00fc metinleri daha iyi tan\u0131mas\u0131n\u0131 sa\u011flayabilirsiniz. \u00d6rne\u011fin, t\u0131p alan\u0131ndaki belgeler i\u00e7in \u00f6zel olarak e\u011fitilmi\u015f bir Gemma modeli, genel bir modelden daha do\u011fru sonu\u00e7lar verecektir. Bu, kendi veri setinizi olu\u015fturmay\u0131 ve modeli bu verilerle yeniden e\u011fitmeyi gerektirir. \u0130kinci olarak, batch processing (toplu i\u015fleme) kullanarak ayn\u0131 anda birden fazla belgeyi i\u015fleyebilir, bu da genel i\u015flem s\u00fcresini \u00f6nemli \u00f6l\u00e7\u00fcde azalt\u0131r. \u00d6zellikle sunucu ortam\u0131nda \u00e7al\u0131\u015f\u0131rken bu y\u00f6ntem verimlili\u011fi art\u0131r\u0131r. \u00dc\u00e7\u00fcnc\u00fc olarak, modelin \u00e7\u0131kt\u0131s\u0131n\u0131 daha sofistike bir \u015fekilde ayr\u0131\u015ft\u0131rmak i\u00e7in d\u00fczenli ifadeler (regular expressions) veya do\u011fal dil i\u015fleme (NLP) teknikleri kullanabilirsiniz. \u00d6rne\u011fin, bir tarihin veya bir telefon numaras\u0131n\u0131n farkl\u0131 formatlardaki varyasyonlar\u0131n\u0131 yakalamak i\u00e7in g\u00fc\u00e7l\u00fc ayr\u0131\u015ft\u0131rma algoritmalar\u0131 geli\u015ftirebilirsiniz. D\u00f6rd\u00fcnc\u00fc olarak, hata ay\u0131klama ve performans izleme ara\u00e7lar\u0131n\u0131 kullanarak modelin hangi belgelerde zorland\u0131\u011f\u0131n\u0131 tespit edebilir ve bu b\u00f6lgelere odaklanabilirsiniz. <code>TensorBoard<\/code> gibi ara\u00e7lar, e\u011fitim ve \u00e7\u0131kar\u0131m s\u00fcre\u00e7lerini izlemek i\u00e7in faydal\u0131 olabilir. Be\u015finci olarak, e\u011fer GPU kullan\u0131yorsan\u0131z, modelin kuantizasyon seviyesini (\u00f6rne\u011fin 8-bit veya 16-bit) deneyerek performans ve bellek kullan\u0131m\u0131 aras\u0131nda en iyi dengeyi bulabilirsiniz. Daha d\u00fc\u015f\u00fck kuantizasyon seviyeleri genellikle daha iyi performans sunar, ancak daha fazla bellek gerektirir. Son olarak, Gemma&#8217;n\u0131n sadece metin \u00e7\u0131karma de\u011fil, ayn\u0131 zamanda metni anlama ve \u00f6zetleme yeteneklerini de kullanarak, OCR \u00e7\u0131kt\u0131s\u0131n\u0131 daha anlaml\u0131 hale getirebilirsiniz. \u00d6rne\u011fin, \u00e7\u0131kar\u0131lan metni \u00f6zetlemesini veya belirli sorulara yan\u0131t vermesini isteyebilirsiniz. Bu, uygulamalar\u0131n\u0131z\u0131n yeteneklerini sadece veri \u00e7\u0131karma seviyesinden, bilgi anlama seviyesine ta\u015f\u0131yacakt\u0131r.<\/p>\n<h2>Sonu\u00e7 ve S\u0131k\u00e7a Sorulan Sorular<\/h2>\n<p>Gemma 4&#8217;\u00fcn yerel yeteneklerini kullanarak, ayl\u0131k 50 dolarl\u0131k pahal\u0131 bir OCR API&#8217;sine veda etmek art\u0131k bir hayal de\u011fil, ger\u00e7ekle\u015ftirilebilir bir ger\u00e7ekliktir. Sundu\u011fumuz script ve \u00f6n i\u015fleme hilesi ile, kendi sisteminizde, tam kontrol sizde olacak \u015fekilde, maliyet etkin ve g\u00fc\u00e7l\u00fc bir OCR \u00e7\u00f6z\u00fcm\u00fc olu\u015fturabilirsiniz. Bu yakla\u015f\u0131m, sadece maliyetleri d\u00fc\u015f\u00fcrmekle kalmaz, ayn\u0131 zamanda veri gizlili\u011fini art\u0131r\u0131r ve uygulaman\u0131za benzersiz bir esneklik kazand\u0131r\u0131r. Gemma&#8217;n\u0131n a\u00e7\u0131k kaynakl\u0131 do\u011fas\u0131 ve s\u00fcrekli geli\u015fen yetenekleri, bu \u00e7\u00f6z\u00fcm\u00fc uzun vadede s\u00fcrd\u00fcr\u00fclebilir ve \u00f6l\u00e7eklenebilir k\u0131lar. Kendi altyap\u0131n\u0131zda, kendi kurallar\u0131n\u0131zla veri i\u015flemek, modern i\u015f ak\u0131\u015flar\u0131 i\u00e7in kritik bir ad\u0131md\u0131r ve Gemma 4 bu konuda g\u00fc\u00e7l\u00fc bir m\u00fcttefiktir.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n<ul>\n<li>\n      <strong>Soru: Gemma 4&#8217;\u00fcn 4 milyar parametreli modeli ger\u00e7ekten yerel bir bilgisayarda \u00e7al\u0131\u015fabilir mi?<\/strong><\/p>\n<p>Cevap: Evet, 4 milyar parametreli Gemma modeli, \u00f6zellikle kuantizasyon (4-bit gibi) teknikleri kullan\u0131larak, iyi bir CPU veya orta seviye bir GPU&#8217;ya sahip modern bir diz\u00fcst\u00fc bilgisayarda veya masa\u00fcst\u00fc bilgisayarda \u00e7al\u0131\u015ft\u0131r\u0131labilir. Performans, donan\u0131m\u0131n\u0131za ve ayn\u0131 anda \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131z di\u011fer i\u015flemlere ba\u011fl\u0131 olacakt\u0131r. GPU kullan\u0131m\u0131, i\u015flem h\u0131z\u0131n\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131racakt\u0131r.<\/p>\n<\/li>\n<li>\n      <strong>Soru: Bu script&#8217;i farkl\u0131 g\u00f6r\u00fcnt\u00fc formatlar\u0131 (JPEG, TIFF, PDF sayfalar\u0131) i\u00e7in kullanabilir miyim?<\/strong><\/p>\n<p>Cevap: Evet, <code>Pillow<\/code> k\u00fct\u00fcphanesi bir\u00e7ok yayg\u0131n g\u00f6r\u00fcnt\u00fc format\u0131n\u0131 destekler. PDF dosyalar\u0131 i\u00e7in ise, her sayfay\u0131 ayr\u0131 bir g\u00f6r\u00fcnt\u00fc dosyas\u0131na d\u00f6n\u00fc\u015ft\u00fcren bir PDF i\u015fleme k\u00fct\u00fcphanesi (\u00f6rne\u011fin <code>PyMuPDF<\/code> veya <code>pdf2image<\/code>) kullanman\u0131z gerekecektir. Bu sayede, her bir sayfa g\u00f6r\u00fcnt\u00fcs\u00fcn\u00fc script&#8217;inize besleyebilirsiniz.<\/p>\n<\/li>\n<li>\n      <strong>Soru: Gemma&#8217;n\u0131n OCR do\u011frulu\u011fu, ticari API&#8217;ler kadar iyi midir?<\/strong><\/p>\n<p>Cevap: Gemma&#8217;n\u0131n do\u011frulu\u011fu, kullan\u0131lan modele, \u00f6n i\u015fleme ad\u0131mlar\u0131na ve belgenin kalitesine ba\u011fl\u0131d\u0131r. Ancak, Gemma 4 gibi g\u00fc\u00e7l\u00fc modeller, do\u011fru \u00f6n i\u015fleme ve prompt m\u00fchendisli\u011fi ile ticari API&#8217;lerle rekabet edebilir, hatta baz\u0131 durumlarda onlar\u0131 a\u015fabilir. \u00d6zellikle belirli alanlara ince ayar yap\u0131ld\u0131\u011f\u0131nda bu do\u011fruluk daha da artar.<\/p>\n<\/li>\n<li>\n      <strong>Soru: Bu \u00e7\u00f6z\u00fcm\u00fc ticari bir \u00fcr\u00fcnde kullanabilir miyim?<\/strong><\/p>\n<p>Cevap: Gemma modelleri, genellikle Apache 2.0 gibi ticari kullan\u0131ma izin veren a\u00e7\u0131k kaynak lisanslar\u0131 alt\u0131nda sunulur. Kullan\u0131m ko\u015fullar\u0131n\u0131 ve lisans detaylar\u0131n\u0131 Google&#8217;\u0131n resmi kaynaklar\u0131ndan kontrol etmeniz \u00f6nemlidir. Ancak genel olarak, bu t\u00fcr a\u00e7\u0131k kaynakl\u0131 modeller ticari projelerde kullan\u0131labilir.<\/p>\n<\/li>\n<\/ul>\n<p>#Gemma #OCR #YerelAI #Makine\u00d6\u011frenmesi #Python #Teknoloji #MaliyetTasarrufu<\/p>\n<div class=\"github-example-link\"><strong>\u00d6rnek kod:<\/strong> <a href=\"https:\/\/github.com\/fatihsoysalcom\/gemma-4-local-ocr-preprocessing-demo\" target=\"_blank\" rel=\"noopener noreferrer\">github.com\/fatihsoysalcom\/gemma-4-local-ocr-preprocessing-demo<\/a><\/div>\n","protected":false},"excerpt":{"rendered":"Y\u0131llard\u0131r bir web uygulamas\u0131nda belge i\u015fleme ve veri \u00e7\u0131karma g\u00f6revleri i\u00e7in \u00fc\u00e7\u00fcnc\u00fc parti bir Optik Karakter Tan\u0131ma (OCR) API&#8217;si kullan\u0131yordunuz.","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1],"tags":[],"class_list":{"0":"post-41964","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Gemma 4 ile Ayl\u0131k 50 Dolar Tasarruf: Yerel OCR API&#039;nize Veda Edin - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/gemma-4-ile-aylik-50-dolar-tasarruf-yerel-ocr-apinize-veda-edin\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Gemma 4 ile Ayl\u0131k 50 Dolar Tasarruf: Yerel OCR API&#039;nize Veda Edin\" \/>\n<meta property=\"og:description\" content=\"Y\u0131llard\u0131r bir web uygulamas\u0131nda belge i\u015fleme ve veri \u00e7\u0131karma g\u00f6revleri i\u00e7in \u00fc\u00e7\u00fcnc\u00fc parti bir Optik Karakter Tan\u0131ma (OCR) API&#039;si kullan\u0131yordunuz.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/gemma-4-ile-aylik-50-dolar-tasarruf-yerel-ocr-apinize-veda-edin\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-05-21T18:12:11+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-05-21T18:12:45+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"29 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/gemma-4-ile-aylik-50-dolar-tasarruf-yerel-ocr-apinize-veda-edin\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/gemma-4-ile-aylik-50-dolar-tasarruf-yerel-ocr-apinize-veda-edin\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Gemma 4 ile Ayl\u0131k 50 Dolar Tasarruf: Yerel OCR API&#8217;nize Veda Edin\",\"datePublished\":\"2026-05-21T18:12:11+00:00\",\"dateModified\":\"2026-05-21T18:12:45+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/gemma-4-ile-aylik-50-dolar-tasarruf-yerel-ocr-apinize-veda-edin\/\"},\"wordCount\":3315,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/gemma-4-ile-aylik-50-dolar-tasarruf-yerel-ocr-apinize-veda-edin\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/gemma-4-ile-aylik-50-dolar-tasarruf-yerel-ocr-apinize-veda-edin\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/gemma-4-ile-aylik-50-dolar-tasarruf-yerel-ocr-apinize-veda-edin\/\",\"name\":\"Gemma 4 ile Ayl\u0131k 50 Dolar Tasarruf: Yerel OCR API'nize Veda Edin - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-05-21T18:12:11+00:00\",\"dateModified\":\"2026-05-21T18:12:45+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/gemma-4-ile-aylik-50-dolar-tasarruf-yerel-ocr-apinize-veda-edin\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/gemma-4-ile-aylik-50-dolar-tasarruf-yerel-ocr-apinize-veda-edin\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/gemma-4-ile-aylik-50-dolar-tasarruf-yerel-ocr-apinize-veda-edin\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Gemma 4 ile Ayl\u0131k 50 Dolar Tasarruf: Yerel OCR API&#8217;nize Veda Edin\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Gemma 4 ile Ayl\u0131k 50 Dolar Tasarruf: Yerel OCR API'nize Veda Edin - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/gemma-4-ile-aylik-50-dolar-tasarruf-yerel-ocr-apinize-veda-edin\/","og_locale":"tr_TR","og_type":"article","og_title":"Gemma 4 ile Ayl\u0131k 50 Dolar Tasarruf: Yerel OCR API'nize Veda Edin","og_description":"Y\u0131llard\u0131r bir web uygulamas\u0131nda belge i\u015fleme ve veri \u00e7\u0131karma g\u00f6revleri i\u00e7in \u00fc\u00e7\u00fcnc\u00fc parti bir Optik Karakter Tan\u0131ma (OCR) API'si kullan\u0131yordunuz.","og_url":"https:\/\/fatihsoysal.com\/blog\/gemma-4-ile-aylik-50-dolar-tasarruf-yerel-ocr-apinize-veda-edin\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-05-21T18:12:11+00:00","article_modified_time":"2026-05-21T18:12:45+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"29 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/gemma-4-ile-aylik-50-dolar-tasarruf-yerel-ocr-apinize-veda-edin\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/gemma-4-ile-aylik-50-dolar-tasarruf-yerel-ocr-apinize-veda-edin\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Gemma 4 ile Ayl\u0131k 50 Dolar Tasarruf: Yerel OCR API&#8217;nize Veda Edin","datePublished":"2026-05-21T18:12:11+00:00","dateModified":"2026-05-21T18:12:45+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/gemma-4-ile-aylik-50-dolar-tasarruf-yerel-ocr-apinize-veda-edin\/"},"wordCount":3315,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/gemma-4-ile-aylik-50-dolar-tasarruf-yerel-ocr-apinize-veda-edin\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/gemma-4-ile-aylik-50-dolar-tasarruf-yerel-ocr-apinize-veda-edin\/","url":"https:\/\/fatihsoysal.com\/blog\/gemma-4-ile-aylik-50-dolar-tasarruf-yerel-ocr-apinize-veda-edin\/","name":"Gemma 4 ile Ayl\u0131k 50 Dolar Tasarruf: Yerel OCR API'nize Veda Edin - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-05-21T18:12:11+00:00","dateModified":"2026-05-21T18:12:45+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/gemma-4-ile-aylik-50-dolar-tasarruf-yerel-ocr-apinize-veda-edin\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/gemma-4-ile-aylik-50-dolar-tasarruf-yerel-ocr-apinize-veda-edin\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/gemma-4-ile-aylik-50-dolar-tasarruf-yerel-ocr-apinize-veda-edin\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Gemma 4 ile Ayl\u0131k 50 Dolar Tasarruf: Yerel OCR API&#8217;nize Veda Edin"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/41964","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=41964"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/41964\/revisions"}],"predecessor-version":[{"id":41965,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/41964\/revisions\/41965"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=41964"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=41964"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=41964"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}