「榨干腾讯云OCR免费资源包」系列第 02 篇。上一篇我们把照片里的"字"抠出来了,这一篇更进一步:把文档结构也还原出来——段落、标题、表格线。而且这次不是单点突破,而是把腾讯云三个文档类接口编排成一套组合拳。
一、场景升级:要的不是字,是"结构"
自媒体人的素材处理,很多时候"只要文字"是不够的:
- 二创资料整理:纸质书扫描页、老报告,想要的是"能编辑的文档",段落和层级都要保住;
- 行业数据分析:报告截图里的表格要放进自己的对比文章,手动重建表格是最烦的活;
- 粉丝投稿解析:合同、物流单据截图,需要按版面理解内容。
这三个场景对应三个方向的资源包:办公文档还原(整页结构)、表格识别(表格专项)、行业文档识别(行业版式专项)。三个免费资源包,各 1000 次,9 月 30 日到期。
二、三位选手
| 免费资源包 | 能力说明 | 一句话定位 |
|---|---|---|
| 办公文档还原-1000次 | 整份文档结构化还原(段落、标题、表格、阅读顺序) | 整页文档一次变"可编辑文档" |
| 表格识别-1k次 | TableOCR(V1),另有 V2 RecognizeTableOCR / V3 RecognizeTableAccurateOCR | 表格专项:直接返回 HTML,带合并单元格 |
| 行业文档识别-1000次 | 面向行业版式的专项识别(控制台资源包名,公开 API 概览中无同名接口) | 行业标准单据优先用它 |
说明:“办公文档还原”"行业文档识别"属于控制台能力分类命名,公开 API 概览里没有完全同名的接口;文档还原类能力在 OCR「文档智能」接口族里有对应实现(如 MultimodalDocParse 多模态解析·文档版),行业单据字段抽取则常用智能结构化识别 SmartStructuralOCRV2。资源包实际抵扣哪个接口,以控制台【资源包管理】页说明为准。
先说它们和"通用印刷体"的区别:通用 OCR 是一行一行返回文字,不管版面;而文档还原类接口的目标是理解版面——哪行是标题、哪几行是一个段落、哪些内容属于表格。
三、表格识别实战:截图 → Excel 一条龙
表格识别是我个人最推荐先用起来的一个:TableOCR 调用方式和通用 OCR 完全一样,但返回里多了一个 HTML 字段——整张表格的 HTML,天然带 rowspan/colspan 合并单元格信息。拿到 HTML,转 Excel 只要几行 pandas:
# table_ocr.py —— 表格截图转 Excel
import base64
import io
import os
import pandas as pd
from tencentcloud.common import credential
from tencentcloud.ocr.v20181119 import ocr_client, models
cred = credential.Credential(
os.environ["TENCENTCLOUD_SECRET_ID"],
os.environ["TENCENTCLOUD_SECRET_KEY"],
)
client = ocr_client.OcrClient(cred, "ap-guangzhou")
req = models.TableOCRRequest()
with open("table.jpg", "rb") as f:
req.ImageBase64 = base64.b64encode(f.read()).decode()
resp = client.TableOCR(req)
# HTML 字段 -> DataFrame -> Excel
tables = pd.read_html(io.StringIO(resp.HTML))
tables[0].to_excel("result.xlsx", index=False)
print("已保存 result.xlsx,共识别出", len(tables), "张表")
三个要点:
pd.read_html依赖 lxml,没有的话先pip install lxml;- 返回的
TextDetections里还有每个单元格的坐标和置信度,做"单元格级校对"工具时很有用; - 手机拍的表格要摆正、光线均匀,格线糊了精度会明显下降。
这次实测我准备了两张带完整表格线的业务表——一张采购订单(带金额合计,考验数字识别),一张员工考勤表(考验行列对齐):

