更新记录
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.json的app-plus.distribute.ios.privacyDescription配NSCameraUsageDescription(相机用途说明)。
FAQ
- 国产手机 / 无 Google 服务能用吗? 能。纯离线识别,不依赖任何第三方服务。
- 权限被拒怎么办? 组件发
@errorcode=PERMISSION_DENIED,引导用户去系统设置开启后重进页面。 - 没有相机的设备? 发
@errorcode=CAMERA_UNAVAILABLE。 - H5 能扫码吗? 相机组件仅 App 端;H5 可用
scanLumaBytes识别自行采集的灰度字节。

收藏人数:
购买普通授权版(
试用
赞赏(0)
下载 1178
赞赏 0
下载 12448839
赞赏 1935
赞赏
京公网安备:11010802035340号