首页 > 其他分享 >移植Android百度OCR:百度超轻量级中文OCR Android模型整合到自有工程中的问题与解决

移植Android百度OCR:百度超轻量级中文OCR Android模型整合到自有工程中的问题与解决

时间:2025-01-10 14:33:57浏览次数:3  
标签:OCR java 百度 Android 权限 轻量级

文章目录

移植百度超轻量级中文OCR模型到Android项目的踩坑经历

在这篇博客中,我将分享将百度超轻量级中文OCR模型(Android版)移植到我的自有Android工程中的经历以及遇到的问题。百度的超轻量级OCR模型提供了一种高效的中文文本识别解决方案,但在将其整合到Android项目中时,遇到了一些挑战。下面我将详细记录整个过程,并分享解决这些问题的方法。

百度超轻量级中文OCR模型是基于深度学习框架PyTorch开发的,专为低功耗设备优化,并且适配了移动端的性能需求。作为一款轻量级OCR模型,它可以提供快速且高效的中文文本识别能力。我的目标是将该模型移植到Android项目中,从而在移动应用中实现高效的文本识别。

步骤一:

下载并准备模型

首先,我们需要从百度提供的官方GitHub仓库下载超轻量级OCR模型百度超轻量OCR文字识别
在这个过程中您需要先登录百度智能云的账号然后找到下面图片的位置
在这里插入图片描述## 步骤二:移植OCR模型到Android项目

接下来,开始将模型移植到我的Android项目中,主要需要熟悉整个由百度工程师编写的工程。

工程目录简介

.EasyEdge-Android-SDK
├── app
│   ├── src/main
│   │   ├── assets
│   │   │   ├── demo					# demo配置文件夹
│   │   │   │   └── conf.json
│   │   │   ├── infer					# 模型资源文件夹
│   │   │   │   ├── model
│   │   │   │   ├── params
│   │   │   │   ├── label_list.txt
│   │   │   │   └── infer_cfg.json
│   │   ├── java/com.baidu.ai.edge/demo
│   │   │   ├── infertest				# 通用ARM精简版测试
│   │   │   │   ├── TestInferClassifyTask.java		# 图像分类
│   │   │   │   ├── TestInferDetectionTask.java 	# 物体检测
│   │   │   │   ├── TestInferSegmentTask.java		# 实例分割
│   │   │   │   ├── TestInferPoseTask.java			# 姿态估计
│   │   │   │   ├── TestInferOcrTask.java			# OCR
│   │   │   │   └── MainActivity.java				# 精简版启动 Activity
│   │   │   ├── MainActivity.java		# Demo APP 启动 Activity
│   │   │   ├── CameraActivity.java		# 摄像头UI逻辑
│   │   │   └── ...
│   │   └── ...
│   ├── libs
│   │   ├── armeabi-v7a			# v7a的依赖库
│   │   ├── arm64-v8a			# v8a的依赖库
│   │   └── easyedge-sdk.jar 	# jar文件
│   └── ...
├── camera_ui	# UI模块,包含相机逻辑
├── README.md
└── ... 		# 其他 gradle 等工程文件

TestInferOcrTask

这个java类中包含了模型初始化,以及权限的获取,还有蜂窝数据等等只有当获取到手机的所有权限才可运行,这是因为百度官方在编写jar包的时候里面的逻辑导致并且读取文字也必须获取所有权限这同样也是Android权限原因导致。
最终会由一个OCR进行输出。

步骤二:

问题总结

软件闪退

  • 主要原因是因为初始化不对没有正确读取到需要被读取的文件需要好好的去检查一下模型位置是否被正确读取。
  • 没有正确的给软件赋予权限百度OCR轻量级需要的权限是赋予所有权限包括存储,音频,照片等等,我的建议是权限都给上。

识别结果为空

这个问题我自己的经验是没有正确的输出,说白了就是你找到输出的接口java语句不对,这个是完全本地识别的是公用开源的OCR也是当今开源移动端我认为是最好的OCR识别。我们要有OCR字样的最后将这个获取然后循环输出就可以了。

log日志一直提示权限未赋予

  • 这个你需要着重检查你的app目录下的build gradle文件里头的API是多少,我走了很多坑最后去百度写的那个jar文件里头我发现了下面图片中的语句正常的Android12或者Android11这样写是没有问题的但是问题出在我们的工程是Android13以上的sdk,而下面图片中的权限对应的是Android12或者Android11以下的权限编写,而我们的工程版本是Android13谷歌为了保护用户隐私更改了权限的索取所以导致我们会出现报错等原因。

在这里插入图片描述
经过我的测试发现如果我将百度的原始工程30的sdk更改为33即便在授予了所有权限也会无法识别并且提出一个报错您的权限未能被正常授予
具体请看下面的图片
在这里插入图片描述

在这里插入图片描述

步骤三

解决方案

