Heim  >  Artikel  >  Backend-Entwicklung  >  So erstellen Sie einen Python-Barcode-Scanner für Windows, Linux und macOS

So erstellen Sie einen Python-Barcode-Scanner für Windows, Linux und macOS

DDD
DDDOriginal
2024-10-22 13:24:03762Durchsuche

Barcode-Scannen ist zu einem unverzichtbaren Werkzeug in verschiedenen Branchen geworden, vom Einzelhandel über die Logistik bis hin zum Gesundheitswesen. Auf Desktop-Plattformen ermöglicht es die schnelle Erfassung und Verarbeitung von Informationen ohne manuelle Dateneingabe, was Zeit spart und Fehler reduziert. In diesem Tutorial werden wir die Funktionen des Dynamsoft Capture Vision SDK weiter erkunden, indem wir einen Python-Barcodescanner für Windows, Linux erstellen , und macOS.

Python-Barcode-Scanner-Demo auf macOS

Voraussetzungen

  • Dynamsoft Capture Vision-Testlizenz: Erhalten Sie einen 30-Tage-Testlizenzschlüssel für das Dynamsoft Capture Vision SDK.

  • Python-Pakete: Installieren Sie die erforderlichen Python-Pakete mit den folgenden Befehlen:

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

    Wozu dienen diese Pakete?

    • dynamsoft-capture-vision-bundle ist das Dynamsoft Capture Vision SDK für Python.
    • opencv-python erfasst Kamerabilder und zeigt verarbeitete Bildergebnisse an.

Lesen von Barcodes aus statischen Bildern

Da es sich beim Dynamsoft Capture Vision SDK um ein einheitliches Framework handelt, das in verschiedene Bildverarbeitungsaufgaben integriert ist, können wir problemlos zwischen den Bildverarbeitungsmodi wechseln, indem wir den Namen PresetTemplate an die Methode „capture()“ übergeben.

Integrierte Vorlagen des Dynamsoft Capture Vision SDK

Der folgende Codeausschnitt zeigt die integrierte PresetTemplate-Enumeration im Dynamsoft Capture Vision SDK:

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()
    )

Die PT_DEFAULT-Vorlage unterstützt mehrere Aufgaben, einschließlich Dokumentenerkennung, MRZ-Erkennung und Barcode-Erkennung. Um die Leistung speziell für die Barcode-Erkennung zu optimieren, legen Sie die Vorlage auf EnumPresetTemplate.PT_READ_BARCODES.value.

fest

Python-Code zur Barcode-Erkennung

Unter Bezugnahme auf die vorherigen Beispiele zur Dokumentenerkennung und MRZ-Erkennung kann der folgende Code zum Lesen von Barcodes aus statischen Bildern verwendet werden:

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...")

Hinweis: Ersetzen Sie den LIZENZSCHLÜSSEL durch Ihren gültigen Lizenzschlüssel.

Testen des Python-Barcode-Readers mit einem Multi-Barcode-Bild

Das Dekodieren mehrerer Barcodes aus einem einzigen Bild ist ein häufiger Anwendungsfall im Einzelhandel und in der Logistik. Das folgende Bild enthält mehrere Barcodes unterschiedlicher Formate:

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

Echtzeit-Multibarcode-Erkennung mit einer Webcam

Beim Lesen von Barcodes aus einer Bilddatei rufen wir die Methode „capture()“ im Hauptthread auf. Für die Verarbeitung von Echtzeit-Videostreams von einer Webcam ist jedoch ein anderer Ansatz erforderlich, um eine Blockierung des Hauptthreads zu vermeiden. Das Dynamsoft Capture Vision SDK bietet einen integrierten Mechanismus für die Verarbeitung von Echtzeit-Videobildern und deren asynchrone Verarbeitung in einem nativen C-Worker-Thread. Um dies zu implementieren, erweitern Sie die Klassen ImageSourceAdapter und CapturedResultReceiver, um die Bilddaten bzw. erfassten Ergebnisse zu verarbeiten, und rufen Sie dann die Methode start_capturing() auf, um mit der Verarbeitung des Videostreams zu beginnen.

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

Erklärung

  • Die FrameFetcher-Klasse implementiert die ImageSourceAdapter-Schnittstelle, um Frame-Daten in den integrierten Puffer einzuspeisen.
  • Die MyCapturedResultReceiver-Klasse implementiert die CapturedResultReceiver-Schnittstelle. Die Methode on_captured_result_received wird auf einem nativen C-Worker-Thread ausgeführt und sendet CapturedResult-Objekte an den Haupt-Thread, wo sie zur weiteren Verwendung in einer thread-sicheren Warteschlange gespeichert werden.
  • Ein CapturedResult enthält mehrere CapturedResultItem-Objekte. Der Typ CRIT_BARCODE stellt erkannte Barcode-Daten dar.

Testen des Python-Barcode-Scanners unter macOS

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

Quellcode

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

Das obige ist der detaillierte Inhalt vonSo erstellen Sie einen Python-Barcode-Scanner für Windows, Linux und macOS. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn