ai_rtsp.py 演示了如何通过调用 AI模型 实现人脸检测功能后,将包含检测结果的图像以 RTSP 网络流的形式输出,便于远程网络查看。
Tips:RTSP全称实时流协议(Real Time Streaming Protocol),是一个基于文本的多媒体播放控制协议,属于应用层。RTSP以客户端方式工作,对流媒体提供播放、暂停、后退、前进等操作。该标准由IETF指定,对应的协议是RFC2326。
RTSP作为一个应用层协议,提供了一个可供扩展的框架,使得流媒体的受控和点播变得可能,它主要用来控制具有实时特性的数据的发送。
ai_rtsp程序结构:
1. 导入必要的库,包括自定义的PipeLine、AIBase、Ai2d、Utils、WBCRtsp等。
- libs.PipeLine: 图像处理流程管理,包括图像获取、显示等。
- libs.AIBase: AI基类,封装了模型加载、推理等基本操作。
- libs.AI2D: 用于图像预处理,如缩放、填充等。
- libs.Utils: 工具函数,例如计时器、对齐函数等。
- libs.WBCRtsp: 用于RTSP推流。
- os, sys, ujson, gc, math: 系统库和工具库。
- media.media: 媒体相关操作。
- nncase_runtime: nncase运行时,用于模型推理。
- ulab.numpy: 类似于numpy的库,用于数组操作。
- image: 图像处理相关。
- aidemo: 提供后处理函数,如face_det_post_process。
2. 定义FaceDetectionApp类,继承自AIBase,实现了人脸检测的初始化、预处理配置、后处理和结果绘制。
- __init__: 初始化函数,设置模型路径、输入尺寸、锚点、置信度阈值、NMS阈值等,并初始化AI2D。
- config_preprocess: 配置预处理操作,包括填充(letterbox)和缩放,使用Ai2d构建预处理流程。
- postprocess: 后处理函数,调用aidemo.face_det_post_process对模型输出进行解析,得到人脸检测框。
- draw_result: 绘制检测结果,将检测框转换到显示分辨率并绘制矩形。
3. 在主程序中,设置显示模式、图像尺寸、模型路径、参数等,初始化PipeLine和WBCRtsp(用于推流),然后创建FaceDetectionApp实例。
- 设置显示模式(hdmi或lcd等)和输入图像尺寸(rgb888p_size)。
- 设置模型路径、置信度阈值、NMS阈值、锚点数据(从文件读取)。
- 初始化PipeLine,并配置WBCRtsp推流。
- 创建FaceDetectionApp实例,并配置预处理。
- 进入主循环,获取图像帧,运行人脸检测,绘制结果并显示。
- 捕获键盘中断和其他异常,确保程序退出时释放资源。
4. 进入主循环,不断获取图像帧,进行人脸检测,绘制结果并显示。
- 设置显示模式(hdmi或lcd等)