[Python] Hikvision-Kameraentwicklung basierend auf Python und Qt

0 Vorläufige Tutorials

1. Einleitung

  Ich habe schon einmal einen Blog über die Entwicklung von Hikvision-Kameras auf Basis von C++ geschrieben. Es scheint, dass es ziemlich viele Leute gibt, die ihn lesen, und die Anzahl der Sammlungen ist relativ hoch. Aber tatsächlich wusste ich damals, dass Hikvision-Kameras das auch können Es kann mit Python entwickelt werden, aber das Python-Niveau ist zu diesem Zeitpunkt nicht hoch und ich habe kein tiefes Verständnis. Nutzen Sie diese Gelegenheit, um einige wichtige Punkte der Python-Entwicklung zusammenzufassen.

2 Routineanalyse

  Die oben genannten Pre-Tutorials wurden im Datensuchteil sehr anschaulich erklärt, daher werde ich sie hier nicht wiederholen. Konzentrieren Sie sich auf die offiziellen Python-Routinen:

Fügen Sie hier eine Bildbeschreibung ein

Unter diesem Pfad ist nur der MvImport-Ordner die Bibliotheksdatei, die importiert werden muss, und die anderen sind Routinen, die einer bestimmten Funktion entsprechen. Die ersten beiden sind BasicDemorelativ vollständige Routinen mit einer grafischen Oberfläche.

  Finden Sie einfach eine Routine, um Folgendes zu sehen:

Fügen Sie hier eine Bildbeschreibung ein
Der entscheidende Punkt ist der Inhalt im roten Feld. Sie können sehen, dass diese Routine dieses Paket tatsächlich enthält und sich dieses Paket im MvCameraControl_classoben genannten Ordner befindet. Sie müssen daher vor dem Importieren diesen Pfad mit „append“ einschließen.MvImport

  Bei dieser Verwendung tritt jedoch ein Problem auf: Wenn es in VS-Code entwickelt wird, kann es die statische Prüfung nicht bestehen und es gibt keine Codehinweise, was sehr unpraktisch zu verwenden ist. Aus der Interaktion mit dem Quellcode geht hervor, dass Zum Ausführen ist es erforderlich, dass der Code über eine MVS-Umgebung verfügt, was sehr unelegant ist. Daher wird empfohlen, den MvImport-Ordner in das Projektverzeichnis zu kopieren und from MvImport.MvCameraControl_class import *das Paket dann in dieser Form zu importieren, sodass nicht nur der Vorgang zum Anhängen des Pfads nicht mehr erforderlich ist, sondern auch die statische Prüfung und die Codehinweise bestanden werden können auch verfügbar.

  Werfen wir einen Blick auf die Dateien im MvImport-Ordner:

Fügen Sie hier eine Bildbeschreibung ein

Hierbei ist zu beachten, dass, wenn der MvImport-Ordner im Projektverzeichnis abgelegt wird und die Dateien in diesem Verzeichnis dasselbe Ordnerskript importieren, darauf geachtet werden muss, nicht den relativen Pfad dieser Datei, sondern den relativen Pfad des Projekts zu verwenden ! ! Nur so kann die statische Prüfung bestanden werden.
  Darüber hinaus gibt es diese importierte DLL-Datei, die einen absoluten Pfad verwendet, was nicht elegant genug und nicht sehr portierbar ist. Es wird empfohlen, die DLL-Datei in das Projektverzeichnis zu kopieren, hier ist jedoch zu beachten, dass die DLL Datei, die hier tatsächlich aufgerufen wird Mehr als dieser, also kopieren Sie den gesamten Ordner in , sodass die Gesamtstruktur des endgültigen Projekts wie folgt ist:

project_direction:
	|-- project.py
	|-- ........
	|-- MvImport
	|   |-- CameraParams_const.py
	|   |-- CameraParams_header.py
	|   |-- MvCameraControl_class.py
	|   |-- MvErrorDefine_const.py
	|   |-- PixelType_header.py
	|   |-- Win64_x64
	|   |   |-- MvCameraControl.dll
	|   |   |-- .......

Beim Importieren des Pakets starten dann alle Skripte aus dem Projektverzeichnis und importieren das Paket in Form eines relativen Pfads, was nicht nur für die statische Überprüfung von Vorteil ist, sondern auch für nachfolgende Exportausführungsprogramme sehr hilfreich ist.

