# @exige/web-scanner-sdk 中文文档

规范地址：https://npmcn.com/package/%40exige/web-scanner-sdk/

版本：0\.2\.49
npm 元数据更新时间：2026-11-05T23:21:00.944Z
中文译文更新时间：2026-11-14T03:34:44.121Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40exige/web-scanner-sdk
原文对照：https://npmcn.com/package/%40exige/web-scanner-sdk/?lang=original

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：67.3 MB，80 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- 运行依赖：3 个
- peer 依赖：react \>=18
- 首次发布：2026-09-25T22:10:26.717Z
- 最新版本发布：2026-11-05T23:21:00.742Z
- 近 30 天下载量：3381（2026-10-14 至 2026-11-12，npm 官方下载统计）
- 已发布版本数：41（近 12 个月 41 个）

## 中文简介

@exige/web-scanner-sdk是一个客户端的网络文档扫描器SDK. 文档查找、 OCR 和编辑在浏览器中运行 。 车辆和车牌识别在顶层的浏览器中运行. 公开演示是唯一不需要账户的路径. A 类

## 安装

```sh
npm install @exige/web-scanner-sdk
```

也可以使用：`pnpm add @exige/web-scanner-sdk`、`yarn add @exige/web-scanner-sdk`、`bun add @exige/web-scanner-sdk`

## README

# 网络扫描器 SDK

`@exige/web-scanner-sdk` 是客户端网络文档扫描器SDK。 文档查找、 OCR 和编辑在浏览器中运行 。 车辆和车牌识别在顶层的浏览器中运行. 公开演示是唯一不需要账户的路径. 您控制的主机名需要签名许可密钥 .

-   [产品](https://exige-scanner-sdk-docs.vercel.app/product)
-   [定价](https://exige-scanner-sdk-docs.vercel.app/pricing)
-   [扫描机比较](https://exige-scanner-sdk-docs.vercel.app/compare/scanbot)
-   [动态软件比较](https://exige-scanner-sdk-docs.vercel.app/compare/dynamsoft)
-   [财务问题](https://exige-scanner-sdk-docs.vercel.app/faq)

所有图像处理都发生在浏览器中. 相机、发现器、扫描、OCR、编辑、车辆探测和火炬需要签名的许可证钥匙(`setLicenseKey`) (中文(简体) ). 发行密钥是一个单独的 Next.js app in [`license-portal/`](https://npmcn.com/package/%40exige/web-scanner-sdk/license-portal/README.md),不是 npm 软件包的一部分.

## 公共 API

```ts
import {
  cropDocument,
  mapDocumentCornersToFrame,
  recognizeText,
  redactProgrammatically,
  setLicenseKey,
  startCamera,
  startFinder,
} from '@exige/web-scanner-sdk'

const licenseKey = '<signed key from the license desk>'
await setLicenseKey(licenseKey)
const video = document.querySelector('video')!
const session = await startCamera(video)
const finder = await startFinder({
  source: video,
  autoCapture: 'defaultOn',
  onCapture: async ({ frame, detection }) => {
    if (!detection?.corners) return
    const corners = mapDocumentCornersToFrame(
      detection.corners,
      { width: detection.sourceWidth, height: detection.sourceHeight },
      { width: frame.width, height: frame.height },
    )
    const scan = await cropDocument(frame, corners)
    if (scan.status !== 'success' || !scan.canvas) {
      console.warn(scan.message)
      return
    }
    const ocr = await recognizeText(scan.canvas, {
      language: 'eng',
      minConfidence: 0.5,
      includeWords: true,
    })
    const redaction = await redactProgrammatically(scan.canvas, {
      ocr,
      rules: [
        { id: 'name', strategy: 'string', mode: 'case-insensitive', values: ['Taylor Morgan'] },
      ],
      style: { mode: 'blackout' },
    })
    console.log(redaction.status, ocr.words?.[0])
  },
})
```

每个API接受浏览器图像源(`Blob`, (中文(简体) ), `HTMLImageElement`, (中文(简体) ), `HTMLCanvasElement`,或 `ImageBitmap`),并导出 TypeScript 结果类型.

`minConfidence` 使用规范化 `0–1` 缩放和默认值 `0.5`。单词和字符独立过滤; `text` 由保留字段重建,总体 `confidence` 是他们的算术刻薄。 当每个字都低于门槛时, 文字是空的,信心是 `0`。 OCR 框提取为选入 : `includeWords` 财务报告和审定财务报表 `includeCharacters` 默认为 `false` 并可以独立启用。 返回的边框在传递到的确切输入画布中使用像素坐标 `recognizeText`; 扫描后通过 `scan.canvas` 因此,框映射直接到视图校正的裁剪. `OcrResult` 总是包括过滤 `text`, (中文(简体) ), `confidence`, (中文(简体) ), `language`, (中文(简体) ), `imageWidth`,以及 `imageHeight`,带有过滤器 `words` 和(或) `characters` 只有在接到请求时.

识别将原色裁剪上的宇宙汽车与 Sparse 文本合并 将整页照明平整,然后应用 当地(布拉德利-罗斯)阈值。 不使用单页 Otsu 剪接: a 软照明梯度 要么涂上阴影 要么被点燃的纸作墨水. 框被映射回原始坐标, 重叠复制到 更希望有更高的自信, 并空间调整顺序。 独立的标点 和几何或视而不见的框在 置信过滤器,防止图形片段成为文本同时 恢复孤立的显示词 .

`shadowPass` 默认为 `true`。12x12网格查找连接的暗纸 包括通常布局的中央或相抵布局 电话和手放在灯光下 细规则和孤立的艺术品 不符合区域/印刷外接试验。 可选的瓦片被打开 光线和标志性的质量 里面的blob, 不在接受的字数,所以 一个遮蔽的角落 装满92%的垃圾 仍然得到一个平坦的再读。 瓷砖 被用同样平整平整的灰度 来裁剪 通过。 框映射在正常合并前返回原始裁剪坐标 和拒绝管道。 最坏的情况是一块有界限的瓦片识别 没有合格荫影工资,只有72×72分析样本. `OcrResult.diagnostics` 报告传球是否运行、其强度和 原-像素阴影区域.

## 程序编辑

开发者可以结合字符串,相邻的标签,规范化模板矩形,以及模板锚定规则. 通过先前的单词级别 OCR 以避免第二次 OCR 的通过 :

```ts
const result = await redactProgrammatically(scan.canvas, {
  ocr,
  rules: [
    { id: 'name', strategy: 'string', mode: 'case-insensitive', values: ['Taylor Morgan'] },
    { id: 'dob', strategy: 'label', label: 'DOB', direction: 'any' },
  ],
  template: {
    id: 'badge-v2',
    fields: [
      { id: 'photo', strategy: 'rect', rect: { x: 0.05, y: 0.12, width: 0.28, height: 0.52 } },
    ],
  },
  style: { mode: 'blackout' },
  requireAll: true,
})

if (result.status === 'unmatched') {
  console.warn(result.unmatchedRuleIds) // no canvas/blob in fail-closed mode
}
```

使用 `matchRedactionRules` 预览与几何相匹配,而不改变像素. `applyRedactions` 是您已经拥有的可信区域的像素画家 。 自己通过那些矩形。 没有公众 `redact()` 用于最终用户绘图工具.

无标签和编码的ID可以使用语义规则. 逻辑查找是默认的 。 ML 查找是一个单独的规则 `detector: 'model'`;加载一个字段模型不会取代逻辑规则.

```ts
const result = await redactProgrammatically(scan.canvas, {
  ocr,
  rules: [
    { id: 'name', strategy: 'semantic', field: 'person_name' },
    { id: 'ml-name', strategy: 'semantic', field: 'person_name', detector: 'model' },
    { id: 'dob', strategy: 'semantic', field: 'date_of_birth' },
    { id: 'address', strategy: 'semantic', field: 'address' },
  ],
  models: { fields: '/models/id-fields-yolox-nano.onnx', fieldLayout: 'yolox' },
  requireAll: true,
})
```

逻辑规则使用device AAMVA别名,ICAO MRZ证据,符号验证,和保守版式前作. `detector` 实值 `'logical' | 'model'` 默认为 `'logical'`. 示范规则使用Apache-2.0 YOLOX-Nano(`models.fieldLayout: 'yolox'`,解码输出 `[1, 8400, 12]`) (中文(简体) ). 所提供模型被懒惰地装入,其盒会选择通过字段符号检查的OCR字. 如果文件无法装入, `allowHeuristicFallback` (default true) 让模型规则使用逻辑查找和报告 `modelStatus: 'fallback'`. 弃权 `fieldLayout` 仍然解码 YOLOv8 `[1, classes+4, anchors]`。 。 。 .

演示中有一个训练有素的检查站 `/models/id-fields-yolox-nano.onnx`。 。 。 . **语义字段编辑** 运行逻辑查找而不下载模型. **ML 字段编辑** 装入文件 `fieldLayout: 'yolox'`控制可以单独进行,也可以同时进行. `openCamera` 不获取字段权重, Npm 软件包不下载。 呼叫通过 `models.fields` 他们自己。 该文件在官方的MIDV-500图像上进行了微调,后又在官方的MIDV-2020模板上进行了微调. MIDV-2020 搁置是模板样本 ids 90–99 (标签) [mAP@ 0](mailto:mAP@0.5) 联合国 这和合成的val是分开的 [mAP@ 0](mailto:mAP@0.5) 0.998)和从早先的MIDV-500文档中41–50分0.117. 这些重量在同一个MIDV-500分数上得分为0.075分. `postal_code` 财务报告和审定财务报表 `state` 没有MIDV-2020盒。 相片和扫描档案不标记 SDK 字段 .

**脸部校正** 分别。 过 `models.face` 改为 `redactProgrammatically`。该选项在 `/models/id-face-yolox-nano.onnx`单级YOLOX-Nano(`[1, 8400, 6]`) (中文(简体) ). 被探测到的相貌矩形在图像上被黑出. 它们不是OCR的单词,这种控制不会改变七等场模型. `openCamera` 不下载。 重量从模板,相片和扫描中被培训到MIDV-2020的官方面相矩. 标本编号90-99 `training/yolox-fields/face-holdout-metrics.json` (单位:千美元)[mAP@ 0](mailto:mAP@0.5) 0.934,机会0.099). 这是模拟文件的分拆,而不是对其他身份证件的声称.

`detectDocument` 运行 DocAligner 并返回命令 `DocumentQuad` 与 `topLeft`, (中文(简体) ), `topRight`, (中文(简体) ), `bottomRight`, (中文(简体) ), `bottomLeft`键入 `top`, (中文(简体) ), `right`, (中文(简体) ), `bottom`,以及 `left` 线段。 结果是 `success`, (中文(简体) ), `no-document`, (中文(简体) ), `low-confidence`,或 `low-quality`。 。 。 . `scanDocument` 用同一个四角进行投影视角曲面,并将四角包括在结果中.

在触摸/移动类设备上,分析默认为560px工作图像(当页高时长边缘为1280px),并在支持时在模块Worker中运行. 透视输出默认上限为4096px, 与远程内存封顶相同 `capturePhoto()`覆盖 `maxAnalysisDimension`, (中文(简体) ), `maxOutputDimension`,或 `useWorker` 内 `ScanOptions` 需要的时候。 颜色 `takePhoto()` 无法匹配Android相机应用(没有 HDR+ / OEM ISP). 关于Android, `ScannerProvider` `captureMode="auto"` (默认)打开相机应用程序通过 `pickNativeCameraStill()` 尽快 `open` 从用户的手势变为真实——没有应用中的快关。 礛 `scanSystemCameraStill()` 庄稼是最显著的文档。 设定 `open` 在与主机按钮相同的点击中。 想要在Android Pass上进行直播的主持人 `captureMode="live"`。强制任何平台上的拾取者使用 `captureMode="system-camera"`。 。 。 .

## 现场搜索和自动抓取

使用真实的视频/流或无相机的画布模拟器:

```ts
const simulator = createFinderSimulator(canvas)
simulator.start()

const finder = await startFinder({
  source: canvas,
  autoCapture: 'defaultOn',
  onStatus: ({ state, quad, guidance }) => {
    renderOverlay(state, quad)
    instruction.textContent = guidance.hint
  },
  onCapture: async ({ frame, detection }) => {
    if (!detection?.corners) return
    const corners = mapDocumentCornersToFrame(
      detection.corners,
      { width: detection.sourceWidth, height: detection.sourceHeight },
      { width: frame.width, height: frame.height },
    )
    const scan = await cropDocument(frame, corners)
  },
})
```

自动抓取模式完全相同 `defaultOn`, (中文(简体) ), `defaultOff`, (中文(简体) ), `alwaysOn`, (中文(简体) ), `alwaysOff`,以及 `only`。默认模式显示可变的最终用户复选框;总是模式隐藏它. `only` 强制自动抓取,隐藏复选框,并隐藏手动抓取按钮. `alwaysOn` 仍然显示手动抓取按钮. `setAutoCapture()` 返回虚伪 `only`高度自信、稳定的生角、限制轴上72%的填充量、1.5%的边缘清除量和可接受的视角,才能自动断裂。 之后,发现者仍然等待一秒钟(`holdStillMs`,默认为1000ms),所以在用户仍在调整时没有捕获一个刚刚找到的页面. 丢失或不稳定的正弦重置计时器 。 百叶窗上面的上方芯片说 **别动** (无 3–2–1); 框使用 `readyColorHex` 在扣留期间。 手动抓取不会等待。 Android系统-相机路径没有活盒. 填充是四面体宽度和高度填充量中较大的一个,所以一个已经填充了长轴的高收发或宽度登机口已经准备好,而不是被告知要更靠近;高视度文件则需要那长相的80%. 分出,出站下限通过普通手动保持平稳状态. `FinderStatus.guidance` 显示一个终端用户提示——将文档放置在位置上,走得更近,走得更远,保持相机直线,或保持静止——加上其打出的理由、限制轴填充比例和每轴 `fill` 崩溃。 手动抓取总是通过 `finder.capture()`。 。 。 .

### ML 角检测

文件查找总是使用DocAligner LCNet100. `detectDocument`, (中文(简体) ), `scanDocument`,以及 `startFinder(...).detection` 负载 Exige 的可活性,默认情况下由 CORS 启用的 CDN 模型. 奥米 `modelUrl`中,推论或几何故障仍为 `modelStatus: "failed"`。工人启动投掷 `ScannerError` 有代码 `worker`。一个失败的 DocAligner HTTP 响应抛出 `ScannerError` 有代码 `model-http`。发现者既捕捉又报告 `modelStatus: "failed"` 所以摄影机保持上升。 一个不好的形象 `no-document`, (中文(简体) ), `low-confidence`,或 `low-quality` 而不掷出.

懒惰的工人 `onnxruntime-web` (按外接;不缩合为: `scanner-sdk.js`),在WebKit的WebGPU上运行 DocAligner,当 `navigator.gpu` 被曝光(如果会话失败或热映射为空的WASM),并且只将WASM保留在Android上,重复使用会话,以及IndexedDB中的缓存模型字节加上浏览器缓存. JSEP原是和它的胶水`ort-wasm-simd-threaded.jsep.wasm` 财务报告和审定财务报表 `ort-wasm-simd-threaded.jsep.mjs`货包里有船 文档查找以文字加载 `new URL` 当主机捆绑者发出它们时呼叫。 下个 `next dev --turbo` 不复制这些兄弟姐妹 `onnxruntime-web@1.30.0` 在 Exige 演示 CDN 或 jsDelivr 上。 主机应用程序不复制 `/ort/` 或设置 `ortWasmPaths` 用于默认路径。 奥米 `ortWasmPaths`。仅通过它来替换这些文件:字符串是一个包含两者的目录,或者一个对象 `{ wasm, mjs }` 设置每个 URL。 404重覆仍会掉回针上 DocAligner的权重保留在CDN上,相邻的Apache-2.0属性,只被复制到演示构建中. 见 [VitePress ML 探测器指南](https://npmcn.com/package/%40exige/web-scanner-sdk/site/guide/ml-document-detector.md)。 。 。 .

### 全屏反相机

该演示由一个提供者的反相相机和查看部件组成:

```tsx
import { setLicenseKey } from '@exige/web-scanner-sdk'
import {
  ScannerControls,
  ScannerFrame,
  ScannerNotice,
  ScannerPreview,
  ScannerProvider,
  ScannerQuad,
  ScannerStatus,
  ScannerTopBar,
} from '@exige/web-scanner-sdk/react'
import '@exige/web-scanner-sdk/camera-overlay.css'

await setLicenseKey(licenseKey)

<ScannerProvider
  open={cameraOpen}
  autoCapture="defaultOn"
  onCancel={() => setCameraOpen(false)}
  onCapture={({ frame, method, settings, displayedQuad }) => {
    console.log(method, settings.width, settings.height)
    return processFullResolutionFrame(frame, displayedQuad)
  }}
>
  <ScannerFrame style={{ position: 'fixed', inset: 0 }} title="Scan a document">
    <ScannerPreview />
    <ScannerQuad />
    <ScannerTopBar title="Scan a document" />
    <ScannerNotice />
    <ScannerStatus />
    <ScannerControls />
  </ScannerFrame>
</ScannerProvider>
```

`useScanner()` 阅读提供者内部的会话. `useScannerRef()` 给父母一个必须的手柄,通过为 `apiRef`和MUI一样 `useGridApiRef`. 相机覆盖了取景口,尊重安全区域,显示发现者/允许/错误状态,并保持现有的自动抓取政策. 关于Android, `captureMode="auto"` 跳过直播预览并立即打开系统相机应用 `open` 从用户手势变为真实; DocAligner 然后在 JPEG 上找到最突出的文档。 误入屏幕 **再试一次**iOS保持直播覆盖和自动抓取. `useCase="drivers-license"` 从 PDF417 条码返回 AAMVA 字段(`onDriverLicense`) (中文(简体) ). 它没有叫 `onCapture`。见 [驾驶证](https://npmcn.com/package/%40exige/web-scanner-sdk/site/guide/drivers-license.md)。 。 。 . `useCase="vehicles"` 财务报告和审定财务报表 `useCase="plates"` 使用已恢复的车辆/平板查找器(`watch` 或已运出的YOLO11n型号),并仍在呼叫 `onCapture`。通过 `vehicleRearGuide` (单位:千美元)`true` 用于包装后轿车,或自定义的SVG/PNG URL)并渲染 `ScannerVehicleGuide` 介于 `ScannerPreview` 财务报告和审定财务报表 `ScannerQuad`。见 [车辆和车牌](https://npmcn.com/package/%40exige/web-scanner-sdk/site/guide/vehicles.md). 活道请求一个理想的4K后相机流(No 1080×1920 Android cap),在预览中显示该流,并连续地镜像上个非黑框. 在 WebKit 外部, 实时抓取用途 `ImageCapture.takePhoto()` 最大相片大小, 当其侧面与预览不同时保持平稳; 仍长于4096px的缩放为高质量的平滑。 网络Kit `takePhoto()` 返回黑色静态,因此 iOS 复制了现场预览或镜像框。 一个真正空白的捕捉失败, 而不是导出黑色像素 。 Finder 分析保留在520–1600的工作副本上. 渲染器 `ScannerDiagnostics` 用于具有引擎/浏览器、视频和音轨状态、亮度和所选捕捉路径的活性诊断面板; **复制报告** 贴上百叶窗时间的垃圾堆以获取支持 。 过 `theme` 改为 `ScannerFrame` 要重新显示相机. `primaryColorHex` 替换黄绿色口音(`#c8ff45`) (中文(简体) ). `seekingColorHex` 财务报告和审定财务报表 `detectingColorHex` 是等待框的颜色(均为 `#ef6a5b` 除非被分开, `unstableColorHex` 实值 `#ffbe40`, (中文(简体) ), `readyColorHex` 实值 `#8af25a`,以及 `capturedColorHex` 实值 `#ffffff`关闭 `theme` 或保留默认值的任何字段。 这个 [反应相机指南](https://npmcn.com/package/%40exige/web-scanner-sdk/site/guide/react-camera-overlay.md#theme) 列出每个字段的画作。 演示源屏幕在相机启动和通过调色板前选择默认、海洋、紫罗兰或信号 `theme` 打开 `ScannerFrame`。捕捉结果包括显示的四和其范围分析维度 `mapDocumentCornersToFrame()` 加号 `cropDocument()` 所以最后的收成 符合屏幕上的内容。 根包中仍可提供无框架的必要API.

## 运行演示

```bash
npm install
npm run dev
```

打开 [http://localhost:43127 (英语)](http://localhost:43127/)上传 PNG/JPEG/WebP 或使用移动相机,然后检测和裁剪、运行OCR、检查检测建议、应用开发商编辑规则并导出结果。 没有绘图工具. **寻找** 在文件或相机之前选择文档、平板或车辆. **平板扫描仪** (只有车辆)抓住车辆,然后寻找车上的一个车牌. **驾驶证** 运行双侧 AAMVA 流并打印管辖权,到期后,其余的字段.

```bash
npm test
npm run typecheck
npm run build
```

## 两栋楼:图书馆和演示

该寄存器从同一个来源产生出两个独立的捆绑. 演示进口 `src/index.ts`,准确的公开条目公布为 `@exige/web-scanner-sdk`,因此所部署的应用软件可以练习开发者向上的API.

| 命令 | 配置 | 产出 | 目的 |
| --- | --- | --- | --- |
| `npm run build:lib` | `vite.config.ts` | `dist/` | 虚拟库模式:无害环境管理捆绑 `dist/scanner-sdk.js` 加号 `.d.ts` 声明. `tesseract.js`, (中文(简体) ), `onnxruntime-web`,以及 `zxing-wasm` 保持对外。 该套装复制了魔方工人,三个LSTM核心,英语训练数据,ONNX Runtime JSEP是,以及 `zxing_reader.wasm` 输入 `dist/assets/`。这些字节不在里面 `scanner-sdk.js`。 ONNX 模型重量不复制到 `dist/`。这就是 `files`, (中文(简体) ), `exports`,npm发布使用. |
| `npm run build:demo` | `vite.config.app.ts` | `dist-demo/` | 标准 Vite 应用程序构建: 真 `index.html`(b) 将联合来文/中央支助系统的资产充公 `public/` 文档。 这就是静态托管服务. |
| `npm run build` | 两者 | `dist/` 财务报告和审定财务报表 `dist-demo/` | 运行库的便捷包装器先构建演示文稿. |

图书馆的建筑没有 `index.html`因此服务 `dist/` 由网页主机让浏览器下载包项而不是渲染出一页. 部署 `dist-demo/`。 。 。 .

本地制作演示

```bash
npm run build:demo
npm run preview
```

打开 [http://localhost:43129 (英语)](http://localhost:43129/) 并用扫描、查找器、 OCR 和编辑UI确认 HTML 页面加载.

## Vercel部署

`vercel.json` 针入演示文稿构建, 因此部署不能返回库输出 :

```json
{
  "framework": "vite",
  "buildCommand": "npm run build:demo",
  "outputDirectory": "dist-demo",
  "rewrites": [{ "source": "/(.*)", "destination": "/index.html" }]
}
```

匹配 Vercel 项目设置( 设置 ) :

| 设置 | 数值 |
| --- | --- |
| 框架预设 | 维特 |
| 根目录 | `.` (仓库根) |
| 构建命令 | `npm run build:demo` |
| 输出目录 | `dist-demo` |
| 安装命令 | `npm install` (默认) |

保留工程级构建命令, 输出目录将覆盖此功能 `vercel.json` 应用;如果在仪表盘中已经设置了覆盖,请设定为上面的值。 A 类 `vercel-build` 脚本也被定义为零配置构建的倒置. 不需要环境变量或秘密.

## 运行公开文件

VitePress网站包含集成指南和一个由TypeDoc生成的API参考. API 页面是从 `src/index.ts` 在开发与生产建设之前,所以已公布的签名会跟踪套件的出口.

```bash
npm run docs:dev
```

打开 [http://localhost:43261 (英语)](http://localhost:43261/)核查生产场地:

```bash
npm run docs:build
npm run docs:preview
```

[`vitepress-plugin-llms`](https://github.com/okineadev/vitepress-plugin-llms) 将每页都作为下划线(`/guide/quickstart.md`, (中文(简体) ), `/api.md`)并写作 `/llms.txt` 从同一个来源。 该插件的 **复制为下标记** 按钮复制该文件。 文档 MCP (`list_pages`, (中文(简体) ), `get_page`, (中文(简体) ), `search_docs`)读取这些URL. 文件网页 `/guide/docs-mcp` 带有向光标按钮添加,而其他客户端则有片断。 安装同样远程 MCP 的光标插件在其中 [`plugins/exige-scanner-docs`](https://npmcn.com/package/%40exige/web-scanner-sdk/plugins/exige-scanner-docs)。将该网站作为第三个带有根目录的Vercel项目 `site`设置、下标 URL 模式和 MCP 中 [`site/README.md`](https://npmcn.com/package/%40exige/web-scanner-sdk/site/README.md)登记清单为 [`docs-mcp/server.json`](https://npmcn.com/package/%40exige/web-scanner-sdk/docs-mcp/server.json)。 。 。 .

这些文件涉及相机/风扇对出口的流量、自动抓捕政策、方案调整和移动/Safari一体化。 生成的 API 引用反映了当前公共表面, 不包括绘图框 `redact()` 函数.

## 发布到 npm

`@exige/web-scanner-sdk` 发表于Origin CI at `.depot/workflows/publish.yml` 当 a `vX.Y.Z` 标记被推出 。 匹配的 GitHub 动作复制活性 `.github/workflows/publish.yml`; Origin 运行 Depot 路径. 这份工作不是靠普通人来完成的 `main`它安装在 `npm ci`检查 `package.json` `"version"` 匹配标签( n)`v0.1.0` ↔ `"0.1.0"`),运行 `npm test`,用 `npm run build:lib`,则 `npm publish --access public`。 。 。 . `build:lib` 副本 `yolo11n.onnx` 财务报告和审定财务报表 `license-plate-finetune-v1n.onnx` 输入 `dist/models/`,所以公布的柏油球 包括那些重量旁边 `dist/scanner_core.wasm`. Auth 使用电站密钥 `NPM_TOKEN` 结束 `actions/setup-node` (单位:千美元)`registry-url: https://registry.npmjs.org`和 `NODE_AUTH_TOKEN`。不要设置符号 `.npmrc` 并不要打印这个秘密.

不要在CI中自动跳出版本. 释放:

1.  设定 `"version"` 内 `package.json` 切换到新模块(例如 `0.1.0`) (中文(简体) ).
2.  上交更改 `main` (和任何其他文件的发布需要).
3.  标记承诺并按下标记 :

```bash
git checkout main
git pull
git tag v0.1.0
git push origin v0.1.0
```

替换 `0.1.0` 你刚刚承诺的版本 A 类 `workflow_dispatch` 运行为倒置; 键入相同的 `vX.Y.Z` 标记在确认输入中。 如果该值不匹配, 工作流程仍然拒绝发布 `package.json`。 。 。 .

## 文件模式

文档查找使用 DocAligner LCNet100. 默认 URL 是 Exige CDN 文件 。 演示也可以装入 `/models/docaligner-lcnet100-f4117b78.onnx`识别字段并面对 ONNX 文件 `public/models/` 存在用于编辑:语义和 ML 字段规则,和相向矩形 `applyRedactions`npm 柏油球不包括这些重量。 呼叫通过 `modelUrl` 或者说 `models.fields` 编号 : `models.face`。 。 。 .

`recognizeText()` 装入装入装入的宇宙魔方工人, LSTM 核心选择相同的方式 `createWorker` 有(松弛的SIMD、SIMD,然后是基线建设)和英语 `eng.traineddata.gz` 从包裹。 它不会从jsDelivr下载。 对于任何 `language` 其他 `eng`,通过 `langPath`: 文件被命名的目录 URL `${language}.traineddata.gz` (相同的路径 sectract.js 附加). 设定 `langPath` 与 `language: 'eng'` 仅用于替换包装的英语模型。 Apache-2.0 宇宙魔方和英国模型的通知 与这些文件相邻 `dist/assets/tesseract/`。 。 。 .

## 车辆、车牌和车牌文本

`detectVehicles` 当找到任何车辆时,返回一个框。 它保留了中心距离图像中心最近的盒子,并且更喜欢更大的面积,因此一款大型的中心车辆会比起边上更小的车辆. 信心不选择框. 板块检测未变. `decodeDetections` 仍然会把每个盒子都送回来.

呼叫通过 `modelUrl`继续低迷 `source: "heuristic"` 框中输入. `allowFallback: false` 跳过那个盒子.

公开演示 **寻找** 对源步骤的控制是测试路径。 在选择文件或使用相机之前选择文档、平板电脑或车辆。 自动捕捉等待目标进入框架和稳定状态. **平板扫描仪** 在车辆照片上寻找车牌后.

| 运出型号 | 角色 |
| --- | --- |
| `/models/yolo11n.onnx` | COCO YOLO11n,2,3,5,7级 |
| `/models/license-plate-finetune-v1n.onnx` | 单级YOLO11n牌照 |

双用 `layout: 'yolov8'` 财务报告和审定财务报表 `preprocess: 'letterbox-01'` 640号 盘点文本保留 Apache 读取器 `/models/plate-text.onnx`。套件出口为 `@exige/web-scanner-sdk/models/yolo11n.onnx` 财务报告和审定财务报表 `@exige/web-scanner-sdk/models/license-plate-finetune-v1n.onnx`. iOS包和Android AAR复制了相同的字节.

| 倒置文件 | 角色 | 投入 |
| --- | --- | --- |
| `/models/yolox-tiny-coco.onnx` | 2、3、5、7等COCO车辆 | 邮箱416, `preprocess: 'letterbox-255'` |
| `/models/plate-yolox-nano.onnx` | 单等板箱 | 缩放 640, `preprocess: 'stretch-01'` |
| `/models/plate-text.onnx` | 盘框内的字符 | 灰度作物, `[1, 1, 32, 128]` |

## 原生核心

[`native/`](https://npmcn.com/package/%40exige/web-scanner-sdk/native/README.md) 是在C++中相同的解码,有CAPI和WASM,iOS,和Android构建. ONNX Runtime Web仍然运行着车辆和车牌型号. 核心的WASM构件解码了这些收发机,选取了一辆车,并且只保留了该车上的一盘. 如果WASM模块无法加载, `src/sdk/detect.ts` 使用JavaScript解码器.

## 浏览器支持和隐私

SDK需要风扇, `createImageBitmap`网络工人和网络大会 目前Chromium,Firefox,和Safari的释放支持了这些API. 图像仍然是局部的,除非主机应用程序明确发送到其他地方.

## 常见问题

### @exige/web-scanner-sdk 是什么？

@exige/web-scanner-sdk是一个客户端的网络文档扫描器SDK\. 文档查找、 OCR 和编辑在浏览器中运行 。 车辆和车牌识别在顶层的浏览器中运行\. 公开演示是唯一不需要账户的路径\. A 类

### 如何安装 @exige/web-scanner-sdk？

在项目目录运行 npm install @exige/web-scanner-sdk，或使用 pnpm add / yarn add / bun add。

### @exige/web-scanner-sdk 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @exige/web-scanner-sdk 支持 ESM 还是 CommonJS？

以 ES Module 形式发布，推荐使用 import 引入。在 CommonJS 项目中，Node\.js 20\.19\+ / 22\.12\+ 可以直接 require\(\) 不含顶层 await 的 ES Module，更早的版本需要改用动态 import\(\)。

### @exige/web-scanner-sdk 可以商用吗？

@exige/web-scanner-sdk 使用 MIT 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @exige/web-scanner-sdk 的下载量有多少？

根据 npm 官方下载统计，@exige/web-scanner-sdk 在 2026/10/14 – 2026/11/12 这 30 天内被下载 3,381 次，日均约 113 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @exige/web-scanner-sdk 还在维护吗？

最新版本 0\.2\.49 发布于 2026/11/06（8 天前）；至今共发布 41 个版本，其中过去 12 个月发布了 41 个；首次发布于 2026/09/26。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