图1 · 实测素材:采购订单 6列×4行+合计,考勤表 7列×3行。都是程序用 PIL 按真实业务版式画的,格线清晰、内容已知。
四、办公文档还原:整份文档变 Markdown
文档还原类接口的输出不是零散的文字行,而是按文档结构组织的内容。以 OCR 文档智能族的 MultimodalDocParse(多模态解析·文档版)为例:支持 PDF / Word / PPT / Excel / Markdown / TXT / 图片 / WPS,返回一个 zip 压缩包(内含 markdown、json 和图片),相当于直接给你"还原成可编辑文档"的成品:
# doc_parse.py —— 整份文档解析还原(多模态解析·文档版)
import os
from tencentcloud.common import credential
from tencentcloud.ocr.v20181119 import ocr_client, models
cred = credential.Credential(
os.environ["TENCENTCLOUD_SECRET_ID"],
os.environ["TENCENTCLOUD_SECRET_KEY"],
)
client = ocr_client.OcrClient(cred, "ap-guangzhou")
req = models.MultimodalDocParseRequest()
# 注意:该接口通过 FileUrl 传文件(建议文件放在腾讯云 COS 上,下载更快更稳)
req.FileUrl = "https://example-bucket-125000000.cos.ap-guangzhou.myqcloud.com/report.pdf"
req.FileType = 1 # 1:PDF 2:Word 3:PPT 4:Excel 5:Markdown 6:TXT 7:图片 8:WPS
resp = client.MultimodalDocParse(req)
print(resp.to_json_string()) # 内含解析结果 zip 下载地址,解压即得 markdown/json/图片
使用要点:
- 先传 COS 再解析:文件 URL 建议用腾讯云存储,下载稳定性更好;
- PDF/Word/PPT 支持 150M 且 300 页以内,图片支持 70M 以内(以接口文档实时说明为准);
- 调试时用
resp.to_json_string()打印完整返回,SDK 的 Response 对象都支持这个方法,比逐字段猜快得多。
如果你拿到的"办公文档还原"资源包抵扣的是其他接口,思路完全一样:调接口 → 拿结构化结果 → 按结构拼 Markdown。
五、行业文档识别:版式固定的单据,优先用它
行业文档识别面向版式相对固定的行业文档做专项优化。选型逻辑很简单:
- 素材是某类标准行业单据(物流运单、票据、医疗单据等)→ 优先行业文档识别/结构化类接口,字段结构化程度更高;
- 素材是任意版面的普通文档 → 办公文档还原 / 通用 OCR。
如果需要按字段名抽取(比如从运单里抽"运单号、收件人、电话"),智能结构化识别 SmartStructuralOCRV2 是常用路径,它支持指定要抽取的字段:
{
"ImageUrl": "https://your-cos-url/waybill.jpg",
"ItemNames": ["运单号", "收件人", "电话"],
"ReturnFullText": false
}
在 API Explorer(console.cloud.tencent.com/api/explorer,产品选 ocr)里选 SmartStructuralOCRV2,可以在线调试并自动生成 SDK 示例代码,比手写快得多。
六、组合玩法:三条腾讯云能力串成一条"扫描件 → 可编辑文档"流水线
单独用任何一个接口都平平无奇,真正的专业度在编排。今天这三个腾讯云能力,我按"版面类型分流"的思路串成了一条工作流:

图2 · 三能力组合流水线:表格类走 TableOCR,整页文档走 MultimodalDocParse,标准单据走 SmartStructuralOCRV2,增强预处理是可选前哨(第 12 篇专门讲),最后一道人工抽查不可省。
单页文档可以全自动,成批素材建议加一个人工抽查环节——OCR 准确率已经很高,但"高准确率 × 大批量"里漏掉的 1% 也够你改半天,抽查比返工便宜。
七、额度与使用策略
三个包共 3000 次,9 月 30 日到期。建议:
| 包 | 策略 |
|---|---|
| 表格识别 | 只投给"有明确表格线"的图;糊图先增强再识别,别浪费次数 |
| 办公文档还原 | 整页文档素材的主力,先跑一两页调好流程再批量 |
| 行业文档识别 | 确认支持你的行业版式后再批量投 |
额度实况:真机截图 + 真实跑批


