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名片。
网盘资料如下:

相关文章:
FPGA实现4K MIPI视频解码H265压缩网络推流输出,基于IMX317+VCU架构,支持4K60帧,提供工程源码和技术支持
目录 1、前言工程概述免责声明 2、相关方案推荐我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目我这里已有的 MIPI 编解码方案我这里已有的视频图像编解码方案 3、详细设计方案设计框图FPGA开发板IMX317摄像头MIPI D-PHYMIPI CSI-2 RX Subsystem图像预处理Sensor …...
【Linux】网络概念
目录 网络模型 OSI七层模型 TCP/IP五层(或四层)模型 网络传输 网络传输基本流程 封装与分用 以太网通信(局域网传输) 跨网络传输 网络模型 OSI七层模型 TCP/IP五层(或四层)模型 网络层和传输层就是操作系统的一部分 网络传输 网络传输基本流程…...
【模拟CMOS集成电路设计】电荷泵(Charge bump)设计与仿真(示例:栅极开关CP+轨到轨输入运放+基于运放CP)
【模拟CMOS集成电路设计】电荷泵(Charge bump)设计与仿真 0前言1电荷泵1.1 PFD/CP/电容器级联1.2 PFD/CP/电容传递函数 2基本电荷泵(CP)结构2.1“漏极开关”结构2.2“源极开关”结构2.3“栅极开关”结构 3 CP的设计与仿真13.1 P/N电流源失配仿真3.2 电荷…...
minecraft.service 文件配置
minecraft.service 文件配置 # /etc/systemd/system/minecraft.service [Unit] DescriptionMinecraft Fabric Server Afternetwork.target Wantsnetwork-online.target[Service] Usermcfabricuser Groupmcfabricuser WorkingDirectory/minecraft/1.21.1-fabric-server ExecStar…...
Kafka消息丢失全解析!原因、预防与解决方案
作为一名高并发系统开发工程师,在使用消息中间件的过程中,无法避免遇到系统中消息丢失的问题,而Kafka作为主流的消息队列系统,消息丢失问题尤为常见。 在这篇文章中,将深入浅出地分析Kafka消息丢失的各种情况…...
VS Code 云服务器远程开发完整指南
VS Code Ubuntu 云服务器远程开发完整指南 远程开发是现代开发者的标配之一,特别是在使用云服务器(如 Ubuntu)进行部署、测试或大项目开发时,利用 VS Code 的 Remote-SSH 插件,可以像本地一样顺滑操作远程服务器。本…...
Linux孤儿进程和僵尸进程
目录 1、孤儿进程 2、僵尸进程 在 Linux 系统中,父子进程关系的生命周期不同,导致会产生两类特殊进程:孤儿进程和僵尸进程。这两类进程在系统资源管理中起着重要作用。 1、孤儿进程 孤儿进程指的是父进程先于子进程结束,导致子…...
【Rtklib入门指南】4. 使用RTKLIB进行载波相位差分定位(RTK)
RTK RTK(Real-Time Kinematic,实时动态)定位技术是一种高精度的卫星导航技术。相比传统的GPS定位技术,RTK能够在厘米级别的精度范围内提供定位结果。这使得RTK技术在无人机、自动驾驶、工程测绘、农业机械自动化等领域具有广泛应用…...
【SECS】初识SECS协议
【SECS】初识SECS协议 基本知识流和功能函数数量官方文件中缩写标注正常是不是都是主机向设备端?对数据信息中第1字节第1-2位官网介绍 S1F1双向指令说明测试H发起端E发起端 参考资料 基本知识 SECS(SEMI Equipment Communications Standard)即半导体设…...
【C++项目】从零实现RPC框架「三」:项⽬抽象层实现
🌈 个人主页:Zfox_ 🔥 系列专栏:C++从入门到精通 目录 一:🔥 常⽤的零碎功能接⼝类实现🦋 简单⽇志宏实现🦋 Json 序列化/反序列化🦋 UUID ⽣成二:🔥 项⽬消息类型字段信息定义 🦋 请求字段宏定义🦋 消息类型定义🦋 响应码类型定义🦋 RPC 请求类型定…...
webcam video demo
一个 demo,使用 OpenCV,手动操作 webcam,保持相机打开,防止频繁的 开关损坏摄像头硬件。 这是ROS情景下的一个节点,展示了ROS节点的常见格式。代码很简单,单展示了持续视频流的发布,还展示了基…...
ARM-LDS链接文件
关键字 ALIGN 在链接脚本中,ALIGN关键字:ALIGN(X)中的X表示多少个字节对齐。 在汇编文件中,是伪操作 .align x 实现的:表示2的x次幂个字节对齐; 2.X的取值也是有讲究的,必须是2的整数次幂。例如…...
相机镜头景深
文章目录 定义影响因素实际应用特殊情况 参考:B站优致谱视觉 定义 景深是指在摄影机镜头或其他成像器前沿着能够取得清晰图像的成像器轴线所测定的物体距离范围。简单来说,就是在一张照片中,从前景到背景,能够保持清晰锐利的区域…...
Linux基础入门:从零开始掌握Linux命令行操作
🙋大家好!我是毛毛张! 🌈个人首页: 神马都会亿点点的毛毛张 🎈有没有觉得电影里的黑客🐒酷毙了?他们只用键盘⌨就能搞定一切。今天,毛毛张要带你们体验这种快感😀&…...
C++第13届蓝桥杯省b组习题笔记
1.九进制转十进制 九进制正整数 (2022)9转换成十进制等于多少? 第一位乘9的0次方,第二位乘9的1次方,第三位乘9的二次方以此类推 #include <iostream> using namespace std;int main() {// 请在此输入您的代码int t2022;int res0;int c…...
探索 Gaggol:理解 10^^^100 的宇宙级常数
一、常数概述: Gaggol 是一个极其巨大的数学常数,其数值表示为 10^^^100。这个常数是通过对数字 10 进行超递归幂运算得到的结果。 二、Gaggol 的定义: Gaggol 被定义为 10 的超多层超递归幂,即 10 被连续地提升到自身幂的层次达…...
python-leetcode 61.N皇后
题目: 按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上,并且使皇后彼此之间不能相互攻击 给你一个整数 n ,返回所有不同的 n 皇后问题 的解…...
Centos8 系統Lnmp服務器環境搭建
Centos8 系統Lnmp服務器環境搭建 服務器環境 Centos8 [rootcentos8 ~]# uname -a Linux centos8 4.18.0-348.el8.x86_64 #1 SMP Tue Oct 19 15:14:17 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux# 更新軟件包列表 rootdebian:~# dnf update安裝信息 PHP 版本8.2.27 https://ww…...
产教融合|暴雨技术专家执裁江苏省职业院校技能大赛
3月28-30日,由江苏省教育厅、省发改委、省工信厅等15家单位主办的2025年江苏省职业院校技能大赛网络系统管理赛项如期举办。此次赛事吸引了全省52支参赛队伍、156名选手踊跃参与,参赛人数再创新高。 暴雨信息技术专家李明宇作为此赛项的往届省赛冠军&am…...
BUUCTF-web刷题篇(6)
15.PHP 知识点: ①__wakeup()//将在反序列化之后立即调用(当反序列化时变量个数与实际不符是会绕过)我们可以通过一个cve来绕过:CVE-2016-7124。将Object中表示数量的字段改成比实际字段大的值即可绕过wakeup函数。条件:PHP5<…...
AIP-203 域行为文档
编号203原文链接AIP-203: Field behavior documentation状态批准创建日期2018-07-17更新日期2018-07-17 在定义protocol buffer中的域时,按惯例要向用户解释域行为的某些方面(例如域是必需的还是可选的)。此外,让其他工具理解域行…...
在 Cloud Run 上使用 Gemini API 构建聊天应用
李升伟 编译 (🎨 封面由 Gemini 中的 Imagen 3 生成!) 欢迎来到我的谷歌AI工具构建系列博客!本文将带您创建一个由Gemini驱动并托管在Cloud Run上的简易聊天应用。如果您正在探索大语言模型或希望将AI集成到网页应用中,那么您来…...
周总结aa
上周学习了Java中有关字符串的内容,与其有关的类和方法 学习了static表示静态的相关方法和类的使用。 学习了继承(extends) 多态(有继承关系,有父类引用指向子类对象) 有关包的知识,final关键字的使用,及有…...
31天Python入门——第17天:初识面向对象
你好,我是安然无虞。 文章目录 面向对象编程1. 什么是面向对象2. 类(class)3. 类的实例关于self 4. 对象的初始化5. __str__6. 类之间的关系继承关系组合关系 7. 补充练习 面向对象编程 1. 什么是面向对象 面向对象编程是一种编程思想,它将现实世界的概念和关系映…...
计算机视觉准备八股中
一边记录一边看,这段实习跑路之前运行完3DGAN,弄完润了,现在开始记忆八股 1.CLIP模型的主要创新点: 图像和文本两种不同模态数据之间的深度融合、对比学习、自监督学习 2.等效步长是每一步操作步长的乘积 3.卷积层计算输入输出…...
【C语言】文件操作(2)
一、文件的随机读写 在前面我们学习了文件的顺序读写的函数,那么当我们要读取某个指定位置的内容的时候,是否只能顺序的读取到这个内容?还有在对文件进行输入的时候,需要对指定的位置进行写入,那么此时应该怎么办呢&a…...
CCCC天梯赛L1-094 剪切粘贴
题目链接: 字符串函数: 1、截取字符串: //起始位置为3,结束位置为5string s "aabcdefg";//下标从0开始 [从开始位置,结束位置]string sub s.substr(3,3);//输出cde, 有返回值string//并且原字符串不改变, s"aab…...
C语言:多线程
多线程概述 定义 多线程是指在一个程序中可以同时运行多个不同的执行路径(线程),这些线程可以并发或并行执行。并发是指多个线程在宏观上同时执行,但在微观上可能是交替执行的;并行则是指多个线程真正地同时执行&…...
livekit ICE连接失败的一些总结
在使用livekit做的项目过程中碰到了一些ICE连接失败的问题, 一个时在同网段的局域网下 ,livekti服务和客户端不能联通,后来发现是服务端是多网卡,通过网络抓包才知道服务端在stun binding的时候使用了错误的网卡,在co…...
Python神经网络1000个案例算法汇总
【2025最新版】Python神经网络优化1000个案例算法汇总(长期更新版) 本文聚焦神经网络、优化算法,神经网络改进,优化算法改进,优化算法优化神经网络权重、超参数等,现在只需订阅即可拥有,简直是人工智能初学者的天堂。…...