3 Bildaufnahme

  Gemäß den oben genannten Schritten wird die Projektstruktur konfiguriert und im nächsten Schritt erfolgt die Programmierung. Da die offiziellen Codekommentare relativ umfangreich sind, werde ich hier nicht auf Details eingehen. Die Hauptsache besteht darin, den Betriebsprozess der Kamera herauszufinden und dann Schritt für Schritt den offiziellen Routinen und Handbüchern zu folgen. Das ist kein großes Problem.
  Hier finden Sie eine Aufzeichnung eines Problems, das während der Verwendung, also beim Fotografieren, aufgetreten ist. Laut offiziellem Handbuch gibt es zwei Hauptmethoden, um Bilder zu erhalten, wie in der folgenden Abbildung dargestellt:
Fügen Sie hier eine Bildbeschreibung ein

Laut MV_CC_GetOneFrameTimeout()den MV_CC_GetImageBuffer()auf der offiziellen Website bereitgestellten Dokumenten ist es effizienter, Letzteres zu verwenden, aber das Problem liegt in den von der offiziellen Website bereitgestellten Python-Routinen.

Fügen Sie hier eine Bildbeschreibung ein

_MV_FRAME_OUT_Der Datentyp dieser Struktur pBufAddrist falsch. Diese Darstellungsmethode führt dazu, dass die Variable nur einen unsigned charTyp hat und die Länge des Bytes multipliziert werden sollte. Da jedoch die Auflösung der Kamera angepasst werden kann und die Auflösung verschiedener Kameramodelle unterschiedlich ist unterschiedlich, daher wird der Multiplikator hier nicht festgelegt.

  Kurz gesagt: Wenn Sie MV_CC_GetImageBuffer()diese Funktion zum Lesen von Bilddaten verwenden, können Sie aus diesem Grund nur ein Byte erhalten, was tatsächlich ein Nullwert ist. Aus diesem Grund wird diese Methode hier zum Lesen von Bilddaten oder zum Ändern des obigen Codes verwendet MV_CC_GetOneFrameTimeout(), ist jedoch auf diese Weise schwer zu beherrschen.
  Darüber hinaus basiert die offizielle BasicDemo-Routine auch auf MV_CC_GetOneFrameTimeout()der Bilderfassung. Daher wird empfohlen, zuerst letztere zu verwenden, und die spezifische Verwendungsmethode wird empfohlen, sich auf die BasicDemo-Routine zu beziehen.

Referenzlink


// Update:
Es scheint, dass MV_CC_GetImageBuffer()das Bild auch normal aufgenommen werden kann. Sie müssen einige Vorgänge im ctypes-Paket verwenden. Sie können auf diesen Link verweisen .

4 Weitere Probleme und Lösungen

  • Verwenden Sie das Netzwerkanschluss-zu-USB-Modul, um eine Verbindung zum Computer herzustellen, und erkennen Sie das Gerät nicht :
    Es muss klar sein, dass der Netzwerkanschluss zu USB einer kabelgebundenen Netzwerkkarte entspricht. Wenn keine Verbindung zum Internet besteht, ist dies nicht der Fall die DHCP-Funktion. Daher ist es notwendig, der Netzwerkkarte manuell eine IP-Adresse zuzuweisen. Diese IP-Adresse ist in den Augen der Kamera die IP-Adresse des Computers, damit die Kamera den Computer normal finden kann , kann der Computer auch die Kamera finden. Außerdem sollten sich die IP-Adressen der beiden im selben Netzwerksegment befinden, d. h. die dritte Ziffer ist gleich.

  • Die Kamera wird in MVS erkannt, aber beim Ausführen des Python-Programms wird sie nicht erkannt und es wird ein Fehler gemeldetno data, ret = 80000007 :
    Dies kann an der Firewall liegen. Möglicherweise möchten Sie die Eigenschaften des verbundenen WLANs ändern, z. B. öffentlich oder privat ( Die ursprüngliche Öffentlichkeit wird durch Dedizierte ersetzt, und die ursprüngliche Dedizierte wird durch Öffentlich ersetzt
    Fügen Sie hier eine Bildbeschreibung ein
    . Kurz gesagt: Stellen Sie sicher, dass python.exe sowohl von öffentlichen als auch von privaten Firewalls zugelassen wird, wie in der folgenden Abbildung dargestellt :
    Fügen Sie hier eine Bildbeschreibung ein

    Referenzlink

5 verwendete Python-Pakete

  Während des Entwicklungsprozesses habe ich viele „Low-Level“-Pakete verwendet, was etwas neu ist, und hier sind einige Links zum Lernen.

Supongo que te gusta

Origin blog.csdn.net/ZHOU_YONG915/article/details/131424551
Recomendado
Clasificación