• [其他] 输入1句话,生成1段视频
    之前有过文本-图像生成模型DALL-E2和Imagen,那自然往后就会有文本-视频生成模型CogVideo, 先说一下不太完美的地方:DALL-E2和Imagen都有一些不同寻常的提示词来证明它们是“从0生成”的,但CogVideo的效果更像是从数据集中“拼凑”起来的: ![](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/9/1654763628737434359.gif) 例如,狮子直接“用手”喝水的视频;给鸟加上两只手;这个手明显是人类的手的模型~ ![](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/9/1654763731273669826.gif) 不过瑕不掩瑜,初生的东西往往是不完善的。下面是一些介绍。 这个最新的文本-视频生成AI,是清华&智源研究院出品的模型CogVideo。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/9/1654763852227640247.png) 论文:https://www.aminer.cn/pub/6296d9145aee126c0f7312c6 代码:https://github.com/THUDM/CogVideo CogVideo“一脉相承”于文本-图像生成模型CogView2,这个系列的AI模型只支持中文输入。 团队表示,CogVideo应该是当前最大的、也是首个开源的文本生成视频模型。 在设计模型上,模型一共有90亿参数,基于预训练文本-图像模型CogView2打造,一共分为两个模块。 第一部分先基于CogView2,通过文本生成几帧图像,这时候合成视频的帧率还很低; 第二部分则会基于双向注意力模型对生成的几帧图像进行插帧,来生成帧率更高的完整视频。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20226/9/1654763942716828918.png) 在训练上,CogVideo一共用了540万个文本-视频对。 这里不仅仅是直接将文本和视频匹配起来“塞”给AI,而是需要先将视频拆分成几个帧,并额外给每帧图像添加一个帧标记。 这样就避免了AI看见一句话,直接给你生成几张一模一样的视频帧。 其中,每个训练的视频原本是160×160分辨率,被CogView2上采样(放大图像)至480×480分辨率,因此最后生成的也是480×480分辨率的视频。 至于AI插帧的部分,设计的双向通道注意力模块则是为了让AI理解前后帧的语义。 最后,生成的视频就是比较丝滑的效果了,输出的4秒视频帧数在32张左右。
  • [热门活动] 华为云让极致音视频体验构建更简单!
    618电商狂欢节,嗨购享不停!今年618华为云音视频优惠大放送,年中最强优惠回馈新老客户,折扣优惠享不停!新客5折秒杀,还可领取价值680元的专享折后满减代金券大礼包。此外,新品视频直播闲时流量包券后低至0.075元/GB,让客户享受更低的价格,体验更优质的视频服务。华为云音视频618分会场精选多个爆款规格流量包倾情奉上,全方位多重力度优惠为企业客户降低成本压力!快来和我们一同开启智能加速吧!登录华为云官网,前往华为云音视频618分会场,更多优惠等你来发现!
  • [问题求助] 【好望云产品】【视频回放功能】视频回放如果多个视频同时回放 会有视频闪烁、撕裂问题
    【功能模块】视频回放【操作步骤&问题现象】1、(同一个设备,不同的通道)视频回放如果多个视频同时回放 会有视频闪烁、撕裂问题2、(同一个设备,不同的通道)只要同时打开一个以上视频回放就会有这个问题出现;如果只看直播视频不会有这个问题3、不同设备同时回放就不会有这个问题【截图信息】 
  • [技术干货] 【华为云开天aPaaS】疫情期间如何更优雅地出行
    ”大家好,我是开小天一个全(冤)能(种)秘书每天给30位销售精英买机票定酒店没有我安排不了的行程没有我处理不了的突发事故直到遇到了人生的黑天鹅突发疫情+各市不一的防疫政策+百变天气,还敢再复杂一点吗?!作为一个全能秘书,怎能被这点困难吓倒!使出小妙招,一切交给API即可办妥!"点击观看视频,get疫情期如何优雅出行的新技能! 开天小姐姐正式在B站营业了!大家快来点赞投币收藏一键三连呀!点个关注,更多精彩有趣的玩法等你探索~心动不如行动,现在就去集成工作台上试用一下吧~集成工作台公测,系列体验活动火热进行中活动总览体验开天aPaaS集成工作台,挑战进阶任务赢华为手表!相关推荐怎样使用集成工作台>>用户指南3个短视频快速上手集成工作台>>01-如何利用模板创建一个自动化流 02-从创建连接器开始完成从空白创建流  03-手动触发流与自动化流的区别
  • [华为云实时音视频应用...] 华为云实时音视频应用开发大赛(首届)比赛人员怎么联系上,
    【功能模块】https://competition.huaweicloud.com/information/1000041635/introduction?ggw_kfz=提供的二维码加不上联系人。离职了吗?【操作步骤&问题现象】1、2、【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [MindX SDK] 交通逆行识别案例分享文章
    # MindX SDK -- 交通逆行识别参考设计案例 ## 1 案例概述 ### 1.1 概要描述 VehicleRetrogradeRecognition交通逆行识别后处理插件基于MindXSDK开发,在晟腾芯片上进行目标检测和跟踪,可以对逆行车辆进行画框和编号,将检测结果可视化并保存。项目主要流程为:通过live555服务器进行拉流输入视频,然后进行视频解码将264格式的视频解码为YUV格式的图片,图片缩放后经过模型推理进行逆行车辆识别,识别结果经过VehicleRetrogradeRecognition后处理后得到识别框,对识别框进行跟踪和车辆行驶方向判断,用编号覆盖原有的类别信息,再将逆行车辆的识别框和类别信息分别转绘到图片上,最后将图片编码成视频进行输出。 ### 1.2 模型介绍 本项目用到了ModelZoo自带的YOLOv4模型,参考链接:https://www.hiascend.com/zh/software/modelzoo/detail/1/abb7e641964c459398173248aa5353bc ### 1.3 实现流程 1、基础环境:Ascend 310、mxVision、Ascend-CANN-toolkit 2、模型转换:ONNX模型转昇腾离线模型:yolov4_dynamic_bs.onnx --> yolov4_bs.om 3、业务流程编排与配置 4、MxpiTrackRetrogradeCar插件的后处理库开发 技术流程图如下: ![pipeline.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20225/24/1653383481899719637.jpg) ### 1.4 代码地址 > 本项目的代码地址为:https://gitee.com/ascend/mindxsdk-referenceapps/tree/master/contrib/VehicleRetrogradeRecognition ## 2 软件方案介绍 ### 2.1 项目方案架构介绍 基于MindX SDK的VehicleRetrogradeRecognition车辆逆行识别业务流程为:待检测视频存放在live555服务器上经mxpi_rtspsrc拉流插件输入,然后使用视频解码插件mxpi_videodecoder将视频解码成图片,再通过图像缩放插件mxpi_imageresize将图像缩放至满足检测模型要求的输入图像大小要求,缩放后的图像输入模型推理插件mxpi_tensorinfer得到检测结果,检测结果通过后处理插件objectpostprocessor处理,再通过mxpi_distributor插件筛选出汽车和卡车的检测结果,再接入跟踪插件mxpi_motsimplesortV2中识别框进行目标跟踪,得到目标的跟踪编号,本项目开发的MxpiTrackRetrogradeCar后处理插件识别出逆行的车辆目标,得到识别框,使用mxpi_object2osdinstances和mxpi_opencvosd分别将识别框和类名(存储跟踪编号)绘制到原图片,再通过mxpi_videoencoder将图片合成视频。各模块功能描述如表1.1所示: 表1.1 系统方案中各模块功能: | 序号 | 子系统 | 功能描述 | | ---- | -------------------- | :----------------------------------------------------------- | | 1 | 视频输入 | 接收外部调用接口的输入视频路径,对视频进行拉流,并将拉取的裸流存储到缓冲区(buffer)中,并发送到下游插件。 | | 2 | 视频解码 | 用于视频解码,当前只支持H264/H265格式。 | | 3 | 数据分发 | 对单个输入数据分发多次。 | | 4 | 数据缓存 | 输出时为后续处理过程另创建一个线程,用于将输入数据与输出数据解耦,并创建缓存队列,存储尚未输出到下流插件的数据。 | | 5 | 图像处理 | 对解码后的YUV格式的图像进行指定宽高的缩放,暂时只支持YUV格式 的图像。 | | 6 | 模型推理插件 | 目标分类或检测,目前只支持单tensor输入(图像数据)的推理模型。 | | 7 | 模型后处理插件 | 实现对模型推理输出的tensor解析,获取目标检测框以及对应的识别标签,传输到筛选模块。 | | 8 | 筛选插件 | 筛选出识别的车辆。 | | 9 | 跟踪插件 | 实现多目标(包括机非人、人脸)路径记录功能。 | | 10 | 交通逆行识别插件 | 识别出道路中逆行的车辆,再将数据传入数据流中。 | | 11 | 目标框转绘插件 | 将流中传进的MxpiObjectList数据类型转换可用于OSD插件绘图所使用的的 MxpiOsdInstancesList数据类型。 | | 12 | OSD可视化插件 | 主要实现对每帧图像标注跟踪结果。 | | 13 | 视频编码插件 | 用于将OSD可视化插件输出的图片进行视频编码,输出视频。 | ### 2.2 代码目录结构与说明 本工程名称为VehicleRetrogradeRecognition,工程目录如下图所示: ``` ├── models │ ├── aipp_yolov4_608_608.config # 模型转换aipp配置文件 │ ├── coco.names │ ├── fusion_result.json │ └── yolov4_bs.om # om模型 ├── pipeline │ └── VehicleRetrogradeRecognition.pipeline # pipeline文件 ├── plugins │ └── MxpiTrackRetrogradeCar # MxpiTrackRetrogradeCar后处理插件 │ ├── CMakeLists.txt │ ├── MxpiTrackRetrogradeCar.cpp │ ├── MxpiTrackRetrogradeCar.h │ └── build.sh ├── CMakeLists.txt ├── build.sh ├── main.cpp └── run.sh ``` ## 3 开发准备 ### 3.1 环境依赖说明 环境依赖软件和版本如下表: | 软件名称 | 版本 | | :-----------: | :---------: | | ubuntu | 18.04.1 LTS | | MindX SDK | 2.0.4 | | Python | 3.9.2 | | CANN | 5.0.4 | | live555 | 1.09 | | ffmpeg | 2021-07-21 | ### 3.2 环境搭建 #### 3.2.1 环境变量设置 ```bash # 执行如下命令,打开.bashrc文件 vi .bashrc # 在.bashrc文件中添加以下环境变量 export MX_SDK_HOME=${SDK安装路径} export LD_LIBRARY_PATH=${MX_SDK_HOME}/lib:${MX_SDK_HOME}/opensource/lib:${MX_SDK_HOME}/opensource/lib64:/usr/local/Ascend/ascend-toolkit/latest/acllib/lib64:/usr/local/Ascend/driver/lib64/ export GST_PLUGIN_SCANNER=${MX_SDK_HOME}/opensource/libexec/gstreamer-1.0/gst-plugin-scanner export GST_PLUGIN_PATH=${MX_SDK_HOME}/opensource/lib/gstreamer-1.0:${MX_SDK_HOME}/lib/plugins export PYTHONPATH=${MX_SDK_HOME}/python:$PYTHONPATH # 保存退出.bashrc文件 # 执行如下命令使环境变量生效 source ~/.bashrc #查看环境变量 env ``` ### 3.3 模型转换 #### 3.3.1 YOLO模型转换 **步骤1** 模型获取 在ModelZoo上下载[YOLOv4模型](https://www.hiascend.com/zh/software/modelzoo/detail/1/abb7e641964c459398173248aa5353bc) **步骤2** 模型存放 将获取到的YOLOv4模型onnx文件存放至:"样例项目所在目录/models/"。 **步骤3** 模型转换 在onnx文件所在目录下执行一下命令 ``` # 设置环境变量(请确认install_path路径是否正确) # Set environment PATH (Please confirm that the install_path is correct). export install_path=/usr/local/Ascend/ascend-toolkit/latest export PATH=/usr/local/python3.9.2/bin:${install_path}/atc/ccec_compiler/bin:${install_path}/atc/bin:$PATH export PYTHONPATH=${install_path}/atc/python/site-packages:${install_path}/atc/python/site-packages/auto_tune.egg/auto_tune:${install_path}/atc/python/site-packages/schedule_search.egg export LD_LIBRARY_PATH=${install_path}/atc/lib64:$LD_LIBRARY_PATH export ASCEND_OPP_PATH=${install_path}/opp # 执行,转换YOLOv4模型 # Execute, transform YOLOv4 model. YOLOv4: atc --model=./yolov4_dynamic_bs.onnx --framework=5 --output=yolov4_bs --input_format=NCHW --soc_version=Ascend310 --insert_op_conf=./aipp_yolov4_576_576.config --input_shape="input:1,3,576,576" --out_nodes="Conv_434:0;Conv_418:0;Conv_402:0" ``` 执行完模型转换脚本后,会生成相应的.om模型文件。我们也提供了原模型以及已经转换好的YOLOv4 om模型:[链接](https://mindx.sdk.obs.cn-north-4.myhuaweicloud.com/mindxsdk-referenceapps%20/contrib/VehicleRetrogradeRecognition/models.zip) 模型转换使用了ATC工具,如需更多信息请参考: https://support.huaweicloud.com/tg-cannApplicationDev330/atlasatc_16_0005.html ## 4 逆行车辆推理流程开发实现 ### 4.1 pipeline编排 ``` mxpi_rtspsrc # 输入 mxpi_videodecoder # 视频解码 mxpi_imageresize # 图像缩放 mxpi_tensorinfer # 模型推理(车辆检测) mxpi_objectpostprocessor # 模型后处理(yolov4) mxpi_distributor # 数据分发(car/truck) mxpi_motsimplesortV2 # 目标跟踪 mxpi_trackretrogradecar # 逆行判断 mxpi_object2osdinstances # 目标框转绘图 mxpi_opencvosd # 在图片上绘制基本单元 mxpi_videoencoder # 视频编码 appsink # 输出 ``` ### 4.2逆行车辆检测后处理库开发 > 参考链接:https://gitee.com/ascend/docs-openmind/blob/master/guide/mindx/sdk/one_stop_navigation.md ### 4.3 技术实现流程图 ![](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20225/10/1652189228524476695.jpg) ## 5 准备 **步骤1** 通过pc端ffmpeg软件将输入视频格式转换为.264格式,如下所示为MP4转换为h.264命令: ``` ffmpeg -i test.mp4 -vcodec h264 -bf 0 -g 25 -s 1280*720 -an -f h264 test.264 //-bf B帧数目控制,-g 关键帧间隔控制,-s 分辨率控制 -an关闭音频, -r 指定帧率 ``` **步骤2** 按照第3小结**软件依赖**安装live555和ffmpeg,按照步骤1或者 [Live555离线视频转RTSP说明文档](https://gitee.com/ascend/docs-openmind/blob/master/guide/mindx/sdk/one_stop_navigation.md)将mp4视频转换为h264格式。并将生成的264格式的视频上传到`live/mediaServer`目录下,然后修改`VehicleRetrogradeRecognition/pipeline`目录下的VehicleRetrogradeRecognition.pipeline文件中mxpi_rtspsrc0的内容。 ``` "mxpi_rtspsrc0": { "factory": "mxpi_rtspsrc", "props": { "rtspUrl":"rtsp://xxx.xxx.xxx.xxx:xxxx/xxx.264", // 修改为自己所使用的的服务器和文件名 "channelId": "0" }, "next": "mxpi_videodecoder0" }, ``` **步骤3** 根据视频划分道路的分界线,取分界线两端点的坐标,写在mxpi_trackretrogradecar插件中,其中isVertical为0时代表道路是竖直或倾斜的,isVertical为1时则代表道路是基本水平的。 ``` "mxpi_trackretrogradecar0": { "props": { "dataSource": "mxpi_distributor0_0", "motSource": "mxpi_motsimplesortV20", "x1": "550", "y1": "0", "x2": "0", "y2": "423", "isVertical": "0" }, "factory": "mxpi_trackretrogradecar", "next": "queue4" }, ``` ## 使用场景概括 ### 适用条件 适用于较为笔直的公路,且只有两个方向的来车。 ### 限制条件 尺寸条件:单个车辆的宽高像素不得超过500 光照条件:光线较为良好,如果光线不足,必须有车辆的完整轮廓 ## 参数调节 | 参数名称 |参数介绍| 修改方法 | 默认值 | | -------------- | --------------------------------------------- | --------------------------------------------------------------------- | -------- | |trackThreshold |路径记录对象属于同一目标概率阈值,大于该阈值认为是同一对象|在pipeline文件中,修改mxpi_motsimplesortV2插件中的trackThreshold的大小即可| 0.5 | |lostThreshold|路径记录目标丢失帧数阈值,帧数大于该阈值认为行程目标已丢失 |在pipeline文件中,修改mxpi_motsimplesortV2插件中的lostThreshold的大小即可|3| |IOU_THRESH |两个框的IOU阈值,超过阈值即认为同一个框,用于nms算法|在models/yolov4.cfg文件中,修改IOU_THRESH的大小即可|0.6| |SCORE_THRESH |是否为框的阈值,大于阈值即认为是框|在models/yolov4.cfg文件中,修改SCORE_THRESH的大小即可|0.6| |OBJECTNESS_THRESH |是否为目标的阈值,大于阈值即认为是目标|在models/yolov4.cfg文件中,修改OBJECTNESS_THRESH的大小即可|0.7| ## 6 编译与运行 **步骤1** 按照第2小结**环境依赖**中的步骤设置环境变量。 **步骤2** 按照第 4 小节 **模型转换** 中的步骤获得 om 模型文件,放置在 `VehicleRetrogradeRecognition/models` 目录下。 **步骤3** 修改`VehicleRetrogradeRecognition/plugins/MxpiTrackRetrogradeCar`文件夹下的CMakeLists.txt文件。将其中的"$ENV{MX_SDK_HOME}"修改成自己的SDK目录。 **步骤4** 编译。进入 `VehicleRetrogradeRecognition` 目录,在 `VehicleRetrogradeRecognition` 目录下执行命令: ``` bash build.sh ``` 命令执行成功后会在`VehicleRetrogradeRecognition/plugins/MxpiTrackRetrogradeCar`目录下生成build文件夹。将`VehicleRetrogradeRecognition/plugins/MxpiTrackRetrogradeCar/build`目录下生成的的libmxpi_trackretrogradecar.so下载后上传到`${SDK安装路径}/mxVision/lib/plugins`目录下,然后将权限设置为0640。 **步骤5** 运行。回到VehicleRetrogradeRecognition目录下,在VehicleRetrogradeRecognition目录下执行命令: ``` bash run.sh ``` 命令执行成功后会在当前目录下生成检测结果视频文件out.h264,然后执行命令: ``` ffmpeg -f h264 -i out.h264 -vcodec copy out.mp4 ``` 命令执行成功后会得到检测结果视频文件的mp4格式。 ## 7 性能测试 **测试帧率:** 使用`VehicleRetrogradeRecognition/test`目录下的main.cpp替换`VehicleRetrogradeRecognition`目录下的main.cpp,然后按照第6小结编译与运行中的步骤进行编译运行,服务器会输出运行到该帧的平均帧率。 ![](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20225/31/1653964939310323723.jpg) 本样例统计出每秒处理的帧数,输入为25帧率的视频,单路推理,理应每秒处理25 * 1 = 25帧,如统计每秒的帧率达到25则性能达标。经测试,本样例满足1920*1080分辨率下25帧率的推理。 ## 8 常见问题 8.1 视频编码参数配置错误 **问题描述:** `VehicleRetrogradeRecognition/pipeline/VehicleRetrogradeRecognition.pipeline`中视频编码分辨率需手动指定imageHeight 和 imageWidth 属性,需要和视频输入分配率相同,否则会包如下类型的错: ![](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20225/9/1652075631557257141.jpg) **解决方案:** 确保`VehicleRetrogradeRecognition/pipeline/VehicleRetrogradeRecognition.pipeline`中 mxpi_videoencoder0 插件的 imageHeight 和 imageWidth 属性值是输入264视频的高和宽。
  • [技术干货] 【论文分享】感知质量优化的移动群智感知任务在线分发算法
    感知质量优化的移动群智感知任务在线分发算法张伟1,2, 李卓1,2, 陈昕21 网络文化与数字传播北京市重点实验室,北京 1001012 北京信息科技大学计算机学院,北京 100101摘要感知质量优化和用户招募是移动群智感知的两个重要问题,随着数据量的大幅度增加,感知内容出现冗余,存在感知质量降低的风险。提出了一种感知质量优化的任务分发机制,在保证覆盖率的情况下,提高群体的感知质量。利用聚类算法评估任务真值,量化用户数据质量;基于汤普森抽样算法和贪婪算法设计并实现了一种用户招募策略,在保证任务空间覆盖率的基础上优化感知质量。针对TSUR(Thompson based user recruit)算法的性能进行仿真分析,并与已有的BBTA(bandit-based task assignment)算法和BUR(basic user recruitment)算法作比较。实验表明,在同一区域进行任务感知,与BBTA算法和BUR算法相比,累计感知质量分别提高了16%和20%,空间覆盖率分别提高了30%和22%。关键词: 移动群智感知 ; 任务分发 ; 数据质量 ; 在线学习1 引言数据驱动的移动群智感知模式利用群体的移动设备来完成复杂的感知任务,包括感知任务的发起、执行、提交以及反馈。大量的感知数据从边缘节点聚合到云服务中心,通过一系列数据处理形成有价值的数据资源。同时,大数据、人工智能等新兴技术也将为其所用,使得移动群智感知得到更快速的发展。在此模式下,感知任务的分发问题、参与者的激励问题以及数据的隐私保护问题等成为研究重点,随着感知数据量的倍增和任务规模的扩大,有效的质量控制显得尤为重要[1]。移动群智感知模式的感知质量包含时空覆盖率和数据质量两个层面,前者关注是否能采集足够全面的数据,后者关注数据是否足够准确和可信[2],用户的移动性和复杂性使感知质量更难以控制。因此,针对感知质量提出了一种考虑覆盖率和数据质量的动态任务分发机制,实时监测感知质量,保证感知模式的高实用性。如何量化用户数据层面的感知质量,是解决任务分发问题的难点之一。本文利用聚类算法的性质来评估任务真值和用户数据质量,将簇心数据判定为真值,利用真值与感知数据的差异来量化用户数据质量。用户数据质量随着不同群体数据的变化而变化,不同群体表现出不同的数据质量水平。为了进一步提高感知质量,引入贪婪策略保障覆盖率层面的感知质量,实时控制区域的感知覆盖情况,减少了不必要的重复感知和数据冗余。在此基础上,采用汤普森抽样算法招募具有高数据质量的用户,汤普森抽样算法平衡了任务分发问题的两个阶段,即利用现有信息最大化用户数据质量阶段和通过探索用户未知信息获取未来收益阶段,也就是在最短的时间内充分探索用户感知数据质量规律,从而实现群体数据质量的最大化。在仿真实验中,模拟了感知任务的分发、执行、反馈等过程。在预设区域内发起多次感知任务,从参与者数据质量和任务覆盖率两个方面进行实时的参与者选择,在对比实验中,与 BBTA[3]在线招募算法和BUR[4]贪婪招募算法相比,本文的TSUR任务分发算法的参与者数据质量较两者分别提高了16%和20%,在用户资源充足的条件下,任务覆盖率可达100%。2 相关工作移动群智感知是一种新的感知范式,它利用人们在移动设备中产生的感知数据,通过云中的数据聚集和融合,凝聚人类的智慧,用于提供以人为中心的服务[5]。已有的工作研究主要应用于智能交通[6]、环境监测[7]、城市管理[8]和公共安全[9]等领域,随着各类应用的开展,有效的质量控制对提升数据的可用性具有重要作用。在移动群智感知任务分发问题上,学者们已经提出了众多分发方案。然而,随着任务规模的扩大,感知质量呈下降趋势,为了解决这个问题,文献[10]提出了多任务分发方案,该方案利用最小限度的数据质量阈值达到最优的全局效用。在感知覆盖层面,文献[11]提出了一种可以保证覆盖效果和节能的参与者选择策略并实现了能量高效传输方式。关于移动轨迹的招募策略[12],提出了一种利用移动群智感知的数据属性进行用户选择的方法,该方法不仅考虑了用户的时空轨迹概率,还考虑了感知任务的属性,并利用计算任务完成概率进行用户招募。这种方法关注用户执行任务的时效性,但缺少对任务执行结果的评估。文献[13]建立了用户信用体系来评估用户的历史任务完成情况,基于上下文的分发策略把感知环境、个人和社会信息作为招募用户的考虑因素[14]。本文的任务分发算法不仅考虑用户长期的感知能力,还对用户群体执行感知任务的覆盖情况进行优化。对用户感知能力做概率统计分析,减少由用户能力考查产生的大量开销,根据用户的地理位置做出实时性的决策,从而提高分发性能。感知任务的数据质量一般和任务真值相关。一些质量控制的群智感知系统分发同一感知任务给多个用户,通过投票等统计方法对调查结果进行汇总,从而确定群体意见一致的答案,并将其作为任务真值[15]。文献[16]利用混合高斯模型来描述感知数据,然后提出了一种期望最大化的算法来评估感知任务真值。文献[17]利用距离函数定义用户数据质量,每轮任务下的数据总质量相同,然而在现实中,不同群体的数据质量一般能分出不同层次,因此,本文数据质量定义以群体的差异化为基础,量化个体的数据质量。随着不同群体的数据质量不同,用户数据质量也能计算出不同差异程度,这表明用户数据质量随着群体数据质量的变化而变化,不同群体间也可以分辨出不同层次的数据质量。截至目前,感知数据已经拓展到图片、音频、视频等形式[16,18,19]。文献[18]提出了视觉群智感知用户贡献度量框架,减少了由冗余数据产生的用户贡献。文献[19]对视频数据质量进行研究和推进,提出了主观质量评估方法。3 结束语本文提出一种感知质量优化的群智感知任务分发算法,是一种基于汤普森抽样的在线学习算法,该算法将感知范围和数据质量作为指标,结合贪婪算法,实时地招募感知覆盖性能强、数据质量优的用户进行感知任务。对于无标准真值类型的感知任务提出了一种解决方案,利用聚类性质评估用户数据质量和任务真值。在保障任务覆盖率的基础上,优化群体感知质量。经过充分的实验表明, TSUR 算法在用户资源充足的条件下的覆盖率达100%,与已有的BUR算法和BBTA算法相比,覆盖率分别提高了30%和22%,累计区域质量分别提高了16%和20%。The authors have declared that no competing interests exist.作者已声明无竞争性利益关系。4 原文链接http://www.infocomm-journal.com/wlw/article/2020/2096-3750/2096-3750-4-4-00091.shtml
  • [技术干货] OpenHarmony 3.1 Release版本关键特性解析——OpenHarmony新音视频引擎——HiStreamer
    OpenAtom OpenHarmony(以下简称“OpenHarmony”)是由开放原子开源基金会(OpenAtom Foundation)孵化及运营的开源项目,目标是面向全场景、全连接、全智能时代,基于开源的方式,搭建一个智能终端设备操作系统的框架和平台,促进万物互联产业的繁荣发展。面对万物互联时代种类众多、且差异巨大的终端设备,我们为 OpenHarmony 打造了一款新的音视频引擎——HiStreamer。 一、HiStreamer产生背景数字多媒体技术在过去的数十年里得到了飞速的发展,音乐、电话、电视、电影、视频会议等等,伴随着我们度过每一天。为了给用户提供丰富的多媒体处理能力,业界已经有比较成熟的音视频引擎,比如开源的音视频引擎 GStreamer。为什么我们还要打造一款新的音视频引擎呢?随着万物互联时代的到来,越来越多的智能化设备出现在我们的生活中。比如:智能冰箱可以通过屏幕和声音,告诉人们储藏的菜品快要过期了;智能闸机可以通过人脸识别,自动完成检票工作;智能门锁可以通过语音和视频,提升开锁的效率和安全性......与PC、手机等标准(Standard)设备不同,很多智能化设备的CPU处理能力比较弱、内存也比较小,传统的音视频引擎无法支持此类设备。HiStreamer 应运而生,既支持轻量级的 Mini/Small 设备,也支持 Standard 设备(目前支持部分功能)。HiStreamer 在不断发展和完善中,未来将会支持 Standard 设备的更多功能。二、“管道+插件”,实现弹性部署为了支持 Mini/Small/Standard 设备,HiStreamer 采用管道(Pipeline)和插件(plugin)的软件架构,从而可以根据设备的硬件和需求差异进行弹性部署。HiStreamer 把音视频处理的每个过程抽象成节点,上一个节点的输出,作为下一个节点的输入,把多个节点连接起来,整体形成一个管道(Pipeline),完成音视频的数据读取、解封装、解码、输出的完整流程。同时,插件可以为 Pipeline 的节点提供丰富的扩展功能,让 HiSteamer 的音视频处理能力更强大。 1. Pipeline框架介绍为了让大家理解 HiStreamer 的 Pipeline 框架,下面以 MP3 音频播放为例讲解:输入是一个 MP3 文件,输出是播放出的音乐,这中间经过了很多步骤。先来看一下 MP3 文件结构:图1 MP3文件结构 MP3 文件由 ID3 Metadata 容器头和若干 MP3 Frame(MP3 数据帧)构成。每个 MP3 Frame 又由 MP3 Header(MP3 头信息)和 MP3 Data 构成。这一系列的 MP3 Frame 称为 ES Data( Element Stream Data)。● ID3 Metadata:容器头,主要包括标题、艺术家、专辑、音轨数量等。● MP3 Header:包含 MP3 Sync word(标识 MP3 数据帧起始位置)和 MPEG 版本信息等。● MP3 Data:包含压缩的音频信息。播放 MP3 文件,首先需要把 MP3 文件数据读进来,然后去掉 ID3 Metadata 容器头(即解封装),再把一系列 MP3 Frame 解压缩成 PCM(Pulse-Code Modulation)数据,最后驱动喇叭发声。这个过程按顺序可以抽象成如下四个节点:图2 MP3音频播放的Pipeline1. 输入节点(MediaSourceFilter): 读取 MP3 原始数据,传给下一个节点。2. 解封装节点(DemuxerFilter): 解析 ID3 Metadata 容器头信息,作为后续节点的参数输入,并且把一帧帧 MP3 Frame(即 ES Data)传给后续的解码节点。3. 解码节点(AudioDecoderFilter): 把 ES Data 解码成 PCM 数据,传给输出节点。4. 输出节点(AudioSinkFilter): 输出 PCM 数据,驱动喇叭发声。由以上示例可知,HiStreamer 通过 Pipeline 框架把音视频处理的每个过程抽象成一个个节点。这些节点是解耦的,可以灵活拼装,从而可以根据业务需要拼装出不同的 Pipeline。同时,为了使多个节点能更好地协同工作,HiStreamer 还支持节点间的参数自动协商。2. HiStreamer插件介绍了解了 HiStreamer 的 Pipeline 框架后,我们再来看看 HiStreamer 插件。HiStreamer 的 Pipeline 框架的很多节点(比如输入节点、解封装节点、解码节点、输出节点等)都支持插件扩展。通过插件,节点的功能变得更加丰富、更加强大。插件的应用场景非常广泛,比如:● 媒体格式非常多,且以后还会有新的格式产生,可以通过插件支持新的媒体格式。● 不同 OS 平台或设备,处理方式存在差异,可以通过插件支持不同的处理方式。● 不同类型的设备,需求不同,能提供的 CPU/ROM/RAM 资源多少也不同,也可以通过插件来支持。3. 弹性部署HiStreamer 基于管道(Pipeline)和插件(plugin)的软件架构,可以根据设备的硬件和需求差异实现弹性部署。图3 HiStreamer弹性部署如图 3 所示,Mini 设备(比如音箱),它的 CPU 处理能力很弱,ROM/RAM 资源很少,需要的功能也比较少,只需要音频播放功能。HiStreamer 可以配置成只支持音频播放,并且选择轻量级的插件,配置同步解码模式,减少资源消耗。而 Small 设备,CPU 处理能力强一些,ROM/RAM 空间大一些,需要音频播放和视频播放功能。HiStreamer 可以配置成支持音视频播放,并且选择功能更强的插件。三、HiStreamer逻辑架构经过上面的介绍,我们了解了 HiStreamer 的“管道+插件”的软件架构。下面我们再来看看 HiStreamer 的详细的逻辑架构。图4 HiStreamer逻辑架构图HiStreamer 主要由 HiStreamer 引擎和 HiStreamer 插件构成。其中,HiStreamer引擎又分为以下四层:● 业务封装层:基于 Pipeline 封装实现播放器、录音机功能,简化上层应用使用。● Pipeline 框架层:提供 Pipeline 和若干个节点(输入、解封装、解码和输出)的实现,支持把多个节点连接在一起形成 Pipeline。● 插件管理层:用于插件生命周期管理,支持动态加载或静态链接两种方式使用插件。● 工具库层:提供框架依赖的工具,隔离操作系统差异,提供调测功能。HiStreamer 插件,则分为平台软件插件和厂商硬插件两类:● 平台软件插件:由 OpenHarmony 平台提供,可跨产品复用的软件算法插件。● 厂商硬插件:由厂商提供的基于硬件加速的插件,如硬件加速的编解码插件。应用开发者可以直接使用现成的插件来实现多媒体功能,节省大量的开发时间。插件越丰富,HiStreamer 的音视频处理能力会更强大。欢迎广大开发者参与 HiStreamer 插件的开发,一起来丰富 HiStreamer 插件!四、HiStreamer插件开发及实例下面就为大家介绍 HiStreamer 插件的开发过程及实例讲解,感兴趣的小伙伴们赶紧学起来,一起参与 HiStreamer 插件开发吧~1. 插件的开发HiStreamer 插件的开发主要分为插件定义和功能实现两个部分。(1)插件定义HiStreamer 插件是通过 PLUGIN_DEFINITION 宏来定义的。以输入插件 FileSource 为例,定义代码如下:std::shared_ptr<SourcePlugin> FileSourcePluginCreator(const std::string& name) { return std::make_shared<FileSourcePlugin>(name); } Status FileSourceRegister(const std::shared_ptr<Register>& reg) { SourcePluginDef definition; definition.name = "FileSource"; definition.description = "File source"; definition.rank = 100; // 100: max rank definition.protocol.emplace_back(ProtocolType::FILE); definition.creator = FileSourcePluginCreator; return reg->AddPlugin(definition); } //PLUGIN_DEFINITION传入四个参数 PLUGIN_DEFINITION(FileSource, LicenseType::APACHE_V2, FileSourceRegister, [] {}); 使用 PLUGIN_DEFINITION 宏定义插件(即上面最后一行代码)时,传入了四个参数:a) 插件名称:即示例中的“FileSource”。b) License 信息:即示例中的“LicenseType::APACHE_V2”。c) 插件注册函数:即示例中的“FileSourceRegister”,该函数描述了插件基本信息,包括插件对象创建函数,并且还调用 AddPlugin 把插件注册到系统中。d) 插件反注册函数:可以传为空实现。(2)功能实现实现插件功能时,需根据要实现的插件类型,继承对应插件接口类,并实现相关接口。比如实现输入插件 FileSource,需要继承 SourcePlugin,并实现 SetSource、Read 等接口,代码如下:// 定义FileSourcePlugin类继承SourcePlugin类 class FileSourcePlugin : public SourcePlugin { // 实现SetSource接口, 设置要打开的文件路径 Status SetSource(std::shared_ptr<MediaSource> source) { return OpenFile(source->GetSourceUri()); } // 实现Read接口,它会读取数据用于后续处理 Status Read(std::shared_ptr<Buffer>& buffer, size_t expectedLen) { std::fread(bufData->GetWritableAddr(expectedLen), sizeof(char), expectedLen, fp_); return Status::OK; } }FileSource插件的完整代码可参考:https://gitee.com/openharmony/multimedia_histreamer/tree/master/engine/plugin/plugins/source/file_source2. 插件的部署使用 PLUGIN_DEFINITION 定义的 HiStreamer 插件,可以是单一功能的插件,也可以是有多个功能的插件包。每个这样的插件或插件包,可以独立编译成.a或者.so,分别对应以下两种部署方式:● 静态部署:一般用在 mini 设备上,插件编译成静态库.a,链接到系统中。● 动态部署:一般用在 small/standard 设备上,插件编译成动态库.so,放到系统指定目录下,动态加载运行。3. 插件的运行插件开发完成且部署到系统之后,HiStreamer 启动时就会自动完成插件的注册。下一步,就是运行插件了。运行新实现的插件,需要先满足该插件的运行条件。比如:FileSource 只会在播放本地文件时运行;MP3 解码插件只会在播放 MP3 文件时运行......开发者可以通过日志信息,查看是否运行了自己的插件。如果有别的插件注册到系统中,导致自己的插件无法运行时,可以卸载引起干扰的插件。卸载动态部署的插件,删除对应的.so即可;卸载静态部署的插件,需要修改编译脚本取消对应插件的编译。五、结束语OpenHarmony 欢迎广大开发者一起加入 HiStreamer 插件开发,扩展自己想要的媒体功能,共同丰富 HiStreamer 媒体生态!同时,预告大家:HiStreamer 的下一个版本将为 Standard 设备增强更多功能,敬请期待!本期关于 HiStreamer 的介绍就到这里了。更多HiStreamer信息,请参考:https://gitee.com/openharmony/multimedia_histreamerhttps://gitee.com/openharmony/multimedia_histreamerhttps://gitee.com/openharmony/multimedia_histreamer转载于OpenAtom OpenHarmony微信公众号
  • [技术干货] 交通逆行识别案例分享文章
    # MindX SDK -- 交通逆行识别参考设计案例 ## 1 案例概述 ### 1.1 概要描述 VehicleRetrogradeRecognition交通逆行识别后处理插件基于MindXSDK开发,在晟腾芯片上进行目标检测和跟踪,可以对逆行车辆进行画框和编号,将检测结果可视化并保存。项目主要流程为:通过live555服务器进行拉流输入视频,然后进行视频解码将264格式的视频解码为YUV格式的图片,图片缩放后经过模型推理进行逆行车辆识别,识别结果经过VehicleRetrogradeRecognition后处理后得到识别框,对识别框进行跟踪和车辆行驶方向判断,用编号覆盖原有的类别信息,再将逆行车辆的识别框和类别信息分别转绘到图片上,最后将图片编码成视频进行输出。 ### 1.2 模型介绍 本项目用到了ModelZoo自带的YOLOv4模型,参考链接:https://www.hiascend.com/zh/software/modelzoo/detail/1/abb7e641964c459398173248aa5353bc ### 1.3 实现流程 1、基础环境:Ascend 310、mxVision、Ascend-CANN-toolkit 2、模型转换:ONNX模型转昇腾离线模型:yolov4_dynamic_bs.onnx --> yolov4_bs.om 3、业务流程编排与配置 4、MxpiTrackRetrogradeCar插件的后处理库开发 技术流程图如下: ![pipeline.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20225/24/1653383481899719637.jpg) ### 1.4 代码地址 > 本项目的代码地址为:https://gitee.com/ascend/mindxsdk-referenceapps/tree/master/contrib/VehicleRetrogradeRecognition ## 2 软件方案介绍 ### 2.1 项目方案架构介绍 基于MindX SDK的VehicleRetrogradeRecognition车辆逆行识别业务流程为:待检测视频存放在live555服务器上经mxpi_rtspsrc拉流插件输入,然后使用视频解码插件mxpi_videodecoder将视频解码成图片,再通过图像缩放插件mxpi_imageresize将图像缩放至满足检测模型要求的输入图像大小要求,缩放后的图像输入模型推理插件mxpi_tensorinfer得到检测结果,检测结果通过后处理插件objectpostprocessor处理,再通过mxpi_distributor插件筛选出汽车和卡车的检测结果,再接入跟踪插件mxpi_motsimplesortV2中识别框进行目标跟踪,得到目标的跟踪编号,本项目开发的MxpiTrackRetrogradeCar后处理插件识别出逆行的车辆目标,得到识别框,使用mxpi_object2osdinstances和mxpi_opencvosd分别将识别框和类名(存储跟踪编号)绘制到原图片,再通过mxpi_videoencoder将图片合成视频。各模块功能描述如表1.1所示: 表1.1 系统方案中各模块功能: | 序号 | 子系统 | 功能描述 | | ---- | -------------------- | :----------------------------------------------------------- | | 1 | 视频输入 | 接收外部调用接口的输入视频路径,对视频进行拉流,并将拉取的裸流存储到缓冲区(buffer)中,并发送到下游插件。 | | 2 | 视频解码 | 用于视频解码,当前只支持H264/H265格式。 | | 3 | 数据分发 | 对单个输入数据分发多次。 | | 4 | 数据缓存 | 输出时为后续处理过程另创建一个线程,用于将输入数据与输出数据解耦,并创建缓存队列,存储尚未输出到下流插件的数据。 | | 5 | 图像处理 | 对解码后的YUV格式的图像进行指定宽高的缩放,暂时只支持YUV格式 的图像。 | | 6 | 模型推理插件 | 目标分类或检测,目前只支持单tensor输入(图像数据)的推理模型。 | | 7 | 模型后处理插件 | 实现对模型推理输出的tensor解析,获取目标检测框以及对应的识别标签,传输到筛选模块。 | | 8 | 筛选插件 | 筛选出识别的车辆。 | | 9 | 跟踪插件 | 实现多目标(包括机非人、人脸)路径记录功能。 | | 10 | 交通逆行识别插件 | 识别出道路中逆行的车辆,再将数据传入数据流中。 | | 11 | 目标框转绘插件 | 将流中传进的MxpiObjectList数据类型转换可用于OSD插件绘图所使用的的 MxpiOsdInstancesList数据类型。 | | 12 | OSD可视化插件 | 主要实现对每帧图像标注跟踪结果。 | | 13 | 视频编码插件 | 用于将OSD可视化插件输出的图片进行视频编码,输出视频。 | ### 2.2 代码目录结构与说明 本工程名称为VehicleRetrogradeRecognition,工程目录如下图所示: ``` ├── models │ ├── aipp_yolov4_608_608.config # 模型转换aipp配置文件 │ ├── coco.names │ ├── fusion_result.json │ └── yolov4_bs.om # om模型 ├── pipeline │ └── VehicleRetrogradeRecognition.pipeline # pipeline文件 ├── plugins │ └── MxpiTrackRetrogradeCar # MxpiTrackRetrogradeCar后处理插件 │ ├── CMakeLists.txt │ ├── MxpiTrackRetrogradeCar.cpp │ ├── MxpiTrackRetrogradeCar.h │ └── build.sh ├── CMakeLists.txt ├── build.sh ├── main.cpp └── run.sh ``` ## 3 开发准备 ### 3.1 环境依赖说明 环境依赖软件和版本如下表: | 软件名称 | 版本 | | :-----------: | :---------: | | ubuntu | 18.04.1 LTS | | MindX SDK | 2.0.4 | | Python | 3.9.2 | | CANN | 5.0.4 | | live555 | 1.09 | | ffmpeg | 2021-07-21 | ### 3.2 环境搭建 #### 3.2.1 环境变量设置 ```bash # 执行如下命令,打开.bashrc文件 vi .bashrc # 在.bashrc文件中添加以下环境变量 export MX_SDK_HOME=${SDK安装路径} export LD_LIBRARY_PATH=${MX_SDK_HOME}/lib:${MX_SDK_HOME}/opensource/lib:${MX_SDK_HOME}/opensource/lib64:/usr/local/Ascend/ascend-toolkit/latest/acllib/lib64:/usr/local/Ascend/driver/lib64/ export GST_PLUGIN_SCANNER=${MX_SDK_HOME}/opensource/libexec/gstreamer-1.0/gst-plugin-scanner export GST_PLUGIN_PATH=${MX_SDK_HOME}/opensource/lib/gstreamer-1.0:${MX_SDK_HOME}/lib/plugins export PYTHONPATH=${MX_SDK_HOME}/python:$PYTHONPATH # 保存退出.bashrc文件 # 执行如下命令使环境变量生效 source ~/.bashrc #查看环境变量 env ``` ### 3.3 模型转换 #### 3.3.1 YOLO模型转换 **步骤1** 模型获取 在ModelZoo上下载[YOLOv4模型](https://www.hiascend.com/zh/software/modelzoo/detail/1/abb7e641964c459398173248aa5353bc) **步骤2** 模型存放 将获取到的YOLOv4模型onnx文件存放至:"样例项目所在目录/models/"。 **步骤3** 模型转换 在onnx文件所在目录下执行一下命令 ``` # 设置环境变量(请确认install_path路径是否正确) # Set environment PATH (Please confirm that the install_path is correct). export install_path=/usr/local/Ascend/ascend-toolkit/latest export PATH=/usr/local/python3.9.2/bin:${install_path}/atc/ccec_compiler/bin:${install_path}/atc/bin:$PATH export PYTHONPATH=${install_path}/atc/python/site-packages:${install_path}/atc/python/site-packages/auto_tune.egg/auto_tune:${install_path}/atc/python/site-packages/schedule_search.egg export LD_LIBRARY_PATH=${install_path}/atc/lib64:$LD_LIBRARY_PATH export ASCEND_OPP_PATH=${install_path}/opp # 执行,转换YOLOv4模型 # Execute, transform YOLOv4 model. YOLOv4: atc --model=./yolov4_dynamic_bs.onnx --framework=5 --output=yolov4_bs --input_format=NCHW --soc_version=Ascend310 --insert_op_conf=./aipp_yolov4_576_576.config --input_shape="input:1,3,576,576" --out_nodes="Conv_434:0;Conv_418:0;Conv_402:0" ``` 执行完模型转换脚本后,会生成相应的.om模型文件。我们也提供了原模型以及已经转换好的YOLOv4 om模型:[链接](https://mindx.sdk.obs.cn-north-4.myhuaweicloud.com/mindxsdk-referenceapps%20/contrib/VehicleRetrogradeRecognition/models.zip) 模型转换使用了ATC工具,如需更多信息请参考: https://support.huaweicloud.com/tg-cannApplicationDev330/atlasatc_16_0005.html ## 4 逆行车辆推理流程开发实现 ### 4.1 pipeline编排 ``` mxpi_rtspsrc # 输入 mxpi_videodecoder # 视频解码 mxpi_imageresize # 图像缩放 mxpi_tensorinfer # 模型推理(车辆检测) mxpi_objectpostprocessor # 模型后处理(yolov4) mxpi_distributor # 数据分发(car/truck) mxpi_motsimplesortV2 # 目标跟踪 mxpi_trackretrogradecar # 逆行判断 mxpi_object2osdinstances # 目标框转绘图 mxpi_opencvosd # 在图片上绘制基本单元 mxpi_videoencoder # 视频编码 appsink # 输出 ``` ### 4.2逆行车辆检测后处理库开发 > 参考链接:https://gitee.com/ascend/docs-openmind/blob/master/guide/mindx/sdk/one_stop_navigation.md ### 4.3 技术实现流程图 ![](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20225/10/1652189228524476695.jpg) ## 5 准备 **步骤1** 通过pc端ffmpeg软件将输入视频格式转换为.264格式,如下所示为MP4转换为h.264命令: ``` ffmpeg -i test.mp4 -vcodec h264 -bf 0 -g 25 -s 1280*720 -an -f h264 test.264 //-bf B帧数目控制,-g 关键帧间隔控制,-s 分辨率控制 -an关闭音频, -r 指定帧率 ``` **步骤2** 按照第3小结**软件依赖**安装live555和ffmpeg,按照步骤1或者 [Live555离线视频转RTSP说明文档](https://gitee.com/ascend/docs-openmind/blob/master/guide/mindx/sdk/one_stop_navigation.md)将mp4视频转换为h264格式。并将生成的264格式的视频上传到`live/mediaServer`目录下,然后修改`VehicleRetrogradeRecognition/pipeline`目录下的VehicleRetrogradeRecognition.pipeline文件中mxpi_rtspsrc0的内容。 ``` "mxpi_rtspsrc0": { "factory": "mxpi_rtspsrc", "props": { "rtspUrl":"rtsp://xxx.xxx.xxx.xxx:xxxx/xxx.264", // 修改为自己所使用的的服务器和文件名 "channelId": "0" }, "next": "mxpi_videodecoder0" }, ``` **步骤3** 根据视频划分道路的分界线,取分界线两端点的坐标,写在mxpi_trackretrogradecar插件中,其中isVertical为0时代表道路是竖直或倾斜的,isVertical为1时则代表道路是基本水平的。 ``` "mxpi_trackretrogradecar0": { "props": { "dataSource": "mxpi_distributor0_0", "motSource": "mxpi_motsimplesortV20", "x1": "550", "y1": "0", "x2": "0", "y2": "423", "isVertical": "0" }, "factory": "mxpi_trackretrogradecar", "next": "queue4" }, ``` ## 使用场景概括 ### 适用条件 适用于较为笔直的公路,且只有两个方向的来车。 ### 限制条件 尺寸条件:单个车辆的宽高像素不得超过500 光照条件:光线较为良好,如果光线不足,必须有车辆的完整轮廓 ## 参数调节 | 参数名称 |参数介绍| 修改方法 | 默认值 | | -------------- | --------------------------------------------- | --------------------------------------------------------------------- | -------- | |trackThreshold |路径记录对象属于同一目标概率阈值,大于该阈值认为是同一对象|在pipeline文件中,修改mxpi_motsimplesortV2插件中的trackThreshold的大小即可| 0.5 | |lostThreshold|路径记录目标丢失帧数阈值,帧数大于该阈值认为行程目标已丢失 |在pipeline文件中,修改mxpi_motsimplesortV2插件中的lostThreshold的大小即可|3| |IOU_THRESH |两个框的IOU阈值,超过阈值即认为同一个框,用于nms算法|在models/yolov4.cfg文件中,修改IOU_THRESH的大小即可|0.6| |SCORE_THRESH |是否为框的阈值,大于阈值即认为是框|在models/yolov4.cfg文件中,修改SCORE_THRESH的大小即可|0.6| |OBJECTNESS_THRESH |是否为目标的阈值,大于阈值即认为是目标|在models/yolov4.cfg文件中,修改OBJECTNESS_THRESH的大小即可|0.7| ## 6 编译与运行 **步骤1** 按照第2小结**环境依赖**中的步骤设置环境变量。 **步骤2** 按照第 4 小节 **模型转换** 中的步骤获得 om 模型文件,放置在 `VehicleRetrogradeRecognition/models` 目录下。 **步骤3** 修改`VehicleRetrogradeRecognition/plugins/MxpiTrackRetrogradeCar`文件夹下的CMakeLists.txt文件。将其中的"$ENV{MX_SDK_HOME}"修改成自己的SDK目录。 **步骤4** 编译。进入 `VehicleRetrogradeRecognition` 目录,在 `VehicleRetrogradeRecognition` 目录下执行命令: ``` bash build.sh ``` 命令执行成功后会在`VehicleRetrogradeRecognition/plugins/MxpiTrackRetrogradeCar`目录下生成build文件夹。将`VehicleRetrogradeRecognition/plugins/MxpiTrackRetrogradeCar/build`目录下生成的的libmxpi_trackretrogradecar.so下载后上传到`${SDK安装路径}/mxVision/lib/plugins`目录下,然后将权限设置为0640。 **步骤5** 运行。回到VehicleRetrogradeRecognition目录下,在VehicleRetrogradeRecognition目录下执行命令: ``` bash run.sh ``` 命令执行成功后会在当前目录下生成检测结果视频文件out.h264,然后执行命令: ``` ffmpeg -f h264 -i out.h264 -vcodec copy out.mp4 ``` 命令执行成功后会得到检测结果视频文件的mp4格式。 ## 7 性能测试 **测试帧率:** 使用`VehicleRetrogradeRecognition/test`目录下的main.cpp替换`VehicleRetrogradeRecognition`目录下的main.cpp,然后按照第6小结编译与运行中的步骤进行编译运行,服务器会输出运行到该帧的平均帧率。 ![](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20225/31/1653964939310323723.jpg) 本样例统计出每秒处理的帧数,输入为25帧率的视频,单路推理,理应每秒处理25 * 1 = 25帧,如统计每秒的帧率达到25则性能达标。经测试,本样例满足1920*1080分辨率下25帧率的推理。 ## 8 常见问题 8.1 视频编码参数配置错误 **问题描述:** `VehicleRetrogradeRecognition/pipeline/VehicleRetrogradeRecognition.pipeline`中视频编码分辨率需手动指定imageHeight 和 imageWidth 属性,需要和视频输入分配率相同,否则会包如下类型的错: ![](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20225/9/1652075631557257141.jpg) **解决方案:** 确保`VehicleRetrogradeRecognition/pipeline/VehicleRetrogradeRecognition.pipeline`中 mxpi_videoencoder0 插件的 imageHeight 和 imageWidth 属性值是输入264视频的高和宽。
  • [其他] 用于视频恢复的无监督流对齐序列到序列学习
    如何正确建模视频序列中的帧间关系是视频恢复(VR)中一个重要但尚未解决的问题。在本研究中,我们提出一种无监督流对齐序列对序列模型(S2SVR)来解决这个问题。一方面,在虚拟现实中首次探索了在自然语言处理领域已被证明具有序列建模能力的序列对序列模型。优化的序列化建模显示了捕获帧之间的远程依赖关系的潜力。另一方面,我们提出序列到序列模型与无监督光流估计器,以最大限度地发挥其潜力。流量估计器使用我们提出的无监督蒸馏损失进行训练,这可以缓解以前基于流量的方法的数据差异和不准确的退化光流量问题。通过可靠的光流,我们可以在多个帧之间建立精确的对应关系,缩小一维语言帧和二维失调帧之间的域差异,提高序列对序列模型的潜力。S2SVR在多个VR任务中表现优异,包括视频去模糊、视频超分辨率、视频压缩质量增强等。https://github。com/linjing7/VR-Baselinehttps://www.zhuanzhi.ai/paper/cd5d99f20f1647204b5e7a5158c9ee01
  • [技术干货] 强大的视频抠图(RVM)在AI Gallery的Notebook案例使用
    有这么一个notebook资源,“[强大的视频抠图(RVM)](https://developer.huaweicloud.com/develop/aigallery/notebook/detail?id=2316748d-ce18-4345-a720-15d56c8b597e)” ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20225/28/1653743468857675887.png) 那么在运行的时候是可能会碰到一些小小的疑问。具体如下。 因为在运行时是需要GPU的,所以我们在开始的时候就先切换到正确的环境,也不要等待运行代码时才切换,因为切换环境后,所有之前安装的包都会丢失,需要重新安装,会比较麻烦: ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20225/28/1653745992053290256.png) 第一个是在安装依赖时,加上了quiet选项, `!pip install --quiet av pims` 这样的话,相关的安装信息包括版本号信息是没有显示的。虽然如此,报错信息仍然是显示的,实际情况也确实有报错:(下面的内容应当正常显示) ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts. modelarts 1.4.4 requires esdk-obs-python小于等于3.21.4, which is not installed. modelarts 1.4.4 requires requests小于等于2.26.0, but you have requests 2.27.1 which is incompatible. modelarts 1.4.4 requires tqdm小于等于4.62.3, but you have tqdm 4.64.0 which is incompatible. modelarts 1.4.4 requires typing-extensions小于等于4.0.1, but you have typing-extensions 4.2.0 which is incompatible. modelarts 1.4.4 requires urllib3小于等于1.26.7, but you have urllib3 1.26.9 which is incompatible. ma-cau 1.1.2 requires requests==2.26.0, but you have requests 2.27.1 which is incompatible. ma-cau 1.1.2 requires tenacity小于等于6.1.0, but you have tenacity 8.0.1 which is incompatible. ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20225/28/1653744740598754752.png) 我们可以看到安装的版本av-9.2.0 pims-0.6.0。可能就是版本的原因导致了这些报错,但是这个报错是否会影响后面的正常运行呢?让我们接着往下走。 在读取模型这一步有可能会报错,但是你可以多试几次,如果你发现报错的原因是网络原因,那就可以在试上几次。因为他要访问github网站,由于众所周知的原因,可能不是一次就能成功的。(要从github获取的内容是:https://codeload.github.com/PeterL1n/RobustVideoMatting/zip/refs/heads/master) 如果没有报错了,那么就接着往下做推理,非常顺利的就可以成功。这就说明前面安装报错,并不影响后面的正常执行。 而前面报错的原因是因为依赖库的版本没有指定版本号,所以默认安装的应该是目前最新的版本。而这个抠图项目,在推理时给的依赖文件(requirements_inference.txt)里列出的版本号是这样的: av==8.0.3 torch==1.9.0 torchvision==0.10.0 tqdm==4.61.1 pims==0.5 很显然,我们不指定版本号安装的版本比这要求的要高。(可以在看一下torch版本号是这样的: torch-1.11.0+cu102, torchvision-0.12.0+cu102) 所以使用默认安装的版本号并不影响项目的正常执行。好了,到这里就结束了。
  • [问题求助] 小熊派传视频上华为云平台有什么好方法吗
    小熊派传视频上华为云平台有什么好方法或者思路吗
  • [算子使用] 【MindSpore易点通】MindSpore怎么用?手把手教你!--算子开发 CPU
    硬件平台: CPU操作系统:win10 x64视频中版本较低,当前代码有重构按照视频教程,打算新增一个MyTranspose的算子,功能和Transpose完全一致。首先找到算子的实现,拷贝相关文件,修改transpose->mytransposemindspore\ccsrc\plugin\device\cpu\kernel transpose_cpu_kernel.cctranspose_cpu_kernel.h     python端代码,和视频中有很大不同,通过装饰器进行参数校验。mindspore/python/mindspore/ops/operationsarray_ops.py  mindspore\ops\_grad\grad_array_ops.py \mindspore\ops\operations\__init__.py    编译代码       测试代码import numpy as np from mindspore import Tensor from mindspore.ops import operations as P from mindspore.common.api import ms_function from mindspore.common.initializer import initializer from mindspore.common.parameter import Parameter import mindspore.nn as nn import mindspore.context as context context.set_context(mode=context.PYNATIVE_MODE, device_target='CPU') class Transpose(nn.Cell): def __init__(self): super(Transpose, self).__init__() self.transpose = P.Transpose() self.x_2D = Parameter(initializer(Tensor(np.arange(5 * 6).reshape(5, 6).astype(np.float32)), [5, 6]), name='x_2D') self.perm_2D = (1, 0) @ms_function def construct(self): return self.transpose(self.x_2D, self.perm_2D) class MyTranspose(nn.Cell): def __init__(self): super(MyTranspose, self).__init__() self.mytranspose = P.MyTranspose() self.x_2D = Parameter(initializer(Tensor(np.arange(5 * 6).reshape(5, 6).astype(np.float32)), [5, 6]), name='x_2D') self.perm_2D = (1, 0) @ms_function def construct(self): return self.mytranspose(self.x_2D, self.perm_2D) transpose = Transpose() output = transpose() print(output.asnumpy()) mytranspose = MyTranspose() output = mytranspose() print(output.asnumpy())修改后端代码的注册没修改对修改后再次编译看来新增加个算子不简单。。。邮箱:8714604@qq.com
  • [MindX SDK] FairMOT目标跟踪样例运行后得到的视频速度过快
    我在atlas 200DK上搭建的和设环境 运行样例FairMOT多目标轨迹检测-昇腾社区 (hiascend.com)成功后得到的视频播放速度过快,且画质模糊。转换代码如下;如何使画质不那么糊,且播放速度慢一点呢?
  • [活动体验] 【MindSpore易点通】MindSpore怎么用?手把手教你!----之算子开发
    1. 首先说一下对手把手视频的感受1.1写的是TensorAdd, 但是如果我没有看错,后面的明明是TensorAddV2, 不相符1.2 视频中的代码也没有写要放在哪里,或者路径什么的,还有文件名,统统没有,这咋操作,还需要一个一个匹配2. 开始根据视频操作2.1 mindspore/python/mindspore/ops/operations/__init__.py , 在__init__.py中导出TensorAddV2类型2.2 mindspore/python/mindspore/ops/operations/math_ops.py,在文档内新增TensorAddV22.3 mindspore/ccsrc/plugin/device/gpu/kernel/math/tensor_add_v2_gpu_kernel.cc GPU算子注册2.4 mindspore/ccsrc/plugin/device/gpu/kernel/math/tensor_add_v2_gpu_kernel.h GPU算子开发2.5 mindspore/ccsrc/plugin/device/gpu/kernel/cuda_impl/cuda_ops/tensor_add_v2_impl.cu2.6 编译在mindspore下面执行bash build.sh -e gpu -z -M on -V 10.1 -j1002.7 装包2.8.执行结果邮箱:497776945@qq.com