2013-08-02 4 views
0

J'ai beaucoup de succès avec zxing sur .NET et j'essaie d'obtenir la meilleure vitesse pour décoder les codes-barres QR (j'ai beaucoup à faire - 1,8M). Le code J'utilise (ainsi les bits de celui-ci):Optimisation de zxing.net Décodage 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); 

Mon code est un peu plus intelligent en ce qu'elle est dans une boucle et essaie plus difficile si elle ne trouve pas la première fois.

Existe-t-il un moyen d'ajouter une zone, un ROI ou une zone plus petite pour accélérer la détection?

D'autres recommandations pour améliorer les performances?

Répondre

1

La façon la plus rapide avec ZXing.Net pour les codes QR est le suivant:

// 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); 

Mais il ne décode que le premier code QR qui se trouve. Évitez DecodeMultiple si vous n'en avez pas besoin. Toutes les autres options ne doivent être utilisées que si c'est vraiment nécessaire. AutoRotate n'est pas nécessaire pour le décodage de code QR.

Si vos images sont vraiment grandes, réduisez-les avant de les décoder. Dans la plupart des cas, il n'est pas nécessaire d'utiliser des images d'une résolution supérieure à 1 000 pixels. Les seules exceptions sont les minuscules codes QR.

Une autre bonne optimisation est l'utilisation d'une source d'image qui donne des images en niveaux de gris. Un grand nombre de cycles CPU est nécessaire pour le calcul des valeurs de luminance à partir de images RVB. L'option la plus rapide est les images en niveaux de gris 8 bits.

+0

Ok. Je fais des images bitonales, donc il n'y a pas de RVB. Existe-t-il un moyen d'obtenir zxing.net pour limiter la région dans laquelle il regarde, plutôt que l'option coûteuse de créer une nouvelle bitmap de la région? –

+0

Oui, vous pouvez utiliser la méthode crop qui réside dans les classes ... LuminanceSource. Cette méthode fonctionne mieux avec la source actuelle du tronc de référentiels car il existe une méthode Decode qui utilise directement une instance de LuminanceSource. Avec la version actuelle 0.11 de ZXing.Net, vous devez utiliser le BarcodeReader avec un propre délégué CreateLuminanceSource. – Michael

+0

Pourquoi suggérez-vous d'éviter DecodeMultiple. Je travaille sur un projet où j'ai besoin de scanner plusieurs codes QR dans une image. – Ray