# Görselden harf ve rakam tanıma

> YesCaptcha ile görseldeki harf ve rakamları tanıyın. ImageToTextTaskOcrBase ve ImageToTextTaskMuggle senkron sonuç döndürür; ImageToTextTask ve ImageToTextTaskM1 asenkron çalışır, büyük/küçük harf, yalnızca rakam ve aritmetik işlem gibi koşulları destekler; özel model yaptırılabilir.

Source: https://docs.yescaptcha.com/tr/tasks/image-to-text/ · Last verified: 2026-10-15

> This page was machine-translated from the Chinese version. If anything differs, the Chinese version prevails: https://docs.yescaptcha.com/zh/tasks/image-to-text/

Karakter içeren bir CAPTCHA görselini Base64 olarak gönderin; görseldeki harf ve rakamlar döndürülür (`solution.text`). `ImageToTextTaskOcrBase` senkron çalışır: tek bir `createTask` isteği sonucu verir. Görsel başına ücret: 2 puan (≈ $0.30 / 1k). Büyük/küçük harf, yalnızca rakam, aritmetik işlem gibi koşullar gerekiyorsa asenkron `ImageToTextTask` türünü kullanın.

- POST `https://api.yescaptcha.com/createTask` (Global uç nokta)
- POST `https://cn.yescaptcha.com/createTask` (Çin uç noktası)

İstek gövdesi JSON’dur; kimlik doğrulama için `clientKey` kullanılır.

## Türler ve fiyatlar

| Görev türü | Fiyat | Mod | Notlar |
| --- | --- | --- | --- |
| `ImageToTextTaskOcrBase` | $0.30 / 1k; 2 puan/görev · ¥2 / 1k | Senkron |  |
| `ImageToTextTaskMuggle` | $0.30 / 1k; 2 puan/görev · ¥2 / 1k | Senkron | case/numeric seçeneklerini desteklemez; özel bir model seçmek için project\_name kullanın |
| `ImageToTextTask` | $0.60 / 1k; 4 puan/görev · ¥4 / 1k | Asenkron |  |
| `ImageToTextTaskM1` | $2.25 / 1k; 15 puan/görev · ¥15 / 1k | Asenkron |  |

ABD doları fiyatları, 1 ABD doları ≈ ¥6.67 kuruyla hesaplanan tahminlerdir; görevler puan üzerinden ücretlendirilir.

| Gereksinim | Kullanılacak tür |
| --- | --- |
| Sıradan harf-rakam CAPTCHA’ları; en ucuz ve en hızlı seçenek | `ImageToTextTaskOcrBase`, `ImageToTextTaskMuggle` (senkron) |
| Sizin için özel eğitilmiş modelle tanıma | `ImageToTextTaskMuggle` ile `project_name` |
| Büyük/küçük harf ayrımı, yalnızca rakam, aritmetik işlem sonucu, uzunluk sınırı | `ImageToTextTask`, `ImageToTextTaskM1` (asenkron) |

Türlerin modelleri ve hatları farklıdır; aynı tür görselde sonuçlar değişebilir. Hepsini deneyip en iyisini seçin.

## İstek parametreleri

| Alan | Tür | Zorunlu | Açıklama |
| --- | --- | --- | --- |
| `type` | string | Evet | Görev türü; bu sayfadaki "Görev türleri ve fiyatlar" bölümüne bakın |
| `body` | string | Evet | `data:image/...;base64,` öneki ve satır sonları olmadan Base64 kodlu görsel |
| `project_name` | string | Hayır | Özel modelin adı; yalnızca `ImageToTextTaskMuggle` destekler. Genel alfasayısal modeli kullanmak için göndermeyin. Özel model için Destek ile iletişime geçin (yalnızca ImageToTextTaskMuggle) |
| `phrase` | boolean | Hayır | true, cevabın en az bir boşluk içerdiği anlamına gelir (yalnızca ImageToTextTask, ImageToTextTaskM1) |
| `case` | boolean | Hayır | true, cevabın büyük/küçük harfe duyarlı olduğu anlamına gelir (yalnızca ImageToTextTask, ImageToTextTaskM1) |
| `numeric` | integer | Hayır | 0 koşul yok; 1 yalnızca rakam; 2 rakam içermez (yalnızca ImageToTextTask, ImageToTextTaskM1) |
| `math` | boolean | Hayır | true, görselin bir matematik işlemi olduğu ve cevabın işlemin sonucu olduğu anlamına gelir (yalnızca ImageToTextTask, ImageToTextTaskM1) |
| `minLength` | integer | Hayır | Cevabın en az uzunluğu; 0 sınır olmadığı anlamına gelir (yalnızca ImageToTextTask, ImageToTextTaskM1) |
| `maxLength` | integer | Hayır | Cevabın en çok uzunluğu; 0 sınır olmadığı anlamına gelir (yalnızca ImageToTextTask, ImageToTextTaskM1) |

`body`, görsel dosyasının Base64 kodlamasıdır. WebP görseller otomatik olarak dönüştürülür.

