Skip to content
项目

arcships/light-ocr has 660 GitHub stars and 59 forks. GitHot measured +6 in 7 days. Last checked 2026-11-10 23:08 UTC. Last push 2026-10-08.

这些数字如何统计

Fast, offline OCR for Node.js & C++. PP-OCRv6 with Core ML / WebGPU hardware acceleration — recognize text in images with confidence scores & coordinates. npm: @arcships/light-ocr

实测星标增长

24小时
更新延迟
7天
+6
15天
正在收集历史
1个月
正在收集历史

各周期内的星标净变化,周期相互重叠,并非每日新增。缺失的测量保持空白。星标代表关注度,不代表软件质量。

README.zh-CN.md

原文

light-ocr

Core CI License C++17 Node--API v8 npm

English | 简体中文

light-ocr 像素风宣传图

面向 Node.js 与 C++ 的快速离线 OCR。

直接在本机识别 PDF、JPEG、PNG 或像素数据,返回按阅读顺序排列的 文字、置信度和四边形坐标。Node.js 用户安装的 npm 包内置 PP-OCRv6 Small 模型、PDFium、中文 fallback 字体,以及 macOS、Linux 和 Windows 的预编译组件;安装后或首次运行时无需二次下载。

适合场景 Node.js 应用、CLI、桌面软件与原生 C++ 集成中的本地 OCR
输入 JPEG、PNG、PDF、编码后的字节或解码后的像素
输出 文字、置信度、四边形坐标、页面元数据与耗时
分发方式 一次 npm 安装;同时提供 CommonJS、ESM、TypeScript 与八个平台预编译包

快速开始

支持 Node.js 22 及以上;22/24 LTS 为 Tier 1 完整测试版本,Node-API 稳定 ABI 保证更新的 Node 版本无需等待库发版即可加载同一份预编译产物。

npm install @arcships/light-ocr
import { createEngine } from "@arcships/light-ocr";
import { readFile } from "node:fs/promises";

const engine = await createEngine();

try {
  const result = await engine.recognizeEncoded(
    await readFile("image.jpg"),
  );

  for (const line of result.lines) {
    console.log(line.text, line.confidence, line.box);
  }
} finally {
  await engine.close();
}

createEngine() 会根据当前平台自动选择合适的执行方式。如果应用已经 完成图片解码,recognize() 也可以直接接收 GRAY8、RGB8、BGR8 和 RGBA8 像素数据。

PDF 页面使用同一个包:

import { recognizeDocument } from "@arcships/light-ocr";

for await (const page of recognizeDocument("report.pdf", { dpi: 200 })) {
  console.log(page.index, page.lines.map((line) => line.text));
}

CommonJS 可以通过 require("@arcships/light-ocr") 使用同一组导出。

CLI

安装后即可使用 light-ocr 命令,无需额外配置:

# 识别文字 + 坐标
light-ocr image.png --format json

# 只要文字
light-ocr image.png --format text

# PDF;渲染器已经包含在 npm 安装产物中
light-ocr report.pdf --pages 1-10 --format text

# 只检测文字区域(不识别)
light-ocr detect image.png

# 区域识别
light-ocr recognize image.png --region 100,80,640,320 --format json

# 引擎信息
light-ocr info --version

# 系统诊断(硬件与加速器)
light-ocr doctor --json

图片命令包括 recognize(默认)、detect(只检测框)、info(版本诊断)和 doctor(系统诊断)。传入 .pdf 路径会直接进入文档 OCR;显式 document 命令用于多输入任务。输出遵循版本化的 schemaVersion: 1 契约,EXIF 方向自动修正。完整参考见 CLI 设计 和 npm package README。

PDF 和多页文档

PDF 和多页 OCR 已直接内置于 @arcships/light-ocr。匹配当前平台的 PDFium 二进制、校验锁定的 Noto Sans SC fallback 字体与 OCR 原生运行时位于同一个平台 npm 包中。引用常见非嵌入中文字体的 PDF 可在 OCR 前正确渲染;没有 postinstall 脚本、运行时下载、系统字体 要求、编译器要求,也不需要另装文档包。

# 单个 PDF,默认 150 DPI
light-ocr report.pdf

# 指定页码范围,流式 JSONL 输出
light-ocr report.pdf --pages 1-10 --format jsonl

# 多张图片作为一个文档
light-ocr document scan1.png scan2.png scan3.png --format text

编程 API:

import { recognizeDocument } from "@arcships/light-ocr";

// 从 PDF 流式获取页面
for await (const page of recognizeDocument("report.pdf", { dpi: 200 })) {
  console.log(page.index, page.lines.length, page.source.kind);
}

// 多张图片
for await (const page of recognizeDocument([buf1, buf2, buf3])) {
  console.log(page.index, page.lines);
}

