2013-08-02 247 views
0

我在.NET上zxing取得了巨大的成功,並試圖獲得解碼QR條碼的最佳速度(我有很多事情要做--1.8M)。我使用的代碼(以及它的位):zxing.net QR解碼優化

// Create Barcode decoder 
BarcodeReader q = new BarcodeReader(); 
q.PossibleFormats = new List<BarcodeFormat>(); 
q.PossibleFormats.Add(BarcodeFormat.QR_CODE); 
q.AutoRotate = true; // Not necessary for QR? 
q.TryHarder = false; 

// Decode result 
Result[] r = q.DecodeMultiple(imageFile); 

我的代碼,因爲它是在一個循環中有點小聰明,並試圖難上加難,如果它沒有找到它的第一次。

有沒有辦法添加區域,ROI或更小區域來加速檢測?

任何其他建議,以提高性能?

回答

1

與ZXing.Net最快的方式對QR碼如下:

// Create Barcode decoder 
BarcodeReader q = new BarcodeReader(); 
q.PossibleFormats = new List<BarcodeFormat>(); 
q.PossibleFormats.Add(BarcodeFormat.QR_CODE); 
q.AutoRotate = false; 
q.TryHarder = false; 

// Decode result 
Result r = q.Decode(imageFile); 

但它僅解碼它找到的第一個QR碼。 如果您不需要DecodeMultiple,請避免使用它。 所有其他選項只能在真正需要時才使用。 QR碼解碼不需要AutoRotate。

如果你的圖像真的很大,在解碼之前縮小它們。 對於大多數情況下,不需要分辨率高於1000像素的圖像。 唯一的例外是非常小的QR碼。

另一個很好的優化是使用提供灰度圖像的圖像源。 需要很多CPU週期來計算來自 RGB圖像的亮度值。最快的選項是8位灰度圖像。

+0

好的。我正在做黑白影像,所以沒有RGB。有沒有辦法讓zxing.net限制它看起來的區域,而不是創建該區域的新位圖的昂貴選項? –

+0

是的,您可以使用駐留在... LuminanceSource類上的裁剪方法。這種方式最適合於來自存儲庫樹幹的當前源,因爲有一種解碼方法直接使用... LuminanceSource實例。使用ZXing.Net的當前版本0.11,您必須將BarcodeReader與自己的CreateLuminanceSource委託一起使用。 – Michael

+0

爲什麼你建議避免DecodeMultiple。我正在研究一個項目,我需要在一個圖像中掃描多個QR碼。 – Ray