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

news2024/9/25 9:39:43

1 项目需求

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

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

2 遇到的问题

2.1 二维码识别成功率低

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

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


... 省略工具类其他部分代码,只看二维码识别部分代码

private final Camera.PreviewCallback previewCallback = new Camera.PreviewCallback() {
   
        @Override
        public 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 关闭相机
/**
 * @author linvisf
 * 
 * description: 相机工具类
 * //分辨率 1920 * 1088  1920 * 1080  1440 * 1080  1280 * 720  720 * 480  640 * 480  352 * 288  320 * 240
 */

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2093269.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python网络爬虫(零)——认识网页结构

网页一般有三部分组成&#xff0c;分别是HTML&#xff08;超文本标记语言&#xff09;、CSS&#xff08;层叠样式表&#xff09;、JScript&#xff08;活动脚本语言&#xff09; 1.HTML HTML是整个网页的结构&#xff0c;相当于整个网站的框架。带“<”“>”符号都属于H…

Linux Grep案例

目录 一. 查询两个文件第一列的数据并去重二. 抽取日志中指定的字段三. 服务器指定时间点异常查询四. 从csv文件中抽取指定的数据五. 获取除了空白行和注释之外的部分 一. 查询两个文件第一列的数据并去重 &#x1f4da;file1.log 123 aaa 你好 345 bbb 我好 345 ccc 大家好 …

【最新华为OD机试E卷】空栈压数(200分)-多语言题解-(Python/C/JavaScript/Java/Cpp)

🍭 大家好这里是春秋招笔试突围 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-E/D卷的三语言AC题解 💻 ACM金牌🏅️团队| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 🍿 最新华为OD机试D卷目录,全、新、准,题目覆盖率达 95% 以上,…

2024上海初中生古诗文大会备考:单选题真题和每道题独家解析

新的学年已经开始了&#xff0c;距离2024年初中生古诗文大会初选的线上自由报名选拔还有2个月&#xff08;官宣11月3日线上初选正式开赛&#xff09;&#xff0c;据好真题了解&#xff0c;有一些学校的老师已经开始准备校内选拔了&#xff0c;以古诗文大会作为一个抓手&#xf…

torch、torchvision、torchtext版本兼容问题

1、torch与torchtext版本兼容 参考torchtext PyPI 2、 torch与torchvision版本兼容 参考torchvision PyPI

喜羊羊做Python真题

以下内容&#xff0c;皆为原创&#xff0c;制作实属不易&#xff0c;感谢大家的关注和点赞。 一.全局变量和局部变量 首先&#xff0c;全局变量是ls和lt。我们可以看到&#xff0c;函数内部lt列表的值 赋值 给了ls的列表。在定义的函数里面&#xff0c;ls是局部变量&#xff…

云同步的使用

云同步技术是一种在多个设备或系统之间保持数据一致性的技术&#xff0c;它通常依赖于云存储服务来实现。在Java中&#xff0c;实现云同步功能通常需要与云服务提供商的API进行交互&#xff0c;如Amazon S3、Google Cloud Storage、Microsoft Azure Blob Storage等。 以下是一个…

报错:java:程序包org.springframework.boot不存在

Date: 2024.08.31 18:01:20 author: lijianzhan 简述&#xff1a;关于java:程序包org.springframework.boot不存在问题如何进行修复。 操作如下&#xff1a; 点击左侧菜单栏选择设置&#xff0c;弹框内选择构建,执行&#xff0c;部署----->构建工具点击Maven按键&#xf…

python实战三-提取Word数据到Excel

视频源码&#xff1a; 链接&#xff1a;https://pan.quark.cn/s/83db5bb15383 一个文件夹下有大量会议通知文件&#xff0c;为word文件&#xff0c;文件格式都是一致的&#xff0c;现在要将文件中的一些字段提取出来汇总到Excel文件中。 会议通知文件格式如下&#xff1a; 要提…

Arthas线上诊断神器-如何安装?

文章目录 一、快速安装 ✅二、springboot-启动器 ✅ 一、快速安装 ✅ 第一种方式&#xff1a;通过下载arthas-boot.jar&#xff0c;然后用 java -jar 的方式启动&#xff5e; 第一步、下载arthas-boot.jar curl -O https://arthas.aliyun.com/arthas-boot.jar如果下载速度比较…

Linux镜像文件调整分区大小

本文介绍Linux镜像文件调整分区大小。 嵌入式系统在安装完Linux系统&#xff0c;磁盘通常默认只划分了2个分区&#xff0c;一个启动分区&#xff08;boot分区&#xff09;&#xff0c;一个根文件系统分区&#xff08;rootfs分区&#xff09;。有时&#xff0c;我们想划分一个独…

java打包混淆插件proguard

java代码混淆工具ProGuard混淆插件&#xff1a;https://blog.csdn.net/yinjl123/article/details/138922335 ProGuard Maven Plugin 使用指南&#xff1a;https://blog.csdn.net/gitblog_00427/article/details/141350545 ProGuard Maven Plugin 踩坑记 ProGuard代码混淆器如何…

火爆全网的扩散模型(Diffusion Model)到底是什么?只看这篇就够了!绝对通俗易懂!草履虫看完都要点头!| 附完整代码 + 详细注释

最近在做蛋白从头设计相关研究&#xff0c;看了超多文献&#xff08;后面也想慢慢把它们分享出来嘿嘿嘿&#xff09;&#xff01;发现现在最新的模型其实多数都是基于扩散模型&#xff08;Diffusion Model&#xff09;&#xff0c;既然如此&#xff0c;依据咱们要知道的尿性&am…

【Python进阶】学习Python必须要安装PyCharm。一篇文章带你总结一下安装PyCharm的注意事项,文末附带PyCharm激活码!!!

PyCharm激活码&#xff08;文末附带精品籽料&#xff09;&#xff1a; K384HW36OB-eyJsaWNlbnNlSWQiOiJLMzg0SFczNk9CIiwibGljZW5zZWVOYW1lIjoibWFvIHplZG9uZyIsImxpY2Vuc2VlVHlwZSI6IlBFUlNPTkFMIiwiYXNzaWduZWVOYW1lIjoiIiwiYXNzaWduZWVFbWFpbCI6IiIsImxpY2Vuc2VSZXN0cmljdG…

ComfyUI的优势+安装+基础介绍,干货内容,建议收藏!!!

简介 ComfyUI是一个基于节点流程的稳定扩散操作界面&#xff0c;通过流程实现了更加精准的工作流定制和完善的可复现性。 ComfyUI 与Webui 的区别&#xff1a; 一&#xff0c;界面设计&#xff1a; Web UI提供了直观友好的图形界面&#xff0c;适合初学者和非技术人员使用。…

JSON数据的解析与生成:深入Python的实践与应用

目录 一、JSON基础 1.1 JSON简介 1.2 Python中的JSON处理 二、解析JSON字符串到Python字典 2.1 使用json.loads()函数 2.2 异常处理 三、将Python字典转换为JSON字符串 3.1 使用json.dumps()函数 3.2 格式化输出 3.3 将Python对象写入文件 四、将Python对象写入JSON…

P01-何谓Java方法

P01-何谓Java方法 一、System.out.println()分析 二、剖析方法 谈到方法&#xff0c;我就突然想到了c函数&#xff1a; 其实&#xff1a;Java 方法和 C 函数在许多方面确实有类似之处&#xff0c;但它们也存在一些显著的差异。下面是它们的一些共同点和不同点&#xff1a; 共同…

POS机的接口

联迪的POS机 读取付款方式 private void Form_MisPos_Load(object sender, EventArgs e) { List<Trans> list MisPos.GetTransList(); int col 0; int y 15; int colcount 3; Panel p panel3;…

vben:对话框组件

本文将介绍如何在vben admin vue 框架中&#xff0c;创建对话框组件&#xff0c;并成功应用的代码。代码即插即用。 结果如下图所示&#xff0c; 一、创建对话框组件 创建 myModal/index.vue <template><div><BasicModalregister"registerModal"v-…