Я запустил новое приложение для распознавания текста по номерам файлов на полках и использовал следующее распознавание текста ML Kit на Youtube: Учебное пособие по распознаванию текста ML KIT
Он отлично работает до тех пор, покатак как номера файлов написаны горизонтально.Когда текст ориентирован вертикально, и я поворачиваю телефон в горизонтальном положении, приложение учитывает ориентацию, и распознавание текста больше не работает.
Я попытался добавить оба
<activity android:name=".NameOfTheActivity" android:screenOrientation="portrait">
в манифесте и setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)
или даже
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR)
в методе onCreate.Упражнение остается в портретном режиме, даже если телефон находится в горизонтальном положении.Тем не менее, распознавание текста по-прежнему не работает при использовании моего телефона в горизонтальном положении.
Соответствующие части кода Деятельности следующие:
//Event Camera View
cameraView.addCameraKitListener(new CameraKitEventListener() {
@Override
public void onEvent(CameraKitEvent cameraKitEvent) {
}
@Override
public void onError(CameraKitError cameraKitError) {
}
@Override
public void onImage(CameraKitImage cameraKitImage) {
//Show Dialog
waitingDialog.show();
//Processing image
Bitmap bitmap = cameraKitImage.getBitmap();
bitmap = Bitmap.createScaledBitmap(bitmap, cameraView.getWidth(), cameraView.getHeight(), false);
cameraView.stop();
recognizeText(bitmap);
}
@Override
public void onVideo(CameraKitVideo cameraKitVideo) {
}
});
private void recognizeText(Bitmap bitmap) {
FirebaseVisionImage image = FirebaseVisionImage.fromBitmap(bitmap);
FirebaseVisionTextRecognizer textRecognizer = FirebaseVision.getInstance().getOnDeviceTextRecognizer();
textRecognizer.processImage(image)
.addOnSuccessListener(new OnSuccessListener<FirebaseVisionText>() {
@Override
public void onSuccess(FirebaseVisionText firebaseVisionText) {
drawTextResult(firebaseVisionText);
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.d("EDMT_ERROR", e.getMessage());
}
});
}
У кого-нибудь есть какой-нибудь совет, как заставить это работать, или знает учебник, который работает?Я видел пример здесь: Пример Firebase , в котором они используют объект media.Image для учета ориентации.Поскольку я не знаю, как изменить исходный код (в котором используется растровое изображение), я просто пытался «деактивировать» датчик ориентации, чтобы полученное изображение / растровое изображение были точно такими же, независимо от того, использую ли я телефон в портретной ориентации илиландшафтное положение.В этом случае метод распознавания (растровое изображение) должен возвращать одинаковые ответы в обоих случаях.