space ocr
指南文章价格文档
Japanese OCR

把文档变成可核对数据的日语 OCR

用 space-ocr 读取日语票据、发票和送货单:混合文字、全角与竖排、不乱码的中日韩安全 CSV,值在 data.values,位置在 data.cells,需要复核的项列在 data.review.flagged。

日语是普通 OCR 悄悄崩掉的地方。一张票据里混着汉字、假名、半角片假名、全角数字,偶尔还有一段英文,而合计可能竖排在右边缘的一列里。大多数工具要么先让你选语言,要么返回一团丢了版面的扁平文本。真正有用的日语 OCR 必须一次读完这些,并告诉你每个数字来自哪里。

space-ocr 两件事都做。它读 JP 文档,把结构化字段放进 data.values,并把每个值连同它在页面上被读取的确切位置一起返回——data.cells[path] 里有框、四点 quad、判定和依据。没有通过核对的值会作为工作清单出现在 data.review.flagged 里,所以你看的是一条短队列,而不是重读整页。没有语言设置要选,日语、韩语、中文、英文由一个引擎一起处理。

看一次你可以亲自核对的真实日语提取

把鼠标悬停在下方任意字段上。这里读的两张票据是真实数据——合计 2,045 的 KINSHO 布施店和合计 4,286 的 ライフ 国分店,都是 2019 年 8 月的日期。每个值和框都直接读自一次真实的解析结果,而不是摆拍,框会跟随每一行混着汉字、假名和数字的文本。行旁边的字符匹配数值是辅助依据,不是及格线。

Receipts with extracted-field bounding boxes
Verified fields
KINSHO · 合計 2,045
ライフ · 合計 4,286

Each value with a box carries a verified on-page location — in data.cells[path], that is box + 4-point quad + evidence.match_ratio — on a 0–1000 normalized grid (0,0 top-left → 1000,1000 bottom-right), the same shape the live API returns. Hover a field to trace it back to the pixels it came from.

三种形态,同一种响应结构
同一页可以取成具名字段(POST /ocr/fields)、取成保留版式的 Markdown(POST /ocr/markdown),或取成还原了阅读顺序的纯文本(POST /ocr/text)。三者都以同一个形状返回——data.values、data.cells、data.review、data.image——所以复核逻辑写一次就能复用。
没有语言设置
没有语言提示或选择器要设。日语、韩语、中文、英文走同一个引擎,即使混在同一行里,请求里也不需要声明任何东西。
全角、竖排、混合文字
汉字、平假名、片假名、半角片假名、全角数字和英文同在一行也会一起读。声明的 pattern 会针对折成半角后的值比对,所以印成 T12… 的号码用普通 ASCII 正则也能匹配。
不乱码的中日韩安全 CSV
导出是带 UTF-8 BOM 的 CSV,所以 店舗名、合計 和商品名在 Excel 里不会乱码,能正确打开。明细行展开为子行。
每个值都有位置,明细行同一套写法
data.cells[path] 返回框(0–1000 网格上的 xmin/ymin/xmax/ymax)和跟随页面倾斜的四点 quad,data.image 则是这些坐标的量度基准。每条明细的重复行在 values 和 cells 中都用 items[0].amount 指向。
贴合日本单据的声明
type: "date" 会把 令和8年8月16日 在 data.normalized 里解析成 2026-08-16,而 data.values 保留印刷原样;type: "number" 把 ¥13,220 变成 13220。pattern 检查登记号的形状,near / not_near 则针对 御中 与 登録番号 的张冠李戴。
手机照片也行
EXIF 旋转已经体现在被读取的页面上,且不做倾斜校正,所以斜着拍的单据保持原有倾斜,quad 跟着它走。

space-ocr 里的日语 OCR 如何工作

模型不产出坐标。它读文档、返回值,然后由字符匹配器把这些字符与 OCR 在页面上真正检测到的符号比对,这次比对产出框、quad 和每个单元格旁边的依据。verified 是与 review 互为镜像的判定:只要挂上任何理由就是 false,比对跑过且没有任何标记是 true,没有可比对的东西则是 null。字符比对本身在 evidence.text_match,而 evidence.match_ratio 给出字符覆盖率,属于辅助依据而非及格线。两个引擎仍可能在同一个误读上达成一致,所以这条队列告诉你先看哪里,并不是保证。

把 PDF 拖进应用,每一页会先被渲染成图片再读取——对多页发票和送货单很方便。直接调用 API 时,用 URL 或 base64 发送栅格页面图片,返回的结构化结果一样。声明你需要的 fields,或发送 autoFields: true 让响应替你提议;明细行用带 children 的 array 字段描述,路径写作 items[0].amount。

声明在提取之后才检查,也从不传给模型,因此它改变的是复核信号而不是读数。type: "date" 增加一层确定性的 data.normalized——令和8年8月16日 解析为 2026-08-16,而 data.values 保留印刷原样;type: "number" 把 ¥13,220 变成 13220。pattern 针对折成半角后的值比对,所以全角印刷的登记号也能用 ^T[0-9]{13}$ 匹配。对日本单据常见的当事人混淆,可以给收件方声明 near 词汇 御中 或 様,并把 登録番号 / TEL / 〒 声明为 not_near:选错的值就不会悄悄通过,而是以 near_mismatch 或 near_conflict 显示出来。数量栏的 一式、付款期限的 翌月末払い 这类本来就印成非数值写法的字段,留作 string 更好——一旦声明类型,正确的单据每次都会进复核清单。

