java - 使用 ZBar (Android) SDK,我的应用程序从同一本书中获取不同的 ISBN

标签 java android zbar

我正在创建一个应用程序,该应用程序在 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();
    }
}

First Screen

Second Screen

Offending Bar Code

最佳答案

我们一直在我们的一个桌面应用程序的生产中使用 Zbar。在此我们从图像中提取条形码并使用它。虽然和你的不一样,但是我们从直播中提取条形码的问题是一样的。

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

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

  1. 决议
  2. 专注
  3. 光照和曝光
  4. 噪音

因此,在拍摄照片时,必须注意以上四个方面。

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

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

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

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

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

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

以上并没有解决你的问题,希望对你有所帮助

关于java - 使用 ZBar (Android) SDK,我的应用程序从同一本书中获取不同的 ISBN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18411818/

相关文章:

java - 函数参数中的3个点是什么意思?

android - 为什么 CoordinatorLayout 在底部显示空白?

android - Dagger 2 : NoClassDefFoundError: dagger/producers/ProducerModule

python - ./zbarmodule.h :26:10: fatal error: 'zbar.h' file not found

java - Xuggler 不转换 .webm 文件?

java - 搜索列表中的元素

java - (.Net + SQL Server +Azure ) 与 (Java + Oracle +Google App Engine) 哪个更适合这个项目?

谷歌地图 url 的 Java 正则表达式?

android - 如何为 android ZBar QrCode 自定义 Scanner 框架?

aws-lambda - lambda 层中没有可用的包 zbar