本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
应用程序节点
节点包括模型、代码、相机流、输出和参数。节点有一个接口,用于定义其输入和输出。该接口可以在您账户中的程序包、AWS Panorama 提供的程序包或内置类型中定义。
在以下示例中,code_node
和 model_node
引用示例应用程序附带的示例代码和模型包。camera_node
使用 AWS Panorama 提供的软件包为您在部署期间指定的相机流创建占位符。
例 graph.json - 节点
"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
边缘将一个节点的输出映射到另一个节点的输入。在以下示例中,第一个边缘将相机流节点的输出映射到应用程序代码节点的输入。名称 video_in
和 video_out
在节点包的接口中定义。
例 graph.json – 边缘
"edges": [ { "producer": "camera_node.video_out", "consumer": "code_node.video_in" }, { "producer": "code_node.video_out", "consumer": "output_node.video_in" },
在应用程序代码中,使用 inputs
和 outputs
属性从输入流中获取图像,并将图像发送到输出流。
例 application.py – 视频输入和输出
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)
抽象节点
在应用程序清单中,抽象节点是指由 AWS Panorama 定义的程序包,您可以将其用作应用程序清单中的占位符。AWS Panorama 提供两种类型的抽象节点。
-
相机流 – 选择应用程序在部署期间使用的相机流。
软件包名称 –
panorama::abstract_rtsp_media_source
接口名称 –
rtsp_v1_interface
-
HDMI 输出 – 指示应用程序输出视频。
软件包名称 –
panorama::hdmi_data_sink
接口名称 –
hdmi0
以下示例显示了一组基本的包、节点和边缘,用于处理相机流并将视频输出到显示器的应用程序。相机节点使用 AWS Panorama 中 abstract_rtsp_media_source
包的接口,可以接受多个相机流作为输入。引用 hdmi_data_sink
的输出节点允许应用程序代码访问从设备的 HDMI 端口输出的视频缓冲区。
例 graph.json – 抽象节点
{ "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" }
] } }