代码之家  ›  专栏  ›  技术社区  ›  Alexei

为什么每次扫描后结果相差不大?

  •  0
  • Alexei  · 技术社区  · 6 年前

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

    在我的应用程序中/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. “某个公司的名字 O081操作器U1 拿铁 17.00摄氏度 17.00摄氏度 1.000 X 17,00倍 1.060 X 3.08英寸 拿铁 滴滴涕 37.00美元 TVA C 10.00% 数字 37个 .00点 803艺术 穆图米姆!!! 15: 14个 BON F ISCAL:0131号 长官。 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型
      1111111111 o01操作员81
      乐天

      1.008 X 17.00米

      17.00摄氏度

      3.00摄氏度
      拿铁
      阿普特
      0AL公司
      努梅拉尔
      37.00美元

    2. .36条
      .00点
      803艺术
      VA C 10.00%
      37个

      103654个

      15: 14个
      BON F ISCAL:0131号
      中科0602347
      序列号

    每次扫描后你都能看到 我得到了不同的结果。

    问题:

    • 如何获得最一致的结果?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Frank van Puffelen    6 年前

    所以很有可能你给它一个稍微不同的图像,例如从你的相机给它图像并移动它。即使你稍微移动相机,图像也会有所不同,ML-Kit提取的文本也会有所不同。

    我一直从这些ML模型中看到这种行为。例如,当你慢慢移动相机时,Google Translate也很容易受到其解释上细微差异的影响。所以我怀疑你是否可以对模型进行调整/配置。

    1. 训练一个自定义模型,看看是否可以消除来自相似图像的输出差异。我承认,我有点怀疑在一般图像上出现这种情况的可能性,给出了上面的例子。但是,您可能拥有的数据集具有较少的小变化,或者甚至可能添加预处理步骤。
        2
  •  0
  •   adi purnama    6 年前

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