2017-08-29 3 views
1

Recognizerを使用してリソース内の画像をスキャンしようとしましたが、フラグメント内にRegerParserSettingsがあります。 問題は、コールバックonScanningDoneで得られたBaseRecognitionResultが常にnullであることです。私はMRTDRecognizerでRecognitionSettingsを設定しようとしましたが、うまくいきましたので、ライブラリが適切に統合されていると思います。これは私が使用していますソースコードです:MicroblinkレコグナイザがRegexParserSettingsを設定しました

@Override 
public void onAttach(Context context) { 
    ... 

    try { 
     mRecognizer = Recognizer.getSingletonInstance(); 
     mRecognizer.setLicenseKey(context, LICENSE_KEY); 
    } catch (FeatureNotSupportedException | InvalidLicenceKeyException e) { 
     Log.d(TAG, e.getMessage()); 
    } 
    buildRecognitionSettings(); 
    mRecognizer.initialize(context, mRecognitionSettings, new DirectApiErrorListener() { 
     @Override 
     public void onRecognizerError(Throwable t) { 
      //Handle exception 

     } 
    }); 
} 

private void buildRecognitionSettings() { 
     mRecognitionSettings = new RecognitionSettings(); 
     mRecognitionSettings.setRecognizerSettingsArray(setupSettingsArray()); 
} 

private RecognizerSettings[] setupSettingsArray() { 
     RegexParserSettings regexParserSettings = new RegexParserSettings("[A-Z0-9]{17}"); 
     BlinkOCRRecognizerSettings sett = new BlinkOCRRecognizerSettings(); 
     sett.addParser("myRegexParser", regexParserSettings); 
     return new RecognizerSettings[] { sett }; 
} 

私はのようなイメージをスキャン:

mRecognizer.recognizeBitmap(bitmap, Orientation.ORIENTATION_PORTRAIT, FragMicoblink.this); 

そして、これがフラグメントで事前に

@Override 
public void onScanningDone(RecognitionResults results) { 
    BaseRecognitionResult[] dataArray = results.getRecognitionResults(); 

    //dataArray is null 

    for(BaseRecognitionResult baseResult : dataArray) { 
     if (baseResult instanceof BlinkOCRRecognitionResult) { 
      BlinkOCRRecognitionResult result = (BlinkOCRRecognitionResult) baseResult; 
      if (result.isValid() && !result.isEmpty()) { 
       String parsedAmount = result.getParsedResult("myRegexParser"); 
       if (parsedAmount != null && !parsedAmount.isEmpty()) { 
        Log.d(TAG, "Result: " + parsedAmount); 
       } 
      } 
     } 
    } 
}` 

感謝を取り扱うコールバックです!

答えて

1

Helllo Spirrow。

あなたのコードとSegmentScanActivityとの違いは、彼らがカメラから到着するSegmentScanActivityがカメラのフレームを処理しながら、あなたのコードは、あなたが処理のために送るだけで、単一のビットマップ画像を処理することができDirectAPIを、使用していることです。これを行う間に、OCR品質を改善するために時間の冗長な情報を利用することができる。すなわち、より良い品質のOCR結果を得るために複数のビデオフレームからの連続するOCR結果を組み合わせる。

この機能はDirectAPIで利用できません。SegmentScanActivity、またはcamera managementのカスタムスキャンアクティビティのいずれかを使用する必要があります。

また、よりここに見つけることができます。 https://github.com/BlinkID/blinkid-android/issues/54

よろしく

関連する問題