Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Anwendungs-Knoten
Knoten sind Modelle, Code, Kamerastreams, Ausgabe und Parameter. Ein Knoten hat eine Schnittstelle, die seine Ein- und Ausgänge definiert. Die Schnittstelle kann in einem Paket in Ihrem Konto, einem von AWS Panorama bereitgestellten Paket oder einem integrierten Typ definiert werden.
Im folgenden Beispielcode_node
undmodel_node
beziehen Sie sich auf den Beispielcode und die Modellpakete, die in der Beispielanwendung enthalten sind.camera_node
verwendet ein von AWS Panorama bereitgestelltes Paket, um einen Platzhalter für einen Kamera-Stream zu erstellen, den Sie während der Bereitstellung angeben.
Beispiel graph.json — Knoten
"nodes": [ { "name": "code_node", "interface": "123456789012::SAMPLE_CODE.interface" }, { "name": "model_node", "interface": "123456789012::SQUEEZENET_PYTORCH_V1.interface" }, { "name": "camera_node", "interface": "panorama::abstract_rtsp_media_source.rtsp_v1_interface", "overridable": true, "overrideMandatory": true, "decorator": { "title": "IP camera", "description": "Choose a camera stream." } } ]
Edges
Kanten ordnen die Ausgabe von einem Knoten der Eingabe eines anderen zu. Im folgenden Beispiel ordnet der erste Edge die Ausgabe eines Kamera-Stream-Knotens der Eingabe eines Anwendungscode-Knotens zu. Die Namenvideo_in
undvideo_out
sind in den Schnittstellen der Knotenpakete definiert.
Beispiel graph.json — Kanten
"edges": [ { "producer": "camera_node.video_out", "consumer": "code_node.video_in" }, { "producer": "code_node.video_out", "consumer": "output_node.video_in" },
In Ihrem Anwendungscode können Sie deninputs
undoutputs
-Attribute, um Bilder aus dem Eingabestream zu erhalten und Bilder an den Ausgabestream zu senden.
Beispiel application.py — Videoeingang und -ausgabe
def process_streams(self): """Processes one frame of video from one or more video streams.""" frame_start = time.time() self.frame_num += 1 logger.debug(self.frame_num) # Loop through attached video streams
streams = self.inputs.video_in.get()
for stream in streams: self.process_media(stream) ...self.outputs.video_out.put(streams)
Abstract Nodes
In einem Anwendungsmanifest bezieht sich ein abstrakter Knoten auf ein von AWS Panorama definiertes Paket, das Sie als Platzhalter in Ihrem Anwendungsmanifest verwenden können. AWS Panorama bietet zwei Arten von abstraktem Knoten.
-
Kamera-Stream— Wählen Sie den Kamera-Stream aus, den die Anwendung während der Bereitstellung verwendet.
Package name–
panorama::abstract_rtsp_media_source
Schnittstellenname–
rtsp_v1_interface
-
HDMI-Ausgang— Zeigt an, dass die Anwendung Video ausgibt.
Package name–
panorama::hdmi_data_sink
Schnittstellenname–
hdmi0
Das folgende Beispiel zeigt einen grundlegenden Satz von Paketen, Knoten und Kanten für eine Anwendung, die Kamerastreams verarbeitet und Video an ein Display ausgibt. Der Kameraknoten, der die Schnittstelle von derabstract_rtsp_media_source
Paket in AWS Panorama, kann mehrere Kamerastreams als Eingabe akzeptieren. Der Ausgabeknoten, der referenzierthdmi_data_sink
, gewährt Anwendungscode Zugriff auf einen Videopuffer, der vom HDMI-Anschluss der Appliance ausgegeben wird.
Beispiel graph.json — Abstrakte Knoten
{ "nodeGraph": { "envelopeVersion": "2021-01-01", "packages": [ { "name": "123456789012::SAMPLE_CODE", "version": "1.0" }, { "name": "123456789012::SQUEEZENET_PYTORCH_V1", "version": "1.0" },
{ "name": "panorama::abstract_rtsp_media_source", "version": "1.0" }, { "name": "panorama::hdmi_data_sink", "version": "1.0" }
], "nodes": [{ "name": "camera_node", "interface": "panorama::abstract_rtsp_media_source.rtsp_v1_interface", "overridable": true, "decorator": { "title": "IP camera", "description": "Choose a camera stream." } }, { "name": "output_node", "interface": "panorama::hdmi_data_sink.hdmi0" }
], "edges": [{ "producer": "camera_node.video_out", "consumer": "code_node.video_in" }, { "producer": "code_node.video_out", "consumer": "output_node.video_in" }
] } }