首页 > 解决方案 > 为什么每次扫描后结果差别不大?

问题描述

Android Studio 3.6,Firebase 机器学习套件。

我创建了需要扫描图像并从中提取文本的 Android 应用程序。为此,我使用 Firebase ML Kit。

在我的应用程序/build.gradle 中:

 dependencies {
        implementation fileTree(dir: 'libs', include: ['*.jar'])
        implementation 'com.google.android.material:material:1.2.0-alpha03'
        implementation 'com.google.android.gms:play-services-maps:17.0.0'
        implementation "com.otaliastudios:cameraview:2.5.0"
        implementation('com.crashlytics.sdk.android:crashlytics:2.10.1@aar') { transitive = true; }
        implementation 'com.google.firebase:firebase-ml-vision:24.0.1'
        implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
        implementation 'com.synnapps:carouselview:0.1.4'
        implementation 'androidx.appcompat:appcompat:1.1.0'

这是我的活动:

import android.Manifest
import android.content.DialogInterface
import android.content.Intent
import android.graphics.Bitmap
import android.os.Bundle
import android.widget.Toast
import androidx.databinding.DataBindingUtil
import com.google.firebase.ml.vision.FirebaseVision
import com.google.firebase.ml.vision.common.FirebaseVisionImage
import com.google.firebase.ml.vision.text.FirebaseVisionText
private fun runDetector(bitmap: Bitmap?) {
        val image = FirebaseVisionImage.fromBitmap(bitmap!!)
        val detector = FirebaseVision.getInstance().onDeviceTextRecognizer

        val result = detector.processImage(image)
            .addOnSuccessListener { firebaseVisionText ->
                processTextResult(firebaseVisionText)
            }
            .addOnFailureListener { e ->
            }
    }

    private fun processTextResult(firebaseVisionText: FirebaseVisionText) {
        var detectedText = "\n"
        firebaseVisionText.textBlocks.forEach {         
            detectedText += it.text + "\n"
        }
        Debug.d(TAG, "processTextResult: detectedText_start\n")
        Debug.d(TAG, detectedText)
        Debug.d(TAG, "processTextResult: detectedText_end")

这是扫描 3 次相同图像(带文本)后的结果:

  1. “某些公司名称 CF O081 0operator U1 Latte 1111111111111 17.00 C 17.00 C 3.08 C 1.000 X 17,00 1.000 X 17.00 1.060 X 3.08 Latte dDte 37 .00 OAL TVA C 10.00% NUMERAR 3.08 37 !! ! 183654 23-12-2819 15:14 BON F ISCAL: 0131 ZKe0682347 Ser. N. Inr N F702822971"

2.

"some company name
C.F
C                            
F                            
9881                         
Latte                        
1111111111111
Operator 81                  
1.000 X 17.00                
1,008 X 17.00                
17.00 C                      
17.00 C                      
3.00 C                       
Latte                        
apte                         
1.060 X 3.08                 
31.86                        
UIAL                         
TVA C 10.00%                 
NUMERAR                      
B. .36                       
,00                          
ART                          
37                           
883                          
MUL TUMIM !                  
15:14                        
103654                       
BON FISCAL: 6131             
23-12-2819                   
ZKO0682347                   
Ser.N                        
N.Inr                        
F782022971"
  1. "一些公司名称
    F
    1111111111111 o01 操作员 81
    Lotte
    1.808 X 17.00
    1.008 X 17.00
    1.060 x 3,08
    17.00 C
    17.00 C
    3.00 C
    Latte
    apte
    0AL
    NUME RAR
    37.00

  2. .36
    .00
    803 ART
    VA C 10.00%
    37
    MUL TUMIM !!!
    103654
    23-12-2819
    15:14
    BON F ISCAL: 0131
    ZKO0602347
    Ser .N
    N.
    Inr F702022971"

正如您在每次扫描同一图像后看到的那样,我得到不同的结果。

问题:

标签: androidfirebase-mlkit

解决方案


这是因为扫描时相机的角度不同,要检查大多数相同的结果,您必须编写复杂的代码


推荐阅读