FPGA实现4K MIPI视频解码H265压缩网络推流输出,基于IMX317+VCU架构,支持4K60帧,提供工程源码和技术支持

目录

  • 1、前言
    • 工程概述
    • 免责声明
  • 2、相关方案推荐
    • 我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目
    • 我这里已有的 MIPI 编解码方案
    • 我这里已有的视频图像编解码方案
  • 3、详细设计方案
    • 设计框图
    • FPGA开发板
    • IMX317摄像头
    • MIPI D-PHY
    • MIPI CSI-2 RX Subsystem
    • 图像预处理
    • Sensor Demosaic 图像格式转换
    • Gammer LUT 伽马校正
    • Video Processing Subsystem 图像缩放
    • Video Frame Buffer Write 图像缓存
    • Zynq UltraScale+ VCU H265 视频压缩
    • 工程源码架构
    • PetaLinux 工程编译
    • VLC播放器
  • 4、Vivado工程源码详解
  • 5、工程移植说明
    • vivado版本不一致处理
    • FPGA型号不一致处理
    • 其他注意事项
  • 6、上板调试验证并演示
    • 准备工作
    • 配置Xshell
    • 配置开发板IP
    • 配置MIPI CSI-2 RX Subsystem
    • 配置Sensor Demosaic
    • 配置Gamma LTU
    • 配置Video Processing Subsystem
    • 配置H265视频压缩
    • 配置VLC播放器
    • VLC播放H265码流视频演示
  • 7、福利:工程源码获取

FPGA实现4K MIPI视频解码H265压缩网络推流输出,基于IMX317+VCU架构,支持4K60帧,提供工程源码和技术支持

1、前言

Xilinx系列FPGA实现MIPI视频解码现状:
MIPI视频解码分为D-PHY和CSI-2两大部分,其中D-PHY属于物理层,依托硬件,灵活性不高,方案不多;CSI-2属于协议层,依托代码,灵活性很高,方案很多;所以只要实现了D-PHY,MIPI-CSI解码其实就很灵活了;
目前Xilinx系列FPGA实现提供了多种MIPI D-PHY方案;第一种是使用专用的D-PHY芯片实现D-PHY功能,比如MC20901,该方案优点是设计简单,缺点是硬件成本较高;第二种是使用权电阻网络实现D-PHY功能,该方案是Xilinx官方推荐的一种简单、低速的D-PHY方案,通常用于测试,该方案优点是电路简单,硬件成本低,缺点是性能适中,无法用于高端场景;第三种是使用软核IP实现D-PHY功能,但该方案仅限于UltraScale+和Zynq UltraScale+高端系列FPGA,该方案优点是设计简单,缺点是硬件成本极高;然后D-PHY信号进入Xilinx官方的MIPI CSI-2 RX Subsystem IP实现CSI功能,即实现MIPI视频解码,另外,也可以使用自己写的CSI模块实现CSI功能;本设计使用UltraScale+和Zynq UltraScale+高端系列FPGA,所以无需考虑D-PHY部分;

Xilinx系列FPGA实现H265视频压缩现状:
目前Xilinx系列FPGA实现H265视频压缩目前有2种方案,第一种方案是使用自己写的H265视频压缩模块实现,该方案对开发人员的技术要求及其高,目前99.999%的人都不具备此等水平,H265视频压缩模块配合Xilinx系列FPGA的PetaLinux可实现完美的视频压缩,该方案优点是设计灵活,对FPGA型号要求不高,可选择性更多,硬件成本较低,缺点是实现难度堪称宇宙级;第二种方案是使用Xilinx官方的VCU IP核,该方案优点是设计简单,对开发者的技术要求较低,上手快,项目部署快,缺点是对FPGA型号要求很高,目前仅有Zynq UltraScale+MPSoCs的EV系列FPGA支持,可选择性更少,硬件成本很高;本设计采用Xilinx官方的VCU IP核实现H265视频压缩;

工程概述

