Android对接华为AI - 文本识别
准备工作
在开发应用前:
1、需要在AppGallery Connect中配置相关信息,包括:注册成为开发者和创建应用。
2、使用ML Kit云侧服务(端侧服务可不开通)需要开发者在AppGallery Connect上打开ML Kit服务开关。
集成HMS Core SDK
工程根目录build.gradle文件
buildscript {
repositories {
google()
mavenCentral()
maven { url 'https://jitpack.io' }
// 配置HMS Core SDK的Maven仓地址。
maven {url 'https://developer.huawei.com/repo/'}
}
dependencies {
classpath 'com.android.tools.build:gradle:7.0.4'
classpath 'com.huawei.agconnect:agcp:1.6.2.300'
}
}
allprojects {
repositories {
google()
mavenCentral()
maven { url 'https://jitpack.io' }
// 配置HMS Core SDK的Maven仓地址。
maven {url 'https://developer.huawei.com/repo/'}
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
app module下的build.gradle依赖华为基础SDK包与语言识别模型包:
// 引入基础SDK
implementation 'com.huawei.hms:ml-computer-vision-ocr:3.11.0.301'
// 引入拉丁语文字识别模型包
implementation 'com.huawei.hms:ml-computer-vision-ocr-latin-model:3.11.0.301'
// 引入日韩语文字识别模型包
implementation 'com.huawei.hms:ml-computer-vision-ocr-jk-model:3.11.0.301'
// 引入中英文文字识别模型包
implementation 'com.huawei.hms:ml-computer-vision-ocr-cn-model:3.11.0.301'
配置混淆脚本
-dontwarn com.huawei.**
-keep class com.huawei.** {*;}
-dontwarn org.slf4j.**
-keep class org.slf4j.** {*;}
-dontwarn org.springframework.**
-keep class org.springframework.** {*;}
-dontwarn com.fasterxml.jackson.**
-keep class com.fasterxml.jackson.** {*;}
-keep class com.huawei.noah.bolttranslator.**{*;}
-dontwarn com.huawei.hisi.**
-keep class com.huawei.hisi.** {*;}
添加权限
<!--相机权限-->
<uses-permission android:name="android.permission.CAMERA" />
<!--使用网络权限-->
<uses-permission android:name="android.permission.INTERNET" />
<!--写权限-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!--读权限-->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<!--录音权限-->
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<!--获取网络状态权限-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!--获取wifi状态权限-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
端侧识别
/**
* 端侧文本识别
*/
private void textAnalyzer() {
long startTime = (new Date()).getTime();
Log.d("textAnalyzer", "start: " + startTime);
MLLocalTextSetting setting = new MLLocalTextSetting.Factory()
.setOCRMode(MLLocalTextSetting.OCR_DETECT_MODE)
// 设置识别语种。
.setLanguage("zh")
.create();
MLTextAnalyzer analyzer = MLAnalyzerFactory.getInstance().getLocalTextAnalyzer(setting);
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.test2);
// 通过bitmap创建MLFrame,bitmap为输入的Bitmap格式图片数据。
MLFrame frame = MLFrame.fromBitmap(bitmap);
Task<MLText> task = analyzer.asyncAnalyseFrame(frame);
task.addOnSuccessListener(new OnSuccessListener<MLText>() {
@Override
public void onSuccess(MLText text) {
List<MLText.Block> blocks = text.getBlocks();
StringBuilder sb = new StringBuilder();
for (MLText.Block block : blocks) {
sb.append(block.getStringValue());
}
// 识别成功处理。
tv.setText("识别成功: " + sb.toString());
Log.d("textAnalyzer", "识别成功:\n " + sb.toString());
long endTime = (new Date()).getTime();
Log.d("textAnalyzer", "end: " + endTime);
Log.d("textAnalyzer", "耗时: " + (endTime-startTime));
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(Exception e) {
// 识别失败处理。
tv.setText("识别失败");
}
});
}
端侧识别测试
原图:test2.png

识别结果:

云侧文本识别
注意:此功能收费,但是精确度更高。
配置应用的鉴权信息
先申请apikey:
https://developer.huawei.com/consumer/cn/console/api/credentials/dev388421841221889538
然后配置apikey

云侧文本识别实现
MLApplicationInit.init();
/**
* 云侧文本识别
*/
private void textAnalyzerNet() {
long startTime = (new Date()).getTime();
Log.d("textAnalyzerNet", "start: " + startTime);
// 方式一:使用自定义参数配置。
// 创建语言集合。
List<String> languageList = new ArrayList();
languageList.add("zh");
languageList.add("en");
// 设置参数。
MLRemoteTextSetting setting = new MLRemoteTextSetting.Factory()
// 设置云侧文本字体模式:
// 若选择手写体格式,文本检测模式仅支持稀疏文本,语言列表仅支持中文(zh),边界框格式仅支持NGON四顶点坐标。
// setTextDensityScene、setLnaguageList、setBorderType等方法设置均不生效。
// 若选择印刷体格式,则需要手动设置语言列表,检测模式和边框样式,或采取默认配置。
// MLRemoteTextSetting.OCR_HANDWRITTENFONT_SCENE:手写体。
// MLRemoteTextSetting.OCR_PRINTFONT_SCENE:印刷体。
.setTextFontScene(MLRemoteTextSetting.OCR_HANDWRITTENFONT_SCENE)
// 设置云侧文本检测模式:
// MLRemoteTextSetting.OCR_COMPACT_SCENE:文本密集场景的文本识别。
// MLRemoteTextSetting.OCR_LOOSE_SCENE:文本稀疏场景的文本识别。
.setTextDensityScene(MLRemoteTextSetting.OCR_LOOSE_SCENE)
// 设置识别语言列表,使用ISO 639-1标准。
.setLanguageList(languageList)
// 设置文本边界框返回格式。
// MLRemoteTextSetting.NGON:返回四边形的四个顶点坐标。
// MLRemoteTextSetting.ARC:返回文本排列为弧形的多边形边界的顶点,最多可返回多达72个顶点的坐标。
.setBorderType(MLRemoteTextSetting.ARC)
.create();
MLTextAnalyzer analyzer = MLAnalyzerFactory.getInstance().getRemoteTextAnalyzer(setting);
// 方式二:使用默认参数配置,自动检测语种进行识别,适用于文本稀疏场景,文本框返回格式为:MLRemoteTextSetting.NGON。
//MLTextAnalyzer analyzer = MLAnalyzerFactory.getInstance().getRemoteTextAnalyzer();
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.test2);
// 通过bitmap创建MLFrame,bitmap为输入的Bitmap格式图片数据。
MLFrame frame = MLFrame.fromBitmap(bitmap);
Task<MLText> task = analyzer.asyncAnalyseFrame(frame);
task.addOnSuccessListener(new OnSuccessListener<MLText>() {
@Override
public void onSuccess(MLText text) {
// 识别成功。
List<MLText.Block> blocks = text.getBlocks();
StringBuilder sb = new StringBuilder();
for (MLText.Block block : blocks) {
sb.append(block.getStringValue());
sb.append("\n");
}
// 识别成功处理。
tv.setText("识别成功: " + sb.toString());
Log.d("textAnalyzerNet", "识别成功:\n " + sb.toString());
long endTime = (new Date()).getTime();
Log.d("textAnalyzerNet", "end: " +endTime);
Log.d("textAnalyzerNet", "耗时: " + (endTime-startTime));
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(Exception e) {
// 识别失败,获取相关异常信息。
try {
MLException mlException = (MLException) e;
// 获取错误码,开发者可以对错误码进行处理,根据错误码进行差异化的页面提示。
int errorCode = mlException.getErrCode();
// 获取报错信息,开发者可以结合错误码,快速定位问题。
String errorMessage = mlException.getMessage();
} catch (Exception error) {
// 转换错误处理。
}
}
});
}
云侧文本识别测试
原图:test2.png

识别结果:

官网参考
更多内容,请参考官网:
https://developer.huawei.com/consumer/cn/doc/hiai-Guides/text-recognition-0000001050040053
Android对接华为AI - 文本识别的更多相关文章
- 超简单集成华为HMS ML Kit文本识别SDK,一键实现账单号自动录入
前言 在之前的文章<超简单集成华为HMS Core MLKit通用卡证识别SDK,一键实现各种卡绑定>中我们给大家介绍了华为HMS ML Kit通用卡证识别技术是如何通过拍照自动识别卡 ...
- 个人永久性免费-Excel催化剂功能第86波-人工智能之图像OCR文本识别全覆盖
在上一年中,Excel催化剂已经送上一波人工智能系列功能,鉴于部分高端用户的需求,再次给予实现了复杂的图像OCR识别,包含几乎所有日常场景,让公司个人手头的图像非结构化数据瞬间变为可进行结构化处理分析 ...
- AI人脸识别SDK接入 — 参数优化篇(虹软)
引言 使用了虹软公司免费的人脸识别算法,感觉还是很不错的,当然,如果是初次接触的话会对一些接口的参数有些疑问的.这里分享一下我对一些参数的验证结果(这里以windows版本为例,linux.andro ...
- 虹软AI 人脸识别SDK接入 — 参数优化篇
引言 使用了免费的人脸识别算法,感觉还是很不错的,但是初次接触的话会对一些接口的参数有些疑问的.这里分享一下我对一些参数的验证结果(这里以windows版本为例,linux.android基本一样), ...
- 构建AR视频空间大数据平台(物联网及工业互联网、视频、AI场景识别)
目 录 1. 应用背景... 2 2. 系统框架... 2 3. AI场景识别算法和硬件... 3 4. AR视频空间管理系统... 5 5. ...
- 1个小时!从零制作一个! AI图片识别WEB应用!
0 前言 近些年来,所谓的人工智能也就是AI. 在媒体的炒作下,变得神乎其神,但实际上,类似于图片识别的AI,其原理只不过是数学的应用. 线性代数,概率论,微积分(著名的反向传播算法). 大家觉得这些 ...
- NFC(12)使用Android Beam技术传输文本数据及它是什么
Android Beam技术是什么 Android Beam的基本理念就是两部(只能是1对1,不可像蓝牙那样1对多)NFC设备靠近时(一般是背靠背),通过触摸一部NFC设备的屏幕,将数据推向另外一部N ...
- pytesser图片文本识别
python图片文本识别使用的工具是PIL和pytesser.因为他们使用到很多的python库文件,为了避免一个个工具的安装,建议使用pythonxy,这个工具的介绍可参考baidu. pytess ...
- Android开发华为手机无法看log日志解决方法
Android开发华为手机无法看log日志解决方法 上班的时候,由于开发工具由Eclipse改成Android Studio后,原本的华为手机突然无法查看崩溃日志了,大家都知道,若是无法查看日志要它毛 ...
- [Android相机]通过手机摄像头识别环境亮度(转)
源: [Android相机]通过手机摄像头识别环境亮度 iOS利用摄像头获取环境光感参数
随机推荐
- Solution Set -「CF 1514」
「CF 1514A」Perfectly Imperfect Array Link. 就看序列中是否存在不为平方数的元素即可. #include<bits/stdc++.h> using n ...
- 记一次 .NET 某仪器测量系统 CPU爆高分析
一:背景 1. 讲故事 最近也挺奇怪,看到了两起 CPU 爆高的案例,且诱因也是一致的,觉得有一些代表性,合并分享出来帮助大家来避坑吧,闲话不多说,直接上 windbg 分析. 二:WinDbg 分析 ...
- C++ bitset 用法和应用
C++的 bitset 在 bitset 头文件中,它是一种类似数组的结构,它的每一个元素只能是0或1,每个元素仅用1bit空间. 下面是具体用法 构造函数 bitset常用构造函数有四种,如下 bi ...
- CCF CSP认证注册、报名、查询成绩、做模拟题等答疑
CCF CSP认证注册.报名.查询成绩.做模拟题等答疑 CCF CSP认证中心将考生在注册,或报名,或查询成绩,或历次真题练习时遇到的问题进行汇总,并给出解决方法,具体如下: 1.注册时,姓名可否随意 ...
- CMP临时文件清理
■■ CMP临时文件 CMP - 指 Compression Advisor ,是 Oracle 数据库的压缩建议特性,在生成建议时产生的中间过程表,一般会自行删除.这个特性自 11.2.0.4 引入 ...
- python - view() + UpsamplingBilinear2d()
import torch from torch import nn # view函数的-1参数的作用在于基于另一参数,自动计算该维度的大小 # view的第一个参数:2 代表的是batch 后面的2, ...
- 04-华为HyperReplication中的多时间片技术
简介 多时间片技术,是应用于HyperReplication的异步远程复制:提高效率, 在同步远程复制中,没有这个概念: 时间片:在Cache中管理一段时间内写入数据的逻辑空间(数据大小没有限定): ...
- CC BY-SA 4.0原文及翻译
CC BY-SA 4.0原文及翻译 英文参考链接 中文参考链接 原文: Attribution 4.0 International (CC BY 4.0) This is a human-readab ...
- CF1523D Love-Hate 题解
抽象化题意: 一共有 \(m\) 个元素,给定 \(n\) 个集合,每个集合的元素不超过 \(15\) 个,求出一个元素个数最多的集合 \(S\) 是至少 \(\lceil \dfrac{n}{2} ...
- 数据结构与算法 | 哈希表(Hash Table)
哈希表(Hash Table) 在二分搜索中提到了在有序集合中查询某个特定元素的时候,通过折半的方式进行搜索是一种很高效的算法.那能否根据特征直接定位元素,而非折半去查找?哈希表(Hash Table ...