android - Firebase 云文本识别
问题描述
当我尝试使用基于云的 API 进行文本识别时出现以下错误:
W/System.err: com.google.firebase.ml.common.FirebaseMLException: Internal error has occurred when executing Firebase ML tasks
at com.google.android.gms.internal.firebase_ml.zzmy.zza(Unknown Source:35)
at com.google.android.gms.internal.firebase_ml.zzmz.run(Unknown Source:2)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at com.google.android.gms.internal.firebase_ml.zze.dispatchMessage(Unknown Source:6)
at android.os.Looper.loop(Looper.java:280)
at android.os.HandlerThread.run(HandlerThread.java:65)
Caused by: java.lang.NullPointerException: The input TextAnnotation can not be null
at com.google.android.gms.common.internal.Preconditions.checkNotNull(Unknown Source:11)
at com.google.android.gms.internal.firebase_ml.zzpj.zzb(Unknown Source:1)
at com.google.android.gms.internal.firebase_ml.zzpf.zza(Unknown Source:38)
at com.google.android.gms.internal.firebase_ml.zzoo.zza(Unknown Source:23)
at com.google.android.gms.internal.firebase_ml.zznd.call(Unknown Source:4)
at com.google.android.gms.internal.firebase_ml.zzmy.zza(Unknown Source:29)
... 6 more
我将检测器创建为
private FirebaseVisionTextRecognizer cloudDetector = FirebaseVision.getInstance().getCloudTextRecognizer();
并使用以下方法调用检测器:
FirebaseVisionImage image = FirebaseVisionImage.fromBitmap(bm);
Task<FirebaseVisionText> result =
cloudDetector.processImage(image)
.addOnSuccessListener(new OnSuccessListener<FirebaseVisionText>() {
@Override
public void onSuccess(FirebaseVisionText firebaseVisionText) {
String text = firebaseVisionText.getText();
mFragment.setDetectedText(text);
// toggle isDetecting after 0.5 s. Do not want the textview to flickr to much
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
isDetecting = false;
}
}, delayTime);
}
})
.addOnFailureListener(
new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
// Task failed with an exception
// ...
Log.d("DETECTING", e.getMessage());
e.printStackTrace();
}
});
我在 Firebase 控制台中启用了云 API。此外,设备上的文本检测器运行良好。我也看不出我的代码和这里的示例代码有任何区别。有没有人经历过这个?
解决方案
显然,与 deviceDetector 相比,Firebase 在 cloudDetector 中处理没有文本的图像的方式不同。
deviceDetctor 进入onSuccess
但 cloudDetector 抛出 NullPtrException 并进入onFailure
。由于我切换了一个布尔值onSuccess
而不是 in onFailure
,因此 cloudDetector 再也没有被调用过。我现在也切换布尔值onFailure
并且有效。
话虽如此,对于没有文字的图像有不同的行为是有点愚蠢的。如果未检测到文本,则说明没有任何问题,因此抛出异常似乎不合适。
推荐阅读
- reactjs - NextJs:Serverless Function 超过了 50mb 的最大大小限制
- python - 使用 scapy 向数据包添加填充
- mysql - 组功能的另一个无效使用仍然没有计算或分组任何东西
- python - 'NoneType' 对象在 deap expr func 调用上不可下标
- ios - 带有 SwiftUI 的旋钮
- sql - 如何在 SQL 中合并不同的行
- xlink - XLinks `role` 和 `arcrole` 属性的 URI 指向的资源必须遵守哪些规则?
- javascript - 如何修复我的
映射来自同一个 JSON 的两个不同数组的数据? - npm - 如何在 npm 7 工作区中使用多个主要版本的依赖项
- android - Android:如何在 webview 内容中制作双倍宽度和双倍高度文本