准备工作
在开发应用前:
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..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.** {*;}
添加权限
端侧识别
/**
* 端侧文本识别
*/
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 task = analyzer.asyncanalyseframe(frame);
task.addonsuccesslistener(new onsuccesslistener() {
@override
public void onsuccess(mltext text) {
list 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:
然后配置apikey
云侧文本识别实现
mlapplicationinit.init();
/**
* 云侧文本识别
*/
private void textanalyzernet() {
long starttime = (new date()).gettime();
log.d("textanalyzernet", "start: " starttime);
// 方式一:使用自定义参数配置。
// 创建语言集合。
list 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 task = analyzer.asyncanalyseframe(frame);
task.addonsuccesslistener(new onsuccesslistener() {
@override
public void onsuccess(mltext text) {
// 识别成功。
list 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
识别结果:
d88尊龙官网手机app官网参考
更多内容,请参考d88尊龙官网手机app官网: