diff --git a/CHANGELOG.md b/CHANGELOG.md index a0f63a6..71a334a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,11 +2,11 @@ This file records user-visible changes to `light-ocr`. Published artifact details and immutable hashes remain in [`docs/releases/`](docs/releases/). -## [0.3.0] - Unreleased +## [0.3.0] - 2026-07-19 ### Added -- Added an opt-in Direct Core ML provider for the `0.3.0` source candidate. Apple Silicon routes FP16 detection and shorter recognition shapes through the Neural Engine envelope, with wider recognition shapes on the GPU. +- Added an opt-in Direct Core ML provider. Apple Silicon routes FP16 detection and shorter recognition shapes through the Neural Engine envelope, with wider recognition shapes on the GPU. - Added experimental macOS 15+ Core ML compatibility on `arm64`. The macOS x64 package remains CPU-only after its release smoke test did not reproduce the locked OCR result through Core ML. - Added per-provider and per-session execution diagnostics, including configured provider chain, device family, operating system, precision, model/cache identity, qualification identity, a structured Auto creation trace, and `deviceValidated` evidence status. - Added a self-contained Apple model bundle, deterministic Core ML derivation, offline compiled-model cache, cross-process cache locking, bounded recognition-function caching, and descriptor-driven platform Auto selection. @@ -43,16 +43,18 @@ This file records user-visible changes to `light-ocr`. Published artifact detail ### Compatibility and evidence -- The current source candidate defaults to descriptor-driven Auto selection. Explicit providers are strict single-backend requests, and the legacy `sessionFallback: "cpu"` value returns `invalid_argument`. +- Version `0.3.0` defaults to descriptor-driven Auto selection. Explicit providers are strict single-backend requests, and the legacy `sessionFallback: "cpu"` value returns `invalid_argument`. - Production bundles use `devicePolicy: "open-macos"` for Apple Silicon: M1–M3 and later Apple Silicon are not blocked by the current evidence list. The npm runtime descriptor does not expose Apple on macOS x64. - Real-device performance data currently comes from one Apple M4 Max runner. The evidence contract classifies it under the `Apple M4` device family for `deviceValidated`; this is not a claim that every M4 SKU was measured separately. Other Macs report `deviceValidated: false`; experimental compatibility is available, but no performance number is promised until that hardware family is reviewed. - Heavy model conversion, Compute Plan placement, performance, cache, and lifecycle qualification remain local real-device work. Ordinary CI stays limited to cross-platform builds, contracts, and lightweight tests and does not require paid runners. -- The macOS arm64 Core ML provider is merged on `main` but is not included in the published `0.2.0` npm packages. The planned `0.3.0` distribution keeps the existing six-package installation shape. +- The macOS arm64 Core ML provider is included in the published `0.3.0` npm packages. The distribution keeps the existing six-package installation shape; macOS x64 remains CPU-only. - Native WebGPU compatibility and performance are evidenced on the named NVIDIA/Linux and AMD/Windows systems. Other devices may use the open compatibility path but do not inherit these performance numbers. - The Linux and Windows qualification reports both passed 164/164 mechanical Gates. Their reviewed report and artifact-set hashes are bound into the production runtime lock, so ordinary `0.3.0` release staging now accepts the exact qualified payloads. Full evidence and methodology: [Apple device acceleration](docs/apple-device-acceleration.md), [Linux device acceleration](docs/linux-device-acceleration.md), [Windows device acceleration](docs/windows-device-acceleration.md), [implementation status](docs/implementation-status.md), the accepted Apple baseline [`apple-fp16-mixed-20260715.2`](contracts/apple-provider-baselines.json), and the checked-in WebGPU qualification reports. +See the immutable [npm 0.3.0 release record](docs/releases/npm-0.3.0.md). + ## [0.2.0] - 2026-07-14 - Added opt-in deterministic `tiled-v1` detection for dense and high-resolution images. diff --git a/README.md b/README.md index d088501..3a3e228 100644 --- a/README.md +++ b/README.md @@ -16,9 +16,9 @@ English | [简体中文](README.zh-CN.md) It is made for products where OCR should feel like a local capability: quick to invoke, private by default, and straightforward to embed into an existing image pipeline. -> **Available on npm:** `@arcships/light-ocr@0.2.0` includes the default PP-OCRv6 Small model, prebuilt native runtimes for all Tier 1 platforms, opt-in tiled detection, and direct in-memory JPEG/PNG input for Node.js. See [Package support](#package-support). +> **Available on npm:** `@arcships/light-ocr@0.3.0` includes the default PP-OCRv6 Small model, prebuilt native runtimes for all Tier 1 platforms, opt-in tiled detection, direct in-memory JPEG/PNG input, and descriptor-driven hardware acceleration. See [Package support](#package-support). -> **`0.3.0` acceleration candidate:** macOS arm64 adds Direct Core ML; Linux x64/Vulkan and Windows x64/D3D12 add the official Native WebGPU Plugin EP. The recorded real-device results are **2.30×–2.85×** on Apple M4 Max, **5.70× aggregate P50** on NVIDIA RTX 5060 Ti, and **2.44× aggregate P50** on AMD Radeon 780M. WebGPU ships an FP32 execution profile; Apple uses its separately qualified FP16 route. macOS x64 remains on the CPU provider. +> **`0.3.0` acceleration:** macOS arm64 adds Direct Core ML; Linux x64/Vulkan and Windows x64/D3D12 add the official Native WebGPU Plugin EP. The recorded real-device results are **2.30×–2.85×** on Apple M4 Max, **5.70× aggregate P50** on NVIDIA RTX 5060 Ti, and **2.44× aggregate P50** on AMD Radeon 780M. WebGPU ships an FP32 execution profile; Apple uses its separately qualified FP16 route. macOS x64 remains on the CPU provider. ## Where light-ocr fits @@ -43,9 +43,9 @@ Cloud OCR is convenient, but it introduces uploads, network availability, recurr - **Local by default.** Recognition performs no runtime network access and does not start a child process. - **Ready for real application pipelines.** It accepts `GRAY8`, `RGB8`, `BGR8`, and `RGBA8` pixel buffers; the Node.js adapter can also decode JPEG and PNG bytes already held in memory. - **Two deliberate large-image modes.** Bounded/960 remains the fast, memory-conscious default. Opt-in tiled detection preserves more detail for small text and dense 2048-pixel documents while processing one detection tile at a time. -- **Native Apple acceleration when requested.** On macOS arm64, the `0.3.0` source candidate can route FP16 detection and recognition through Core ML without changing the public OCR result contract. -- **Qualified Native WebGPU acceleration.** The `0.3.0` candidate packages the official WebGPU Plugin EP and its exact Linux/Vulkan or Windows/D3D12 runtime closure, with hash-verified offline staging and 164/164 real-device Gates on both recorded systems. -- **A pinned, reproducible model.** The approximately 31 MB PP-OCRv6 Small bundle is integrity-checked and designed to ship with the application instead of downloading on first use. +- **Native Apple acceleration when requested.** On macOS arm64, `0.3.0` can route FP16 detection and recognition through Core ML without changing the public OCR result contract. +- **Qualified Native WebGPU acceleration.** Version `0.3.0` packages the official WebGPU Plugin EP and its exact Linux/Vulkan or Windows/D3D12 runtime closure, with hash-verified offline staging and 164/164 real-device Gates on both recorded systems. +- **A pinned, reproducible model.** The self-contained PP-OCRv6 Small bundle is integrity-checked and designed to ship with the application instead of downloading on first use. - **Consistent across supported platforms.** The same model and result contract are used on macOS, Linux, and Windows. - **Built for asynchronous hosts.** The Node-API adapter keeps inference away from the JavaScript thread, with bounded queues, cancellation, and explicit lifecycle control. - **Open and inspectable.** The project is Apache-2.0 licensed and tests real model behavior, high-resolution memory use, lifecycle safety, and output parity in CI. @@ -140,7 +140,7 @@ Node.js 22 and 24 are supported on macOS arm64/x64, Linux x64 glibc, and Windows npm install @arcships/light-ocr ``` -The package installs the matching native runtime and the pinned PP-OCRv6 Small model. It does not download a model at first run or compile native code during `postinstall`. Version 0.2.0 supports both `recognizeEncoded()` and raw-pixel `recognize()`. +The package installs the matching native runtime and the pinned PP-OCRv6 Small model. It does not download a model at first run or compile native code during `postinstall`. Version 0.3.0 supports both `recognizeEncoded()` and raw-pixel `recognize()`. ```ts import { createEngine } from "@arcships/light-ocr"; @@ -165,12 +165,10 @@ console.log(rawResult.lines); await engine.close(); ``` -The current source candidate uses a platform runtime descriptor for Auto selection. Explicit Apple and WebGPU remain strict single-provider requests. The following is a maintainer/source-checkout preview, not an `npm install` path for `0.2.0`: +The published package uses a platform runtime descriptor for Auto selection. Explicit Apple and WebGPU remain strict single-provider requests. On macOS arm64, Apple can be requested directly: ```ts const engine = await createEngine({ - // Source candidate only; the planned npm 0.3.0 package will resolve it. - bundlePath: "/absolute/path/to/ppocrv6-small-native-20260719.1", execution: { provider: "apple", precision: "fp16", @@ -195,7 +193,7 @@ const engine = await createEngine({ }); ``` -`cpuPartition: "allow"` and the strict GPU-only profile apply to the Apple provider on Apple Silicon. The `0.3.0` macOS x64 package exposes CPU only. Explicit providers never fall through to CPU; only Auto may advance through its descriptor-locked creation candidates. Published `0.2.0` packages remain CPU-default until the source candidate is released. +`cpuPartition: "allow"` and the strict GPU-only profile apply to the Apple provider on Apple Silicon. The `0.3.0` macOS x64 package exposes CPU only. Explicit providers never fall through to CPU; only Auto may advance through its descriptor-locked creation candidates. Calling `createEngine()` without `execution` now uses Auto. See the [Node.js guide](bindings/node/README.md) for the full API, cancellation, queue limits, and lifecycle behavior. @@ -221,19 +219,19 @@ See [Build and release](docs/build-and-release.md) for platform prerequisites an | --- | --- | --- | | C++ core source | Available | macOS arm64/x64, Linux x64 glibc, Windows x64 | | Node-API adapter source | Available | Node.js 22 and 24 | -| [`@arcships/light-ocr`](https://www.npmjs.com/package/@arcships/light-ocr) | `0.2.0` published | Node.js 22/24 on all Tier 1 platforms | -| [`@arcships/light-ocr-model-ppocrv6-small`](https://www.npmjs.com/package/@arcships/light-ocr-model-ppocrv6-small) | `0.2.0` published | Platform-independent required model dependency | -| Platform native npm packages | `0.2.0` published | macOS arm64/x64, Linux x64 glibc, Windows x64 | +| [`@arcships/light-ocr`](https://www.npmjs.com/package/@arcships/light-ocr) | `0.3.0` published | Node.js 22/24 on all Tier 1 platforms | +| [`@arcships/light-ocr-model-ppocrv6-small`](https://www.npmjs.com/package/@arcships/light-ocr-model-ppocrv6-small) | `0.3.0` published | Platform-independent required model dependency | +| Platform native npm packages | `0.3.0` published | macOS arm64/x64, Linux x64 glibc, Windows x64 | -The npm distribution installs one facade, one required model package, and the native package matching the host platform. Package contents, versioning, and release gates are documented in [npm packaging](docs/npm-packaging.md); immutable `0.2.0` hashes and validation evidence are recorded in the [release record](docs/releases/npm-0.2.0.md). +The npm distribution installs one facade, one required model package, and the native package matching the host platform. Package contents, versioning, and release gates are documented in [npm packaging](docs/npm-packaging.md); immutable `0.3.0` hashes and validation evidence are recorded in the [release record](docs/releases/npm-0.3.0.md). -Direct Core ML acceleration on macOS arm64 is merged on `main` for the `0.3.0` candidate but is not part of the published `0.2.0` package set. Its release keeps the same six-package installation shape; no extra provider package or runtime download is planned. +Direct Core ML acceleration on macOS arm64 is published in `0.3.0` using the same six-package installation shape; it adds no provider package or runtime download. macOS x64 remains CPU-only. -PR #11 also carries the Linux x64 and Windows x64 Native WebGPU source candidate. Explicit WebGPU accepts `auto`/`fp32`; Auto also selects FP32. The three required CPU-partition operators are reported and bounded. Both real-device reports passed 164/164 Gates, and their immutable report/artifact hashes are now bound into the production lock for the `0.3.0` release workflow. Published `0.2.0` packages remain unchanged and CPU-only on those platforms. +Version `0.3.0` publishes Native WebGPU on Linux x64 and Windows x64. Explicit WebGPU accepts `auto`/`fp32`; Auto also selects FP32. The three required CPU-partition operators are reported and bounded. Both real-device reports passed 164/164 Gates, and their immutable report/artifact hashes are bound into the production lock. ## Project status -`light-ocr` is under active development. Version `0.2.0` publishes the deterministic `tiled-v1` high-resolution mode and bounded in-memory JPEG/PNG decoding in the Node.js adapter without changing the raw-pixel C++ Core boundary. The `0.3.0` source candidate adds descriptor-driven Auto selection, Direct Core ML execution on macOS arm64, and FP32 Native WebGPU execution on Linux x64/Windows x64. +`light-ocr` is under active development. Version `0.3.0` includes deterministic `tiled-v1`, bounded in-memory JPEG/PNG decoding, descriptor-driven Auto selection, Direct Core ML execution on macOS arm64, and FP32 Native WebGPU execution on Linux x64/Windows x64 without changing the raw-pixel C++ Core boundary. As a pre-1.0 project, public APIs and package layout may still evolve; the project does not currently promise a stable cross-release C++ ABI. diff --git a/README.zh-CN.md b/README.zh-CN.md index 2f78e86..70ccd6a 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -16,9 +16,9 @@ 这个项目面向希望把 OCR 做成真正本地能力的产品:随时调用、默认保护隐私,也能自然嵌入现有的图像处理流程。 -> **npm 已可用:**`@arcships/light-ocr@0.2.0` 自带默认 PP-OCRv6 Small 模型和全部 Tier 1 平台的预编译原生运行时,并支持可选 tiled 检测与 Node.js 内存 JPEG/PNG 直接输入。详见[包支持](#包支持)。 +> **npm 已可用:**`@arcships/light-ocr@0.3.0` 自带默认 PP-OCRv6 Small 模型和全部 Tier 1 平台的预编译原生运行时,并支持可选 tiled 检测、Node.js 内存 JPEG/PNG 直接输入和 descriptor 驱动的硬件加速。详见[包支持](#包支持)。 -> **`0.3.0` 加速候选:**macOS arm64 加入 Direct Core ML;Linux x64/Vulkan 与 Windows x64/D3D12 加入官方 Native WebGPU Plugin EP。已记录的真机结果分别为 Apple M4 Max **2.30×–2.85×**、NVIDIA RTX 5060 Ti **聚合 P50 5.70×**、AMD Radeon 780M **聚合 P50 2.44×**。WebGPU 发布 FP32 执行 profile,Apple 使用独立资格验证的 FP16 路径;macOS x64 保持 CPU provider。 +> **`0.3.0` 加速:**macOS arm64 加入 Direct Core ML;Linux x64/Vulkan 与 Windows x64/D3D12 加入官方 Native WebGPU Plugin EP。已记录的真机结果分别为 Apple M4 Max **2.30×–2.85×**、NVIDIA RTX 5060 Ti **聚合 P50 5.70×**、AMD Radeon 780M **聚合 P50 2.44×**。WebGPU 发布 FP32 执行 profile,Apple 使用独立资格验证的 FP16 路径;macOS x64 保持 CPU provider。 ## 适合哪些场景 @@ -43,9 +43,9 @@ - **默认本地运行。**识别过程不会访问网络,也不会启动子进程。 - **适合真实应用流程。**直接接收 `GRAY8`、`RGB8`、`BGR8` 和 `RGBA8` 像素;Node.js 适配器也能解码已经在内存中的 JPEG 和 PNG。 - **两种明确的大图策略。**bounded/960 仍是速度和内存优先的默认模式;可选 tiled 检测为小字和密集的 2048 像素文档保留更多细节,并始终逐个处理 detection tile。 -- **按需启用原生 Apple 加速。**在 macOS arm64 上,`0.3.0` 源码候选可以用 Core ML 执行 FP16 detection/recognition,同时保持公共 OCR 结果契约不变。 -- **已完成真机资格验证的 Native WebGPU 加速。**`0.3.0` 候选会打包官方 WebGPU Plugin EP 及其精确的 Linux/Vulkan 或 Windows/D3D12 运行时闭包,支持哈希校验的离线 staging;两台记录设备均通过 164/164 Gate。 -- **模型固定且可复现。**约 31 MB 的 PP-OCRv6 Small bundle 会经过完整性验证,目标是随应用一起安装,而不是首次运行时再下载。 +- **按需启用原生 Apple 加速。**在 macOS arm64 上,`0.3.0` 可以用 Core ML 执行 FP16 detection/recognition,同时保持公共 OCR 结果契约不变。 +- **已完成真机资格验证的 Native WebGPU 加速。**`0.3.0` 会打包官方 WebGPU Plugin EP 及其精确的 Linux/Vulkan 或 Windows/D3D12 运行时闭包,支持哈希校验的离线 staging;两台记录设备均通过 164/164 Gate。 +- **模型固定且可复现。**自包含的 PP-OCRv6 Small bundle 会经过完整性验证,目标是随应用一起安装,而不是首次运行时再下载。 - **跨平台结果一致。**macOS、Linux 和 Windows 使用同一套模型与结果契约。 - **适合异步宿主。**Node-API 适配器不会占用 JavaScript 主线程,并提供有界队列、取消和明确的生命周期控制。 - **开放、可检查。**项目采用 Apache-2.0 协议,并在 CI 中验证真实模型行为、大图内存、生命周期安全和输出对齐。 @@ -140,7 +140,7 @@ Node.js 22 和 24 支持 macOS arm64/x64、Linux x64 glibc 与 Windows x64: npm install @arcships/light-ocr ``` -安装会自动取得当前平台的原生运行时和固定版本的 PP-OCRv6 Small 模型;首次运行不会再下载模型,`postinstall` 也不会现场编译原生代码。0.2.0 同时支持下面的 `recognizeEncoded()` 和 raw-pixel `recognize()`。 +安装会自动取得当前平台的原生运行时和固定版本的 PP-OCRv6 Small 模型;首次运行不会再下载模型,`postinstall` 也不会现场编译原生代码。0.3.0 同时支持下面的 `recognizeEncoded()` 和 raw-pixel `recognize()`。 ```ts import { createEngine } from "@arcships/light-ocr"; @@ -165,12 +165,10 @@ console.log(rawResult.lines); await engine.close(); ``` -当前源码候选通过平台 runtime descriptor 执行 Auto 选择;显式 Apple 与 WebGPU 都是严格的单 provider 请求。下面是面向维护者/源码 checkout 的 preview,不是 `0.2.0` 的 `npm install` 使用路径: +已发布 package 通过平台 runtime descriptor 执行 Auto 选择;显式 Apple 与 WebGPU 都是严格的单 provider 请求。在 macOS arm64 上可以直接请求 Apple: ```ts const engine = await createEngine({ - // 仅源码候选需要;计划中的 npm 0.3.0 package 会自动解析该 payload。 - bundlePath: "/absolute/path/to/ppocrv6-small-native-20260719.1", execution: { provider: "apple", precision: "fp16", @@ -195,7 +193,7 @@ const engine = await createEngine({ }); ``` -`cpuPartition: "allow"` 与 strict GPU-only profile 适用于 Apple Silicon 上的 Apple provider;`0.3.0` macOS x64 package 只暴露 CPU。显式 provider 失败不会转入 CPU,只有 Auto 可以沿 descriptor 锁定的创建候选继续。源码候选发布前,公开的 `0.2.0` package 仍保持 CPU 默认。 +`cpuPartition: "allow"` 与 strict GPU-only profile 适用于 Apple Silicon 上的 Apple provider;`0.3.0` macOS x64 package 只暴露 CPU。显式 provider 失败不会转入 CPU,只有 Auto 可以沿 descriptor 锁定的创建候选继续。不传 `execution` 的 `createEngine()` 现在使用 Auto。 完整 API、取消、队列限制和生命周期行为见 [Node.js 指南](bindings/node/README.md)。 @@ -221,19 +219,19 @@ ctest --preset release | --- | --- | --- | | C++ Core 源码 | 可用 | macOS arm64/x64、Linux x64 glibc、Windows x64 | | Node-API 适配器源码 | 可用 | Node.js 22 和 24 | -| [`@arcships/light-ocr`](https://www.npmjs.com/package/@arcships/light-ocr) | 已发布 `0.2.0` | 全部 Tier 1 平台的 Node.js 22/24 | -| [`@arcships/light-ocr-model-ppocrv6-small`](https://www.npmjs.com/package/@arcships/light-ocr-model-ppocrv6-small) | 已发布 `0.2.0` | 与平台无关的必需模型依赖 | -| 各平台 native npm packages | 已发布 `0.2.0` | macOS arm64/x64、Linux x64 glibc、Windows x64 | +| [`@arcships/light-ocr`](https://www.npmjs.com/package/@arcships/light-ocr) | 已发布 `0.3.0` | 全部 Tier 1 平台的 Node.js 22/24 | +| [`@arcships/light-ocr-model-ppocrv6-small`](https://www.npmjs.com/package/@arcships/light-ocr-model-ppocrv6-small) | 已发布 `0.3.0` | 与平台无关的必需模型依赖 | +| 各平台 native npm packages | 已发布 `0.3.0` | macOS arm64/x64、Linux x64 glibc、Windows x64 | -npm 分发会安装一个统一入口、一个必需的模型包,以及与当前系统匹配的 native 包。包内容、版本策略和发布门槛见 [npm package 设计](docs/npm-packaging.md);`0.2.0` 的不可变哈希和验证证据见[发布记录](docs/releases/npm-0.2.0.md)。 +npm 分发会安装一个统一入口、一个必需的模型包,以及与当前系统匹配的 native 包。包内容、版本策略和发布门槛见 [npm package 设计](docs/npm-packaging.md);`0.3.0` 的不可变哈希和验证证据见[发布记录](docs/releases/npm-0.3.0.md)。 -macOS arm64 Direct Core ML 加速已经合并到 `main`,目标版本为 `0.3.0`,但尚未进入已发布的 `0.2.0` package set。它会继续复用现有六包安装结构,不计划新增 provider package 或运行时下载。 +macOS arm64 Direct Core ML 加速已经随 `0.3.0` 发布,并复用现有六包安装结构,没有新增 provider package 或运行时下载;macOS x64 保持 CPU-only。 -PR #11 同时包含 Linux x64 与 Windows x64 Native WebGPU 源码候选。显式 WebGPU 接受 `auto/fp32`,Auto 同样选择 FP32;三个必要 CPU partition 算子会被显式报告并限制范围。两份真机报告均已通过 164/164 Gate,其报告与产物的不可变哈希现已绑定进 production lock,供 `0.3.0` 发布流程使用。已发布的 `0.2.0` packages 保持不变,并在这两个平台继续仅使用 CPU。 +`0.3.0` 已在 Linux x64 与 Windows x64 发布 Native WebGPU。显式 WebGPU 接受 `auto/fp32`,Auto 同样选择 FP32;三个必要 CPU partition 算子会被显式报告并限制范围。两份真机报告均已通过 164/164 Gate,其报告与产物的不可变哈希已绑定进 production lock。 ## 项目状态 -`light-ocr` 仍在积极开发。`0.2.0` 已发布确定性的 `tiled-v1` 大图模式,以及 Node.js 适配器中受资源限制的内存 JPEG/PNG 解码;C++ Core 的 raw-pixel 边界保持不变。`0.3.0` 源码候选加入 descriptor-driven Auto、macOS arm64 Direct Core ML,以及 Linux x64/Windows x64 FP32 Native WebGPU 执行。 +`light-ocr` 仍在积极开发。`0.3.0` 包含确定性的 `tiled-v1` 大图模式、Node.js 内存 JPEG/PNG 解码、descriptor-driven Auto、macOS arm64 Direct Core ML,以及 Linux x64/Windows x64 FP32 Native WebGPU 执行;C++ Core 的 raw-pixel 边界保持不变。 作为 pre-1.0 项目,公共 API 和 package 布局仍可能调整;项目目前不承诺跨版本稳定的 C++ ABI。 diff --git a/bindings/node/README.md b/bindings/node/README.md index dccb2c5..7a4cfc8 100644 --- a/bindings/node/README.md +++ b/bindings/node/README.md @@ -1,6 +1,6 @@ # light-ocr Node-API adapter -状态:`@arcships/light-ocr@0.2.0` 已发布;当前 0.3.0 源码候选加入 Apple/Core ML,以及 Linux x64 glibc/Vulkan、Windows x64/D3D12 的 official Native WebGPU Plugin EP 产品实现。WebGPU runtime/npm payload、Auto 与双平台真实设备 Gate 已完成;正式 release lock 仍需在发布前绑定已审阅报告和产物哈希。已发布的 0.2.0 仍为 CPU 默认。 +状态:`@arcships/light-ocr@0.3.0` 已发布并提升为 npm `latest`。默认 `createEngine()` 使用 descriptor-driven Auto;macOS arm64 可用 Apple/Core ML,Linux x64 glibc/Vulkan 与 Windows x64/D3D12 可用 official Native WebGPU Plugin EP,macOS x64 保持 CPU-only。 推荐直接安装公开 package: @@ -20,7 +20,7 @@ npm install @arcships/light-ocr - `recognize()` 返回前同步复制本次调用实际需要的像素范围;调用返回后可以立即修改或复用原 Buffer。 - 支持 `AbortSignal` 协作式取消:queued 请求会从队列移除;running 请求立即拒绝 public Promise,但 Core 会安全运行到返回并丢弃结果。 - native addon 只接收现有绝对 bundle 目录。当前源码开发调用显式传 `bundlePath`;发布后的 facade 默认使用随 npm 安装的 model package 路径。 -- 产品 engine 默认报告 `detectionStrategy: 'bounded'`、`detectionMaxSide: 960` 和 `defaultRecognitionBatchSize: 1`。0.2.0 可通过 `detection: {strategy: 'tiled'}` 显式选择 `tiled-v1`;`upstreamExact` 只用于上游对照,单次 `recognize({detectionMaxSide})` 只能继续降低 bounded engine 的 side。 +- 产品 engine 默认报告 `detectionStrategy: 'bounded'`、`detectionMaxSide: 960` 和 `defaultRecognitionBatchSize: 1`。0.3.0 可通过 `detection: {strategy: 'tiled'}` 显式选择 `tiled-v1`;`upstreamExact` 只用于上游对照,单次 `recognize({detectionMaxSide})` 只能继续降低 bounded engine 的 side。 - `createEngine({execution})` 接受 `auto`、`cpu`、`apple` 与已交付平台支持的 `webgpu`。macOS 15+ arm64 默认开放:Apple Silicon interactive 使用 FP16 ANE + 宽文本 FP16 GPU,strict 使用全 GPU;macOS x64 package 保持 CPU-only。WebGPU 使用 ORT Core 1.24.4 + official plugin 0.1.0,Linux 为 Vulkan、Windows 为 D3D12;`0.3.0` 公共 WebGPU profile 只接受 `precision: 'auto' | 'fp32'`,FP16 仅用于 Apple provider。当前 WebGPU 模型需要 `Concat/Gather/Slice` 三类有界 CPU partition,因而 `cpuPartition: 'forbid'` 会稳定 fail-closed。只有 Auto 可在创建期按 descriptor 锁定的 typed failure 继续候选;显式 provider 不回退,旧 `sessionFallback: 'cpu'` 返回 `invalid_argument`。`engine.info.execution.sessions` 报告每个模型的实际 provider chain、precision、adapter、runtime/provider/qualification identity,selection trace 则报告 Auto 的每次创建尝试。 ## `0.3.0` 加速证据 diff --git a/docs/implementation-status.md b/docs/implementation-status.md index 326e094..9ced1a8 100644 --- a/docs/implementation-status.md +++ b/docs/implementation-status.md @@ -1,7 +1,7 @@ # C++ Core 与 Node-API 实施状态 更新时间:2026-07-19
-结论:`@arcships/light-ocr@0.2.0` 已发布并提升为 npm `latest`。当前 0.3.0 发布候选已实现 Direct Core ML Apple provider,以及 Linux x64 glibc/Windows x64 official Native WebGPU Plugin EP 的产品 runtime、D112 Auto、自包含 npm payload 与资格工具。Apple M4 已有审阅证据;WebGPU 的 Linux/Windows 真实设备报告均为 164/164 Gate 通过,已审阅报告和产物哈希已绑定 production lock。 +结论:`@arcships/light-ocr@0.3.0` 与五个依赖包已发布,npm `next`/`latest` 均指向 `0.3.0`。该版本交付 Direct Core ML Apple provider、Linux x64 glibc/Windows x64 official Native WebGPU Plugin EP、D112 Auto 与自包含 npm payload;Apple M4、Linux/NVIDIA 与 Windows/AMD 的审阅证据及产物哈希均已进入 production lock。 状态含义: @@ -17,14 +17,14 @@ | 生产 Core 无 Python、无子进程 | Done | `light_ocr_core` 仅 C++;Python 只在 oracle/generator/report tools;Core 无 process/shell API。 | | raw-pixel 公共 API、ownership/lifecycle 文档 | Done | `include/light_ocr/*.hpp` 与 [native-api.md](native-api.md)。 | | detection/geometry/crop/recognition/decode 分层与测试 | Done | 独立源码模块、unit tests、stage probe 和真实模型 integration tests。 | -| PP-OCRv6 bundle 固定、哈希、许可、离线可用 | Done(0.2.0 published) | `.2` 使用相同受控 ONNX bytes,发布 schema 1.2、`tiled-v1` contract、新 manifest/config/archive hash,并把 minimum Core 提升到 0.2.0;`.1`/schema 1.1 证据保持不变。 | +| PP-OCRv6 bundle 固定、哈希、许可、离线可用 | Done(0.3.0 published) | 0.3.0 发布 `ppocrv6-small-native-20260719.1`,包含受控 FP32 ONNX、Apple FP16 与内部锁定的 WebGPU 派生工件;公开 WebGPU profile 保持 FP32。 | | stage 与 final parity | Done | `upstream_exact` 与 `bounded_default` 均为 14/14;候选级 trace 完整;release commit 的 oracle 与四平台 jobs 全绿。 | | 首 bundle ground-truth quality report | Done(本机) | bounded 默认在 10 个锁定 fixtures 上 10/10 exact、CER `0`;IoU≥0.5 下 detection precision/recall/Hmean 均为 `1.0`。旧 exact 基线仍独立保留。 | | 相对性能门槛 | Done(参考本机) | bounded 默认:median `0.9824867× ≤ 1.10×`;p95 `1.0139793× ≤ 1.15×`;inference median `0.9961966× ≤ 1.05×`。受控 CI worker 报告仍应保留。 | | Sanitizer、fuzz、leak、lifecycle、malformed input | Done | 本机 ASan+UBSan、TSan、standalone fuzz、lifecycle 和 malformed model/tensor 已通过;release Core safety job 的 sanitizers、TSan 和 libFuzzer smoke 全绿。 | | 无 network/shell/cwd/locale 运行依赖 | Done | sterile cwd/minimal env 与 Linux network namespace disabled 测试通过;npm release 另完成已安装 package 的禁网运行。 | | manifest、hash、licenses、SBOM、parity、benchmark | Done | Release commit 已重新生成并保存四平台 metadata、六个 npm tarballs 的 hashes/integrity、parity、quality 与 benchmark 证据。 | -| N-API/npm 非本 Core milestone | Done / `0.2.0` published | raw Node-API v8、CJS/ESM、`.d.ts`、内置模型解析、四平台 prebuild、双重背压、AbortSignal 与生命周期均已完成;[npm release run 29340467784](https://github.com/arcships/light-ocr/actions/runs/29340467784) 与 [promotion run 29342178842](https://github.com/arcships/light-ocr/actions/runs/29342178842) 保存六包发布、registry 和禁网证据。 | +| N-API/npm 非本 Core milestone | Done / `0.3.0` published | raw Node-API v8、CJS/ESM、`.d.ts`、内置模型解析、四平台 prebuild、双重背压、AbortSignal 与生命周期均已完成;[dry-run 29694938140](https://github.com/arcships/light-ocr/actions/runs/29694938140)、[release run 29695763892](https://github.com/arcships/light-ocr/actions/runs/29695763892) 与 [promotion run 29696646354](https://github.com/arcships/light-ocr/actions/runs/29696646354) 保存六包构建、Node 22/24、registry、禁网、integrity 与 dist-tag 证据。 | | Perf-1A / Apple execution | Done locally / Apple Silicon open compatibility | provider-neutral `InferenceSession` 已加入 Objective-C++ Direct Core ML;公开 union 与 D112 Auto 创建状态机已接线。detector 使用 FP16 range model,recognizer 使用 91-function FP16 MLProgram 和 20 个加权宽度桶;Apple Silicon interactive 为 ANE + 宽文本 GPU,strict 为 GPU。schema 1.1 provider contract、`validatedDeviceFamilies` 与 `deviceValidated` 已实现;显式 provider 严格失败,只有 Auto 可按 typed reason 在创建期继续。哈希锁模型、离线编译缓存、跨进程锁、LRU≤20 与 Node 映射均已完成。M4 有正式证据,其他 Apple Silicon 开放实验兼容;macOS x64 release smoke 未通过 Core ML OCR parity,因此 0.3.0 x64 runtime descriptor 只暴露 CPU。 | | Perf-2 / Native WebGPU | Production-qualified / two device Gates passed | Linux x64 glibc/Vulkan 与 Windows x64/D3D12 使用 official ORT Core 1.24.4 + WebGPU Plugin EP 0.1.0。NuGet bytes/SHA-512、headers、runtime/plugin/companions、license 和 session options 已锁定;assembler 支持在线取得、离线复装和 exact SDK 校验。C++/Node plugin registration、D112 `webgpu → cpu`、typed/fatal failure、FP32 allow/strict、真实 provider chain、profiling、schema 2 descriptor、sterile loader、self-contained npm staging、license/SBOM 和双平台 CI 已实现。Linux RTX 5060 Ti/Vulkan 与 Windows Radeon 780M/D3D12 报告均为 164/164 Gate 通过、14/14 FP32 字节级质量对齐;聚合 P50 分别加速 5.698× 与 2.436×。已审阅 report/artifact hashes 已绑定 production lock,release configure 仅接受精确匹配的 SDK。 | | Node.js JPEG/PNG 内存输入 | Done / `0.2.0` published | `recognizeEncoded(Uint8Array)` 在 engine worker 上使用固定 stb revision 解码,保持 Core raw-pixel 边界;格式、尺寸、pixels、临时内存、queue/snapshot budget、AbortSignal 与 `timingUs.decode` 均有四平台 Node 22/24 package 测试。 | @@ -72,6 +72,6 @@ ## 发布结论与后续范围 -`0.2.0` 的四平台 Core、Node.js 22/24 prebuild、六包确定性制品、public registry、provenance、默认 `createEngine()`、显式 tiled 和禁网运行证据已经完成,详见 [npm 0.2.0 发布记录](releases/npm-0.2.0.md)。 +`0.3.0` 的四平台 Core、Node.js 22/24 prebuild、六包制品、public registry、provenance、默认 Auto、显式 Apple/WebGPU、tiled 和禁网运行证据已经完成,详见 [npm 0.3.0 发布记录](releases/npm-0.3.0.md)。 普通 push、PR 和 release workflow 均不运行 benchmark。后续只有 Core/model/ORT/compiler/thread policy/runner class 变化、准备公开新性能数字或调查疑似回归时,才显式重新运行 qualification 并 review 新 baseline。0.1.0 的历史记录与制品保持不变。 diff --git a/docs/npm-packaging.md b/docs/npm-packaging.md index e5511cc..cf5a48c 100644 --- a/docs/npm-packaging.md +++ b/docs/npm-packaging.md @@ -1,6 +1,6 @@ # @arcships/light-ocr npm Package Design -状态:六包设计与 `0.2.0` lockstep 发布已完成;0.3.0 Apple/WebGPU native superset bundle release candidate 已接入同一流程
+状态:六包设计与 `0.3.0` Apple/WebGPU native superset bundle 已完成 lockstep 发布,并提升为 npm `latest`
更新时间:2026-07-19
Authority:npm 包名、包拆分、依赖关系、内置模型、版本与发布门槛
Node API:[napi-design.md](napi-design.md)
@@ -9,7 +9,7 @@ Decision:[decisions.md](decisions.md) D105 0.2.0 继续使用本文六包 lockstep 规则,并强校验 schema 1.2、`tiled-v1`、新 bundle ID、minimum package version,以及 native package 中 JPEG/PNG decoder 的 license/SBOM identity。额外的类型、四平台基线和发布证据见 [Tiled Detection 技术设计与验收规格](tiled-design-and-acceptance.md)。这些增量不改变已发布 `0.1.0` 的不可变包内容。 -0.3.0 候选不增加第七个包或第二个安装入口。model package 改为 +0.3.0 不增加第七个包或第二个安装入口。model package 使用 `ppocrv6-small-native-20260719.1` 自包含 superset:所有平台继续使用其中的 ONNX FP32 CPU/WebGPU payload;锁定的 WebGPU FP16 variants 仅作为内部可复现工件保留; macOS 15+ arm64 使用 `open-macos` 策略并可显式请求 Core ML;`validatedDeviceFamilies` 只标记已有真机证据,不阻塞其他 Apple Silicon 的实验兼容。macOS x64 package 保持 CPU-only,因为发布 smoke 未能通过 Intel Core ML OCR parity。 @@ -39,7 +39,7 @@ const engine = await createEngine(); - engine 创建和识别期间不访问网络,不执行 shell,不运行下载脚本,也不读取 cwd 或用户环境变量来寻找模型。 - `bundlePath` 继续作为显式高级覆盖入口,用于开发、测试或私有 bundle;它不是正常使用的前置配置。 -模型会增加 npm 安装流量和磁盘占用,但不会产生安装后的第二次下载。`0.2.0` model tarball 为 26,091,308 bytes,解包后 package 为 31,333,440 bytes;完整 hash 与 registry integrity 见[发布记录](releases/npm-0.2.0.md)。 +模型会增加 npm 安装流量和磁盘占用,但不会产生安装后的第二次下载。`0.3.0` model tarball 为 52,529,117 bytes,解包后 package 为 73,594,252 bytes;完整 hash 与 registry integrity 见[发布记录](releases/npm-0.3.0.md)。 ## 2. 包集合与依赖图 @@ -48,7 +48,7 @@ const engine = await createEngine(); | 包 | 类型 | 内容 | 安装关系 | | --- | --- | --- | --- | | `@arcships/light-ocr` | facade | CJS、ESM、TypeScript types、平台与模型解析器 | 用户直接安装 | -| `@arcships/light-ocr-model-ppocrv6-small` | model | 0.2.0 为 CPU bundle;0.3.0 候选为包含同一 FP32 ONNX payload、锁定的内部 WebGPU FP16 派生工件与 Core ML FP16 工件的 `ppocrv6-small-native-20260719.1`、模型 license、可解析 manifest;WebGPU 公共执行 profile 只发布 FP32 | facade 的普通 dependency | +| `@arcships/light-ocr-model-ppocrv6-small` | model | 0.3.0 包含同一 FP32 ONNX payload、锁定的内部 WebGPU FP16 派生工件与 Core ML FP16 工件的 `ppocrv6-small-native-20260719.1`、模型 license、可解析 manifest;WebGPU 公共执行 profile 只发布 FP32 | facade 的普通 dependency | | `@arcships/light-ocr-darwin-arm64` | native | arm64 `.node`、ONNX Runtime dylib、licenses、SBOM、hashes | facade 的 optional dependency | | `@arcships/light-ocr-darwin-x64` | native | x64 `.node`、ONNX Runtime dylib、licenses、SBOM、hashes | facade 的 optional dependency | | `@arcships/light-ocr-win32-x64` | native | x64 `.node`、`onnxruntime.dll`、licenses、SBOM、hashes | facade 的 optional dependency | @@ -77,7 +77,7 @@ v1 不提供无模型的 `core`/`lite` 入口,也不允许用户单独拼装 f ```json { "name": "@arcships/light-ocr", - "version": "0.2.0", + "version": "0.3.0", "license": "Apache-2.0", "type": "commonjs", "main": "./js/index.cjs", @@ -93,13 +93,13 @@ v1 不提供无模型的 `core`/`lite` 入口,也不允许用户单独拼装 f "files": ["js/", "README.md", "LICENSE", "NOTICE"], "engines": { "node": "^22.0.0 || ^24.0.0" }, "dependencies": { - "@arcships/light-ocr-model-ppocrv6-small": "0.2.0" + "@arcships/light-ocr-model-ppocrv6-small": "0.3.0" }, "optionalDependencies": { - "@arcships/light-ocr-darwin-arm64": "0.2.0", - "@arcships/light-ocr-darwin-x64": "0.2.0", - "@arcships/light-ocr-linux-x64-gnu": "0.2.0", - "@arcships/light-ocr-win32-x64": "0.2.0" + "@arcships/light-ocr-darwin-arm64": "0.3.0", + "@arcships/light-ocr-darwin-x64": "0.3.0", + "@arcships/light-ocr-linux-x64-gnu": "0.3.0", + "@arcships/light-ocr-win32-x64": "0.3.0" }, "publishConfig": { "access": "public" } } @@ -133,7 +133,7 @@ Facade 同时导出 CJS、ESM 和 `.d.ts`,但两种模块格式共享同一个 ```json { "name": "@arcships/light-ocr-model-ppocrv6-small", - "version": "0.2.0", + "version": "0.3.0", "license": "Apache-2.0", "files": ["bundle/", "README.md", "LICENSE", "NOTICE"], "exports": { @@ -156,7 +156,7 @@ Facade 在创建 engine 前读取 manifest,并核对 `bundleId` 是否等于 ```json { "name": "@arcships/light-ocr-linux-x64-gnu", - "version": "0.2.0", + "version": "0.3.0", "license": "Apache-2.0", "main": "./native/light_ocr_node.node", "exports": { ".": "./native/light_ocr_node.node" }, @@ -263,7 +263,7 @@ dist/npm/ `@arcships` scope 必须已由发布账号或组织控制。scoped package 的发布清单固定 `publishConfig.access: public`,发布流程也显式使用 public access,避免 scope 默认私有策略造成误配置。 -2026-07-14 的 0.1.0 首发证明发布身份控制 `@arcships` scope;同日 0.2.0 workflow 继续以 npm provenance 发布六包,经独立 promotion job 逐包核对 registry integrity 后提升到 `latest`。 +2026-07-14 的 0.1.0 首发证明发布身份控制 `@arcships` scope;同日 0.2.0 workflow 继续以 npm provenance 发布六包。2026-07-19 的 0.3.0 release 在四平台 Node 22/24 与禁网验证后发布六包,并经独立 promotion job 逐包核对 registry integrity 后提升到 `latest`;完整记录见 [npm 0.3.0 发布记录](releases/npm-0.3.0.md)。 相关 npm 官方行为依据: diff --git a/docs/releases/npm-0.3.0.md b/docs/releases/npm-0.3.0.md new file mode 100644 index 0000000..0010d13 --- /dev/null +++ b/docs/releases/npm-0.3.0.md @@ -0,0 +1,82 @@ +# npm 0.3.0 发布记录 + +发布日期:2026-07-19
+发布 commit:`7665b15122b9e031c4cca16a528d8739694ec632` + +版本:`0.3.0` + +协议:Apache-2.0 + +## 面向使用者的变化 + +- `createEngine()` 默认从 CPU 改为平台 descriptor 驱动的 Auto:macOS arm64 按 `apple → cpu`,Linux x64 与 Windows x64 按 `webgpu → cpu`,macOS x64 使用 CPU。 +- macOS 15+ arm64 新增 Direct Core ML。Apple provider 使用已验证的 FP16 路径;M4 有正式设备证据,其他 Apple Silicon 走开放兼容路径但不继承性能承诺。 +- Linux x64/Vulkan 与 Windows x64/D3D12 新增 official Native WebGPU Plugin EP。公开 WebGPU precision 只接受 `auto`/`fp32`,并显式限制 `Concat`、`Gather`、`Slice` 的 CPU partition。 +- 六包安装结构不变:一个 facade、一个模型包、四个平台 native 包;安装与首次运行不下载 provider、模型或编译原生代码。 +- `engine.info.execution` 新增 session placement、provider/runtime/qualification identity、adapter、precision、`deviceValidated` 和 Auto creation trace。 + +## API 与兼容性 + +- Node.js `ExecutionProvider` 增加 `auto`、`apple`、`webgpu`;C++ enum 增加 `automatic`、`apple`、`webgpu`。 +- 显式 provider 是严格单后端请求,不会静默回退。只有 Auto 可以在创建阶段按 descriptor 锁定的 typed failure 继续下一个候选。 +- 旧 `sessionFallback: "cpu"` 返回 `invalid_argument`;继续使用 `sessionFallback: "error"`,或直接省略让 Auto 管理创建候选。 +- Apple FP16 与 WebGPU FP32 使用不同的资格路径。WebGPU `precision: "fp16"` 不属于 0.3.0 公共 API。 +- macOS x64 发布 smoke 未复现锁定的 Core ML OCR 结果,因此 0.3.0 descriptor 仅暴露 CPU。 + +## 性能与质量 + +所有数字都是表中设备上的同机 CPU 对照,不外推到其他设备或 driver。 + +| Provider 与记录设备 | 已记录的端到端结果 | 质量与 Gate | +| --- | ---: | --- | +| Apple/Core ML,Apple M4 Max | `HELLO 123` 2.300×;XFUND 2.851× | 14 fixtures 通过锁定的 CPU parity 阈值 | +| WebGPU/Vulkan,NVIDIA RTX 5060 Ti | 14-fixture 聚合 P50 5.698×;单项 3.474×–9.299× | 14/14 与 CPU FP32 字节级一致;164/164 Gate | +| WebGPU/D3D12,AMD Radeon 780M | 14-fixture 聚合 P50 2.436×;单项 1.277×–2.982× | 14/14 与 CPU FP32 字节级一致;164/164 Gate | + +Apple 结果对比最多 12 intra-op threads 的 `cpu_fast` profile;`HELLO 123` 与 XFUND 的 warm P50 分别从 19.774/943.627 ms 降至 8.599/331.011 ms,宿主 OCR 进程 CPU time 分别降低 95.91%/97.67%。14 个 fixture 的字符相似度为 99.6484%,detection recall 为 100%,平均 matched IoU 为 99.5508%;这是 CPU parity,不是独立 ground-truth accuracy。 + +WebGPU 聚合值为锁定 14-fixture corpus 的 `sum(CPU P50) / sum(WebGPU P50)`。两份报告还通过 cold start、native C++、memory、placement、strict rejection 和 repeated-lifecycle Gate;Windows lifecycle 最终比预热后基线低 22.9 MiB。 + +## 发布与验证证据 + +- [完整 dry-run 29694938140](https://github.com/arcships/light-ocr/actions/runs/29694938140):四平台构建、Windows 生命周期、确定性模型派生、六包 staging、临时 registry,以及 Node.js 22/24 的八组 package tests 全部成功。 +- [npm release run 29695763892](https://github.com/arcships/light-ocr/actions/runs/29695763892):在相同 commit 上复跑同一 release gate,以 npm 11 + provenance 按依赖优先、facade 最后的顺序把六包发布到 `next`,并完成 registry 与禁网复验。 +- [npm promotion run 29696646354](https://github.com/arcships/light-ocr/actions/runs/29696646354):复用 release artifact,逐包核对公开 registry integrity,再按依赖优先、facade 最后提升到 `latest`。 +- 最终公开查询确认六包的 `next` 与 `latest` 均指向 `0.3.0`。 + +发布前不重复运行真机 benchmark;reviewed Apple/Linux/Windows qualification 由 production lock 精确绑定。完整 dry-run 必须保留,因为它同时验证四平台可安装产物、默认 Auto OCR、显式 provider、Node 22/24、registry 和禁网边界。 + +## 不可变制品 + +以下数据来自 release run 保存的 `release-manifest.json`;manifest SHA-256 为 `d13e31d100b5b2d50b8ba47275714bbf7d2fa8521d77fdd2acb78b70f71a83b0`,`gitRevision` 为发布 commit,registry 的 `dist.integrity` 已逐包复核一致。 + +| Package | Tarball bytes | Unpacked bytes | SHA-256 | +| --- | ---: | ---: | --- | +| `@arcships/light-ocr` | 13,564 | 49,111 | `5204dc33615ec0894a39c8ddc89f67e9d1ea0356a658431eb719bad254ce4fcb` | +| `@arcships/light-ocr-model-ppocrv6-small` | 52,529,117 | 73,594,252 | `80048aec12f89348ace1ca84b34318ae251a7d0d47057d4fa36833476e0dccd8` | +| `@arcships/light-ocr-darwin-arm64` | 12,067,180 | 39,987,242 | `8e98b5bf36de7e9cfd17c626a18ecdf6a1134b30eb1da7364a95b500493f6ad0` | +| `@arcships/light-ocr-darwin-x64` | 13,996,604 | 46,021,373 | `2e0273a0364caaf8dc974ee733aa0eb925dcfc15e441314a3695151b76549550` | +| `@arcships/light-ocr-linux-x64-gnu` | 16,306,936 | 44,149,803 | `49dd721256567bf65bd279b3767ad6968f7dfad20f81ecec323322d5cc071ae0` | +| `@arcships/light-ocr-win32-x64` | 19,298,217 | 47,080,383 | `40249eac4280504a30abf32c20e381911749761ccce3c628b2323bd342d34894` | + +Registry integrity: + +```text +@arcships/light-ocr +sha512-rTKUW08XHPxxRpPCxcyk4G4OOv/uPUu0VWVn2nzAs1PqDkLGQAvGdmiGGOrUAoc4CjbZwMcgwQsK+Zws4ARfXA== + +@arcships/light-ocr-model-ppocrv6-small +sha512-vKUzIzsJSb8/nZ7pv9u9hS4lelaPubgmi/kINPMC1aCydBZovTUSV5NpbDkvVq1rmDww2Xg8rPE5ecCQqA1OVQ== + +@arcships/light-ocr-darwin-arm64 +sha512-+rKbx8Du6V8t6xjCYLK6vYCdkYezFtxt3cQxfSn/+r6hw5Q8imsqNbyLqM4I7G4twfhKTJUOoadfauBm/hVm3Q== + +@arcships/light-ocr-darwin-x64 +sha512-VJh+GeLGiNPIWQ1yOAvHBhPFVNd6GLORrG72Z0alNf79JAUx0RWD9N1phHifHmxcseT6VgXEbK6q/d1rktUjpw== + +@arcships/light-ocr-linux-x64-gnu +sha512-oxvYcvENpdxxfMVoZQWXwoZ1i0DNFkIZoNJR18gAjm6JVK8loq7UzGpeAuvg1uyd89gQqjaWKlRABLP0DQb9wQ== + +@arcships/light-ocr-win32-x64 +sha512-1Aih7zeUNfmgLUGwWtJwAQ916QPQjOUS32i8s/v5ijhD38xQRJQ5+WuKiIAstZwsD5RQKxlXxwo6sWMMqv6H8w== +```