你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
注意
我们即将停用 Azure 视频分析器预览版服务,建议你在 2022 年 12 月 1 日前从视频分析器转换你的应用程序。
Azure 视频分析器媒体版不受此停用的影响。 它现在已重命名为 Azure 视频索引器。 单击此处了解详情。
必需操作:若要最大程度地减少工作负载的中断,请在 2022 年 12 月 1 日之前根据此指南中所述的建议从视频分析器转换应用程序。 在 2022 年 12 月 1 日之后,Azure 视频分析器帐户无法再正常使用。 从 2022 年 5 月 2 日起,将无法创建新的视频分析器帐户。
本文提供了在 Azure Stack Edge 设备上部署 Azure 视频分析器的完整说明。 设置并激活设备后,就可以部署视频分析器了。
在本文中,我们将使用 Azure IoT 中心来部署视频分析器,但 Azure Stack Edge 资源公开了一个 Kubernetes API,你可以使用此 API 来部署可以与视频分析器交互的其他非 IoT 中心感知解决方案。
提示
使用 Kubernetes (K8s) API 进行自定义部署是一种高级案例。 我们建议客户创建 Edge 模块,并通过 IoT 中心将这些模块部署到每个 Azure Stack Edge 资源,而非使用 Kubernetes API。 本文演示如何使用 IoT 中心部署视频分析器模块。
先决条件
一个 Azure 视频分析器帐户
此云服务用于注册视频分析器边缘模块,以及播放录制的视频和视频分析。
托管标识
这是用户分配的托管标识,可用来管理对存储帐户的访问。
一个 IoT 中心
一个存储帐户
建议使用常规用途 v2 存储帐户。
Visual Studio Code,安装在开发计算机上
Azure IoT 工具扩展,安装在 Visual Studio Code 中
确保开发计算机连接到的网络允许基于端口 5671 的高级消息队列协议。 此设置使 Azure IoT Tools 可以与 Azure IoT 中心通信。
将 Azure Stack Edge 配置为使用视频分析器
Azure Stack Edge 是一个硬件即服务解决方案,也是一台具有网络数据传输功能的支持 AI 的边缘计算设备。 有关更多信息,请参阅 Azure Stack Edge 和详细设置说明。
若要开始,请执行以下操作:
通过执行以下操作连接并激活资源:
a. 连接到本地 Web UI 设置。
b. 配置网络。
c. 配置设备。
d. 配置证书。
e. 激活设备。
满足 Azure Stack Edge 本地 UI 上的计算先决条件
在继续之前,请确保已完成以下操作:
已激活 Azure Stack Edge 资源。
可访问运行 PowerShell 5.0 或更高版本的 Windows 客户端系统,以便访问 Azure Stack Edge 资源。
若要部署 Kubernetes 群集,需要已在其本地 Web UI 中配置了 Azure Stack Edge 资源。
通过执行以下操作连接并配置资源:a。 连接到本地 Web UI 设置。
b. 配置网络。
c. 配置设备
d. 配置证书。
e. 激活设备。若要启用计算,请在设备的本地 Web UI 中,转到“计算”页面。
a. 选择要为计算启用的网络接口,然后选择“启用”。 启用计算会在设备中的该网络接口上创建一个虚拟交换机。
b. 将 Kubernetes 测试节点 IP 和 Kubernetes 外部服务 IP 留空。
c. 选择“应用”。 该操作大约需要两分钟。如果没有为 Kubernetes API 和 Azure Stack Edge 资源配置 Azure DNS,可以通过执行以下操作来更新 Windows 主机文件:
a. 以管理员身份打开文本编辑器。
b. 打开位于 C:\Windows\System32\drivers\etc 中的 hosts 文件。
c. 将 Kubernetes API 设备名称的 Internet 协议第四版 (IPv4) 主机名添加到文件。 可以在 Azure Stack Edge 门户的“设备”下找到此信息。
d. 保存并关闭该文件。
使用 Azure 门户部署视频分析器 Edge 模块
Azure 门户,你可以创建部署清单并将部署推送到 IoT Edge 设备。
选择设备并设置模块
- 登录到 Azure 门户,然后转到你的 IoT 中心。
- 在左窗格中,选择“IoT Edge”。
- 在设备列表中,选择目标设备的 ID。
- 选择“设置模块” 。
配置部署清单
部署清单是一个 JSON 文档,其中描述了要部署的模块、数据在模块间的流动方式以及模块孪生的所需属性。 Azure 门户提供了一个引导你完成创建部署清单的向导。 包含三个步骤,组织为“模块”、“路由”以及“查看 + 创建”选项卡。
添加模块
在“IoT Edge 模块”部分的“添加”下拉列表中,选择“IoT Edge 模块”以显示“添加 IoT Edge 模块”页。
选择“模块设置”选项卡,提供模块的名称,然后指定容器映像 URI。 示例值如下图所示:
提示
如本过程所述,在“模块设置”、“容器创建选项”和“模块孪生设置”选项卡上指定值之前,请勿选择“添加”。
重要
当你调用模块时,Azure IoT Edge 值会区分大小写。 请记下用作模块名称的确切字符串。
选择“环境变量”选项卡,然后输入值,如下图所示:
选择“容器创建选项”选项卡。
在“容器创建选项”窗格上的框中,粘贴以下 JSON 代码。 此操作限制模块生成的日志文件的大小。
{ "HostConfig": { "LogConfig": { "Type": "", "Config": { "max-size": "10m", "max-file": "10" } }, "Binds": [ "/var/lib/videoanalyzer/:/var/lib/videoanalyzer", "/var/media:/var/media" ], "IpcMode": "host", "ShmSize": 1536870912 } }
JSON 中的“Binds”部分有 2 个条目:
- "/var/lib/videoanalyzer:/var/lib/videoanalyzer" 用于从容器绑定永久性应用程序配置数据并将其存储在边缘设备上。
- "/var/media:/var/media" 将绑定边缘设备和容器之间的媒体文件夹。 如果运行支持在边缘设备上存储视频剪辑的 pipelineTopology,则用于存储视频录制内容。
选择“模块孪生设置”选项卡。
视频分析器边缘模块需要模块孪生配置架构中列出的一组必需孪生属性才能运行。
在“容器创建选项”窗格上的框中,粘贴以下 JSON 代码:
{ "applicationDataDirectory": "/var/lib/videoanalyzer", "ProvisioningToken": "{provisioning-token}", ... }
为了帮助监视模块,可以将以下建议属性添加到 JSON 代码中。 有关详细信息,请参阅监视和日志记录。
"diagnosticsEventsOutputName": "diagnostics", "OperationalEventsOutputName": "operational", "logLevel": "Information", "logCategories": "Application,Events", "allowUnsecuredEndpoints": true, "telemetryOptOut": false
选择 添加 。
添加实时流式处理协议 (RTSP) 模拟器边缘模块
在“IoT Edge 模块”部分的“添加”下拉列表中,选择“IoT Edge 模块”以显示“添加 IoT Edge 模块”页。
选择“模块设置”选项卡,提供模块的名称,然后指定容器映像 URI。 例如:
- IoT Edge 模块名:rtspsim
- 映像 URI:mcr.microsoft.com/ava-utilities/rtspsim-live555:1.2
选择“容器创建选项”选项卡,然后在框中粘贴以下 JSON 代码:
{ "HostConfig": { "Binds": [ "/home/localedgeuser/samples/input/:/live/mediaServer/media/" ], "PortBindings": { "554/tcp": [ { "HostPort": "554" } ] } } }
选择“添加” 。
在完成时选择“下一步: 路由”继续转到路由部分。
要指定路由,请在“名称”下输入 AVAToHub,然后在“值”下输入“FROM /messages/modules/avaedge/outputs/INTO $upstream”。
选择“下一步: 查看 + 创建”转到“查看”部分。
查看部署信息,然后选择“创建”以部署该模块。
生成预配令牌
在 Azure 门户中,转到视频分析器。
在左窗格中,选择“边缘模块”。
选择边缘模块,然后选择“生成令牌”。
复制预配令牌,如下图所示:
(可选)设置 Docker 卷装载
如果你想要查看工作目录中的数据,请在部署之前设置 Docker 卷装载。
此部分介绍如何创建网关用户并设置文件共享,以查看视频分析器工作目录和视频分析器媒体文件夹的内容。
注意
支持绑定装载,但卷装载允许查看数据,如果需要,还可以远程复制数据。 可以同时使用绑定和卷装载,但两者不能指向相同的容器路径。
在 Azure 门户中,转到 Azure Stack Edge 资源。
通过执行以下操作创建可以访问共享的网关用户:
a. 在左侧窗格中,选择“云存储网关”。
b. 在左窗格中,选择“用户”。
c. 选择“添加用户”以设置用户名(例如,我们推荐 avauser)和密码。
d. 选择“添加” 。通过执行以下操作为视频分析器持久性创建本地共享:
a. 选择“云存储网关”>“共享”。
b. 选择“添加共享”。
c. 设置共享名称(例如,建议使用 ava)。
d. 将共享类型保留为 SMB。
e. 确保选中“使用 Edge 计算的共享”复选框。
f. 确保选中“配置为 Edge 本地共享”复选框。
g. 在“用户详细信息”下,通过选择“使用现有”将共享访问权限授予最近创建的用户。
h.如果该值不存在,请单击“添加行”。 选择“创建” 。提示
将 Windows 客户端连接到 Azure Stack Edge 设备后,按照使用 Azure Stack Edge Pro FPGA 传输数据的“连接到 SMB 共享”部分中的说明进行操作。
通过执行以下操作为文件同步存储创建远程共享:
a. 通过选择“云存储网关”>“存储帐户”,在同一区域中创建 Azure Blob 存储帐户。
b. 选择“云存储网关”>“共享”。
c. 选择“添加共享”。
d. 在“名称”框中,输入共享名称(例如,我们推荐 media)。
e. 对于“类型”,将共享类型保留为 SMB。
f. 确保选中“使用 Edge 计算的共享”复选框。
g. 确保清除“配置为 Edge 本地共享”复选框。
h.如果该值不存在,请单击“添加行”。 在“存储帐户”下拉列表中,选择最近创建的存储帐户。
i. 在“存储服务”下拉列表中,选择“块 Blob”。
j. 在“选择 Blob 容器”框中,输入容器名称。
k. 在“用户详细信息”下,选择“使用现有”以将共享访问权限授予最近创建的用户。
l. 选择“创建” 。要使用卷挂载,请通过执行以下操作更新 RTSP 模拟器模块的“容器创建选项”窗格上的设置:
a. 选择“设置模块”按钮。
b. 在“名称”列表中,选择“rtspsim”模块:
c. 在“更新 IoT Edge 模块”窗格上,选择“容器创建选项”选项卡,然后添加装载,如以下 JSON 代码所示:
"createOptions": { "HostConfig": { "Mounts": [ { "Target": "/live/mediaServer/media", "Source": "media", "Type": "volume" } ], "PortBindings": { "554/tcp": [ { "HostPort": "554" } ] } } }
d. 选择“更新”。
e. 若要更新模块,请选择“查看并创建”,然后选择“创建”。
验证模块是否正在运行
最后,确保 IoT Edge 模块已连接并按预期运行。 要检查模块的运行时状态,请执行以下操作:
在 Azure 门户中,返回到你的 Azure Stack Edge 资源。
在左窗格中,选择“模块”。
在“模块”窗格的“名称”列表中,选择你已部署的模块。 在“运行时状态”列上,模块的状态应是“正在运行”。
配置 Azure IoT Tools 扩展
若要使用 Azure IoT 工具扩展连接到 IoT 中心,请执行以下操作:
在 Visual Studio Code 中选择“视图”>“资源管理器”。
在“资源管理器”窗格的左下方,选择“Azure IoT 中心”。
选择“更多选项”图标以显示上下文菜单,然后选择“设置 IoT 中心连接字符串”。
将出现一个输入框,你可在其中输入 IoT 中心连接字符串。 若要获取连接字符串,请执行以下操作:
a. 在 Azure 门户中,转到 IoT 中心。
b. 在左侧窗格中,选择“共享访问策略”。
c. 选择“iothubowner 获取共享访问密钥”。
d. 复制连接字符串主键,然后粘贴到输入框中。注意
连接字符串采用以下格式编写:
HostName=xxx.azure-devices.net;SharedAccessKeyName=iothubowner;SharedAccessKey=xxx
连接成功后,会显示边缘设备的列表,包括 Azure Stack Edge 设备。 现在你可以管理 IoT Edge 设备,并通过上下文菜单与 Azure IoT 中心进行交互。
若要查看部署在边缘设备上的模块,请在 Azure Stack 设备下,展开“模块”节点。
疑难解答
Kubernetes API 访问权限 (kubectl)
- 按照在 Azure Stack Edge Pro GPU 设备上创建和管理 Kubernetes 群集中的说明配置计算机以访问 Kubernetes 群集。
- 所有已部署的 IoT Edge 模块都使用 iotedge 命名空间。 使用 kubectl 时,请务必包含该名称。
模块日志
如果 iotedge 工具无法来获取日志,请使用 kubectl logs 查看日志或通过管道将日志传输到文件。 例如:
kubectl logs deployments/mediaedge -n iotedge --all-containers
Pod 和节点指标
要查看 pod 和节点指标,请使用 kubectl top。 例如:
kubectl top pods -n iotedge
模块网络
要在 Azure Stack Edge 上进行模块发现,模块的主机端口绑定必须在 createOptions 中。 然后,就可以通过
moduleName:hostport
对该模块进行寻址。"createOptions": { "HostConfig": { "PortBindings": { "8554/tcp": [ { "HostPort": "8554" } ] } } }
卷装载
如果容器尝试将卷装载到现有目录和非空目录,模块将无法启动。
使用 gRPC 时共享内存
使用主机 IPC 时,任何命名空间中的 pod 之间支持使用 Azure Stack Edge 资源上的共享内存。
使用以下代码在 Edge 模块上配置共享内存,以通过 IoT 中心进行部署:
... "createOptions": { "HostConfig": { "IpcMode": "host" } ... //(Advanced) Configuring shared memory on a Kubernetes pod or deployment manifest for deployment via the Kubernetes API spec: ... template: spec: hostIPC: true ...
(高级)Pod 归置
使用 Kubernetes 部署通过 gRPC 与视频分析器通信的自定义推理解决方案时,请确保将 pod 部署在与视频分析器模块相同的节点上。
- 选项 1 - 使用节点相关性和内置节点标签进行归置。
当前 NodeSelector 自定义配置似乎不是选项,因为用户无权在节点上设置标签。 但根据用户的拓扑和命名约定,他们可能能够使用内置节点标签。 为了实现共置,你可以向推理 pod 清单添加 nodeAffinity 节,该节使用视频分析器引用 Azure Stack Edge 资源。
选项 2:(建议)使用“Pod 相关性”实现共置。
Kubernetes 支持 Pod 相关性,可以在同一个节点上计划 Pod。 要实现共置,可以向推理 pod 清单添加 podAffinity 节,该节引用视频分析器模块。
// Example Video Analyzer module deployment match labels selector: matchLabels: net.azure-devices.edge.deviceid: dev-ase-1-edge net.azure-devices.edge.module: mediaedge // Example inference deployment manifest pod affinity spec: affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: - key: net.azure-devices.edge.module operator: In values: - mediaedge topologyKey: "kubernetes.io/hostname"
使用 rtspsim 模块时收到 404 错误代码
该容器只从容器内的一个文件夹读取视频。 如果将外部文件夹映射/绑定到容器映像中已存在的文件夹中,Docker 会隐藏容器映像中存在的文件。
例如,如果没有绑定,容器可能会包含以下文件:
root@rtspsim# ls /live/mediaServer/media /live/mediaServer/media/camera-300s.mkv /live/mediaServer/media/win10.mkv
主机可能包含以下文件:
C:\MyTestVideos> dir Test1.mkv Test2.mkv
但在部署清单文件中添加以下绑定时,Docker 将覆盖 /live/mediaServer/media 的内容以匹配主机上的内容。
C:\MyTestVideos:/live/mediaServer/media
root@rtspsim# ls /live/mediaServer/media /live/mediaServer/media/Test1.mkv /live/mediaServer/media/Test2.mkv
后续步骤
使用 Azure Stack Edge 通过计算机视觉和空间分析来分析视频