QuaggaJS 配置参数详解
QuaggaJS 的配置参数非常灵活,可根据不同场景进行深度定制。以下是核心配置项的详细说明和使用示例:
一、inputStream 配置
控制摄像头输入和视频流参数:
javascript
inputStream: {
name: "Live", // 流名称(自定义)
type: "LiveStream", // 实时摄像头流
target: document.querySelector('#interactive'), // 视频显示元素
// 摄像头约束
constraints: {
width: 1280, // 期望宽度(实际可能不同)
height: 720, // 期望高度
facingMode: "environment", // 前置/后置摄像头
focusMode: "continuous" // 连续自动对焦
},
// 扫描兴趣区域(ROI,Region of Interest)
area: {
top: "20%", // 从上到下的百分比
right: "20%", // 从右到左的百分比
bottom: "20%", // 从下到上的百分比
left: "20%" // 从左到右的百分比
},
// 调试选项
showCanvas: false, // 是否显示底层画布
showPatches: false, // 是否显示识别斑块
showFoundPatches: false // 是否显示已识别的斑块
}
二、decoder 配置
控制条形码解码逻辑和支持的格式:
javascript
decoder: {
// 支持的条形码格式(可多选)
readers: [
"code_128_reader", // Code 128 (常见于物流)
"ean_reader", // EAN-13 (商品条码)
"ean_8_reader", // EAN-8 (短商品条码)
"code_39_reader", // Code 39
"code_39_vin_reader", // Code 39 车辆识别码
"codabar_reader", // Codabar
"upc_reader", // UPC-A
"upc_e_reader", // UPC-E
"qr_code_reader" // QR码(需额外配置)
],
// 调试选项
debug: {
showCanvas: false,
showPatches: false,
showFoundPatches: false,
showSkeleton: false,
showLabels: false,
showPatchLabels: false,
showRemainingPatchLabels: false
},
multiple: false, // 是否允许多个条形码同时识别
readersMode: "any", // 模式:"any"(任意匹配)或"all"(全部匹配)
locate: true // 是否尝试定位条形码位置
}
三、locator 配置
控制条形码定位算法:
javascript
locator: {
patchSize: "medium", // 定位斑块大小:"small" | "medium" | "large"
halfSample: true, // 是否使用半采样(提高性能)
halfSampleThreshold: 0.5, // 半采样阈值
// 调试选项
debug: {
showCanvas: false,
showPatches: false,
showFoundPatches: false,
showSkeleton: false,
showLabels: false,
showPatchLabels: false,
showRemainingPatchLabels: false,
boxFromPatches: {
showTransformed: false,
showTransformedBox: false,
showBB: false
}
}
}
四、其他全局配置
影响整体性能和行为的参数:
javascript
{
numOfWorkers: 2, // Web Worker数量(多线程处理)
frequency: 10, // 每秒处理帧数(降低可提高性能)
locate: true, // 是否启用定位功能
src: null, // 静态图片路径(用于非实时扫描)
// 定位算法配置
locate: {
algorithm: "default", // 定位算法:"default" | "advanced"
sensitivity: 0.8 // 敏感度(0-1),值越高越容易检测到但可能误报
},
// 预处理配置(实验性)
preprocessing: {
enhanceContrast: false, // 增强对比度
equalizeHistogram: false, // 直方图均衡化
grayscale: true, // 转为灰度图
threshold: 0 // 二值化阈值(0-255)
}
}
五、QR码专属配置
如果需要扫描QR码,需额外配置:
javascript
Quagga.init({
decoder: {
readers: ["qr_code_reader"],
// QR码特定配置
qrCode: {
multiple: false, // 是否允许多个QR码
tryHarder: true, // 是否启用更耗时但更准确的识别
version: "auto", // QR码版本:"auto" | 1-40
findAll: false // 是否查找所有可能的QR码
}
},
// 提高QR码识别率的配置
locator: {
patchSize: "large",
halfSample: false
}
});
六、调试与性能优化配置
帮助诊断问题和优化性能的配置:
javascript
Quagga.init({
// 调试模式
debug: {
logLevel: "info", // 日志级别:"debug" | "info" | "warn" | "error"
showCanvas: true, // 显示底层画布
showPatches: true, // 显示定位斑块
showFoundPatches: true, // 显示已识别斑块
showSkeleton: true, // 显示骨架
showLabels: true, // 显示标签
showPatchLabels: true // 显示斑块标签
},
// 性能优化
inputStream: {
constraints: {
width: 640, // 使用较低分辨率提高性能
height: 480
}
},
frequency: 8, // 降低帧率
numOfWorkers: 1 // 单线程处理
});
七、实际应用建议
- 按需选择条形码格式 :只启用需要的
readers
,减少计算负担。 - 缩小扫描区域 :通过
inputStream.area
聚焦目标区域,减少背景干扰。 - 平衡性能与准确率 :
- 移动设备:使用
halfSample: true
和较低的frequency
- 桌面设备:可尝试更高分辨率和
frequency
- 移动设备:使用
- 调试技巧 :
- 启用
debug.showCanvas
查看识别过程 - 使用
onProcessed
回调可视化识别结果
- 启用
通过合理配置这些参数,你可以针对不同场景优化QuaggaJS的识别效果,实现高效、准确的条形码和二维码扫描功能。