2012-03-18 197 views
3

正如标题所示,我试图使用ZXing的Barcode Scanner应用程序解码Android设备上的QR码。我已经在互联网上阅读了多个关于如何将应用程序集成到自己的项目中的建议。相反,应该使用IntentIntegratorAndroid上的ZXing - 解码性能极其缓慢

但是,这不是我的选择。以下是我为每个相机帧调用的代码片段。

LuminanceSource source = new RGBLuminanceSource(bitmap); 
BinaryBitmap bm = new BinaryBitmap(new HybridBinarizer(source)); 

try { 
    Result result = reader.decode(bm); // This line takes approx. 6seconds 
    if (!result.getText().isEmpty()) { 
     Log.e("MYTAG", "Found something: "+result.getText()); 
    } 
} 
catch (NotFoundException e) { 
    e.printStackTrace(); 
} catch (ChecksumException e) { 
    e.printStackTrace(); 
} catch (FormatException e) { 
    e.printStackTrace(); 
} 

正如我所说的,这个过程非常缓慢。解码需要5到8秒之间的任何时间。

我试过使用MultiFormatReaderQRCodeReader

任何人都可以谈谈这个问题?

+0

你可以把你的答案。我有同样的问题 – 2014-12-30 13:04:28

回答

5

原来,Android调试器连接到应用程序时性能大受影响。在HTC Desire HD上扫描完整相机图像所需的大概时间大约需要150ms - 200ms。愚蠢的错误在我的角色。

+0

谢谢!把我的头发撕掉了。将调试器分离出来,然后在很短的时间内读取代码。 – 2017-11-20 18:22:45

1

我只能通过意图使用斑马线,这是非常快的那种方式 - 抛出一个想法在这里:也许是输入图像过大 - 也许扔进解码器之前缩小尺寸..

1

这正是您为什么要通过Intent进行扫描的原因 - 无需编码或调试,而且扫描效果最佳。

在这里,我想你是给它一个完整的500万像素或什么东西。不要这样做。

+0

一些额外的信息:我的公司使用zxing库来解码各种硬件条码扫描仪。 640x480和752x480是我们使用的最常见的预览尺寸;两者都很好。 – Fishbreath 2012-03-18 17:08:53

+0

那很好,那些预览尺寸很容易被咬坏。一个循环对我来说在大约150ms内完成。你打开TRY_HARDER吗?这也是你不应该在手机上做的事情。 – 2012-03-18 17:24:54

+2

另外,为什么RGBLuminanceSource?您将使用YUVPlanarLuminanceSource和预览数据。 – 2012-03-18 17:25:32

0

解码性能还取决于您的手机CPU速度。对于给定的手机/平板电脑,性能不会超过某个特定点,因为该库适用于ARM/ACPU。

您可能需要努力优化您的应用程序。此外,您可以:

  1. 使用intent方法以使线程不同。

  2. 尝试分辨率较低的图像,因此图像处理不会占用太多CPU。

  3. 保持均匀的倾斜度或尝试在手机和条形码贴纸/打印页面之间保持平行平面。

+0

我可以从你的第一点来询问使用不同线程的意图方法。这是否意味着使用嵌入式zxing解码器使用UI线程?像这里:https://github.com/journeyapps/zxing-android-embedded/blob/master/sample/src/main/java/example/zxing/ContinuousCaptureActivity.java – 2016-11-15 01:31:11