2012-03-18 196 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