"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > विंडोज़, लिनक्स और मैकओएस के लिए पायथन बारकोड स्कैनर कैसे बनाएं

विंडोज़, लिनक्स और मैकओएस के लिए पायथन बारकोड स्कैनर कैसे बनाएं

2024-11-02 को प्रकाशित
ब्राउज़ करें:851

बारकोड स्कैनिंग खुदरा और लॉजिस्टिक्स से लेकर स्वास्थ्य सेवा तक विभिन्न उद्योगों में एक आवश्यक उपकरण बन गया है। डेस्कटॉप प्लेटफ़ॉर्म पर, यह मैन्युअल डेटा प्रविष्टि के बिना जानकारी के त्वरित कैप्चर और प्रसंस्करण को सक्षम बनाता है, जिससे समय की बचत होती है और त्रुटियां कम होती हैं। इस ट्यूटोरियल में, हम Windows, Linux के लिए पायथन बारकोड स्कैनर का निर्माण करके Dynamsoft Capture Vision SDK की क्षमताओं की खोज जारी रखेंगे। , और macOS

MacOS पर पायथन बारकोड स्कैनर डेमो

आवश्यक शर्तें

  • डायनेमसॉफ्ट कैप्चर विजन ट्रायल लाइसेंस: डायनामसॉफ्ट कैप्चर विजन एसडीके के लिए 30-दिवसीय ट्रायल लाइसेंस कुंजी प्राप्त करें।

  • पायथन पैकेज: निम्नलिखित कमांड का उपयोग करके आवश्यक पायथन पैकेज स्थापित करें:

    pip install dynamsoft-capture-vision-bundle opencv-python
    

    ये पैकेज किस लिए हैं?

    • dynamsoft-capture-vision-bundle Python के लिए Dynamsoft कैप्चर विज़न SDK है।
    • ओपनसीवी-पायथन कैमरा फ़्रेम कैप्चर करता है और संसाधित छवि परिणाम प्रदर्शित करता है।

स्थिर छवियों से बारकोड पढ़ना

चूंकि डायनामसॉफ्ट कैप्चर विजन एसडीके विभिन्न इमेज प्रोसेसिंग कार्यों के साथ एकीकृत एक एकीकृत ढांचा है, हम कैप्चर() विधि में प्रीसेटटेम्पलेट नाम पास करके आसानी से इमेज प्रोसेसिंग मोड के बीच स्विच कर सकते हैं।

डायनामसॉफ्ट कैप्चर विजन एसडीके के अंतर्निहित टेम्पलेट

निम्नलिखित कोड स्निपेट डायनामसॉफ्ट कैप्चर विजन एसडीके में अंतर्निहित 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...")

नोट: लाइसेंस-कुंजी को अपनी वैध लाइसेंस कुंजी से बदलें।

मल्टी-बारकोड छवि के साथ पायथन बारकोड रीडर का परीक्षण

एक ही छवि से कई बारकोड को डिकोड करना खुदरा और लॉजिस्टिक्स में एक आम उपयोग का मामला है। निम्नलिखित छवि में विभिन्न प्रारूपों के कई बारकोड हैं:

How to Build a Python Barcode Scanner for Windows, Linux, and macOS

वेबकैम के साथ वास्तविक समय मल्टी-बारकोड का पता लगाना

किसी छवि फ़ाइल से बारकोड पढ़ते समय, हम मुख्य थ्रेड में कैप्चर() विधि को लागू करते हैं। हालाँकि, वेबकैम से वास्तविक समय की वीडियो स्ट्रीम को संसाधित करने के लिए, मुख्य थ्रेड को अवरुद्ध होने से बचाने के लिए एक अलग दृष्टिकोण की आवश्यकता होती है। डायनामसॉफ्ट कैप्चर विजन एसडीके वास्तविक समय के वीडियो फ्रेम को संभालने और उन्हें मूल सी वर्कर थ्रेड पर अतुल्यकालिक रूप से संसाधित करने के लिए एक अंतर्निहित तंत्र प्रदान करता है। इसे लागू करने के लिए, छवि डेटा और कैप्चर किए गए परिणामों को संभालने के लिए क्रमशः 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()

स्पष्टीकरण

  • FrameFetcher वर्ग अंतर्निहित बफर में फ्रेम डेटा को फीड करने के लिए ImageSourceAdapter इंटरफ़ेस को कार्यान्वित करता है।
  • MyCapturedResultReceiver वर्ग CapturedResultReceiver इंटरफ़ेस लागू करता है। on_captured_result_received विधि मूल C वर्कर थ्रेड पर चलती है और CapturedResult ऑब्जेक्ट को मुख्य थ्रेड पर भेजती है जहां उन्हें आगे के उपयोग के लिए थ्रेड-सुरक्षित कतार में संग्रहीत किया जाता है।
  • एक CapturedResult में कई CapturedResultItem ऑब्जेक्ट होते हैं। CRIT_BARCODE प्रकार मान्यता प्राप्त बारकोड डेटा का प्रतिनिधित्व करता है।

MacOS पर पायथन बारकोड स्कैनर का परीक्षण

How to Build a Python Barcode Scanner for Windows, Linux, and macOS

सोर्स कोड

https://github.com/yushulx/python-barcode-qrcode-sdk/tree/main/examples/official/10.x

विज्ञप्ति वक्तव्य यह आलेख यहां पुन: प्रस्तुत किया गया है: https://dev.to/yushulx/how-to-build-a-python-barcode-scanner-for-windows-linux-and-macos-15d?1 यदि कोई उल्लंघन है, तो कृपया स्टडी_गोलंग@163 .comडिलीट से संपर्क करें
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3