更新记录

1.0.0(2026-07-21)

首个版本。扫码相机整包:

  • 相机预览组件 nex-scan-view(Android;iOS 下版本解锁),连续扫码 + 自动去重
  • 自定义扫码界面(可嵌入任意 uvue 布局),附全屏扫码模板页可整页拷走
  • 同帧多码识别,各码回传视图坐标;闪光灯、焦距缩放、暂停/重启、识别区限定
  • 相册/文件图片识别(scanImage);多格式:QR/DataMatrix/PDF417/Aztec/CODE128/EAN/UPC 等
  • 纯离线识别,零 SDK 依赖,国产手机/无网/内网可用

平台兼容性

uni-app x(5.14)

Chrome Safari Android iOS 鸿蒙 微信小程序
× × 5.0 × × ×

nex-scan-camera —— 扫码相机整包(相机连续扫码 + 自定义界面)

纯离线识别引擎、零 SDK 依赖——无需 Google 服务(GMS)、无需华为服务,国产手机 / 无网环境 / 内网工业场景开箱即用。相机连续扫码 + 可嵌入的自定义扫码界面组件,一个插件搞定「打开相机就扫」。

同一份 utssdk 插件同时支持 uni-app x(uvue)经典 uni-app(vue3),无需分叉。 区别于 nex-scanner(识别核,传图识别):本插件是相机整包——自带相机预览组件 + 逐帧识别 + 自定义界面。

核心卖点

  • 纯离线零依赖:识别全程本机完成,不联网、不装任何第三方服务,隐私合规、内网可用。
  • 相机连续扫码:对准即扫,自动去重(同码冷却),流畅不卡顿。
  • 自定义任意界面:相机预览是可嵌入组件,配合 uvue + CSS 随意做扫描框 / 动画 / 控件 / 布局——比原生 XML 自定义简单得多。附「全屏扫码模板页」可整页拷走即用。
  • 同帧多码:一帧画面同时识别多个码,各自回传坐标。
  • 闪光灯 / 焦距缩放:弱光补光、远距离放大。
  • 相册识别:复用同一识别引擎识别相册 / 文件图片。
  • 多格式:QR / DataMatrix / PDF417 / Aztec / CODE 128 / CODE 39 / EAN / UPC / ITF 等主流一维二维码。

组件:<nex-scan-view>

相机预览组件(easycom 自动注册,CSS 定尺寸可嵌任意布局)。

prop 类型 说明
formats string JSON 字符串数组限定格式,如 '["QR_CODE","CODE_128"]',空=全格式
continuous boolean 连续扫码(默认 true);false=首次命中后自动停
dedupCooldownMs number 同码去重冷却毫秒(默认 2000)
multiCode boolean 同帧多码全回传(默认 false)
scanBoxJson string 归一化识别区 '{"x":0.1,"y":0.2,"w":0.8,"h":0.6}',空=全帧
torch boolean 闪光灯
zoom number 焦距缩放(1.0~设备上限,超范围自动钳制)
paused boolean 暂停帧分析(预览不停)
restartNonce number 自增触发重启相机
事件 载荷 说明
@hit {codes:[{text,format,pointsView:[{x,y}]}], frameW, frameH} 去重后命中,坐标已映射到视图坐标系(可直接画标记)
@ready {maxZoom, hasTorch} 相机启动成功、能力回报
@error {code, msg} code=PERMISSION_DENIED/CAMERA_UNAVAILABLE/CAMERA_IN_USE/INTERNAL/UNSUPPORTED_PLATFORM

独立 API

JS API 签名 说明
scanImage scanImage(path, optionsJson): Promise<string> 相册/文件图片识别;options 支持 formats 过滤 + preprocess(binarize/sharpen/invert);返回 JSON 数组
supportedFormats supportedFormats(): string 受支持格式 JSON 数组
scanCameraVersion scanCameraVersion(): string 核心版本号

快速上手(拷这段即可全屏扫码)

<template>
  <view style="flex:1">
    <nex-scan-view style="width:100%;height:100%" :continuous="true"
      @hit="onHit" @ready="onReady" @error="onError" />
  </view>
</template>
<script>
  export default {
    methods: {
      onReady(e) { console.log('相机就绪', e) },
      onHit(e) {
        const ev = JSON.parse(e)   // { codes:[{text,format,pointsView}], frameW, frameH }
        for (const c of ev.codes) { console.log('扫到', c.format, c.text) }
      },
      onError(e) { console.log('相机错误', e) }
    }
  }
</script>

完整全屏模板(扫描框动画 + 闪光灯 + 焦距 + 多码标记 + 命中列表 + 相册)见示例工程 pages/scan-camera/scan-camera.uvue,整页拷走即用。

平台支持

平台 相机组件 识别 API
Android
iOS ⏳ 下版本解锁 ⏳ 下版本解锁
H5 ❌(相机组件 App-only) 灰度字节识别可用(scanLumaBytes,用于 getUserMedia 帧);文件路径识别 App-only
小程序

权限配置

  • Android:相机权限(android.permission.CAMERA),插件运行时自动申请。
  • iOS(下版本):在应用 manifest.jsonapp-plus.distribute.ios.privacyDescriptionNSCameraUsageDescription(相机用途说明)。

FAQ

  • 国产手机 / 无 Google 服务能用吗? 能。纯离线识别,不依赖任何第三方服务。
  • 权限被拒怎么办? 组件发 @error code=PERMISSION_DENIED,引导用户去系统设置开启后重进页面。
  • 没有相机的设备?@error code=CAMERA_UNAVAILABLE
  • H5 能扫码吗? 相机组件仅 App 端;H5 可用 scanLumaBytes 识别自行采集的灰度字节。

隐私、权限声明

1. 本插件需要申请的系统权限列表:

相机权限(android.permission.CAMERA),仅用于扫码识别,运行时申请。

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据。识别全程本地离线完成,无任何网络请求、不发送数据到任何服务器。

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

暂无用户评论。