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

我们一直在我们的一个桌面应用程序中使用 Zbar。在此我们从图像中提取条形码并使用它。虽然它与您的不同,但问题是相同的,我们从实时流中提取条形码。

您面临的问题非常普遍且容易出错。最终一切都取决于图片。(事实上​​,你会观察到与Zxing,Eymbarcode和其他开源行为相同的行为。我发现的最稳定的是this)。最终,我们不得不求助于图像拍摄指南。以下是我们用来避免它的质量因素:

以下因素决定了应用程序的检测能力:

  1. 解析度
  2. 重点
  3. 照明和曝光
  4. 噪音

因此,在拍摄照片时,必须注意上述四个问题。

  1. 分辨率:希望条形码在图像上占据重要部分。对于长的线性条形码或密集的二维符号,可能必须提高分辨率。如果分辨率降低到两个像素以下,则很难扫描条形码。

  2. 焦点:模糊图像是非常不受欢迎的。即使部分条码由模糊部分组成,也会导致无法检测。

  3. 照明和曝光:太亮或曝光过度的图像会完全洗掉任何条码。太暗或曝光不足的图像无法为扫描仪提供足够的对比度。低光照水平也往往会产生更嘈杂的图像。

  4. 噪音:亮度/颜色的随机变化会使条形码难以扫描。

  5. 角度:最好将条形码水平或垂直放置。

  6. 倾斜:最好将相机放置在垂直于图像的位置。

以上并不能解决您的问题,但希望对您有所帮助

于 2013-08-29T12:43:34.213 回答