Skip to content

TNXGLab/toudang

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Table OCR Batch

License: MIT

批量识别图片中的表格,借助 OpenAI 兼容的视觉模型,将表格内容提取为 Markdown,并支持导出为 Excel。

提示词针对高考录取数据表格优化(院校代号、年份、计划数、分数等),其他类型表格也能识别。

环境准备

需要 Python >= 3.11,使用 uv 管理依赖:

# 安装 uv(如已安装可跳过)
curl -LsSf https://astral.sh/uv/install.sh | sh

# 克隆项目
git clone https://github.com/TNXGLab/toudang.git
cd toudang

# 安装依赖
uv sync

快速开始

1. 准备图片

把要识别的表格截图或照片放到 img/ 目录下,支持 jpgpngwebpbmptiff 格式。

img/
├── 1.jpg
├── 2.jpg
└── 3.png

2. 配置 API Key

推荐用环境变量,省得每次输入:

export OPENAI_API_KEY="sk-your-api-key"
export OPENAI_BASE_URL="https://your-api-endpoint/v1"   # 可选,默认用 OpenAI 官方
export OPENAI_MODEL="gpt-4o-mini"                        # 可选,默认 gemini-3.1-flash-lite-preview

3. 运行识别

uv run python main.py

程序会逐个(或并发)识别 img/ 下的图片,进度条会实时显示当前状态。

4. 导出 Excel

识别完成后,一键合并所有 Markdown 表格为 Excel:

uv run python main.py excel

命令行参数

参数 说明 默认值
-i, --input 图片目录或单张图片路径 img/
-o, --output 输出根目录 output/
--api-key OpenAI 兼容 API Key 环境变量 OPENAI_API_KEY
--base-url API 端点地址 环境变量 OPENAI_BASE_URL
--model 视觉模型名称 环境变量 OPENAI_MODEL
--concurrency 同时处理的图片数 3
--force 忽略状态文件,强制重新识别所有图片 关闭
--skip-failed 跳过上次失败的图片(文件未变化时) 关闭

常用组合

# 指定图片目录和输出目录
uv run python main.py -i ~/screenshots -o ~/results

# 5 张图并发,加速处理
uv run python main.py --concurrency 5

# 上次有失败的图,但图片没变,直接跳过它们
uv run python main.py --skip-failed

# 图片更新了,全部重新识别
uv run python main.py --force

# 导出 Excel,指定输入输出路径
uv run python main.py excel -i output/markdown -o result.xlsx

输出目录结构

output/
├── markdown/          # 每张图片识别出的 Markdown 表格
│   ├── 1.abc12345.tables.md
│   └── 2.def67890.tables.md
├── raw/               # 模型原始返回文本(调试用)
│   ├── 1.abc12345.raw.md
│   └── 2.def67890.raw.md
├── logs/              # 每次运行的 JSONL 日志
│   └── run_20260629_143052.jsonl
├── state.json         # 任务状态文件(支持断点续传)
└── tables.xlsx        # Excel 导出结果

断点续传

程序会记录每张图片的处理状态到 output/state.json。如果中途中断(Ctrl+C),下次运行会自动跳过已经成功识别的图片,只处理剩余的。

--force 可以强制全部重新识别。

表格格式说明

识别输出严格遵循 Markdown 表格格式:

  • 院校信息行:院校名称和代号放在第一列,其余列为空,方便导出后在 Excel 中合并单元格区分
  • 年份数据行:以年份开头,数据按列对齐
  • 支持单张图片包含多个院校、多个表格

导出的 Excel 中,院校行会横向合并为一个单元格并高亮显示,与数据行区分。

License

MIT

About

Batch OCR images with table recognition using OpenAI

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages