Um die Bildübertragung zwischen Kamera-Streaming-Anwendungen und bildgesteuerten Anwendungen zu standardisieren, sollte das folgende Format für die Bildübertragung verwendet werden. Die ZMQ-Nachricht besteht aus einer mehrteiligen Nachricht mit jedem unten beschriebenen Frame/Teil.
Dieses Nachrichtenformat ist für die Unterstützung mehrerer Stream-Kameras vorbereitet.
Nachrichten-Umschlag
Rahmen | Feld | Beschreibung | Typ |
---|---|---|---|
1 | topic | Geräte-Identifikation. | Binary String (UTF-8) zur Identifizierung des Geräts in der folgenden Syntax: Gerät/{GeräteID}/Strom |
2 | Metadaten | Metadaten | Binäre Metadaten JSON (UTF-8) |
3 | Bild | Bild 1 | Binary |
4 ... n | Bild | Bild n – Für Multi-Stream-Kameras | Binary |
Metadaten-JSON
Feld | Optional | Typ | Standardeinstellung | Beschreibung |
---|---|---|---|---|
version | Nr. | String | 1 | Version des Metadatenformats |
zählen | Nr. | Integer | 1 | Anzahl der Bilder in der Nachricht |
Zeitstempel | Nr. | String | -- | Datums- und Uhrzeitzeichenfolge UTF-8 ISO8601. Datum/Uhrzeit des Anwendungshosts. |
benutzerdefinierte Felder | Ja | String | -- | Benutzerdefiniertes Feld, das vom App-Ersteller definiert und von den Verbrauchern verarbeitet wird. Kann eine einfache Zeichenfolge oder eine JSON-Zeichenfolge oder etwas anderes sein. |
Detail | Nr. | Bilddetail-Objekt-Array | -- | Bilddetails |
Bild-Detail-Objekt
Feld | Optional | Typ | Standardeinstellung | Beschreibung |
---|---|---|---|---|
id | Nr. | String | -- | Eindeutige Bildkennung. Vorgeschlagenes mnemonisches Format wie {camid}_{camstream}_{datetime} |
Seq | Nr. | Integer | -- | Fortlaufende Nummer für das Kamerabild. Beginnen Sie bei 1 und erhöhen Sie es bei jedem erfassten Frame um 1. |
Höhe | Nein / Ja (kodierte Formate) | Integer | -- | Bildhöhe |
Breite | Nein / Ja (kodierte Formate) | Integer | -- | Bildbreite |
formatns | Ja | String | Genicam | Namensraum für das Bildformat. Verwenden Sie für das GenICam-Pixelformat Genicam und Compressed für komprimierte Formate. 2 |
Format | Nr. | String | -- | Bildformat 1 2 3 |
Zeilen-Padding | Ja | Integer | 0 | Anzahl der Bytes, die am Ende des Bytestroms hinzugefügt werden, um ein Vielfaches von 4 Byte zu erreichen. Zb. Ein Bild mit 61 Pixeln, mono8, hat einen Zeilenabstand von 3, der den Stream auf 64 Byte ausfüllt. |
Zeitstempel | Ja | Saite5 | -- | Die Uhr tickt und wird von der Kamera informiert.4 |
Metadaten6 | Ja | String | -- | Zusätzliches Metadatenfeld für Bilder, das vom App-Ersteller definiert und von den Verbrauchern verarbeitet werden muss. Kann eine einfache Zeichenfolge oder eine JSON-Zeichenfolge oder etwas anderes sein. |
1 Für Kameras, die ein GenICam-standardisiertes Pixelformat verwenden, wird empfohlen, die GenICam-Namenskonvention zu verwenden, wie in Abschnitt 4.35 GenICam_PFNC_2_4.pdf beschrieben.
2 Zusätzliche Werte können unterstützt werden, sobald sie in der Anwendungsdokumentation beschrieben sind.
3 Komprimierte Formate sind in der Anwendungsdokumentation zu erwähnen und werden in den Feldern empfohlen, die der Dateiendung entsprechen (z. B. "png", "jpg", "bmp").
4 Die von den Kameras bereitgestellten Zeitstempel sind die Anzahl der Ticks. Dies kann sich auf die Unix-Epoche oder die Anzahl der Ticks beziehen, da die Kamera eingeschaltet ist, oder die Anzahl der Ticks, die mit dem PTP-Server informiert / synchronisiert sind.
5 Es kann eine Zeichenfolge verwendet werden, da im PTP-Standard davon ausgegangen wird, 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.
6 Kameras, die PTP aktivieren können, müssen den PTP-Synchronisierungsstatus in den Metadaten angeben. Zum Beispiel.
…
"metadata": "{'ptpstatus': 'locked'}"
…
Beispiel für Metadaten:
{
"version": "1",
"count": 2,
"timestamp": "2014-01-09T13:35:34.000000000+0100",
"customfields": "{'xfield1':1,'xfield2':'abc'}",
"detail":[
{
"id":"mycamera_0_2014-01-09T13:35:34.000000000+0100",
"seq": 3,
"height": 60,
"width": 80,
"format": "png",
"formatns": "Compressed",
"timestamp": "123456",
"metadata": "{'batchid':'batch1','stream':'lowdef'}"
},
{
"id":"mycamera_1_2014-01-09T13:35:34.000000000+0100",
"seq": 3,
"height": 852,
"width": 1280,
"formatns": "Genicam",
"format": "BGR8",
"timestamp": "123456",
"linepadding": 0,
"metadata": "{'batchid':'batch1','stream':'raw'}"
}
]
}