Dicklesworthstone/franken_ocr

Pure-Rust, CPU-only OCR engine for Baidu Unlimited-OCR (a DeepSeek-OCR-derived 3B MoE VLM). Five-model zoo, custom int8 kernels, no ML framework, no Python, no GPU.

franken_ocr – Baidu 的 Unlimited-OCR 及相关模型专用纯 Rust CPU 仅 OCR

是什么franken_ocr(二进制文件 focr)是一个 Rust 库 + CLI,可在 CPU 上完全运行少量手工移植的视觉-语言模型。默认模型是 Baidu 的 Unlimited-OCR,一个强大的文档解析模型;其他模型涵盖表格(GOT-OCR2)、图像描述/VQA(SmolVLM2)、图表提取(OneChart)和光学音乐识别(Polyphonic-TrOMR)。无需 Python、CUDA、FFI 或 GPU——整个推理栈都包含在一个单一、内存安全的 Rust 二进制文件中。


核心功能

特性 为何重要
单个可移植二进制文件 适用于 macOS(Intel/Apple-Silicon)、Linux(x86-64/ARM64)和 Windows(x86-64/ARM64)的 13–17 MiB 可执行文件。无需外部运行时,易于部署到 CI 运行器、边缘设备或嵌入式代理。
离线推理 focr pull 下载模型资产(存储在 ~/.cache/franken_ocr/models 下)后,所有 OCR 运行均完全本地化——无需网络流量。
Rust API 库暴露一个 OcrEngine,支持同步、阻塞调用,开发者可直接在 Rust 程序中嵌入 OCR,无需处理异步或 FFI。
原生 PDF 处理 PDF 通过纯 Rust 代码在进程中栅格化,支持页面旋转并可拆分双页版面。
多页与结构化输出 --multi-page 生成带 <PAGE> 分隔符的单个文档;--json 返回带边界框的 JSON;--extract-figures 将图表/照片与 Markdown 一同保存。
模型库 focr models 列出五个即用型模型;每个模型都有自定义、形状优化的内核,消除通用 ML 框架的开销。
Int8 加速内核 手写 SIMD 内核(AVX-512-VNNI、AVX-VNNI、AVX2、Apple SDOT/SMMLA 等)使 int8 量化资产的处理速度比标量参考快约 3 倍。
确定性、代理就绪输出 “机器人”模式以 NDJSON 事件流(含音乐专用 staff 事件)输出,具有稳定退出码,适合自主代理使用。
自检与可追溯性 focr robot selftest 验证 int8 内核在主机 CPU 上与标量 Oracle 产生比特级相同结果;仓库包含大量发布就绪脚本和性能日志。
内存安全的 Rust 除极小的经审计 SIMD 岛外,全范围禁止 unsafe;支持大资产的可选 mmap 加载。

快速入门(来自 README)

# 安装二进制文件(检测 OS,验证 SHA-256)
curl -fsSL https://raw.githubusercontent.com/Dicklesworthstone/franken_ocr/main/install.sh | bash
# 拉取默认 Unlimited-OCR 权重(约 4 GB)
focr pull
# 将单张图像 OCR 为 Markdown
focr ocr page.png
# 或获取带边界框的结构化 JSON
focr ocr page.png --json -o page.json
# 使用专用模型(例如表格)
focr pull got-ocr2
focr ocr --model got-ocr2.int8.focrq --task tables table.png

模型缓存后,所有命令均可离线运行。


架构概览

  1. 输入层 – 接收 PNG/JPG、栅格化 PDF 页面、图像批次或乐谱扫描。
  2. 模型路由 – 根据 --task 标志或显式 --model 路径,将请求分发到相应手工移植的模型。
  3. 运行时核心(OcrEngine – 持有一个模型实例,仅加载一次权重,并通过微型 SQLite 类存储(fsqlite)记录遥测数据。
  4. CPU 执行 – 为每个模型编写固定形状的 Rust 内核;SIMD 调度选择最佳 ISA(x86 上为 AVX-512-VNNI、AVX-VNNI、AVX2、标量;ARM 上为 LLVM autovec 或 Apple SDOT/SMMLA)。Int8 内核采用保守配方,保持大部分层在高精度 BF16 以保证精度,同时加速前馈网络。
  5. 输出层 – 生成 Markdown、带布局框的 JSON、MusicXML(用于 OMR)或 NDJSON 机器人事件。

项目健康与许可

  • 版本 – v0.8.0(支持所有主要 OS/架构组合的二进制发布)。默认 Unlimited-OCR 资产固定于 v0.7.0 int8 检查点,通过 20 页语料 CER 预算 0.193(平均)和硬页终止测试。
  • 安全性 – 除经审计的 SIMD 内核外,禁止使用 unsafe;代码库旨在实现完全内存安全。
  • 许可 – MIT(参见 LICENSE)。
  • 发布证据 – 仓库包含性能日志、一致性门测试、模糊测试语料库,以及生成“试炼卡”评分表以认证每次发布。

谁可能使用它?

  • 需要轻量级、无需 GPU 的 OCR 组件,可嵌入 Rust 服务或编译为单个二进制文件的 开发者
  • 安装 Python + CUDA 不切实际的 CI / 自动化流水线
  • 必须在无互联网环境下运行文档 OCR 的 边缘或离线设备(如笔记本电脑、CI 运行器、IoT 设备)。
  • 通过机器人 NDJSON 流消费结构化 OCR 输出的 代理
  • 寻找纯 Rust OMR 解决方案的 音乐科技爱好者

总结

franken_ocr 为一组精选的 Baidu 视觉-语言模型提供生产级、CPU 仅 OCR 堆栈,以内存安全的 Rust 实现封装。其对确定性内核、离线操作和广泛发布就绪工具链的关注,使其成为任何希望在无需重型 Python/CUDA 生态系统的情况下获得可靠 OCR 的人的坚实选择。

相关

  • Dispatch
  • Dispatch
  • 项目
  • 项目
  • 项目