主要能力

  • **本地处理。**图片、PDF 和 OCR 结果始终留在本机。
  • **只需安装一个包。**模型、OCR 运行时、PDF 渲染器和中文 fallback 字体会通过 npm 的当前平台依赖一起安装。
  • **没有二次下载。**安装和运行都不需要 postinstall 拉取、编译器、模型下载、PDF 引擎下载或字体下载。
  • **直接得到可用结果。**每一行都包含识别文字、置信度和原图位置。
  • **默认使用硬件加速。**Auto 在 macOS 15+ Apple Silicon 上优先使用 Core ML,在下表的 Linux 和 Windows 版本中优先使用 WebGPU。
  • **适合应用内调用。**识别任务在 JavaScript 主线程之外执行,并支持队列、取消和明确释放资源。
  • **识别大图中的小字。**可选的 tiled 模式可以保留高分辨率图片中的小字和密集文字。

**macOS 重新签名。**下游 macOS 打包方可以用自己的 Developer ID(或 ad-hoc)身份重新签名原生二进制,例如在公证分发的应用时。加载器在 macOS 上接受重新签名过的 Mach-O,前提是其代码签名校验通过且签名身份与宿主应用一致(TeamIdentifier 相同,或双方均为 ad-hoc 签名);其他平台与未经签名的篡改仍保持严格的字节数 + SHA-256 校验。

⭐ 觉得 light-ocr 有用? 点个 Star,让更多人发现这个项目!

平台加速

npm 包提供以下八个平台版本。默认的 createEngine() 使用 Auto 模式:

平台 Auto 模式
macOS / Apple Silicon macOS 15+ 优先使用 Core ML,然后使用 CPU
macOS / Intel CPU
Linux x64 glibc 通过 Vulkan 使用 WebGPU,然后使用 CPU
Linux arm64 glibc CPU
Linux x64 musl(Alpine) CPU
Linux arm64 musl(Alpine) CPU
Windows x64 通过 D3D12 使用 WebGPU,然后使用 CPU
Windows arm64 CPU

需要明确控制时,可以通过 execution 选项 选择 auto、cpu、apple 或 webgpu。

模型档位

Small 继续作为稳定默认。Tiny 和 Medium 是 next tag 下的可选 preview 包。三档使用完全相同的 API、类型、结果 schema 和错误模型,每次安装 只携带所选的一份模型。

档位 Package / 命令 模型 payload 状态
Small @arcships/light-ocr / light-ocr 约 30 MB 稳定默认
Tiny @arcships/light-ocr-tiny@next / light-ocr-tiny 约 6.3 MB Preview;49 种语言,不含日语
Medium @arcships/light-ocr-medium@next / light-ocr-medium 约 139 MB Preview;精度优先

NPU 支持通过单独安装的 @arcships/light-ocr-openvino-linux-x64-gnu / @arcships/light-ocr-amdnpu-linux-x64-gnu 提供,均需显式配置 provider。普通安装不含它们的运行库或编译模型,Small 模型制品保持不变。见 NPU 安装说明。

Tiny/Medium 保持在 next;它们不会改变 npm install @arcships/light-ocr 的安装内容。

实测性能

0.3.0 在三台真实设备上完成了同机对比:

light-ocr 0.3.0 同机速度与 OCR 进程 CPU time 降幅

设备 加速方式 端到端加速 OCR 进程 CPU time
Apple M4 Max Core ML HELLO 123 2.30×;密集表单 2.85× 降低 95.91%–97.67%
Linux / NVIDIA RTX 5060 Ti WebGPU / Vulkan 14 张测试图片整体 5.70× 降低 69.97%
Windows / AMD Radeon 780M WebGPU / D3D12 14 张测试图片整体 2.44× 降低 46.33%

以上数字均为表中设备相对本机 CPU 路径的结果,并会随任务和硬件变化。14 张图片的整体加速比,是各图片 CPU 中位耗时之和除以 WebGPU 中位耗时之和。CPU 列统计同一批任务的 OCR 进程累计 CPU time,而不是某一瞬间的系统利用率;更低的累计 CPU time 意味着 OCR 运行期间能给前台应用留出更多 CPU 资源。Apple 测试通过了锁定的 CPU 一致性门槛;两组 WebGPU 测试的 14 张图片均与 CPU FP32 输出逐字节一致。完整测量和测试方法见 0.3.0 发布报告。

C++

C++ 项目从源码构建静态库,并链接 light_ocr::core CMake target。API 可以直接识别解码后的 GRAY8、RGB8、BGR8 或 RGBA8 像素;接入方式见 C++ API,各平台准备方式见 构建说明。

Agent Skill

内置 Agent Skill,供可调用本地命令的 AI Agent 使用。它提供场景驱动的工作流、命令选择建议和退出码参考:

  • 何时使用 OCR 而非多模态模型
  • 大图先 detect 再 recognize 的工作流
  • 票据/表单的 ROI 字段提取
  • 用确定性 OCR 验证多模态模型输出

文档

社区与协议

欢迎提交 issue 和 pull request — 请先阅读 CONTRIBUTING.md 了解贡献指南。所有参与者须遵守行为准则。

light-ocr 使用 Apache License 2.0。

探索相关项目