使用 firebase-mlkit 访问云视觉 api 时套接字已关闭
Socket is Closed while accessing cloud vision api using firebase-mlkit
我是 运行 给定示例 here 和 Firebase OCR 文档的子集。 运行 使用 Firebase ML 套件进行云文本识别时,我正在关闭套接字。 运行 这在带有 Android 派的设备上。
我已经尝试清除 Google 播放服务缓存,重新启动设备(使其工作 1 次),创建网络安全配置以允许来自 here 的 HTTP 请求 sent/received ]
从 Asset 创建位图并将其传递到 runCloudTextRecognition
Android 清单
<uses-permission android:name="android.permission.INTERNET" />
<application>
<meta-data
android:name="com.google.firebase.ml.vision.DEPENDENCIES"
android:value="ocr" />
</application>
runCloudTextRecognition 和 getBitmapFromAsset
public static Bitmap getBitmapFromAsset(Context context, String filePath) {
AssetManager assetManager = context.getAssets();
InputStream istr;
Bitmap bitmap = null;
try {
istr = assetManager.open(filePath);
bitmap = BitmapFactory.decodeStream(istr);
} catch (IOException e) {
e.printStackTrace();
}
return bitmap;
}
private void runCloudTextRecognition(Bitmap mSelectedImage) {
//mCloudButton.setEnabled(false);
FirebaseVisionImage image = FirebaseVisionImage.fromBitmap(mSelectedImage);
final FirebaseVisionTextRecognizer recognizer = FirebaseVision.getInstance()
.getCloudTextRecognizer();
recognizer.processImage(image)
.addOnSuccessListener(
new OnSuccessListener<FirebaseVisionText>() {
@Override
public void onSuccess(FirebaseVisionText texts) {
//mCloudButton.setEnabled(true);
Log.e("CloudOCR_Success",texts.getText());
}
})
.addOnFailureListener(
new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
// Task failed with an exception
//mCloudButton.setEnabled(true);
e.printStackTrace();
try {
recognizer.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
});
}
LogCat
E/ImageAnnotatorTask: batchAnnotateImages call failed with exception:
java.net.SocketTimeoutException: timeout
at com.android.okhttp.okio.Okio.newTimeoutException(Okio.java:212)
at com.android.okhttp.okio.AsyncTimeout.exit(AsyncTimeout.java:261)
at com.android.okhttp.okio.AsyncTimeout.read(AsyncTimeout.java:215)
at com.android.okhttp.okio.RealBufferedSource.indexOf(RealBufferedSource.java:306)
at com.android.okhttp.okio.RealBufferedSource.indexOf(RealBufferedSource.java:300)
at com.android.okhttp.okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.java:196)
at com.android.okhttp.internal.http.Http1xStream.readResponse(Http1xStream.java:186)
at com.android.okhttp.internal.http.Http1xStream.readResponseHeaders(Http1xStream.java:127)
at com.android.okhttp.internal.http.HttpEngine.readNetworkResponse(HttpEngine.java:737)
at com.android.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:609)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:471)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:407)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:538)
at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getResponseCode(DelegatingHttpsURLConnection.java:105)
at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:26)
at com.google.android.gms.internal.firebase_ml.zzgd.<init>(Unknown Source:5)
at com.google.android.gms.internal.firebase_ml.zzga.zzfg(Unknown Source:43)
at com.google.android.gms.internal.firebase_ml.zzfk.zzfa(Unknown Source:131)
at com.google.android.gms.internal.firebase_ml.zzer.zzei(Unknown Source:51)
at com.google.android.gms.internal.firebase_ml.zzqf.zza(Unknown Source:68)
at com.google.android.gms.internal.firebase_ml.zzqg.zza(Unknown Source:23)
at com.google.android.gms.internal.firebase_ml.zznt.call(Unknown Source:4)
at com.google.android.gms.internal.firebase_ml.zznn.zza(Unknown Source:30)
at com.google.android.gms.internal.firebase_ml.zznq.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.zzf.dispatchMessage(Unknown Source:6)
at android.os.Looper.loop(Looper.java:193)
at android.os.HandlerThread.run(HandlerThread.java:65)
Caused by: java.net.SocketException: socket is closed
at com.android.org.conscrypt.ConscryptFileDescriptorSocket$SSLInputStream.read(ConscryptFileDescriptorSocket.java:551)
at com.android.okhttp.okio.Okio.read(Okio.java:136)
at com.android.okhttp.okio.AsyncTimeout.read(AsyncTimeout.java:211)
at com.android.okhttp.okio.RealBufferedSource.indexOf(RealBufferedSource.java:306)
at com.android.okhttp.okio.RealBufferedSource.indexOf(RealBufferedSource.java:300)
at com.android.okhttp.okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.java:196)
at com.android.okhttp.internal.http.Http1xStream.readResponse(Http1xStream.java:186)
at com.android.okhttp.internal.http.Http1xStream.readResponseHeaders(Http1xStream.java:127)
at com.android.okhttp.internal.http.HttpEngine.readNetworkResponse(HttpEngine.java:737)
at com.android.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:609)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:471)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:407)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:538)
at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getResponseCode(DelegatingHttpsURLConnection.java:105)
at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:26)
at com.google.android.gms.internal.firebase_ml.zzgd.<init>(Unknown Source:5)
at com.google.android.gms.internal.firebase_ml.zzga.zzfg(Unknown Source:43)
at com.google.android.gms.internal.firebase_ml.zzfk.zzfa(Unknown Source:131)
at com.google.android.gms.internal.firebase_ml.zzer.zzei(Unknown Source:51)
at com.google.android.gms.internal.firebase_ml.zzqf.zza(Unknown Source:68)
at com.google.android.gms.internal.firebase_ml.zzqg.zza(Unknown Source:23)
at com.google.android.gms.internal.firebase_ml.zznt.call(Unknown Source:4)
at com.google.android.gms.internal.firebase_ml.zznn.zza(Unknown Source:30)
at com.google.android.gms.internal.firebase_ml.zznq.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.zzf.dispatchMessage(Unknown Source:6)
at android.os.Looper.loop(Looper.java:193)
at android.os.HandlerThread.run(HandlerThread.java:65)
我通过将位图的大小减小到 recommended size using BitmapFactory Options. For more information on handling large bitmaps, see this or you can use a library like Glide 解决了我的问题。
更新 firebase 库也有帮助。
我是 运行 给定示例 here 和 Firebase OCR 文档的子集。 运行 使用 Firebase ML 套件进行云文本识别时,我正在关闭套接字。 运行 这在带有 Android 派的设备上。
我已经尝试清除 Google 播放服务缓存,重新启动设备(使其工作 1 次),创建网络安全配置以允许来自 here 的 HTTP 请求 sent/received ]
从 Asset 创建位图并将其传递到 runCloudTextRecognition
Android 清单
<uses-permission android:name="android.permission.INTERNET" />
<application>
<meta-data
android:name="com.google.firebase.ml.vision.DEPENDENCIES"
android:value="ocr" />
</application>
runCloudTextRecognition 和 getBitmapFromAsset
public static Bitmap getBitmapFromAsset(Context context, String filePath) {
AssetManager assetManager = context.getAssets();
InputStream istr;
Bitmap bitmap = null;
try {
istr = assetManager.open(filePath);
bitmap = BitmapFactory.decodeStream(istr);
} catch (IOException e) {
e.printStackTrace();
}
return bitmap;
}
private void runCloudTextRecognition(Bitmap mSelectedImage) {
//mCloudButton.setEnabled(false);
FirebaseVisionImage image = FirebaseVisionImage.fromBitmap(mSelectedImage);
final FirebaseVisionTextRecognizer recognizer = FirebaseVision.getInstance()
.getCloudTextRecognizer();
recognizer.processImage(image)
.addOnSuccessListener(
new OnSuccessListener<FirebaseVisionText>() {
@Override
public void onSuccess(FirebaseVisionText texts) {
//mCloudButton.setEnabled(true);
Log.e("CloudOCR_Success",texts.getText());
}
})
.addOnFailureListener(
new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
// Task failed with an exception
//mCloudButton.setEnabled(true);
e.printStackTrace();
try {
recognizer.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
});
}
LogCat
E/ImageAnnotatorTask: batchAnnotateImages call failed with exception:
java.net.SocketTimeoutException: timeout
at com.android.okhttp.okio.Okio.newTimeoutException(Okio.java:212)
at com.android.okhttp.okio.AsyncTimeout.exit(AsyncTimeout.java:261)
at com.android.okhttp.okio.AsyncTimeout.read(AsyncTimeout.java:215)
at com.android.okhttp.okio.RealBufferedSource.indexOf(RealBufferedSource.java:306)
at com.android.okhttp.okio.RealBufferedSource.indexOf(RealBufferedSource.java:300)
at com.android.okhttp.okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.java:196)
at com.android.okhttp.internal.http.Http1xStream.readResponse(Http1xStream.java:186)
at com.android.okhttp.internal.http.Http1xStream.readResponseHeaders(Http1xStream.java:127)
at com.android.okhttp.internal.http.HttpEngine.readNetworkResponse(HttpEngine.java:737)
at com.android.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:609)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:471)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:407)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:538)
at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getResponseCode(DelegatingHttpsURLConnection.java:105)
at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:26)
at com.google.android.gms.internal.firebase_ml.zzgd.<init>(Unknown Source:5)
at com.google.android.gms.internal.firebase_ml.zzga.zzfg(Unknown Source:43)
at com.google.android.gms.internal.firebase_ml.zzfk.zzfa(Unknown Source:131)
at com.google.android.gms.internal.firebase_ml.zzer.zzei(Unknown Source:51)
at com.google.android.gms.internal.firebase_ml.zzqf.zza(Unknown Source:68)
at com.google.android.gms.internal.firebase_ml.zzqg.zza(Unknown Source:23)
at com.google.android.gms.internal.firebase_ml.zznt.call(Unknown Source:4)
at com.google.android.gms.internal.firebase_ml.zznn.zza(Unknown Source:30)
at com.google.android.gms.internal.firebase_ml.zznq.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.zzf.dispatchMessage(Unknown Source:6)
at android.os.Looper.loop(Looper.java:193)
at android.os.HandlerThread.run(HandlerThread.java:65)
Caused by: java.net.SocketException: socket is closed
at com.android.org.conscrypt.ConscryptFileDescriptorSocket$SSLInputStream.read(ConscryptFileDescriptorSocket.java:551)
at com.android.okhttp.okio.Okio.read(Okio.java:136)
at com.android.okhttp.okio.AsyncTimeout.read(AsyncTimeout.java:211)
at com.android.okhttp.okio.RealBufferedSource.indexOf(RealBufferedSource.java:306)
at com.android.okhttp.okio.RealBufferedSource.indexOf(RealBufferedSource.java:300)
at com.android.okhttp.okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.java:196)
at com.android.okhttp.internal.http.Http1xStream.readResponse(Http1xStream.java:186)
at com.android.okhttp.internal.http.Http1xStream.readResponseHeaders(Http1xStream.java:127)
at com.android.okhttp.internal.http.HttpEngine.readNetworkResponse(HttpEngine.java:737)
at com.android.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:609)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:471)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:407)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:538)
at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getResponseCode(DelegatingHttpsURLConnection.java:105)
at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:26)
at com.google.android.gms.internal.firebase_ml.zzgd.<init>(Unknown Source:5)
at com.google.android.gms.internal.firebase_ml.zzga.zzfg(Unknown Source:43)
at com.google.android.gms.internal.firebase_ml.zzfk.zzfa(Unknown Source:131)
at com.google.android.gms.internal.firebase_ml.zzer.zzei(Unknown Source:51)
at com.google.android.gms.internal.firebase_ml.zzqf.zza(Unknown Source:68)
at com.google.android.gms.internal.firebase_ml.zzqg.zza(Unknown Source:23)
at com.google.android.gms.internal.firebase_ml.zznt.call(Unknown Source:4)
at com.google.android.gms.internal.firebase_ml.zznn.zza(Unknown Source:30)
at com.google.android.gms.internal.firebase_ml.zznq.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.zzf.dispatchMessage(Unknown Source:6)
at android.os.Looper.loop(Looper.java:193)
at android.os.HandlerThread.run(HandlerThread.java:65)
我通过将位图的大小减小到 recommended size using BitmapFactory Options. For more information on handling large bitmaps, see this or you can use a library like Glide 解决了我的问题。 更新 firebase 库也有帮助。