因为Android12与Android13的权限管理是完全不一样的而我们的工程整个的权限要求在Android13以下这个是被强制规定的这个是因为百度工程师在编写jar包的时候在权限获取的时候只针对了Android13以下的进行了适配Android13或者Android13以上的都没有写相应的权限声名。所以导致了我们如果在使用高版本去移植百度ocr依旧还是会有问题。
所以解决方法很简单把你的工程项目由原来的sdk33降低为sdk30下面这个图片是Android13的特性权限索取逻辑又是不一样的。
在这里插入图片描述

总结

在将百度超轻量级中文OCR模型移植到Android项目的过程中,我遇到了许多问题,包括整个工程的阅读,以及运行逻辑。最后我发现了就是因为jar包里头的权限已经被写固定了所以百度开源的ocr只能在Android12及以下的版本运行。

参考资料

标签:OCR,java,百度,Android,权限,轻量级
From: https://blog.csdn.net/2503_90221393/article/details/145056367

相关文章

  • 通过百度搜索判断网站是否已经被黑
    使用百度搜索打开百度搜索,输入 site:www.xxxxxx.com(将 www.xxxxxx.com 替换为您的域名)。查看搜索结果,检查是否包含非法网站内容或与您的网站无关的内容。异常情况如果搜索结果中包含非法网站内容、恶意链接或其他与您的网站无关的内容,说明您的网站可能已经被黑。......
  • android逆向—头条新闻app的token算法
    某刷新闻赚钱token算法逆向分析1.前言因为学校被当作高考考点,所以有了几天假期,正好可以用来逆逆前几天找到的一个刷新闻赚钱app。2.工具:Xposed、Charles、反射大师、VMOSPro3.抓包:通过抓包,发现手机验证码提交时有一个token。4.逆向token算法在jadx-gui里直接搜索t......
  • 百度Android最新150道面试题及参考答案 (中)
    Android中一个View的显示渲染过程,自定义View的时候需要避免什么操作?一、View的显示渲染过程测量(Measure)阶段这个阶段是View渲染的第一步。父容器会调用子View的measure()方法来确定子View的大小。measure()方法会传入两个参数,即MeasureSpec(测量规格),它包含......
  • PDF如何提取文字?OCR技术快速识别提取PDF中的文字内容!这种简单方法一定要知道!
    在日常工作中,我们常常会遇到PDF文档和图纸中的文字无法直接复制粘贴的问题,尤其是那些文字呈现为打散线条或扫描图片形式的文件,给我们的工作带来诸多不便。不过别担心,PDF快速看图软件的“提取文字”功能(基于OCR技术)就能轻松解决这个难题,下面就为大家详细介绍其使用教程。一......
  • Android运行第一个hello world项目
    AndroidStudio安装公众号:木木与代码本文作者:@MuMu编写日期:2024年01月25日本文字数:1861个字符关注可了解更多的教程。问题或建议,请公众号留言;/开始/ 01环境系统:Windows10专业版软件:AndroidStudio2022.3.1Patch102创建项目打开AndroidStudio......
  • 2025年百科荣创Android -- AI视觉检测模型集成--
    文章目录文章目录前言AndroidOCR文字识别简介PyddleOCR实现方法Android智能交通灯检测简介智能交通灯检测实现方法Android手势识别简介手势识别实现方法Android车牌矫正识别简介车牌矫正与识别方法Android口罩识别简介口罩识别实现方法结语文章目录......
  • Android权限初认识
    一、Android中对权限的定义根据Android官方文档,Android中的权限用于保护对受限数据和受限操作的访问/执行权限,目的是为用户隐私提供支持。二、使用权限的工作流Android官网向我们给出了在Android中使用权限的概要工作流,如图:1.判断能否在不声明权限的情况下提供......
  • Android A/B system - bootctrl
    Achitecture在AndroidA/BSystem概述中有讲到A升B的一个例子。下面这张图是想说明两个问题:启动的时候是如何知道要从A启动还是B启动?升级的时候是如何要更新A还是B?图中有两个流程,和涉及的一些模块:模块:bootloader:启动的早期阶段,叫preloader/lk都行misc:单独的一块分区,存放......
  • 深入Android架构(从线程到AIDL)_18 SurfaceView的UI多线程02
    目录2、使用SurfaceView画2D图范例一设计GameLoop(把小线程移出来)范例二2、使用SurfaceView画2D图范例一以SurfaceView绘出Bitmap图像设计SpriteView类别来实作SurfaceHolder.Callback接口首先来看个简单的程序,显示出一个Bitmap图像。这个图像就构成Sprite动画的基......
  • 深入Android架构(从线程到AIDL)_17 SurfaceView的UI多线程01
    1、View与SurfaceView之区别SurfaceView是View的子类,其内嵌了一个用来绘制的Surface。当SurfaceView成为可见时,就会诞生Surface;反之当SurfaceView被隐藏时,就会删除Surface,以便节省资源。程序里可以控制Surface的大小,SurfaceView可控制Surface的绘图位置。View组件是由UI线......