我正在使用Google云端视觉OCR来检测文字。显示的文本始终是1.检测到的文本,2。每个检测到的单词。我只想显示检测到的文字。
我正在使用Google Cloud Platform Github中的代码,我在labelDetection.setType("TEXT_DETECTION");
方法中将类型设置为文本检测callCloudVision
。
我还将convertResponseToString
方法修改为:
private String convertResponseToString(BatchAnnotateImagesResponse response) {
String message = "";
List<EntityAnnotation> labels = response.getResponses().get(0).getTextAnnotations();
for (EntityAnnotation label : labels) {
if (labels != null) {
System.out.println(label.getDescription());
message += String.format(Locale.US, "%s", label.getDescription()) + "\n";
}
else
{
message += "nothing";
}
}
return message;
}
这是我的傻瓜:
apply plugin: 'com.android.application'
android {
compileSdkVersion 25
defaultConfig {
applicationId "com.example.mhci"
minSdkVersion 24
targetSdkVersion 25
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
multiDexEnabled true
javaCompileOptions {
annotationProcessorOptions {
includeCompileClasspath false
}
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
packagingOptions {
exclude 'META-INF/LICENSE'
exclude 'META-INF/io.netty.versions.properties'
exclude 'META-INF/INDEX.LIST'
exclude 'META-INF/DEPENDENCIES'
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support.constraint:constraint-layout:1.0.2'
testCompile 'junit:junit:4.12'
androidTestCompile('com.android.support.test.espresso:espresso-core:3.0.1', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:25.1.1'
compile 'com.android.support:design:25.4.0'
compile 'com.google.api-client:google-api-client-android:1.20.0' exclude module: 'httpclient'
compile 'com.google.http-client:google-http-client-gson:1.20.0' exclude module: 'httpclient'
compile 'com.google.apis:google-api-services-vision:v1-rev2-1.21.0'
compile 'com.android.support:design:25.4.0'
compile ('com.google.apis:google-api-services-translate:v2-rev47-1.22.0') {
exclude group: 'com.google.guava'
}
compile ('com.google.cloud:google-cloud-translate:0.5.0') {
exclude group: 'io.grpc', module: 'grpc-all'
exclude group: 'com.google.protobuf', module: 'protobuf-java'
exclude group: 'com.google.api-client', module: 'google-api-client-appengine'
}
}
显示的this image检测到的文字是:
Hello world
Hello
world
但我希望它只显示Hello world
我该怎么做?
答案 0 :(得分:0)
文本检测甚至可以用于此用例。问题是所有标签都返回了所有内容,这就是它的设计方式。你可以看一下如果你在一张图片(“主街”和“公园大道”)中并排说出两个街道标志,你会希望API能够分解它所看到的部分,这样就更有意义了。如果只返回一条“Main Street Park Avenue”字符串,则该信息无效。这就是为什么它总是返回整个事物然后返回它的所有部分,所以如果你通过返回的字符串进行查询,你会找到相关的图片。
所以基本上如果你相信它能正确地读取标签,你可以简单地使用返回数组中的第一个结果而不是全部3.或者你可以实现一些只显示最长和最可靠结果的逻辑
基本上,操纵返回的列表,列出标签,并提取所需的结果类型。在您的特定情况下,不要显示整个列表,只需获取列表中的第一个值,您就可以获得所需的内容。