本设计采用Zynq UltraScale+MPSoCs–XCZU4EV的高端型号FPGA实现4K MIPI视频解码H265压缩网络推流输出;视频输入源为IMX317 MIPI摄像头,FPGA首先对摄像头进行i2c初始化配置,将IMX317 输出分辨率配置为3840x2160@30Hz,MIPI-4 Lane输出模式;然后MIPI视频送入Xilinx官方的MIPI CSI-2 RX Subsystem IP核实现D-PHY+CSI功能;然后调用图像预处理模块实现视频剪裁和RAW12转RAW8功能;然后视频送入Xilinx官方的Sensor Demosaic IP核实现RAW8转RGB888功能;然后视频送入Xilinx官方的Gamma LTU实现伽马校正功能;然后送入Xilinx官方的Video Processing Subsystem IP核实现视频实时缩放;然后调用Xilinx官方的Video Frame Buffer Write IP核将图像写入PS侧的DDR4中缓存;然后然后调用Xilinx官方的Zynq UltraScale+ VCU IP核读出图像并作H265压缩;至此,整个FPGA工程已经完成;然后编译工程,导出.xsa文件,并在PetaLinux中做嵌入式Linux启动文件,在Linux软件设计中,将压缩的H265视频码流通过TCP协议从网口发送出去,在PC端可通过LVC播放器播放压缩的H265码流;然后将做好的Linux启动文件复制到TF卡中,插上TF卡即可启动Linux系统,在Xshell中即可操作终端进行配置;

本设计提供资源如下:
• 提供一套XCZU4EV开发板
• 提供一套Vivado2020.2版本的工程源码
• 提供一套编译好的固件,可启动Linux系统

本博客详细描述了Xilinx系列Zynq UltraScale+MPSoCs–XCZU4EV的高端型号FPGA实现4K MIPI视频解码H265压缩网络推流输出的设计方案,工程代码可综合编译上板调试,可直接项目移植,适用于在校学生、研究生项目开发,也适用于在职工程师做学习提升,可应用于医疗、军工等行业的高速接口或图像处理领域;
提供完整的、跑通的工程源码和技术支持;
工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;

免责声明

本工程及其源码即有自己写的一部分,也有网络公开渠道获取的一部分(包括CSDN、Xilinx官网、Altera官网以及其他开源免费获取渠道等等),若大佬们觉得有所冒犯,请私信批评教育;部分模块源码转载自上述网络,版权归原作者所有,如有侵权请联系我们删除;基于此,本工程及其源码仅限于读者或粉丝个人学习和研究,禁止用于商业用途,若由于读者或粉丝自身原因用于商业用途所导致的法律问题,与本博客及博主无关,请谨慎使用。。。

2、相关方案推荐

我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目

其实一直有朋友反馈,说我的博客文章太多了,乱花渐欲迷人,自己看得一头雾水,不方便快速定位找到自己想要的项目,所以本博文置顶,列出我目前已有的所有项目,并给出总目录,每个项目的文章链接,当然,本博文实时更新。。。以下是博客地址:
点击直接前往

我这里已有的 MIPI 编解码方案

我这里目前已有丰富的基于FPGA的MIPI编解码方案,主要是MIPI解码的,既有纯vhdl实现的MIPI解码,也有调用Xilinx官方IP实现的MIPI解码,既有2line的MIPI解码,也有4line的MIPI解码,既有4K分辨率的MIPI解码,也有小到720P分辨率的MIPI解码,既有基于Xilinx平台FPGA的MIPI解码也有基于Altera平台FPGA的MIPI解码,还有基于Lattice平台FPGA的MIPI解码,后续还将继续推出更过国产FPGA的MIPI解码方案,毕竟目前国产化方案才是未来主流,后续也将推出更多MIPI编码的DSI方案,努力将FPGA的MIPI编解码方案做成白菜价。。。
基于此,我专门建了一个MIPI编解码的专栏,并将MIPI编解码的博客都放到了专栏里整理,对FPGA编解码MIPI有项目需求或学习兴趣的兄弟可以去我的专栏看看,专栏地址如下:
点击直接前往专栏

