腾讯云表格识别v3 (RecognizeTableAccurateOCR)
用途
调用腾讯云OCR表格识别v3接口,支持中英文图片/PDF内常规表格、无线表格、多表格的检测和识别,返回每个单元格的文字内容,支持旋转的表格图片识别,且支持将识别结果保存为Excel格式。
核心能力:
- 常规表格识别:支持有线表格的精准识别
- 无线表格识别:支持无边框表格的检测与识别
- 多表格识别:单张图片/PDF中包含多个表格时均可检测
- 嵌套表格识别:有线表格中包含无线表格的复杂场景
- 旋转表格识别:支持旋转角度的表格图片
- Excel导出:识别结果可直接导出为Excel文件(Base64编码)
- PDF支持:支持PDF文件的单页表格识别
官方文档:https://cloud.tencent.com/document/api/866/86721
使用时机
当用户提出以下需求时触发此技能:
- 需要从图片中提取表格内容
- 需要从PDF中识别表格数据
- 需要将图片/PDF中的表格转换为Excel文件
- 涉及表格OCR识别的任何场景
- 需要识别无线表格、嵌套表格等复杂表格
环境要求
- Python 3.6+
- 依赖:
tencentcloud-sdk-python(通过pip install tencentcloud-sdk-python安装) - 环境变量:
TENCENTCLOUD_SECRET_ID:腾讯云API密钥IDTENCENTCLOUD_SECRET_KEY:腾讯云API密钥Key
使用方式
运行 scripts/main.py 脚本完成表格识别。
请求参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| ImageBase64 | str | 否(二选一) | 图片/PDF的Base64值,编码后不超过10M,分辨率建议600*800以上且长宽比小于3,支持PNG/JPG/JPEG/BMP/PDF |
| ImageUrl | str | 否(二选一) | 图片/PDF的URL地址,都提供时只使用ImageUrl |
| PdfPageNumber | int | 否 | PDF页码,仅支持单页识别,默认1,必须>=1 |
| UserAgent | str | 否 | 请求来源标识(可选),用于追踪调用来源,统一固定为Skills |
输出格式
识别成功后返回 JSON 格式结果:
格式化输出模式(默认):
{
"表格数量": 1,
"表格详情": [
{
"表格序号": 1,
"表格类型": "有线表格",
"单元格数量": 12,
"单元格详情": [
{
"行范围": "0 - 1",
"列范围": "0 - 1",
"文本": "本报告期末",
"置信度": 99.0,
"单元格类型": "body"
}
],
"表格坐标": [
{"X": 50, "Y": 100},
{"X": 800, "Y": 100},
{"X": 800, "Y": 600},
{"X": 50, "Y": 600}
]
}
],
"Excel数据": "已返回(Base64编码)",
"旋转角度": 0.0,
"RequestId": "xxx"
}
原始输出模式(--raw):
{
"TableDetections": [
{
"Cells": [
{
"ColTl": 0,
"RowTl": 0,
"ColBr": 1,
"RowBr": 1,
"Text": "本报告期末",
"Type": "body",
"Confidence": 99.0,
"Polygon": [{"X": 50, "Y": 100}, {"X": 200, "Y": 100}, {"X": 200, "Y": 150}, {"X": 50, "Y": 150}]
}
],
"Type": 1,
"TableCoordPoint": [{"X": 50, "Y": 100}, {"X": 800, "Y": 100}, {"X": 800, "Y": 600}, {"X": 50, "Y": 600}]
}
],
"Data": "UEsDBBQACAgIAIFzWFY...",
"PdfPageSize": 0,
"Angle": 0.0,
"RequestId": "xxx"
}
响应数据结构说明
TableInfo 结构:
| 字段 | 类型 | 说明 |
|---|---|---|
| Cells | list of TableCellInfo | 单元格内容(可能返回null) |
| Type | int | 文本块类型:0非表格文本、1有线表格、2无线表格(可能返回null) |
| TableCoordPoint | list of Coord | 表格主体四个顶点坐标,左上→右上→右下→左下(可能返回null) |
TableCellInfo 结构:
| 字段 | 类型 | 说明 |
|---|---|---|
| ColTl | int | 单元格左上角的列索引 |
| RowTl | int | 单元格左上角的行索引 |
| ColBr | int | 单元格右下角的列索引 |
| RowBr | int | 单元格右下角的行索引 |
| Text | str | 单元格内识别出的字符串文本,多行以换行符\n隔开 |
| Type | str | 单元格类型 |
| Confidence | float | 单元格置信度 |
| Polygon | list of Coord | 单元格在图像中的四点坐标 |
错误码说明
| 错误码 | 含义 |
|---|---|
| FailedOperation.DownLoadError | 文件下载失败 |
| FailedOperation.EmptyImageError | 图片内容为空 |
| FailedOperation.ImageDecodeFailed | 图片解码失败 |
| FailedOperation.ImageSizeTooLarge | 图片尺寸过大 |
| FailedOperation.OcrFailed | OCR识别失败 |
| FailedOperation.PDFParseFailed | PDF解析失败 |
| FailedOperation.UnKnowError | 未知错误 |
| FailedOperation.UnKnowFileTypeError | 未知的文件类型 |
| FailedOperation.UnOpenError | 服务未开通 |
| InvalidParameterValue.InvalidParameterValueLimit | 参数值错误 |
| LimitExceeded.TooLargeFileError | 文件内容太大 |
| ResourceUnavailable.InArrears | 账号已欠费 |
| ResourceUnavailable.ResourcePackageRunOut | 账号资源包耗尽 |
| ResourcesSoldOut.ChargeStatusException | 计费状态异常 |
重要业务逻辑
- ImageBase64和ImageUrl必须提供其一,都提供时只使用ImageUrl
- 图片/PDF编码后不超过10M,分辨率建议600800以上且长宽比小于3(短边分辨率>600,长边<=短边3)
- 支持格式:PNG、JPG、JPEG、BMP、PDF
- PdfPageNumber必须>=1,仅支持PDF单页识别,默认值为1
- PDF转图有白名单机制,需白名单用户才支持
- 若引擎返回ImageSizeTooLargeError,会映射为ImageSizeInvalidError
- 支持将识别结果导出为Excel(Data字段为Base64编码的Excel数据)
- 默认接口请求频率限制:2次/秒
- 建议图片存储于腾讯云COS以获得更高的下载速度和稳定性
调用示例
# 通过URL识别表格
python scripts/main.py --image-url "https://example.com/table.jpg"
# 通过文件路径(自动Base64编码)识别
python scripts/main.py --image-base64 ./table.png
# 识别PDF中的表格(指定页码)
python scripts/main.py --image-base64 ./document.pdf --pdf-page-number 2
# 识别并保存Excel文件
python scripts/main.py --image-url "https://example.com/table.jpg" --save-excel ./result.xlsx
# 输出原始JSON响应
python scripts/main.py --image-url "https://example.com/table.jpg" --raw
# 指定地域
python scripts/main.py --image-url "https://example.com/table.jpg" --region ap-beijing```