1

Android で ZBar SDK を使用して書籍をスキャンし、ISBN を取得するアプリケーションを作成しています。私は物理的な面ですべてを機能させることができました。ボタンを押すと、スキャナー ウィンドウがポップアップ表示され、バーコードがスキャンされます。

問題は、アプリケーションがスキャナから ISBN を取得したときに発生します。スキャナがバーコードを正しく読み取っていないか、正しいデータを取得していないようです。この問題を解決する方法を知っている人はいますか? ありがとう。以下は関連するコードといくつかの画面です

    @Override
public void onClick(View v) 
{
    //TODO add functionallity
    if(v.getId() == R.id.ScanButton)
    {
        Intent intent = new Intent(this, ZBarScannerActivity.class);
        intent.putExtra(ZBarConstants.SCAN_MODES, new int[]{Symbol.ISBN10, Symbol.ISBN13, Symbol.EAN8, Symbol.EAN13 });
        startActivityForResult(intent, ZBAR_SCANNER_REQUEST);

    }

}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{    
    if (resultCode == RESULT_OK) 
    {
        // Scan result is available by making a call to data.getStringExtra(ZBarConstants.SCAN_RESULT)
        // Type of the scan result is available by making a call to data.getStringExtra(ZBarConstants.SCAN_RESULT_TYPE)
        contentText.setText("ISBN: " + data.getStringExtra(ZBarConstants.SCAN_RESULT));
        Toast.makeText(this, "Scan Result = " + data.getStringExtra(ZBarConstants.SCAN_RESULT), Toast.LENGTH_SHORT).show();

        Toast.makeText(this, "Scan Result Type = " + data.getStringExtra(ZBarConstants.SCAN_RESULT_TYPE), Toast.LENGTH_SHORT).show();
        // The value of type indicates one of the symbols listed in Advanced Options below.
    } 
    else if(resultCode == RESULT_CANCELED) 
    {
        Toast.makeText(this, "Scanning Cancelled", Toast.LENGTH_SHORT).show();
    }
}

最初の画面

セカンドスクリーン

問題のあるバーコード

4

1 に答える 1

4

デスクトップ アプリケーションの 1 つで、Zbar を本番環境で使用しています。ここでは、画像からバーコードを抽出して使用します。あなたのものとは異なりますが、問題はライブ ストリームからバーコードを抽出する場合と同じです。

あなたが直面している問題は非常に一般的で、エラーが発生しやすいものです。そして最終的にはすべてが写真に依存します。(実際ZxingEymbarcodeや他のオープン ソースのものでも同じ動作が見られます。私が見つけた中で最も安定しているのはこれです)。最終的には、画像撮影のガイドラインに頼らざるを得ませんでした。以下は、それを回避するために使用する品質要因です。

アプリケーションの検出能力は、次の要因によって決まります。

  1. 解像度
  2. 集中
  3. 照明と露出
  4. ノイズ

したがって、写真を撮っている間は、上記の 4 つすべてに注意を払うことが不可欠です。

  1. 解決策: バーコードが画像のかなりの部分を占めることが望まれます。長い線形バーコードまたは密度の高い 2D シンボルの場合、おそらく解像度を上げる必要があります。解像度が 2 ピクセルを下回ると、バーコードをスキャンするのが難しくなります。

  2. フォーカス: ぼやけた画像は非常に望ましくありません。ぼやけた部分からなるバーコードの一部でも、検出不能につながります。

  3. 照明と露出: 画像が明るすぎたり露出しすぎたりすると、バーコードが完全に消えてしまう可能性があります。暗すぎる画像や露出不足の画像は、スキャナーに十分なコントラストを提供しません。また、光レベルが低いと、ノイズの多い画像が生成される傾向があります。

  4. ノイズ: 明るさ/色のランダムな変化により、バーコードのスキャンが困難になる場合があります。

  5. 角度: バーコードを水平または垂直に配置することをお勧めします。

  6. 傾き: カメラを画像に対して垂直に配置することをお勧めします。

上記はあなたの問題を解決しませんが、役に立てば幸いです

于 2013-08-29T12:43:34.213 に答える