बारकोड स्कैनिंग खुदरा और लॉजिस्टिक्स से लेकर स्वास्थ्य सेवा तक विभिन्न उद्योगों में एक आवश्यक उपकरण बन गया है। डेस्कटॉप प्लेटफ़ॉर्म पर, यह मैन्युअल डेटा प्रविष्टि के बिना जानकारी के त्वरित कैप्चर और प्रसंस्करण को सक्षम बनाता है, जिससे समय की बचत होती है और त्रुटियां कम होती हैं। इस ट्यूटोरियल में, हम Windows, Linux के लिए पायथन बारकोड स्कैनर का निर्माण करके Dynamsoft Capture Vision SDK की क्षमताओं की खोज जारी रखेंगे। , और macOS।
डायनेमसॉफ्ट कैप्चर विजन ट्रायल लाइसेंस: डायनामसॉफ्ट कैप्चर विजन एसडीके के लिए 30-दिवसीय ट्रायल लाइसेंस कुंजी प्राप्त करें।
पायथन पैकेज: निम्नलिखित कमांड का उपयोग करके आवश्यक पायथन पैकेज स्थापित करें:
pip install dynamsoft-capture-vision-bundle opencv-python
ये पैकेज किस लिए हैं?
चूंकि डायनामसॉफ्ट कैप्चर विजन एसडीके विभिन्न इमेज प्रोसेसिंग कार्यों के साथ एकीकृत एक एकीकृत ढांचा है, हम कैप्चर() विधि में प्रीसेटटेम्पलेट नाम पास करके आसानी से इमेज प्रोसेसिंग मोड के बीच स्विच कर सकते हैं।
निम्नलिखित कोड स्निपेट डायनामसॉफ्ट कैप्चर विजन एसडीके में अंतर्निहित PresetTemplate गणना दिखाता है:
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() )
PT_DEFAULT टेम्प्लेट दस्तावेज़ पहचान, MRZ पहचान और बारकोड पहचान सहित कई कार्यों का समर्थन करता है। विशेष रूप से बारकोड पहचान के लिए प्रदर्शन को अनुकूलित करने के लिए, टेम्पलेट को EnumPresetTemplate.PT_READ_BARCODES.value पर सेट करें।
पिछले दस्तावेज़ पहचान और एमआरजेड मान्यता उदाहरणों का संदर्भ देते हुए, स्थिर छवियों से बारकोड पढ़ने के लिए निम्नलिखित कोड का उपयोग किया जा सकता है:
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...")
नोट: लाइसेंस-कुंजी को अपनी वैध लाइसेंस कुंजी से बदलें।
एक ही छवि से कई बारकोड को डिकोड करना खुदरा और लॉजिस्टिक्स में एक आम उपयोग का मामला है। निम्नलिखित छवि में विभिन्न प्रारूपों के कई बारकोड हैं:
किसी छवि फ़ाइल से बारकोड पढ़ते समय, हम मुख्य थ्रेड में कैप्चर() विधि को लागू करते हैं। हालाँकि, वेबकैम से वास्तविक समय की वीडियो स्ट्रीम को संसाधित करने के लिए, मुख्य थ्रेड को अवरुद्ध होने से बचाने के लिए एक अलग दृष्टिकोण की आवश्यकता होती है। डायनामसॉफ्ट कैप्चर विजन एसडीके वास्तविक समय के वीडियो फ्रेम को संभालने और उन्हें मूल सी वर्कर थ्रेड पर अतुल्यकालिक रूप से संसाधित करने के लिए एक अंतर्निहित तंत्र प्रदान करता है। इसे लागू करने के लिए, छवि डेटा और कैप्चर किए गए परिणामों को संभालने के लिए क्रमशः ImageSourceAdapter और CapturedResultReceiver कक्षाओं का विस्तार करें, फिर वीडियो स्ट्रीम को संसाधित करना शुरू करने के लिए प्रारंभ_कैप्चरिंग() विधि को कॉल करें।
from dynamsoft_capture_vision_bundle import * import cv2 import numpy as np import queue from utils import * class FrameFetcher(ImageSourceAdapter): def has_next_image_to_fetch(self) -> bool: return True def add_frame(self, imageData): self.add_image_to_buffer(imageData) class MyCapturedResultReceiver(CapturedResultReceiver): def __init__(self, result_queue): super().__init__() self.result_queue = result_queue def on_captured_result_received(self, captured_result): self.result_queue.put(captured_result) if __name__ == '__main__': errorCode, errorMsg = LicenseManager.init_license( "LICENSE-KEY") if errorCode != EnumErrorCode.EC_OK and errorCode != EnumErrorCode.EC_LICENSE_CACHE_USED: print("License initialization failed: ErrorCode:", errorCode, ", ErrorString:", errorMsg) else: vc = cv2.VideoCapture(0) if not vc.isOpened(): print("Error: Camera is not opened!") exit(1) cvr = CaptureVisionRouter() fetcher = FrameFetcher() cvr.set_input(fetcher) # Create a thread-safe queue to store captured items result_queue = queue.Queue() receiver = MyCapturedResultReceiver(result_queue) cvr.add_result_receiver(receiver) errorCode, errorMsg = cvr.start_capturing( EnumPresetTemplate.PT_READ_BARCODES.value) if errorCode != EnumErrorCode.EC_OK: print("error:", errorMsg) while True: ret, frame = vc.read() if not ret: print("Error: Cannot read frame!") break fetcher.add_frame(convertMat2ImageData(frame)) if not result_queue.empty(): captured_result = result_queue.get_nowait() items = captured_result.get_items() for item in items: if item.get_type() == EnumCapturedResultItemType.CRIT_BARCODE: text = item.get_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 cv2.drawContours( frame, [np.intp([(x1, y1), (x2, y2), (x3, y3), (x4, y4)])], 0, (0, 255, 0), 2) cv2.putText(frame, text, (x1, y1), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2) del location if cv2.waitKey(1) & 0xFF == ord('q'): break cv2.imshow('frame', frame) cvr.stop_capturing() vc.release() cv2.destroyAllWindows()
स्पष्टीकरण
https://github.com/yushulx/python-barcode-qrcode-sdk/tree/main/examples/official/10.x
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3