我这里已有的视频图像编解码方案

我这里有图像的JPEG解压缩、JPEG-LS压缩、H264编解码、H265编解码以及其他方案,后续还会出更多方案,我把他们整合在一个专栏里面,会持续更新,专栏地址:
直接点击前往

3、详细设计方案

设计框图

本设计使用的工程详细设计方案框图如下:
在这里插入图片描述

FPGA开发板

本UP主有下列FPGA开发板均可实现4K@60Hz视频 HDMI2.0的收发,本博客仅仅是介绍了其中Zynq UltraScale+系列的开发板实现方案,关于本博客使用的这款开发板详细信息,请参考我之前的博客,对这块开发板感兴趣的朋友可以咨询本UP获得;博客链接如下:
点击直接前往

IMX317摄像头

视频输入源为IMX317 MIPI摄像头,FPGA首先对摄像头进行i2c初始化配置,将IMX317 输出分辨率配置为3840x2160@30Hz,MIPI-4 Lane输出模式;IMX317 i2c配置在vitis软件代码中;IMX317摄像头如下:
在这里插入图片描述

MIPI D-PHY

由于本设计使用UltraScale+系列FPGA,软核方案自带D-PHY,所以不再需要配套的D-PHY芯片或者权电阻D-PHY电路,也就是MIPI输入电路不再需要分理处LP低功耗电路,直接将HS差分时钟对和数据对直接连到FPGA的HP-BANK即可;
!!!注意
!!!注意
如果你的开发板FPGA型号不是UltraScale+系列,则需要D-PHY电路,否则无法解码MIPI视频;

MIPI CSI-2 RX Subsystem

然后MIPI视频送入Xilinx官方的MIPI CSI-2 RX Subsystem IP核实现D-PHY+CSI功能,当然,这里主要是CSI功能,即MIPI协议层解码,IMX317摄像头配置后,MIPI-CLK是600MHz,又由于是双沿传输,那么线速率就是1200MHz,IMX317配置为4 Lane通道传输,双像素输出模式;MIPI CSI-2 RX Subsystem配置如下:
在这里插入图片描述
MIPI CSI-2 RX Subsystem在Block Design中如下:
在这里插入图片描述

图像预处理

MIPI视频解码后,调用图像预处理模块实现视频剪裁和RAW12转RAW8功能;将图像预处理模块顶层直接拖入Block Design中如下:
在这里插入图片描述

Sensor Demosaic 图像格式转换

调用Xilinx的Sensor Demosaic IP实现RAM转RGB功能,该IP通过Vitis的C代码软件配置,Sensor Demosaic配置如下:
在这里插入图片描述
Sensor Demosaic在Block Design中如下:
在这里插入图片描述

Gammer LUT 伽马校正

调用Xilinx的Gammer LUT IP实现伽马校正功能,该IP通过Vitis的C代码软件配置,Gammer LUT配置如下:
在这里插入图片描述
Gammer LUT在Block Design中如下:
在这里插入图片描述

Video Processing Subsystem 图像缩放

由于工程所用到的IP都是常用IP,所以这里重点介绍一下Video Processing Subsystem;
Video Processing Subsystem有缩放、去隔行、颜色空间转换等功能,这里仅使用图像缩放功能;其特点如下:
优点1:适用于Xilinx所有系列的FPGA器件和所有的Vivado版本;
优点2:支持8K最大分辨率:即可以处理高达8K的视频;
优点3:输入视频格式:AXI4-Stream,方便对接Xilinx图像处理套路的相关IP;
优点4:输出视频格式:AXI4-Stream,方便对接Xilinx图像处理套路的相关IP;
优点5:模块占用的FPGA逻辑资源更小,相比于自己写的HLS图像缩放而言,官方的Video Processing Subsystem资源占用大约减小30%左右,且更高效:
注意!!!!
注意!!!!
缺点1:需要SDK软件配置,其本质为通过AXI_Lite 做寄存器配置,设计难度现对复杂,对新手小白不太友好;
缺点2:Xilinx官方提供的Video Processing Subsystem IAP并不能实现任意尺寸的图像缩放,只能在IAP中视频分辨率查找表范围内进行缩放操作,如果想要实现自定义任意尺寸缩放,需要修改Xilinx官方提供的API源代码,对新手小白极其友好,有此类需求的朋友可以联系博主,提供私人定制服务,也就是我帮你修改Xilinx官方提供的API源代码,以实现自定义任意尺寸缩放操作;

Video Processing Subsystem逻辑资源如下,请谨慎评估你的FPGA资源情况;
在这里插入图片描述
Video Processing Subsystem 在Block Design设计中如下:
在这里插入图片描述

Video Frame Buffer Write 图像缓存

Video Frame Buffer Write相当于精简版的VDMA,只具有视频写入DDR的功能,与VDMA相比具有YUV视频写入的功能,配置如下:
在这里插入图片描述
Video Frame Buffer Write 在Block Design设计中如下:
在这里插入图片描述
在Linux设计中可以对视频写入的基地址进行配置,通过终端指令配置;

Zynq UltraScale+ VCU H265 视频压缩

Zynq UltraScale+ VCU是Xilinx Zynq UltraScale+ ZUEV系列FPGA才有的IP,可以实现最高4K60帧的视频压缩和解压,IP的官方文档是《PG252》,读者可以自行前往阅读,Zynq UltraScale+ VCU配置如下:
在这里插入图片描述
输入视频格式为YUV420,最高分辨率配置为4K60帧;Zynq UltraScale+ VCU 在Block Design设计中如下:
在这里插入图片描述

工程源码架构

工程源码架构包括vivado Block Design逻辑设计和PetaLiux软件设计;
Block Design逻辑设计架构截图如下:
在这里插入图片描述
综合后的源码架构如下:
在这里插入图片描述
需要注意的是,在对Block Design进行Generate Output Products时需要选择Global模式,如下:
在这里插入图片描述

PetaLinux 工程编译

注意!!!
注意!!!
注意!!!
本博主已经提供好已制作完成的启动文件,理论上PetaLinux 工程编译不不要您重复再做,如果您感兴趣,则可以做这一步。。。

PetaLinux版本:PetaLinux版本为2020.2,因为vivado用的vivado202.2,为了兼容性,建议使用与之配套的PetaLinux2020.2;
运行环境:Ubuntu操作系统,我用的Win10上虚拟机搭建的Ubuntu,当然也可以使用直接装Ubuntu操作系统的电脑;

第1步:导出vivado工程的.xsa文件,并放到Ubuntu下你新建的文件夹中;同时下载我们提供的BSP包,也放到Ubuntu下你新建的文件夹中;然后改变其用户权限,如下图:
• 终端指令:sudo chmod -R 777 文件名,比如:
• 终端指令:sudo chmod -R 777 zu402_mipi_rx_wrapper.xsa
• 终端指令:sudo chmod -R 777 zu402_sd.bsp

第2步:配置PetaLinux2020.2环境变量,如下图:
• 终端指令:source /opt/pkg/petalinux/2020.2/settings.sh
在这里插入图片描述
第3步:建立基于BSP包的PetaLinux2020.2工程,如下图:
• 终端指令:petalinux-create -t project -s zu402_sd.bsp -n zu402_sd
在这里插入图片描述
第4步:将.xsa硬件信息导入PetaLinux2020.2工程,如下图:
• 终端指令:petalinux-config --get-hw-description=/home/文件路径/zu402_sd
在这里插入图片描述
在编译环境设置时,建议使用离线编译,当然,选择在线编译也是可以的,离线编译配置如下:
Yocto Settings → Add pre-mirror url如下,路径要改为你自己 download 及 ssate 的解压路径;
在这里插入图片描述
Yocto Settings → Local sstate feeds settings如下,路径要改为你自己 download 及 ssate 的解压路径;
在这里插入图片描述
其他配置保持默认即可,然后保存退出,如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
第5步:修改设备树文件,如下图:
将我们提供的设备树文件替换掉PetaLinux工具自动生成的用户设备树文件;
• 终端指令:ln -sf zu402_sensor_imx317.dtsi system-user.dtsi
• 终端指令:ls -l
在这里插入图片描述
第6步:编译PetaLinux2020.2工程,如下图:
• 终端指令:petalinux-build
在这里插入图片描述
如果编译中途有报错信息,请复制报错信息并百度寻找解决办法,因为每个人的电脑配置不一样,环境配置不一样,遇到的问题也不一样,无法给出统一的答案;

第7步:生成镜像,如下图:
• 终端指令:cd images/linux
• 终端指令:petalinux-package --boot --fsbl zynqmp_fsbl.elf --u-boot u-boot.elf --pmufw pmufw.elf --fpga
system.bit
在这里插入图片描述
然后把PetaLinux2020.2工程生成的如下几个文件连同我们提供好的脚本文件一起放入SD卡中,如下:
在这里插入图片描述
到此们就可以插入SD卡上电跑系统了;

VLC播放器

压缩后的H265码流可通过VLC播放器播放,关于VLC播放器的安装与使用,请参考下面的博客链接:
点击直接前往

4、Vivado工程源码详解

开发板FPGA型号:Xilinx–Zynq UltraScale+MPSoCs–xczu4ev-sfvc784-2-i;
FPGA开发环境:Vivado2020.2;
Linux开发环境:PetaLinux2020.2;
输入:IMX317摄像头,分辨率3840x2160@30Hz;
输出:RJ45网口,H265压缩码流,分辨率3840x2160@30Hz;;
视频压缩方案:Zynq UltraScale+ VCU–H265压缩;
视频压缩输出方案:UDP网络推流;
工程源码架构请参考前面第3章节中的《工程源码架构》小节;
工程作用:此工程目的是让读者掌握FPGA基于VCU的H265视频压缩的设计能力,以便能够移植和设计自己的项目;
工程的资源消耗和功耗如下:
在这里插入图片描述

5、工程移植说明

vivado版本不一致处理

1:如果你的vivado版本与本工程vivado版本一致,则直接打开工程;
2:如果你的vivado版本低于本工程vivado版本,则需要打开工程后,点击文件–>另存为;但此方法并不保险,最保险的方法是将你的vivado版本升级到本工程vivado的版本或者更高版本;
在这里插入图片描述
3:如果你的vivado版本高于本工程vivado版本,解决如下:
在这里插入图片描述
打开工程后会发现IP都被锁住了,如下:
在这里插入图片描述
此时需要升级IP,操作如下:
在这里插入图片描述
在这里插入图片描述

FPGA型号不一致处理

如果你的FPGA型号与我的不一致,则需要更改FPGA型号,操作如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
更改FPGA型号后还需要升级IP,升级IP的方法前面已经讲述了;

其他注意事项

1:由于每个板子的DDR不一定完全一样,所以MIG IP需要根据你自己的原理图进行配置,甚至可以直接删掉我这里原工程的MIG并重新添加IP,重新配置;
2:根据你自己的原理图修改引脚约束,在xdc文件中修改即可;
3:纯FPGA移植到Zynq需要在工程中添加zynq软核;

6、上板调试验证并演示

准备工作

FPGA开发板,推荐使用本博的开发板;
IMX317摄像头;
带显卡的电脑主机,显卡越贵越好;
网线;
开发板具体连接见资料包里的连接图:
在这里插入图片描述
开发板有启动模式选择拨码开关,SD卡启动方式如下,请将开发板拨到如图的配置:
在这里插入图片描述
然后将资料中的如下图所示压缩包解压,并将解压后的全部文件复制到TF卡中:
在这里插入图片描述
然后插上TF卡,然后将串口线和网线连接到电脑,安装串口驱动,资料包中已经提供,上电;

配置Xshell

我们使用Xshell连接开发板模拟Linux终端的操作,Xshell配置如下:
在这里插入图片描述
在这里插入图片描述

配置开发板IP

首先需要配置开发板IP,配置为和你的电脑在同一网段即可,因为开发板压缩的码流视频需要发送给电脑;首先查看你的电脑IP,以我的为例如下:
在这里插入图片描述
然后在Xshell依次输入如下指令配置配置开发板IP,具体配置要根据你的电脑IP而定,这里只是以我的为例,如果这一步都看不懂建议不要往下看了。。。
• 终端指令:

ifconfig

• 终端指令:

ifconfig ethe 169.254.142.240

如下:
在这里插入图片描述
然后ping电脑IP,一定要能ping通,不然后面的操作就没意义了,如下:
• 终端指令:

ping 169.254.142.239

在这里插入图片描述

配置MIPI CSI-2 RX Subsystem

MIPI CSI-2 RX Subsystem IP核的作用是实现MIPI CSI2-RX解码,配置MIPI CSI-2 RX Subsystem分辨率为3840x2160,如下:
• 终端指令1:

media-ctl -d /dev/media1 -V "\"a0000000.mipi_csi2_rx_subsystem\":0  [fmt:SBGGR12_1X12/3840x2160 field:none]"

• 终端指令2:

media-ctl -d /dev/media1 -V "\"a0000000.mipi_csi2_rx_subsystem\":1  [fmt:SBGGR12_1X12/3840x2160 field:none]"

在这里插入图片描述

配置Sensor Demosaic

Sensor Demosaic IP核的作用是实现Bayer转GRB888,配置Sensor Demosaic分辨率为3840x2160,如下:
• 终端指令1:

media-ctl -d /dev/media1 -V "\"a0020000.v_demosaic\":0  [fmt:SBGGR12_1X12/3840x2160 field:none]"

• 终端指令2:

media-ctl -d /dev/media1 -V "\"a0020000.v_demosaic\":1  [fmt:SBGGR12_1X12/3840x2160 field:none]"

在这里插入图片描述

配置Gamma LTU

Gamma LTU IP核的作用是实现伽马校正,配置Gamma LTU分辨率为3840x2160,如下:
• 终端指令1:

media-ctl -d /dev/media1 -V "\"a0040000.v_gamma_lut\":0  [fmt:RBG888_1X24/3840x2160 field:none]"

• 终端指令2:

media-ctl -d /dev/media1 -V "\"a0040000.v_gamma_lut\":1  [fmt:RBG888_1X24/3840x2160 field:none]"

在这里插入图片描述

配置Video Processing Subsystem

Video Processing Subsystem IP核的作用是实现图像缩放,配置Video Processing Subsystem分辨率为3840x2160,即不做缩放操作,如下:
• 终端指令1:

media-ctl -d /dev/media1 -V "\"a0010000.v_proc_ss\":0  [fmt:RBG888_1X24/3840x2160 field:none]"

• 终端指令2:

media-ctl -d /dev/media1 -V "\"a0010000.v_proc_ss\":1  [fmt:RBG888_1X24/3840x2160 field:none]"

在这里插入图片描述

配置H265视频压缩

输入如下指令:
• 终端指令:

gst-launch-1.0 v4l2src device=/dev/video0 io-mode=4 ! video/x-raw, format=NV16, width=3840, height=2160, framerate=30/1 !  omxh265enc qp-mode=auto gop-mode=basic gop-length=60 b-frames=0 target-bitrate=60000 num-slices=8 control-rate=constant prefetch-buffer=true low-bandwidth=false filler-data=true cpb-size=1000 initial-delay=500 periodicity-idr=60 ! video/x-h265,profile=main-422, alignment=au ! queue ! mpegtsmux alignment=7 name=mux ! rtpmp2tpay ! udpsink host=169.254.142.239 port=5005

