视频拼接融合产品的产品与架构设计(二)
视频拼接融合产品的产品与架构设计一
以上是第一期,以前思考的时候还是比较着急,现在思考的更多了,现实世界的拼接更加需要我们沉下心来做,尤其是对于更多画面,画面更加清晰怎么做
本篇章不在于其他功能,在于说明选型和效率问题
重中之重-选型
使用什么硬件
我来清除地阐述现在所有的硬件平台,绝无虚言,
1 nvidia 英伟达的cuda
英伟达的产品好用,主要在于cuda生态,同时细节处理丰满,运用简单,他的gpu解码器和编码器和tensor core 分别为不同的芯片,可以流水线处理,windows下可以使用dlss 进行超分处理,可以同时使用cuda技术解码和directx 11 技术解码,vulcan技术解码,可以在gpu中直接处理所有算法,而不用下放到cpu,拼接完成,编码完成后发出rtsp流,后面我会证明为什么要使用cuda。
2 amd
amd的显卡解码在windows下可以直接使用directx11,至于其他可以使用opencl 去做,这一部分需要熟悉opencl的kernel,也是可以的,效率会稍稍差一些,如果是没有什么选择,尽量使用nvidia的夏卡
3 intel 显卡
intel的核显很强大,编解码非常厉害,同时intel出的独立显卡也是很好用的,同样可以使用他的独立显卡,如出的arc A750 ,arcA770,都是可用的,图像处理也没有问题,可以选,但是慎重
4 瑞芯微3588
瑞芯微3588 可以用,解码芯片和编码芯片也很突出,有硬件的rga处理
不过技术文档不友好,但是还是可以用,记住流程,使用rga硬件,使用opencl都可以的
5 树莓派
可以硬件解码,图像处理可以使用opencl
6 华为昇腾(Ascend)
暂时对图像处理不友好,可以使用opencv高版本进行处理,npu可以使用
7 其他国产显卡
暂时不要进行研究处理,通用性还没有那么好,等待各个图像处理和AI处理都可以了,再进行下一步
至于国内的显卡,我为什么现在不推荐做,因为现在还不成熟,而对于amd 和 intel 显卡我们要排在英伟达的后面,因为英伟达确实通用性非常强。
以上希望其他研究者,学者与我联系,如果可能,我会尽我所能进行测试分析,或者纠正我说的错误
分布式架构