09-23 的复测里,表格识别三档(TableOCR / RecognizeTableOCR / RecognizeTableAccurateOCR)各真实调用 1 次,延迟 0.456s / 0.454s / 0.605s,V2 与 V3 都直接返回了 base64 的 xlsx(UEsDBBQ... 就是 ZIP/xlsx 的文件头)。控制台里"表格识别(V3)"的余量从 994 次走到 993 次,和调用次数对得上。全部响应与 RequestId 落盘在 ocr-lab/09-free-sweep/。
八、遇到的问题与解决办法
pd.read_html忘装 lxml 会直接报错;HTML字段可能很长,调试时别整段 print,取前 200 字符看结构即可;- 无边框表格(用空格对齐的"表格")表格识别效果有限,换高精度版 OCR 手动拼列;
- 拍照素材先摆正、切掉背景杂物,这是性价比最高的预处理;
- 老规矩:子账号密钥 + 环境变量,代码仓库和博客里永远不出现真实密钥。
九、总结 & 下期预告
通用 OCR 管"有没有字",文档还原管"长啥样"。表格识别是我第一个会让你去试的——它把"手工重建表格"这种最磨人的活直接干掉了。
📊 实测数据速览(2026-09-21 真实调用)
我用 PIL 画了两张带完整表格线的业务表(采购订单、员工考勤),真调用 TableOCR 跑了一遍,结果比预期好:
| 图片 | 延迟 | 识别单元格 | 基准命中 |
|---|---|---|---|
| 采购订单(6列×4行+合计) | 0.62s | 31 个 | 21/21 全命中 |
| 员工考勤表(7列×3行) | 0.46s | 29 个 | 10/10 全命中 |
连 159.50 被识别成 1 59.50(多插了一个空格)都只是格式差异——归一化后零错误。所有金额、数量、姓名一字不差。
左边是喂进去的图,右边是 TableOCR 返回后用单元格坐标重建的表格,逐格对比零差错:

图3 · 实测输入 → 实测还原。注意 1 59.50、1 992.00 这两处多出来的空格——是唯一差异,数字本身全对。
重建出来的 Excel 打开长这样(这是真实产物文件,不是示意截图):

图4 · table_purchase_clean.xlsx 预览。同一份响应里接口还原生送了一份 xlsx(见下),两份都能直接用。
文档里看不出门道,但真正值钱的是这三条实测细节:
Data字段直接是 base64 编码的 xlsx 文件! 我原以为要自己拿 HTML 字段再转 Excel,结果发现base64.b64decode(data["Data"])写进.xlsx文件就能直接打开(文件头UEsDBB就是 ZIP 魔数,xlsx 本质是 zip)。省掉了中间一整套转换逻辑。

图5 · 排错日记:别再从 HTML 硬转了——Data 字段解 base64 就是现成 Excel;要百分百规整的表,用 Text + 坐标字段一行重建。
-
字段名和通用 OCR 不一样:表格接口的文本在
Text字段(不是DetectedText),而且自带ColTl/RowTl/ColBr/RowBr单元格坐标 +Type(header/body)。这意味着一行代码就能重建规整表格:grid[(cell["RowTl"], cell["ColTl"])] = cell["Text"] -
别指望
HTML字段(至少 V1 返回里没有)。想要百分百规整的表,用坐标重建最稳;空单元格的Confidence是 0、Text是空串,可以直接过滤。
原始响应 JSON、两张 Excel(接口原生版 + 坐标重建版)、生成脚本都在仓库 ocr-lab/02-table-to-excel/,你拉下来就能跑。
下一篇《告别手工贴发票》我照样实测——把发票识别 + 核验跑通,数据直接带回来给你看。
系列导航:00-选题计划 | 上一篇:01-通用OCR六大接口横评实测 | 下一篇:03-增值税发票识别与核验
转载自 CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/ailuloo/article/details/166595707




