La
La lecture de codes-barres est devenue un outil essentiel dans divers secteurs, de la vente au détail et de la logistique aux soins de santé. Sur les plates-formes de bureau, il permet la capture et le traitement rapides des informations sans saisie manuelle des données, ce qui permet de gagner du temps et de réduire les erreurs. Dans ce didacticiel, nous continuerons à explorer les capacités du SDK Dynasoft Capture Vision en créant un scanner de codes-barres Python pour Windows, Linux , et macOS.
Licence d'essai Dynasoft Capture Vision : Obtenez une clé de licence d'essai de 30 jours pour le SDK Dynamsoft Capture Vision.
Packages Python : installez les packages Python requis à l'aide des commandes suivantes :
pip install dynamsoft-capture-vision-bundle opencv-python
A quoi servent ces forfaits ?
Étant donné que le SDK Dynamsoft Capture Vision est un framework unifié intégré à diverses tâches de traitement d'image, nous pouvons facilement basculer entre les modes de traitement d'image en passant le nom PresetTemplate à la méthode capture().
L'extrait de code suivant montre l'énumération PresetTemplate intégrée dans le SDK Dynamsoft Capture Vision :
class EnumPresetTemplate(Enum): PT_DEFAULT = _DynamsoftCaptureVisionRouter.getPT_DEFAULT() PT_READ_BARCODES = _DynamsoftCaptureVisionRouter.getPT_READ_BARCODES() PT_RECOGNIZE_TEXT_LINES = _DynamsoftCaptureVisionRouter.getPT_RECOGNIZE_TEXT_LINES() PT_DETECT_DOCUMENT_BOUNDARIES = ( _DynamsoftCaptureVisionRouter.getPT_DETECT_DOCUMENT_BOUNDARIES() ) PT_DETECT_AND_NORMALIZE_DOCUMENT = ( _DynamsoftCaptureVisionRouter.getPT_DETECT_AND_NORMALIZE_DOCUMENT() ) PT_NORMALIZE_DOCUMENT = _DynamsoftCaptureVisionRouter.getPT_NORMALIZE_DOCUMENT() PT_READ_BARCODES_SPEED_FIRST = ( _DynamsoftCaptureVisionRouter.getPT_READ_BARCODES_SPEED_FIRST() ) PT_READ_BARCODES_READ_RATE_FIRST = ( _DynamsoftCaptureVisionRouter.getPT_READ_BARCODES_READ_RATE_FIRST() ) PT_READ_SINGLE_BARCODE = _DynamsoftCaptureVisionRouter.getPT_READ_SINGLE_BARCODE() PT_RECOGNIZE_NUMBERS = _DynamsoftCaptureVisionRouter.getPT_RECOGNIZE_NUMBERS() PT_RECOGNIZE_LETTERS = _DynamsoftCaptureVisionRouter.getPT_RECOGNIZE_LETTERS() PT_RECOGNIZE_NUMBERS_AND_LETTERS = ( _DynamsoftCaptureVisionRouter.getPT_RECOGNIZE_NUMBERS_AND_LETTERS() ) PT_RECOGNIZE_NUMBERS_AND_UPPERCASE_LETTERS = ( _DynamsoftCaptureVisionRouter.getPT_RECOGNIZE_NUMBERS_AND_UPPERCASE_LETTERS() ) PT_RECOGNIZE_UPPERCASE_LETTERS = ( _DynamsoftCaptureVisionRouter.getPT_RECOGNIZE_UPPERCASE_LETTERS() )
Le modèle PT_DEFAULT prend en charge plusieurs tâches, notamment la détection de documents, la reconnaissance MRZ et la détection de codes-barres. Pour optimiser les performances spécifiquement pour la détection de codes-barres, définissez le modèle sur EnumPresetTemplate.PT_READ_BARCODES.value.
En référence aux exemples précédents de détection de documents et de reconnaissance MRZ, le code suivant peut être utilisé pour lire des codes-barres à partir d'images statiques :
import sys from dynamsoft_capture_vision_bundle import * import os import cv2 import numpy as np from utils import * if __name__ == '__main__': print("**********************************************************") print("Welcome to Dynamsoft Capture Vision - Barcode Sample") print("**********************************************************") error_code, error_message = LicenseManager.init_license( "LICENSE-KEY") if error_code != EnumErrorCode.EC_OK and error_code != EnumErrorCode.EC_LICENSE_CACHE_USED: print("License initialization failed: ErrorCode:", error_code, ", ErrorString:", error_message) else: cvr_instance = CaptureVisionRouter() while (True): image_path = input( ">> Input your image full path:\n" ">> 'Enter' for sample image or 'Q'/'q' to quit\n" ).strip('\'"') if image_path.lower() == "q": sys.exit(0) if image_path == "": image_path = "../../../images/multi.png" if not os.path.exists(image_path): print("The image path does not exist.") continue result = cvr_instance.capture( image_path, EnumPresetTemplate.PT_READ_BARCODES.value) if result.get_error_code() != EnumErrorCode.EC_OK: print("Error:", result.get_error_code(), result.get_error_string()) else: cv_image = cv2.imread(image_path) items = result.get_items() print('Found {} barcodes.'.format(len(items))) for item in items: format_type = item.get_format() text = item.get_text() print("Barcode Format:", format_type) print("Barcode Text:", text) location = item.get_location() x1 = location.points[0].x y1 = location.points[0].y x2 = location.points[1].x y2 = location.points[1].y x3 = location.points[2].x y3 = location.points[2].y x4 = location.points[3].x y4 = location.points[3].y del location cv2.drawContours( cv_image, [np.intp([(x1, y1), (x2, y2), (x3, y3), (x4, y4)])], 0, (0, 255, 0), 2) cv2.putText(cv_image, text, (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 2) cv2.imshow( "Original Image with Detected Barcodes", cv_image) cv2.waitKey(0) cv2.destroyAllWindows() input("Press Enter to quit...")
Remarque : remplacez la LICENSE-KEY par votre clé de licence valide.
Le décodage de plusieurs codes-barres à partir d'une seule image est un cas d'utilisation courant dans le commerce de détail et la logistique. L'image suivante contient plusieurs codes-barres de différents formats :
Lors de la lecture de codes-barres à partir d'un fichier image, nous invoquons la méthode capture() dans le thread principal. Cependant, pour traiter les flux vidéo en temps réel provenant d’une webcam, une approche différente est nécessaire pour éviter de bloquer le thread principal. Le SDK Dynamsoft Capture Vision fournit un mécanisme intégré pour gérer les images vidéo en temps réel et les traiter de manière asynchrone sur un thread de travail C natif. Pour implémenter cela, étendez les classes ImageSourceAdapter et CapturedResultReceiver pour gérer respectivement les données d'image et les résultats capturés, puis appelez la méthode start_capturing() pour commencer le traitement du flux vidéo.
pip install dynamsoft-capture-vision-bundle opencv-python
Explication
https://github.com/yushulx/python-barcode-qrcode-sdk/tree/main/examples/official/10.x
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!