为日语发票声明字段
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
curl -s https://api.space-ocr.com/ocr/fields \
  -H "Authorization: Bearer $SPACE_OCR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "image": "https://example.com/invoice-jp.jpg",
    "imageType": "url",
    "fields": [
      { "name": "issuer", "type": "string", "required": true,
        "near": ["登録番号", "TEL", "〒"] },
      { "name": "bill_to", "type": "string",
        "near": { "terms": ["御中", "様"], "match": "suffix" },
        "not_near": ["登録番号", "TEL"] },
      { "name": "registration_no", "type": "string", "pattern": "^T[0-9]{13}$" },
      { "name": "issue_date", "type": "date", "required": true },
      { "name": "total", "type": "number", "required": true, "min": 0 },
      { "name": "items", "type": "array", "children": [
        { "name": "name", "type": "string" },
        { "name": "qty", "type": "string" },
        { "name": "amount", "type": "number" }
      ] }
    ]
  }'

如何对日语文档做 OCR

  1. 添加你的文档
    在应用中拖入票据、发票或 PDF——每一页会被渲染成图片并排队 OCR。使用 API 时,把栅格页面图片(url 或 base64)发送到 /ocr/fields。没有语言设置。
  2. 声明你的字段
    列出你需要的 fields,或发送 autoFields: true 让响应提议一份 schema。明细行表格用带 children 的 array 字段,并在单据支持该规则的地方加上 type、pattern、near 或 not_near。
  3. 读取结构化结果
    业务数据留在 data.values。data.cells[path] 带着 box、quad、verified、review 和 evidence;data.image 是这些坐标的量度基准;data.normalized 存放已声明标量字段解析出的日期和数字。
  4. 处理复核队列
    遍历 data.review.flagged。每一项有 path,以及按排名排列、首项为主要理由的 reasons 数组,flagged.length 就是需要处理的数量。打开对应的单元格即可高亮该值被读取的区域。
  5. 导出或查询
    下载 CSV(UTF-8 BOM,日语能干净打开,明细行已展开),或用 GET /view 配合 where、sort、select 读取已存储的表格——读取已存的行不会重跑 OCR,GET /view 也不计费。

简单、可预期的定价

1 点数 = 1 页 = $0.05(含税),每月 100 点数免费,无需信用卡。失败不计费。套餐计划增加每月点数、更多表格和存储空间。

Free
$0
  • 100 点数/月
  • 3 表格
  • 1 GB 存储
免费 — 无需信用卡
Starter
$19/月
  • 500 点数/月
  • 15 表格
  • 10 GB 存储
免费开始
最受欢迎
Pro
$39/月
  • 1,100 点数/月
  • 无限表格
  • 100 GB 存储
免费开始
我必须告诉它文档是日语吗?
不用。没有语言提示或选择器要设。日语、韩语、中文、英文都走同一个引擎,混在同一行里的文档也一样。
它能处理全角字符和竖排文本吗?
能。汉字、平假名、片假名、半角片假名、全角数字和英文同在一行也会一起读,返回的框与 quad 不论方向都跟随每一行。声明的 pattern 会针对折成半角后的值比对,所以全角印刷的号码用普通 ASCII 正则也能匹配。
导出 CSV 时日语会乱码吗?
不会。CSV 带 UTF-8 BOM 写出,所以 店舗名、合計 和商品名在 Excel 里能正确打开而不乱码,明细行展开为子行。在 REST API 中同样的值放在 data.values,需要与印刷面严格比对时,框下的 OCR 原文在 evidence.printed_text 里。
日语 OCR 会保留每个值的位置吗?
会。data.cells[path] 返回一个框(0–1000 归一化网格上的 xmin/ymin/xmax/ymax)和跟随文档倾斜的四点 quad,而这些坐标所依据的宽高在 data.image 里。同样的 path 也出现在 data.review.flagged,所以需要复核的值是一份清单,而不是要你自己定阈值的分数。
它能读哪些日语文档?
票据、发票、送货单、名片、证件和自由格式文档的栅格图像。声明你需要的 fields,或发送 autoFields: true,明细行表格用带 children 的 array 字段。这些声明很贴合日本单据——type "date" 把 令和8年8月16日 在 data.normalized 里解析为 2026-08-16,pattern 在折半角后的值上检查登记号,near / not_near 则针对 御中 与 登録番号 的混淆。
日语 OCR 多少钱?
1 点数 = 1 页 = $0.05(含税),每月 100 点数免费,无需信用卡,失败不计费。套餐计划(Starter 和 Pro)增加每月点数、更多表格和存储——见上方的计划。

把你自己的日语文档变成可核对的数据

免费额度——每月 100 点数,无需信用卡。每个值都连同它在页面上的位置一起返回。

相关