下面我就nvidia显卡进行分析,说明cuda的效率
cuda nv12 和 bgr 互相转化
为什么要使用bgr 和 nv12 的转化?因为我们都知道大名鼎鼎的opencv,处理图像和滤波算法以及AI算法推理,可以使用bgr方式,这样,使用cuda转化,使用bgr 和 rgb方式进行AI算法推理和普通算法处理图像,结束后立即编码,
__global__ void BGR2NV12Kernel(const uchar3* srcBGR, unsigned char* dstY, unsigned char* dstUV, int width, int height, int srcStep, int dstYStep, int dstUVStep) {int x = blockIdx.x * blockDim.x + threadIdx.x;int y = blockIdx.y * blockDim.y + threadIdx.y;if (x < width && y < height) {int srcIndex = y * srcStep + x ;int dstYIndex = y * dstYStep + x;int dstUVIndex = y / 2 * dstUVStep + x;// BGR to NV12 conversionuchar3 pixel = srcBGR[srcIndex];dstY[dstYIndex] = 0.299f * pixel.x + 0.587f * pixel.y + 0.114f * pixel.z; // Y component//以下为uv分量转化}
}
结果出来的图像是这样的

考虑x周横向是3个像素,修改一下
int srcIndex = y * srcStep + x *3;

离目标有点远,仔细分析cuda代码,应该是这样
uchar3* ppixel = (uchar3*)((unsigned char*)srcBGR + y * srcStep) + x;
这下正确了,cuda的好用就在于像素并行操作!
右边是原图,左边是cuda转硬件的bgr 到 nv12,再次使用 nv12 转成bgr ,进行显示,耗费时间,我们加几行代码进行计算
double startTime = cv::getTickCount();// 在这里执行你需要测量耗时的操作// 例如,这里模拟一个延时操作// 记录结束时间double endTime = cv::getTickCount();//bgr 转nv12bgr_to_nv12_cuda(reinterpret_cast<uchar3*>(gpu_input_image.data), frame->data[0],frame->data[1], w, h, gpu_input_image.step, frame->linesize[0], frame->linesize[1]);//nv12 转 bgrnv12_to_rgb24_cuda(frame->data[0], frame->data[1], memory, m1.step, frame->linesize[0], frame->linesize[1], frame->width, frame->height, 3);// 计算时间差,单位为毫秒double elapsedTimeMs = (endTime - startTime) / cv::getTickFrequency() * 1000.0;std::cout << "Elapsed time in milliseconds: " << elapsedTimeMs << std::endl;

nvidia 1650 显卡,使用cuda ,花费0.946 毫秒,1毫秒不到完成2次转化,图片太小,我们加一个2k的图像进行转化:如下所示

花费1.27 毫秒,性能开始下降,比较危险,看看是否能够提高
线程块修改
dim3 block(16, 16);
dim3 block(32, 32);

基本上提高了一点,不大,4k画面估计要到2-3毫秒,我们再次测试一下

果然到了2.478 毫秒,这个时间有些超量,希望可以优化到1毫秒多。
对于一秒钟视频25帧画面来说,4k画面需要2.5 * 25 = 62.5 毫秒,说实话有点多了。
如果我们使用ffmpeg cpu swscale, 后果不堪设想。
总结
总之效率是最重要的,还有一点一直是我所思考的,如果死磕gpu,那么cpu 会浪费,所以对gpu 和 cpu 除了要分布式处理,还要进行分担,所以我决定从多点出发,需要进行cpu 前处理插件点,gpu处理插件点,gpu下拉后插件点 ,利用cpu 多核处理能力,同时分担gpu的任务。
未完,待续。。。。。。。
相关文章:
视频拼接融合产品的产品与架构设计(二)
视频拼接融合产品的产品与架构设计一 以上是第一期,以前思考的时候还是比较着急,现在思考的更多了,现实世界的拼接更加需要我们沉下心来做,尤其是对于更多画面,画面更加清晰怎么做 本篇章不在于其他功能,在…...
【docker 】push 镜像到私服
查看镜像 docker images把这个hello-world 推送到私服 docker push hello-world:latest 报错了。不能推送。需要标记镜像 标记Docker镜像 docker tag hello-world:latest 192.168.2.1:5000/hello-world:latest 将Docker镜像推送到私服 docker push 192.168.2.1:5000/hello…...
Java框架精品项目【用于个人学习】
源码获取:私聊回复【项目关键字】获取 更多选题参考: Java练手项目 & 个人学习等选题参考 推荐菜鸟教程Java学习、Javatpoint学习 前言 大家好,我是二哈喇子,此博文整理了各种项目需求 此文下的项目用于博主自己学习&#x…...
每周一算法:无向图的最小环
题目链接 观光之旅 题目描述 给定一张无向图,求图中一个至少包含 3 3 3 个点的环,环上的节点不重复,并且环上的边的长度之和最小。 该问题称为无向图的最小环问题。 你需要输出最小环的方案,若最小环不唯一,输出…...
分布式websocket IM即时通讯聊天开源项目如何启动
前言 自己之前分享了分布式websocket的视频有同学去fork项目了,自己启动一下更方便理解项目嘛。然后把项目启动需要的东西全部梳理出来。支持群聊单聊,表情包以及发送图片。 支持消息可靠,消息防重,消息有序。同时基础架构有分布式权限&…...
tensorflow学习笔记(1)环境准备写个简单例子(小白手册)-20240506
一、安装python、tensorflow 1、Mac上默认python已经安装,自带pip 2、pip3 install tensorflow 如果报错,提示pip3版本较低,可以根据提示来更新pip3:/Library/Developer/CommandLineTools/usr/bin/python3 -m pip install --upgrade pip 3、然后再使用pip3来安装tensor…...
kubernate 基本概念
一 K8S 是什么? K8S 全称:Kubernetes 1 kubernate基本概念 作用: 用于自动部署、扩展和管理“容器化(containerized)应用程序”的开源系统。 可以理解成 K8S 是负责自动化运维管理多个容器化程序(比如…...
【系统架构师】-选择题(十二)计算机网络
1、网闸的作用:实现内网与互联网通信,但内网与互联网不是直连的 2、管理距离是指一种路由协议的路由可信度。15表示该路由信息比较可靠 管理距离越小,它的优先级就越高,也就是可信度越高。 0是最可信赖的,而255则意味…...
代码随想录|总结篇
完结篇: 60天,还是坚持了下来,达成算法路上的一个小目标。 加入代码随想录训练营之前,也断断续续刷到了树那一章节,但后面因为导师项目等种种情况,一直耽搁到年后。年后打算重新开始刷题时,正好…...
网络编程套接字和传输层tcp,udp协议
认识端口号 我们知道在网络数据传输的时候,在IP数据包头部有两个IP地址,分别叫做源IP地址和目的IP地址。IP地址是帮助我们在网络中确定最终发送的主机,但是实际上数据应该发送到主机上指定的进程上的,所以我们不仅要确定主机&…...
通过wget下载ftp文件
通过wget下载ftp文件 基础用法带密码的http文件带密码的ftp文件补充 基础用法 在下载的过程中会显示进度条,包含百分比,已下载字节,下载速度,剩余时间。 # 下载单个文件 wget [url_file]# 下载目录全部文件 wget [url_dir/*] wg…...
Acrobat Pro DC 2023 for Mac:PDF处理的终极解决方案
Acrobat Pro DC 2023 for Mac为Mac用户提供了PDF处理的终极解决方案。它具备强大的文档处理能力,无论是查看、编辑还是创建PDF文件,都能轻松胜任。在编辑功能方面,Acrobat Pro DC 2023支持对文本、图像进行精准的修改和调整,还能添…...
map容器
目录 map构造和赋值 map大小和交换 map插入和删除 map查找和统计 map排序 map构造和赋值 map中所有元素都是pair(即一对) pair中第一个元素为key(键值),起到索引作用,第二个元素为value(…...
GNU/Linux - 是否可以多次打开同一个设备文件
使用设备/dev/ttyS1举例来说明。 一个设备文件打开多次 在 Linux 中,多次打开 /dev/ttyS1 以读取数据通常是可以接受的。多次打开 /dev/ttyS1 并向 /dev/ttyS1 发送数据时,所有打开的文件描述符都能接收数据。每个打开的文件描述符都代表与串行端口的独立…...
Visual Studio的使用方法
目录 1. 下载软件 2. 软件安装 3. 软件使用 4. VS工具的字体背景美化 5. 程序调试 1. 下载软件 官网地址:Visual Studio 2022 IDE - 适用于软件开发人员的编程工具 (microsoft.com) 2. 软件安装 1.选中vs_Professional,鼠标右击选择“以管理员身份…...
【35分钟掌握金融风控策略18】贷前风控策略详解-3
目录 编辑 贷前风控数据源 第三方数据 贷前风控数据源 第三方数据 在金融风控过程中,金融机构通常会引入一些第三方的风控数据(或第三方金融技术)来辅助识别贷款个人或贷款企业的风险状况,帮助金融机构进行风控决策&#x…...
秋招后端开发面试题 - MySQL事务
目录 MySQL事务前言面试题什么是数据库事务为什么要有事务呢?项目中遇到的事务事务的传播机制事务的特性?事务并发存在的问题四大隔离级别四大隔离级别,都会存在哪些并发问题呢数据库是如何保证事务的隔离性的呢?如何解决加锁后的…...
C语言栈的含义与栈数据操作代码详解!
引言:在本篇博客中,我们将学到数据结构——栈,讲到栈的含义与关于栈的数据操作代码。栈可以在顺序表、双向链表以及单链表的基础上实现,而于本篇博客中,我们选择在顺序表的基础上实现栈。 更多有关C语言和数据结构知识…...
数据库基础语法二
一、数据库 1、登陆数据库 2、创建数据库zoo 3、修改数据库zoo字符集为gbk 4、选择当前数据库为zoo 5、查看创建数据库zoo信息 6、删除数据库zoo mysql -uroot -p #登陆数据库 create database zoo; #创建数据库zoo alter database zoo character set gbk collate gbk_…...
数据库的一些知识点
在Sno between列上创建约束,要求Sno的值在18至22岁之间,约束名Sno_CK。请写出对应的完整性命名子句constraint Sno_CK primary key check and。 本题得分: 0分 正确答案: 填空1 : 学号填空2 : snobetween18and22 2.单选题 (12分) 下述SQL命令的短语中…...
iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...
从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...
IP如何挑?2025年海外专线IP如何购买?
你花了时间和预算买了IP,结果IP质量不佳,项目效率低下不说,还可能带来莫名的网络问题,是不是太闹心了?尤其是在面对海外专线IP时,到底怎么才能买到适合自己的呢?所以,挑IP绝对是个技…...
人机融合智能 | “人智交互”跨学科新领域
本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...
JavaScript基础-API 和 Web API
在学习JavaScript的过程中,理解API(应用程序接口)和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能,使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...
uniapp 开发ios, xcode 提交app store connect 和 testflight内测
uniapp 中配置 配置manifest 文档:manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号:4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...
【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看
文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...
