目录
踩坑&方案
Zxing yyds? no,no,no -> ScanKit yyds!
方案选择
Zxing方向
- Zxing入坑
接到一个二维码扫描的需求,一开始对于在开源SDK的选择中, 选择了ZXing.
- 坑位1: Zxing功能拆解
在方案实施过程中, 发现Zxing封装的Zbar对于开发来说过于耦合, 所以进行了拆解,对核心的QRScanView进行定向化开发.
- 坑位2: 资源不复用的胃痛
这需要调用摄像头资源, 而原本的人脸识别已经占用了摄像头资源.
所以我采用两个界面切换的方式进行转换. 但是频繁的切换, 频繁开关摄像头资源. 导致了系统极易Stack Overflow而崩溃.
- 坑位3: 堪忧的效果
所以我整合了人脸及二维码识别进一个界面, 直接将二维码识别的进程附着在人脸识别的帧回调中,
启用开关的方式来调用QRScanView二维码的onFrameChanged方法.
成功
此方案可行.虽然能够识别,但是效果不是很好,往往手机举半天,还得把二维码贴在摄像头脸上才能识别出来.
显然这中效果是达不到工业应用级别的,用户体验很不好.
- 坑位4: 试图给机会-缩小识别范围
怎么办呢?能不能优化了?
1将图像扫描面积缩小, 只扫描方框区域. 缩小识别范围. 实践不可行.
本来全屏好不容易扫出来, 现在扫描几率更渺茫了.
- 坑位5: 试图给机会-优化算法
对算法进行优化呢? 现在结合之前图像处理算法的经验.
可不可以用灰度化,二值化之类的算法呢. 然而Zxing已经做了, 那么是不是传入的帧图像已经压缩过了呢,
导致本就不清晰的摄像画面更加模糊导致识别不出呢.
实践: 先将帧图像转化成Bitmap. 再对Bitmap做放大切割. 不可行. 直接识别不出来了. 看来这条分支路线走死了.
Hms ScanKit方向
- 坑位6: Hms ScanKit黑屏
那么回到Zbar本身, 搜阅资料发现, Zbar的效率问题是确实存在的.
及时止损,补救时间. 切换Hms ScanKit, 发现上手配置很简单. 下载源码demo, 参考源码, 采用Custom方式自定义界面识别, 但是很奇怪.
一样的代码, 自己的源码预览是黑屏的, 识别也没有效果.
- 成功脱坑
切换方法. 沿用坑位3的思路,
附着帧回调, 直接调用Bitmap识别方法. 所以还是将二维码识别的进程附着在人脸识别的帧回调中,
将Byte图像流转换成Bitmap, 再异步处理. Bingo!!! 实践成功,识别速度很快. 效果很好可行!!!
总结
第一层: 上文中没有一个步骤是多余的无用的, 上一步骤是下一个步骤的基础和继承
第二层: 人生无无用的经历, 包括那些弯路也是, 恰恰因为弯路上的宝贵经验,思考和风景, 才有此刻的敏锐的胆识和超然的心态.
第三层: 华为yyds!!!