Я пытаюсь интегрировать распознавание текста в мобильные устройства для извлечения чисел из изображений. Для этого я решил использовать Firebase ml kit , поскольку он предоставляет решение на устройстве (действительно полезно, когда у вас нет соединения inte rnet для связи с API).
Я интегрировал Firebase ml kit в свое приложение и использую функцию getOnDeviceTextRecognizer () для выполнения операции OCR, но возвращаемый результат совсем не годится.
Как вы можете видеть на примере, результаты плохие, даже если в качестве входных данных предоставлено довольно хорошее изображение.
Это это пример кода, используемого для запуска OCR (очень похожий на тот, который приведен в официальной документации)
public class PictureActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
try {
FirebaseVisionImage image = FirebaseVisionImage.fromFilePath(getApplicationContext(), Uri.parse("android.resource://" + getPackageName() + "/" + R.drawable.test2));
recognizeText(image);
} catch(IOException ex){
Log.d("exception","test");
}
}
private void recognizeText(FirebaseVisionImage image) {
// [START get_detector_default]
FirebaseVisionTextRecognizer detector = FirebaseVision.getInstance()
.getOnDeviceTextRecognizer();
// [END get_detector_default]
// [START run_detector]
Task<FirebaseVisionText> result =
detector.processImage(image)
.addOnSuccessListener(new OnSuccessListener<FirebaseVisionText>() {
@Override
public void onSuccess(FirebaseVisionText firebaseVisionText) {
// Task completed successfully
// [START_EXCLUDE]
// [START get_text]
for (FirebaseVisionText.TextBlock block : firebaseVisionText.getTextBlocks()) {
Rect boundingBox = block.getBoundingBox();
Point[] cornerPoints = block.getCornerPoints();
String text = block.getText();
Log.d("TESTING", text);
setContentView(R.layout.activity_picture);
TextView output = findViewById(R.id.outputResult);
output.setText(text);
for (FirebaseVisionText.Line line: block.getLines()) {
// ...
for (FirebaseVisionText.Element element: line.getElements()) {
// ...
}
}
}
// [END get_text]
// [END_EXCLUDE]
}
})
.addOnFailureListener(
new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
// Task failed with an exception
// ...
}
});
// [END run_detector]
}
Мне интересно, есть ли какие-то параметры, которые мы можем изменить, чтобы оптимизировать OCR для нашего например, вы можете сделать с Tesseract. Я проверил документацию, но не нашел никакого полезного предложения.
Кроме того, я не сфокусирован на Firebase ml kit. Так что, если у вас есть другие предложения, которые могут работать на мобильных устройствах (без запросов к inte rnet API), не стесняйтесь поделиться.
Tesseract была хорошей альтернативой, но все android найденные обертки больше не поддерживаются.