应用程序节点 - AWS Panorama

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

应用程序节点

节点包括模型、代码、相机流、输出和参数。节点有一个接口,用于定义其输入和输出。该接口可以在您账户中的程序包、AWS Panorama 提供的程序包或内置类型中定义。

在以下示例中,code_nodemodel_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_invideo_out 在节点包的接口中定义。

例 graph.json – 边缘
"edges": [ { "producer": "camera_node.video_out", "consumer": "code_node.video_in" }, { "producer": "code_node.video_out", "consumer": "output_node.video_in" },

在应用程序代码中,使用 inputsoutputs 属性从输入流中获取图像,并将图像发送到输出流。

例 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" } ] } }