拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

连续扫码慢?QRCode4cj之setHints与decodeWithState完整优化指南

连续扫码慢?QRCode4cj之setHints与decodeWithState完整优化指南 连续扫码慢QRCode4cj之setHints与decodeWithState完整优化指南【免费下载链接】qrcode4cj一维码/二维码扫描库。项目地址: https://gitcode.com/Cangjie-TPC/qrcode4cjQRCode4cj是一个用仓颉语言实现的开源一维码/二维码扫描库支持 QR、Data Matrix、PDF417、Aztec、EAN/UPC 等十余种条码的生成与解析。很多开发者在做相机连续扫码时发现帧率上不去罪魁祸首往往是每次解码都重复构建解码器。本文带你用setHintsdecodeWithState组合拳快速把连续扫码性能拉满。为什么连续扫码会慢MultiFormatReader是扫码库的主入口。如果每帧都调用不带状态的decode(image)源码注释直言不讳这样做repeatedly 调用并不高效multi_format_reader.cj——因为它每次都会执行一次setHints(空hints)意味着重建解码器列表重新实例化 QR、DataMatrix、Aztec、PDF417、一维码等多个 Reader重复内存分配解码器内部的状态对象反复分配与释放GC 压力增大白白浪费 CPU连续扫码场景下解码器配置根本不会变重复构建纯属浪费。setHints 做了什么setHints(hints)只调用一次它会解析你的 hints 配置按格式精确装配好解码器列表并缓存到内部状态中setHints 实现提示项DecodeHintType作用性能影响POSSIBLE_FORMATS限定只解码指定格式⭐⭐⭐ 大幅减少参与试错的解码器TRY_HARDER花更多时间换取更高准确率解码更慢但更稳ALSO_INVERTED正片失败后再反色重试一次增加一倍开销救回反色码CHARACTER_SET指定字符编码影响解码正确性PURE_BARCODE纯条码图像快速通道⭐⭐⭐ 跳过检测直接提取极快枚举定义见 decode_hint_type.cj。 只扫 QR 码的场景把POSSIBLE_FORMATS限定为QR_CODE默认全格式扫描时的 6 个解码器就能被裁剪到 1 个。decodeWithState 连续扫码最佳姿势正确姿势是「一次 setHints循环 decodeWithState」var reader: MultiFormatReader MultiFormatReader() var hints: HashMapDecodeHintType, Any HashMapDecodeHintType, Any() hints.put(DecodeHintType.POSSIBLE_FORMATS, Array(BarcodeFormat.QR_CODE)) reader.setHints(hints) // 只做一次 while (frame : camera.nextFrame()) { let bitmap toBinaryBitmap(frame) try { let result reader.decodeWithState(bitmap) // 每帧调用 showResult(result) } catch (e: Qrcoder4cjNotFoundException) { // 本帧无码继续 } }decodeWithState直接复用setHints构建好的解码器列表不再重新分配内存decodeWithState 实现。源码注释也明确写道连续扫码客户端使用它相比decode()能获得large speed increase巨大的速度提升。三个细节别踩坑首次调用是安全的若readers为空decodeWithState会自动补一次默认setHints不会崩溃改配置要重新 setHintshints 变了就再调一次setHints解码器列表会按新配置重建跨码切换记得 reset连续扫不同条码时调用 reset()它会级联重置每个 Reader 的内部状态避免上一枚码残留的状态干扰下一枚。进阶PURE_BARCODE 极速通道如果图像已经是裁剪好的纯条码例如从预览框里抠出来的区域QRCodeReader检测到PURE_BARCODE提示后会走extractPureBits快速路径跳过耗时的图形检测qr_code_reader.cj。裁剪预览框 该提示是扫码类 App 里性价比最高的一招。优化效果速查清单场景做法收益每帧调用decode()不带状态改为setHints一次 decodeWithState循环消除重复构建开销帧率显著提升只扫单一格式配置POSSIBLE_FORMATS解码器列表从 6 个减到 1~2 个扫描失败率可接受不要默认开TRY_HARDER保速度反色条码按需开ALSO_INVERTED以双倍开销换鲁棒性已裁剪的纯条码图加PURE_BARCODE跳过检测解码飞快相关源码路径多格式读者核心src/common/reader/multi_format_reader.cj解码提示枚举src/common/decode_hint_type.cjReader 接口定义src/common/reader.cj官方 API 文档MultiFormatReader 部分doc/feature_api.md一句话总结连续扫码性能慢多半是解码器在每帧重建。用setHints配置一次、decodeWithState复用状态再配合POSSIBLE_FORMATS裁剪解码器就能让 QRCode4cj 的连续扫码又稳又快。【免费下载链接】qrcode4cj一维码/二维码扫描库。项目地址: https://gitcode.com/Cangjie-TPC/qrcode4cj创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表