# mxbase-python-yolov3demo **Repository Path**: JacobQin/mxbase-python-yolov3demo ## Basic Information - **Project Name**: mxbase-python-yolov3demo - **Description**: 使用python mxbase sdk,融合了拉流,解码,推理,后处理的全流程处理demo - **Primary Language**: Python - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2022-09-29 - **Last Updated**: 2022-11-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # mxbase-python-yolov3demo/yolov4demo #### 介绍 使用python mxbase sdk,融合了拉流,解码,推理,后处理的全流程处理demo。yolov3demo建议在310芯片上运行,yolov4demo建议在310p芯片上运行。 #### 软件架构 1. 按照“生产者-消费者”模式进行多线程程序设计,拉流解码线程作为生产者线程,向阻塞队列1中输出视频拉流解码后的图像数据,推理线程作为生产者&&消费者线程,从阻塞队列1中消费解码后的图像数据并输入持有的模型中,生产出模型outputs,并将outputs放入阻塞队列2中,最后后处理线程作为消费者线程处理阻塞队列2中的outputs。 2. 在yolov4demo中,将多线程模型更改为多进程模型,并采用进程池管理。将后处理替换为电信用户的定制后处理,因此未采用sdk中的后处理模块。并且,为了进一步提升aicore利用率与处理速度,在该demo实现中将后处理与推理进程合并,这将最大限度保证aicore的使用率,达到80%左右的aicore使用率峰值。 3. 实现了全流程的pythondemo,包含 拉流,解码,缩放,推理,后处理 4. 在310芯片服务器上,最高支持30路视频流输入;在310p芯片服务器上,最高支持60路视频流输入 #### 安装教程 1. cann环境安装请参照链接 ,要求版本rc1及以上 cann包下载地址 mxvision下载地址, mxvision用户手册 ```angular2html cann包环境变量配置 1.source /usr/local/Ascend/ascend-toolkit/set_env.sh 2.source ../mxVision/set_env.sh minxdx sdk安装 1.赋予权限 chmod +x Ascend-mindxsdk-mxvision_{version}_linux-{arch}.run 2.在工作目录进行安装 ./Ascend-mindxsdk-mxvision_{version}_linux-{arch}.run --install 3.进入安装文件夹配置环境变量 cd mxVison ./set_env.sh cd mxVision-3.0.RC2 ./set_env.sh ``` 2. mxvisionsdk安装请参照链接:,要求版本3.0rc2及以上 RC3 sdk官网:https://www.hiascend.com/document/detail/zh/mind-sdk/30rc3/overview/index.html 3. 模型转换 在model文件夹中执行,atc --model=yolov4.onnx --framework=5 --output=yolov4 --input_format=NCHW --soc_version=Ascend310P3 --insert_op_conf yolov4.aipp 4. python依赖安装(1)python opencv 4.1.2版本及以上(2)pyav库安装 6.2.0版本及以上 (3)python要求版本3.9及以上,python3.9的安装方法可参考 #### 运行程序 1. python3.9 yolov4demo310p.py 2. 针对可能出现的进程卡住,难以回收等问题,请采用如下命令查看进程并kill掉无法结束的进程 ```angular2html ps -ef | head -n1; ps -ef | grep yolov4_demo //查看正在执行的进程 ``` 3.videoDecoder类的decode方法在执行时会调用回调函数handle_message去处理解码的帧数据,但有可能出现程序卡住不再解码的问题,这是由于送帧解码和回调函数之间会差距较大无法回调。出现该情况时,建议动态调整time.sleep的时间,一般建议设置在0.1-0.05 #### 使用说明 1. 安装cann环境,安装mxvision sdk,配置环境变量 2. 在data目录下配置读取的视频 3. 在python yolov3_demo.py中根据需求设定线程数量:推理线程数量,后处理线程数量 4. 在python yolov4_demo.py中建议不要修改推理进程数量,根据实验证明当推理进程数量在4时可以达到最佳效果 5. 在项目目录下执行 python yolov3_demo.py, python yolov4_demo.py 6. 后处理操作可在后处理线程中自行定义 7. 所用到.264文件,模型文件请联系作者获取 #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request