Android 使用原生相机Camera在预览界面进行识别二维码或者图片处理

embedded/2025/1/7 17:32:31/

1 项目需求

最近项目中有个需求:使用原生相机在预览界面进行识别二维码和图片处理。其实这个需求不是很难,难在对预览画面的处理过程。

自己针对这个需求写了一个工具类,便于后续进行复盘,同时也分享给有类似需求的伙伴们。

2 遇到的问题

2.1 二维码识别成功率低

使用了第三方库,二维码成功率应该没有90%。我们客户要求比较高,二维码识别成功率要求几乎100%。后面会给出关键核心代码。现在先给出成功率不高的代码。

这里使用的第三方库是:
implementation ‘com.google.zxing:core:3.4.1’
implementation ‘com.journeyapps:zxing-android-embedded:3.6.0’

java">
... 省略工具类其他部分代码,只看二维码识别部分代码private final Camera.PreviewCallback previewCallback = new Camera.PreviewCallback() {@Overridepublic void onPreviewFrame(byte[] data, Camera camera) {Camera.Parameters parameters = camera.getParameters();Camera.Size size = parameters.getPreviewSize();// 二维码识别decodeQRCode(data, size.width, size.height);}};/**  二维码识别  */
private void decodeQRCode(byte[] data, int width, int height) {MultiFormatReader reader = new MultiFormatReader();try {PlanarYUVLuminanceSource source = new PlanarYUVLuminanceSource(data, width, height,0, 0, width, height, false);Result result = reader.decode(new BinaryBitmap(new HybridBinarizer(source)));if (result != null){Log.e(TAG, "扫码结果 = " + result.getText());}if (result != null && result.getText().length() > 0) {if (callback != null) {callback.onQRCodeScanned(true, result.getText());}} else {if (callback != null) {callback.onQRCodeScanned(false, "");}}} catch (Exception e) {Log.e(TAG, "扫码异常 = " + e.getMessage());if (callback != null) {callback.onQRCodeScanned(false, "");}}}

2.2 相机预览没物体时偶尔出现画面模糊

如下图。偶尔出现这样模糊画面。
在这里插入图片描述

3 相机工具类核心代码

实现主要流程:

1 打开相机
2 Camera 相关设置
3 预览时数据处理
4 关闭相机
java">/*** @author linvisf* * description: 相机工具类* //分辨率 1920 * 1088  1920 * 1080  1440 * 1080  1280 * 720  720 * 480  640 * 480  352 * 288  320 * 240*/
文章来源:https://blog.csdn.net/linvisf/article/details/141716907
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ppmy.cn/embedded/105364.html

相关文章

编程之路:在Bug迷宫中寻找光明

编程,一个看似充满魔法的词汇,背后却隐藏着无数挑战与艰辛。在这条充满未知与探索的道路上,每一个程序员都如同一位勇敢的冒险家,不断在Bug的迷宫中寻找着出口。正是这些经历,塑造了编程高手们坚韧不拔的精神&#xff…

第十五届蓝桥杯青少组省赛成绩查询及国赛考试安排

刚刚,蓝桥杯青少组官网发布了“关于第十五届蓝桥杯大赛青少组省赛成绩查询及全国总决赛参赛证下载的通知”,第十五届蓝桥杯大赛青少组将开通省赛成绩查询通道,获得省赛一等奖的选手晋级全国总决赛,全国总决赛比赛时间为9月7日。 关…

如何共享EC2 AMI给其他AWS账户

在本篇文章中,我们将详细介绍如何通过Amazon Web Services (AWS) 的Elastic Compute Cloud (EC2) 平台,将自定义AMI(Amazon Machine Image)共享给其他AWS账户。接下来,我们九河云将一步步引导您完成整个过程&#xff0…

Qt 字符串的编码方式,以及反斜杠加3个数字是什么编码\344\275\240,如何生成

Qt 字符串的编码方式 问题 总所周知,Qt的ui文件在编译时,会自动生成一个ui_xxxxx.h的头文件,打开一看,其实就是将摆放的控件new出来以及布局的代码。 只要用Qt提供的uic.exe工具,自己也可以将ui文件输出为代码文件…

设计模式-依赖倒转原则

依赖倒转原则:(Dependency Inversion Principle,DIP)是面向对象设计的五大基本原则之一。它的核心思想是:高层模块不应该依赖于低层模块,两者都应该依赖于抽象;抽象不应该依赖于细节&#xff0c…

动态住宅IP代理的搭建指南:实现高效网络访问

在互联网的复杂环境中,动态住宅IP代理逐渐成为提升网络隐私和绕过IP限制的热门选择。相比于数据中心代理IP,动态住宅IP代理具有更高的隐蔽性和真实性,能够有效模拟真实用户的网络行为。本文将详细介绍动态住宅IP代理的搭建方法,帮…

单端输入与差分输入

单端输入: 单端输入测量的是一根导线与地之间的电压差,然后将这个差值放大以提供输出。 然而,单端输入容易受到噪声的影响,因为承载信号的导线会吸收电背景噪声。此外,单端输入上的信号还可能受到地环路的影响。 例…

arm-linux-gnueabihf-gcc -Wall -nostdlib -c -O2 -o start.o start.s

arm-linux-gnueabihf-gcc -Wall -nostdlib -c -O2 -o start.o start.s 1、-Wall:【Warning all】 选项可以打印出编译时所有的错误或者警告信息。这个选项很容易被遗忘,编译的时候,没有错误或者警告提示,以为自己的程序很完美&a…