Vorgehensweise
Jede Kamera kann über eine ZeroMQ-Verbindung mit mehrteiligen ZeroMQ-Nachrichten gestreamt werden. Die Rate, mit der diese Nachrichten vom ZeroMQ-Server veröffentlicht werden, hängt vom Gesamtdurchsatz aller Kameras ab. Vision Connector versucht, die Bildrate der Quelle zu übernehmen.
Jede Nachricht besteht aus den folgenden Teilen:
Abschnitt "Nachricht" |
Description |
|---|---|
Geräte-ID |
UTF-8-codierte JSON-Zeichenfolge, die die Kamera-ID enthält. |
Metadaten |
UTF-8-codierte JSON-Zeichenfolge, die die Metadaten enthält. |
Bild |
Binärdaten des Bildes |
Bild 2 ... n |
Zusätzliche Bilder bei einer Multistream-Kamera |
Der Aufruf von socket.recv() liest nur einen Teil einer mehrteiligen Nachricht.
Verwenden Sie stattdessen socket.recv_multipart().
Metadaten
Feld |
Type |
Wahlfrei |
Defaulteinstellung |
Description |
|---|---|---|---|---|
version |
String |
Nr. |
1 |
Version des Metadatenformats |
zählen |
Integer |
Nr. |
1 |
Anzahl der Bilder in der Nachricht |
Zeitstempel |
String |
Nr. |
- |
Zeichenfolge für Datum und Uhrzeit (UTF-8, ISO 8601) Datum und Uhrzeit des Anwendungshosts |
benutzerdefinierte Felder |
String |
Ja |
- |
Benutzerdefiniertes Feld, das vom Ersteller der Anwendung definiert und von den Verbrauchern verarbeitet wird. Kann eine einfache Zeichenfolge, eine JSON-Zeichenfolge oder etwas anderes sein. |
Detail |
Bilddetail-Objekt-Array |
Nr. |
- |
Details zu den Bildern |
Bild-Detail-Objekt
Feld |
Type |
Wahlfrei |
Defaulteinstellung |
Description |
|---|---|---|---|---|
id |
String |
Nr. |
- |
Eindeutige Bildkennung. Vorgeschlagenes mnemonisches Format z.B. {camid}{camstream}{datetime} |
Seq |
Integer |
Nr. |
- |
Fortlaufende Nummer für das Kamerabild Beginnt bei 1 und wird mit jedem aufgenommenen Bild um 1 erhöht. |
Höhe |
Integer |
Nein/Ja (kodierte Formate) |
- |
Bildhöhe |
Breite |
Integer |
Nein/Ja (kodierte Formate) |
- |
Breite des Bildes |
formatns |
String |
Ja |
Genicam |
Namensraum des Bildformats Verwenden Sie Genicam für das Genicam-Pixelformat und Compressed2 für komprimierte Formate. |
Format |
String |
Nr. |
- |
Bildformat 1 2 3 |
Zeilen-Padding |
integer |
Ja |
0 |
Die Anzahl der Bytes, die am Ende des Bytestroms hinzugefügt werden, um ein Vielfaches von 4 Byte zu bilden. Ein Bild mit 61 Pixeln, mono8, hat z. B. einen Zeilenabstand von 3, um den Stream auf 64 Byte aufzufüllen. |
Zeitstempel |
Saite4 |
Ja |
- |
Die Uhr tickt, die von der Kamera übertragen wird.5 |
Metadaten6 |
String |
Ja |
- |
Zusätzliches Feld für Bildmetadaten, die vom Ersteller der App definiert und von den Konsumenten verarbeitet werden. Kann eine einfache Zeichenfolge, eine JSON-Zeichenfolge oder etwas anderes sein. |
1 Für Kameras, die ein standardisiertes GenICam-Pixelformat verwenden, wird empfohlen, die GenICam-Namenskonvention zu verwenden, wie in Abschnitt 4.35 des GenICam_PFNC_2_4.pdf Dokuments beschrieben.
2 Zusätzliche Werte können unterstützt werden, wenn sie in der Anwendungsdokumentation beschrieben sind.
3 Komprimierte Formate müssen in der Anwendungsdokumentation erwähnt werden, zusammen mit der Empfehlung, sie in Feldern anzugeben, die der Dateiendung entsprechen (z.B. "png", "jpg", "bmp").
4 Es muss ein String verwendet werden, da der PTP-Standard davon ausgeht, dass die Tick-Anzahl eine 80-Bit-Zahl ist. Das aktuelle GenICam-Protokoll gibt jedoch eine 64-Bit-Ganzzahl zurück. Eine Zeichenfolge ist für zukünftige Implementierungen zuverlässiger.
5 Bei den von den Kameras gelieferten Zeitstempeln handelt es sich um Uhrticks. Dies kann sich auf die Unix-Epoche, die Anzahl der Ticks seit dem Einschalten der Kamera, die Anzahl der informierten Ticks oder die Synchronisation mit dem PTP-Server beziehen.
6 Aktivierte Kameras, die PTP unterstützen, müssen den PTP-Synchronisationsstatus in den Metadaten angeben, z.
…
"metadata": "{'ptpstatus': 'gesperrt'}"...
Beispiel für Metadaten einer simulierten Kamera
{ "Anzahl": 1, "Detail": [ { "Format": "Mono8", "Höhe": 1040, "Breite": 1024 "ID": "Emulation (0815-0000)_1_2024-02-02T15:43:13.099Z", "seq": 272, "Zeitstempel": "2024-02-02T15:43:13.099Z", } ], "Zeitstempel": "2024-02-02T15:43:13.099Z", "Version": "1"
}