注意!!!
注意!!!
上述指令中的《udpsink host=169.254.142.239 port=5005》
这里的IP是根据我自己的电脑配置的,你的电脑请根据实际情况修改;端口号5005为固定值;
在这里插入图片描述

配置VLC播放器

开发板网线连接电脑,打开VLC播放器,配置如下:
在这里插入图片描述
在这里插入图片描述
这里一定要注意:这里的IP是根据我自己的电脑配置的,你的电脑请根据实际情况修改;
注意!!!
注意!!!
电脑端一定要用有显卡的电脑,不要用笔记本电脑,不然延时很大,根本无法播放。。。

VLC播放H265码流视频演示

VLC播放H265码流视频演示如下:

IMX317-H265压缩

7、福利:工程源码获取

福利:工程代码的获取
代码太大,无法邮箱发送,以某度网盘链接方式发送,
资料获取方式:私,或者文章末尾的V名片。
网盘资料如下:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/76473.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ollama+open-webui搭建私有本地大模型详细教程

Ollamaopen-webui搭建私有本地大模型详细教程 1. 什么是 Ollama? 1.1. Ollama 简介 ​ Ollama 是一个轻量级的 AI 模型运行时,专注于简化 AI 模型的部署和使用。它支持多种预训练模型(如 Llama、Vicuna、Dolly 等),…

解决Centos7集成IDEA报git版本太低问题

Centos 7 服务器上默认安装的 Git 是 1.8.3.1 版本的 与最新的IDEA已无法匹配,需要更新 首先,卸载老版本 sudo yum -y remove git sudo yum -y remove git-*添加 End Point 到 CentOS 7 仓库 sudo yum -y install https://packages.endpointdev.com/r…

Qt常用宏定义判断大全

Qt 提供了一系列预定义宏用于判断 Qt 版本、操作系统平台、编译器特性等。这些宏在跨平台开发中非常有用。 1. Qt 版本判断宏 // 检查Qt版本 #if QT_VERSION > QT_VERSION_CHECK(5, 15, 0)// Qt 5.15.0及以上版本特有代码 #endif// 常用版本判断 #if QT_VERSION > QT_V…

实战 | 餐厅点餐小程序技术解析:SpringBoot + UniApp 高效开发指南

🖥️ 一、系统架构概览 1.1 技术选型 为了确保开发效率和系统稳定性,我们采用以下技术栈: 模块技术选型后台服务SpringBoot MyBatis-Plus MySQL用户端(点餐小程序)UniApp(Vue 语法)师傅端&…

实现在Unity3D中仿真汽车,而且还能使用ros2控制