> **Dikkat:** Base64 metnine `data:image/...;base64,` ön eki eklemeyin ve satır sonu bırakmayın.

## İstek örneği

POST https://api.yescaptcha.com/createTask

```json
{
  "clientKey": "YOUR_CLIENT_KEY",
  "task": {
    "type": "ImageToTextTaskOcrBase",
    "body": "BASE64_IMAGE"
  }
}
```

Tam kod (geçerli dizindeki `captcha.png` dosyasını okur):

**curl**

```bash
# Replace BASE64_IMAGE with the Base64-encoded image
curl -s https://api.yescaptcha.com/createTask \
  -H 'Content-Type: application/json' \
  -d '{
  "clientKey": "YOUR_CLIENT_KEY",
  "task": {
    "type": "ImageToTextTaskOcrBase",
    "body": "BASE64_IMAGE"
  }
}'
```

**Python**

solve.py

```python
import os
import base64

import requests

API = "https://api.yescaptcha.com"
CLIENT_KEY = os.environ["YESCAPTCHA_CLIENT_KEY"]  # Read the clientKey from an environment variable

def call(method, payload):
    r = requests.post(f"{API}/{method}", json={"clientKey": CLIENT_KEY, **payload}, timeout=30)
    data = r.json()
    if data.get("errorId"):
        raise RuntimeError(f"{data.get('errorCode')}: {data.get('errorDescription')}")
    return data

def solve(task):
    return call("createTask", {"task": task})["solution"]

# Base64-encode the image (no data: prefix)
with open("captcha.png", "rb") as f:
    image_b64 = base64.b64encode(f.read()).decode()

solution = solve({
    "type": "ImageToTextTaskOcrBase",
    "body": image_b64,
})
print(solution["text"])
```

**Node.js**

solve.mjs

```js
import { readFileSync } from 'node:fs';

const API = 'https://api.yescaptcha.com';
const CLIENT_KEY = process.env.YESCAPTCHA_CLIENT_KEY; // Read the clientKey from an environment variable

async function call(method, payload) {
  const res = await fetch(`${API}/${method}`, {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({ clientKey: CLIENT_KEY, ...payload }),
  });
  const data = await res.json();
  if (data.errorId) throw new Error(`${data.errorCode}: ${data.errorDescription}`);
  return data;
}

async function solve(task) {
  const { solution } = await call('createTask', { task });
  return solution;
}

// Base64-encode the image (no data: prefix)
const imageB64 = readFileSync('captcha.png').toString('base64');

const solution = await solve({
  type: "ImageToTextTaskOcrBase",
  body: imageB64,
});
console.log(solution.text);
```

Koşullu asenkron görev:

POST https://api.yescaptcha.com/createTask

```json
{
  "clientKey": "YOUR_CLIENT_KEY",
  "task": {
    "type": "ImageToTextTask",
    "body": "BASE64_IMAGE",
    "case": true,
    "numeric": 0,
    "minLength": 4,
    "maxLength": 6
  }
}
```

## Sonuç

Senkron türler sonucu doğrudan `createTask` yanıtında döndürür:

```json
{
  "errorId": 0,
  "status": "ready",
  "solution": {
    "text": "LMResm"
  },
  "taskId": "2376919c-1863-11ec-a012-94e6f7355a0b"
}
```

Asenkron türler (`ImageToTextTask`, `ImageToTextTaskM1`) önce `taskId` döndürür; ardından her 5 saniyede bir `getTaskResult` ile sorgulayın. Görev tamamlandığında `solution` biçimi aynıdır.

| Alan | Tür | Açıklama |
| --- | --- | --- |
| `text` | string | Tanınan metin |

## Özel model

Genel model her harf-rakam CAPTCHA’sında çalışır, ancak tek bir stil için eğitilmiş modele göre doğruluğu biraz daha düşüktür. Tanımak istediğiniz görseller hep aynı stildeyse [destek ile iletişime geçerek](https://docs.yescaptcha.com/tr/help/contact.md) özel model yaptırabilirsiniz; sonrasında `ImageToTextTaskMuggle` ile `project_name` kullanarak modeli seçin.

## Sık sorulan sorular

### Sonuç yanlış çıkarsa puan düşer mi?

Senkron türlerde sonuç döndürüldüğü anda puan düşülür, sonuç yanlış olsa bile. Başka bir türle karşılaştırabilir veya özel model yaptırabilirsiniz.

### `ERROR_ZERO_CAPTCHA_FILESIZE` veya `ERROR_PARSE_IMAGE_FAIL` hatası alıyorum

Görselin Base64 metni eksik olabilir ya da `data:` ön eki veya satır sonu içeriyor olabilir. Kodlamayı kontrol edin; bkz. [Hata kodları](https://docs.yescaptcha.com/tr/api/errors.md).

## İlgili örnekler

-   [Hızlı başlangıç](https://docs.yescaptcha.com/tr/getting-started/quickstart.md): `ImageToTextTaskOcrBase` ile ilk isteği gönderin
-   [Python örnekleri](https://docs.yescaptcha.com/tr/samples/python.md)
