Ana içeriğe geç
Geliştirici rehberi

Tesseract'ı API olarak çalıştırın
veya kendi barındırdığınız servis olarak.

Tesseract'ı güvenle bir HTTP servisine sarın: üretim düzeyinde bir FastAPI uç noktası, süreç havuzu eşzamanlılığı, dil paketleri ve sağlık kontrolleri içeren bir Docker imajı, ölçekleme ve geri basınç ile sunucusuz dağıtım — yönetilen OCR API'lerine karşı gizlilik ve maliyet dengeleriyle.

TL;DR — minimal bir servis

CLI'yi veya pytesseract bağlayıcısını HTTP'nin arkasına sarın. Görsel altyapınızdan asla çıkmaz.

bash
pip install fastapi uvicorn python-multipart pytesseract pillow
# önce motoru + dil paketlerini kurun (kurulum kılavuzuna bakın)
uvicorn app:app --host 0.0.0.0 --port 8000

Sonra çağırın: curl -F "file=@fatura.png" "http://localhost:8000/ocr?lang=tur". Tesseract'ın kendisi kurulum kılavuzuna göre kurulur.

Önce tasarım kararları

Üç seçim tüm servisi şekillendirir.

KararSeçeneklerKılavuz
Eşzamanlı vs eşzamansızBloke eden istek vs iş kuyruğuBirkaç saniyede tamamlanan tek görseller için eşzamanlı; büyük veya toplu belgeler için eşzamansız iş kimlikleri.
Girdimultipart yükleme vs base64 JSONİkili görseller için multipart tercih edin; base64 yalnızca istemci dosya yükleyemediğinde (~%33 boyut ekler).
ÇıktıDüz metin, JSON, hOCR/ALTO, aranabilir PDFVarsayılan olarak JSON döndürün; düzen için hOCR ve arşivler için PDF indirme URL'si sunun.

Uç nokta başına birincil niyet bir tane. /ocr metin döndürmeye devam etsin; PDF'ler ve düzen verileri için ayrı uç noktalar ekleyin.

Üretim düzeyinde bir Python servisi (FastAPI)

Doğrulama, boyut sınırları, zaman aşımı ve OCR'ı olay döngüsünün dışında çalıştırma.

app.py
import asyncio, io
from concurrent.futures import ProcessPoolExecutor
from fastapi import FastAPI, File, UploadFile, HTTPException, Query
from PIL import Image
import pytesseract

app = FastAPI(title="Tesseract OCR API")
pool = ProcessPoolExecutor(max_workers=4)
MAX_BYTES = 10 * 1024 * 1024  # 10 MB
LANGS = {"eng", "deu", "fra", "tur"}

def _ocr(data: bytes, lang: str) -> str:
    image = Image.open(io.BytesIO(data))
    return pytesseract.image_to_string(image, lang=lang)

@app.get("/health")
def health():
    return {"status": "ok"}

@app.post("/ocr")
async def ocr(file: UploadFile = File(...), lang: str = Query("tur")):
    if lang not in LANGS:
        raise HTTPException(400, "Desteklenmeyen dil")
    data = await file.read()
    if len(data) > MAX_BYTES:
        raise HTTPException(413, "Dosya çok büyük")
    loop = asyncio.get_running_loop()
    try:
        text = await asyncio.wait_for(loop.run_in_executor(pool, _ocr, data, lang), timeout=30)
    except asyncio.TimeoutError:
        raise HTTPException(504, "OCR zaman aşımı")
    return {"text": text, "lang": lang}

Önemli noktalar: dilleri beyaz listeye alın, kod çözmeden önce bayt sınırı uygulayın, OCR'ı bir süreç havuzunda çalıştırın ve gerçek süreyi sınırlayın. Tam pytesseract API'si için Python kılavuzuna bakın.

Konteynerleştirin

Kopyaların aynı olması için Tesseract'ı ve dil paketlerini imaja dahil edin.

Dockerfile
FROM python:3.12-slim
RUN apt-get update && apt-get install -y --no-install-recommends \
      tesseract-ocr tesseract-ocr-eng tesseract-ocr-tur \
      libgl1 libglib2.0-0 && rm -rf /var/lib/apt/lists/*
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY app.py .
EXPOSE 8000
HEALTHCHECK CMD python -c "import urllib.request;urllib.request.urlopen('http://localhost:8000/health')"
CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "8000", "--workers", "2"]

İmajı küçük tutmak için yalnızca gereken dil paketlerini ekleyin. Kurulum kılavuzu Docker ve tessdata yerleşimini daha ayrıntılı ele alır.

Eşzamanlılık ve ölçekleme

OCR CPU'ya bağlıdır — iş parçacıklarıyla değil, süreçlerle paralelleştirin.

Güvenlik ve gizlilik

Kendi barındırma, ekiplerin Tesseract'ı seçmesinin başlıca nedenidir.

Sunucusuz ve konteyner platformları

Kendi barındırılan Tesseract vs yönetilen OCR API'leri

BoyutKendi barındırılan TesseractYönetilen OCR API
MaliyetSabit altyapı; sayfa başına ücret yokİstek/sayfa başına ödeme; hacimle ölçeklenir
GizlilikBelgeler ağınızdan asla çıkmazBelgeler üçüncü tarafa gönderilir
DoğrulukTemiz baskıda güçlü; alana göre ayarlanabilirZor taramalarda ve el yazısında genellikle daha güçlü
KontrolTam: sürümler, diller, özel modellerSağlayıcının yol haritası ve kotaları
OperasyonSiz işletirsiniz: ölçekleme, güncellemeler, izlemeTamamen yönetilen

Birçok ekip yüksek hacimli, gizliliğe duyarlı işler için Tesseract'ı kendi barındırır ve yalnızca zor belgelerin azınlığı için yönetilen bir API'ye başvurur.

API SSS

Tesseract OCR'ı API olarak nasıl çalıştırırım?

CLI'yi veya pytesseract'ı FastAPI/Flask içine sarın, POST /ocr uç noktasını açın ve konteynerleştirin. Görseller altyapınızda kalır.

İş parçacığı mı süreç mi?

Süreçler. OCR CPU'ya bağlıdır ve GIL iş parçacığı paralelliğini engeller; ProcessPoolExecutor veya CLI alt süreçlerini kullanın.

Kendi barındırılan bir API gizli mi?

Evet: yüklenen görseller yerel olarak işlenir ve üçüncü taraflara asla gönderilmez; yönetilen OCR API'lerinden farklı olarak.

Sunucusuz çalışabilir mi?

Evet, Cloud Run, Lambda konteyner imajları veya Fly.io gibi konteyner platformlarında; soğuk başlangıçlara ve dil paketleriyle imaj boyutuna dikkat edin.

Hangi biçimleri döndürebilirim?

Düz metin, güven değerli JSON, hOCR/ALTO veya indirme URL'si üzerinden aranabilir PDF.