文章目录 前言(Introduction)搭建开发环境(Setup Development Environment)在window中安装Unity(Install Unity in window)创建Docker容器,并安装相关软件(Create Docker containers…

华为配置篇-BGP实验

BGP 一、简述二、常用命令总结三、实验 一、简述 IBGP 水平分割:从一个 IBGP 对等体学到的路由,不会再通告给其他的 IBGP 对等体。在一个 AS 内部,路由器之间通过 IBGP 交换路由信息。如果没有水平分割机制,当多个路由器之间形成…

Python视频标签工具详解:基于wxPython和FFmpeg的实现

在当今数字媒体时代,视频内容的管理和标记变得越来越重要。无论是研究人员需要对实验视频进行时间点标记,教育工作者需要对教学视频添加注释,还是个人用户希望对家庭视频进行分类整理,一个高效的视频标签工具都是不可或缺的。本文…

国产三维CAD「皇冠CAD」在汽车零部件领域建模教程:刹车片

本教程深度融合三维皇冠CAD(CrownCAD)的MBD(Model-Based Definition)设计理念,通过参数化建模、智能约束管理、动态装配验证等功能,实现数据驱动设计,精准解决了汽车制动系统中精密制动组件的设…

C#从入门到精通(3)

目录 第九章 窗体 (1)From窗体 (2)MDI窗体 (3)继承窗体 第十章 控件 (1)控件常用操作 (2)Label控件 (3)Button控件 &…

关于跨域与.NET的处理方案

在 Web 开发里,浏览器的同源策略是一项关键的安全机制。同源指的是两个 URL 的协议、域名和端口都相同。当浏览器从一个源(域名、协议、端口)的网页去请求另一个源的资源时,就会产生跨域问题。例如,从 http://www.exam…

react 15-16-17-18各版本的核心区别、底层原理及演进逻辑的深度解析--react18

React 18 是一次重大的版本升级(发布于2022年),引入了并发渲染(Concurrent Rendering) 和一系列新特性,旨在提升应用性能、用户体验和开发灵活性。 一、核心新特性 并发模式(Concurrent Mode&a…

基于Spring Boot的平面设计课程在线学习平台系统的设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…

Scala-面向对象

Scala 包 基本语法 package 包名 Scala 包的三大作用(和 Java 一样) 区分相同名字的类 当类很多时,可以很好的管理类 控制访问范围 包的命名、说明、对象 包的命名 命名规则 只能包含数字、字母、下划线、小圆点.,但不能用数字…

Excel 使用技巧:excel 合并不同列内容; excel 将公式转化为文本

Excel 使用技巧 目录 Excel 使用技巧excel 合并不同列内容="A:"&C1&"、B:"&D1&"、C:"&E1&"、D:"&F1excel 将公式转化为文本右键选择行粘贴某一列均填入“提示词”单击拖动双击某一列均填入“1”清除1…

【数字化转型,企业应用上云】---持续集成能力重塑企业软件交付新范式

在数字化转型浪潮中,软件交付的速度与质量已成为企业核心竞争力的关键。如何高效管理从代码开发到生产上线的全流程,实现开发与运维的无缝协作?如何通过自动化手段减少人为失误、加速迭代周期?我们出的研发效能管理平台&#xff0…

OpenCV图像形态学:原理、操作与应用详解

一、引言 图像形态学(Image Morphology)是图像处理领域的一个重要分支,它基于集合论、格论、拓扑学和随机函数理论,主要用于分析和处理图像的几何结构。形态学操作通过特定的结构元素(Structuring Element)…

jenkins 参数化发布到服务器 publish over ssh、label、Parameterized publishing

前言 jenkins 参数化发布到服务器 jenkins可匹配标签通过一个字符串或者正则表达式来匹配jenkins 可通过参数配置发布到服务器,比如打包后,根据参数配置,只发布到某个服务器。 设置选项参数 新增选项参数,比如填入myParameter…

第十二章网络规划设计

文章目录 12-1考点分析12-2综合布线(历年高频考点)12-3网络设计与分析12-4网络结构与功能12-5广域网接入技术12-6网络故障诊断与排查章节总结 12-1考点分析 12-2综合布线(历年高频考点) 结构化布线系统 网络规划和设计是一个迭代和优化的过程。 ■ 结构化综合布线系统是基于…

Qt基本框架(1)

本篇主要介绍Qt的基本框架,并实现简单的按钮事件 本文部分ppt、视频截图原链接:[萌马工作室的个人空间-萌马工作室个人主页-哔哩哔哩视频] 1. Qt基本框架介绍 Qt基本框架主要分为两部分:Qt实例对象和Qt窗口。Qt实例对象负责初始化Qt运行时…

数据仓库项目启动与管理

数据仓库项目启动与管理 确定项目 评估项目就绪情况 项目就绪的三个条件 强力型高级业务管理发起人 对数据仓库解决方案的影响有先见之明是所在组织内有影响的领导者要求严格,但是又比较现实,会为其他成员提供强力支持 强制型业务动机 数据仓库系统和战略性业务动机紧密结合…