---
title: "OCR"
description: "识别商品图片中的文字：每个区域的多边形、边界框、文字和置信度。不去除文字，也不翻译。"
---

> Every apinoa docs page as markdown: https://apinoa.com/llms.txt (all in one file: https://apinoa.com/llms-full.txt; this API family in one file: https://apinoa.com/docs/image-translate/llms.txt)

```http
POST /v1/image-translate/ocr
```

仅运行 [Translate](/docs/api-reference/image-translate/translate) 的识别步骤：返回文字区域，不做任何修改。
可用于预先筛选图片，或驱动你自己的工作流。以**原始字节**在请求体中发送图片，并在查询字符串中传入 `source_language`。

## 请求

```bash tab="cURL"
curl -X POST "https://gateway.apinoa.com/v1/image-translate/ocr?source_language=zh-CN" \
  -H "x-api-key: $APINOA_API_KEY" \
  -H "Content-Type: image/jpeg" \
  --data-binary @product.jpg
```

```js tab="JavaScript"
import { readFile } from "node:fs/promises";

const res = await fetch("https://gateway.apinoa.com/v1/image-translate/ocr?source_language=zh-CN", {
  method: "POST",
  headers: { "x-api-key": process.env.APINOA_API_KEY, "Content-Type": "image/jpeg" },
  body: await readFile("product.jpg"),
});
const { success, data, error } = await res.json();
```

```python tab="Python"
import os

import requests

with open("product.jpg", "rb") as f:
    image = f.read()

res = requests.post(
    "https://gateway.apinoa.com/v1/image-translate/ocr",
    params={"source_language": "zh-CN"},
    headers={"x-api-key": os.environ["APINOA_API_KEY"], "Content-Type": "image/jpeg"},
    data=image,
    timeout=60,
)
body = res.json()
```

## 参数

**请求头**

| 请求头 | 必填 | 说明 |
|---|---|---|
| `x-api-key` | 是 | 你的 API 密钥。 |
| `Content-Type` | 是 | `image/jpeg`、`image/png`、`image/webp` 或 `application/octet-stream`。 |

**查询字符串**

| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `source_language` | string | 是 | `ch`、`zh`、`zh-CN`、`zh-TW`、`chinese_cht`、`ja`、`japan`、`en` 或 `auto`。 |

## 响应

真实响应，仅保留第一个区域：

```json
{
  "success": true,
  "requestId": "43d899616f8e468aa22368bffaae1953",
  "data": {
    "regions": [
      {
        "index": 0,
        "polygon": [[83, 68], [352, 68], [352, 145], [83, 145]],
        "bbox": { "x": 83, "y": 68, "w": 269, "h": 77 },
        "text": "限时特价",
        "confidence": 0.999354,
        "text_color": { "r": 255, "g": 253, "b": 252 },
        "bg_color": { "r": 211, "g": 40, "b": 43 },
        "bg_std": 0.363554,
        "font_weight": "Regular",
        "is_badge": false
      }
    ],
    "regions_found": 3,
    "src_w": 800,
    "src_h": 600
  }
}
```

| 字段 | 类型 | 含义 |
|---|---|---|
| `regions[].index` | integer | 区域编号，从 0 开始。 |
| `regions[].polygon` | number[][] | 四个角点，使用原图坐标。 |
| `regions[].bbox` | object | 边界框 `{x, y, w, h}`，使用原图坐标。 |
| `regions[].text` | string | 识别出的文字。 |
| `regions[].confidence` | number | 识别置信度，0–1。 |
| `regions[].text_color`, `regions[].bg_color` | object | 估算的文字颜色和背景颜色，RGB 格式。 |
| `regions[].bg_std` | number | 文字背后背景的不均匀程度；接近 0 表示纯色。 |
| `regions[].font_weight` | string | 检测到的字重。 |
| `regions[].is_badge` | boolean | 对于填充标签上的文字（如价签或促销标签）为 `true`。 |
| `regions_found` | integer | 找到的区域数量。 |
| `src_w`, `src_h` | integer | 原图的宽度和高度，单位为像素。 |

## 错误

| 状态码 | 代码 | 含义 |
|---|---|---|
| 400 | `BAD_REQUEST` | 请求体为空，或某个查询参数无效。 |
| 401 | `UNAUTHORIZED` | 缺少 `x-api-key` 请求头，或密钥无效。 |
| 402 | `INSUFFICIENT_BALANCE` | 余额不足以支付本次调用。重试无法解决；请充值。 |
| 413 | `PAYLOAD_TOO_LARGE` | 请求体超过 20 MB。 |
| 415 | `UNSUPPORTED_MEDIA_TYPE` | `Content-Type` 不是图片类型。 |
| 422 | `INVALID_IMAGE` | 这些字节不是可读取的图片。 |
| 502 | `UPSTREAM_ERROR` | 识别暂时不可用。请重试。 |

所有代码都列在 [Errors](/docs/errors) 中。失败的调用不计费。

## 价格

每次调用按[价格页面](/pricing)上的图片翻译费率计费，与 Translate 相同。

## 说明

- **限制。** 图片最大 8192 × 8192 px，请求体最大 20 MB，格式为 JPEG、PNG 或 WebP。
