PGA高端项目:FPGA基于GS2971+GS2972架构的SDI视频收发,提供3套工程源码和技术支持

目录

  • 1、前言
    • 免责声明
  • 2、相关方案推荐
    • 本博已有的 SDI 编解码方案
    • 本方案的SDI接收+图像缩放应用
    • 本方案的SDI接收+纯verilog图像缩放+纯verilog多路视频拼接应用
    • 本方案的SDI接收+HLS图像缩放+HLS多路视频拼接应用
    • 本方案的SDI接收+OSD动态字符叠加输出应用
    • 本方案的SDI接收+HLS多路视频融合叠加应用
    • 本方案的SDI接收+GTX 8b/10b编解码SFP光口传输
    • FPGA的SDI视频编解码项目培训
  • 3、详细设计方案
    • 设计原理框图
    • 视频源选择
    • 动态彩条
    • SDI 相机
    • GS2971+GS2972架构
    • BT1120转RGB
    • 图像缓存
    • RGB转BT1120
    • SDI转HDMI盒子
    • 源码架构
  • 4、工程源码1详解-->SDI转SDI--FDMA缓存PL端DDR3
  • 5、工程源码2详解-->SDI转SDI--FDMA缓存PS端DDR3
  • 6、工程源码3详解-->SDI转SDI--VDMA缓存PS端DDR3
  • 7、工程移植说明
    • vivado版本不一致处理
    • FPGA型号不一致处理
    • 其他注意事项
  • 8、上板调试验证
    • 准备工作
    • 输出视频演示
  • 9、福利:工程代码的获取

FPGA高端项目:FPGA基于GS2971+GS2972架构的SDI视频接收发送,提供3套工程源码和技术支持

1、前言

目前FPGA实现SDI视频编解码有两种方案:一是使用专用编解码芯片,比如典型的接收器GS2971,发送器GS2972,优点是简单,比如GS2971接收器直接将SDI解码为并行的YCrCb422,GS2972发送器直接将并行的YCrCb422编码为SDI视频,缺点是成本较高,可以百度一下GS2971和GS2972的价格;另一种方案是使用FPGA逻辑资源部实现SDI编解码,利用Xilinx系列FPGA的GTP/GTX资源实现解串,利用Xilinx系列FPGA的SMPTE SDI资源实现SDI编解码,优点是合理利用了FPGA资源,GTP/GTX资源不用白不用,缺点是操作难度大一些,对FPGA开发者的技术水平要求较高。有意思的是,这两种方案在本博这里都有对应的解决方案,包括硬件的FPGA开发板、工程源码等等。

本设计基于Xilinx的Zynq7100-xc7z100ffg900-2中端FPGA开发板使用GS2971+GS2972的SDI视频接收发送,视频源有两种,分别对应开发者手里有没有SDI相机的情况,一种是使用HD-SDI相机,也可以使用SD-SDI或者3G-SDI相机,因为本设计是三种SDI视频自适应的;如果你的手里没有SDI相机或者没有SDI相机输入接口,则可使用FPGA内部生成的动态彩条模拟SDI相机视频;视频源的选择通过代码顶层的define宏定义进行选择,默认使用SDI相机作为视频源;同轴的SDI视频通过同轴线连接到GS2971转接板,GS2971解码芯片将同轴的串行的SDI视频解码为并行的BT1120格式视频,至此,SDI视频解码操作已经完成,可以进行常规的图像处理操作了;本设计的目的是将解码的SDI视频再经过GS2972后输出,需要对解码BT1120视频进行转RGB+图像缓存+RGB转BT1120视频等操作;本设计使用纯verilog代码实现的BT1120转RGB模块实现视频格式转换;图像缓存使用两种架构,一种是FDMA架构,该架构简单灵活,输入接口为VGA视频时序,即用VS、DE、RGB数据,另一种是VDMA架构,该架构是Xilinx官方力推的架构,输入接口为AXI4-Stream;另外,FDMA架构的视频既可以缓存到PL端DDR,也可以缓存到PS端DDR,针对不同的项目需求;使用本博常用的FDMA图像缓存架构和VDMA图像缓存架构实现图像3帧缓存,缓存介质为板载的DDR3;图像从DDR3读出后,进入纯verilog代码实现RGB转BT1120视频模块实现视频格式转换;最后BT1120视频经过GS2972编码芯片被编码为同轴的串行的SDI视频输出,并经过SDI转HDMI盒子输出到显示器;本博客提供3套工程源码,具体如下:
在这里插入图片描述
现对上述3套工程源码做如下解释,方便读者理解:
工程源码1:
输入视频为HD-SDI相机或动态彩条,输入分辨率为1920x1080@30Hz,经过GS2971解码+BT1120转RGB+FDMA图像缓存+RGB转BT1120模块+GS2972编码后,以3G-SDI接口方式输出,输出分辨率为1920x1080@60Hz;此工程的FDMA图像缓存架构将视频缓存到PL端DDR3,适应于纯FPGA项目,比如可用于Xilinx的Artix7、Kintex7、Virtex7等FPGA;

工程源码2:
输入视频为HD-SDI相机或动态彩条,输入分辨率为1920x1080@30Hz,经过GS2971解码+BT1120转RGB+FDMA图像缓存+RGB转BT1120模块+GS2972编码后,以3G-SDI接口方式输出,输出分辨率为1920x1080@60Hz;此工程的FDMA图像缓存架构将视频缓存到PS端DDR3,适应于Zynq系列FPGA项目,比如可用于Xilinx的Zynq7000系列、Zynq7000、Zynq UltraScale等FPGA;

工程源码3:
输入视频为HD-SDI相机或动态彩条,输入分辨率为1920x1080@30Hz,经过GS2971解码+BT1120转RGB+FDMA图像缓存+RGB转BT1120模块+GS2972编码后,以3G-SDI接口方式输出,输出分辨率为1920x1080@60Hz;此工程的VDMA图像缓存架构将视频缓存到PS端DDR3,即可用于纯FPGA项目,比如可用于Xilinx的Artix7、Kintex7、Virtex7等FPGA,配合MicroBlaze;也可用于Zynq系列FPGA项目,比如可用于Xilinx的Zynq7000系列、Zynq7000、Zynq UltraScale等FPGA;

本文详细描述了Xilinx的Zynq7100-xc7z100ffg900-2中端FPGA开发板使用GS2971+GS2972架构的SDI视频接收发送,工程代码编译通过后上板调试验证,可直接项目移植,适用于在校学生做毕业设计、研究生项目开发,也适用于在职工程师做项目开发,可应用于医疗、军工等行业的数字成像和图像传输领域;
提供完整的、跑通的工程源码和技术支持;
工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;

免责声明

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

2、相关方案推荐

本博已有的 SDI 编解码方案

我的博客主页开设有SDI视频专栏,里面全是FPGA编解码SDI的工程源码及博客介绍;既有基于GS2971/GS2972的SDI编解码,也有基于GTP/GTX资源的SDI编解码;既有HD-SDI、3G-SDI,也有6G-SDI、12G-SDI等;专栏地址链接:
点击直接前往

本方案的SDI接收+图像缩放应用

本方案采用GS2971接收SDI视频,然后进行图像缩放操作(图像缩放方案包括纯verilog图像缩放方案和HLS图像缩放方案),再进行图像缓存操作(图像缓存方案包括FDMA方案和VDMA方案,缓存介质包括PL端DDR3、PS端DDR3),最后用GS2971发送SDI视频,最终以3G-SDI输出;提供3套工程源码,3套工程源码详情请参考“1、前言”中的截图,上述所有工程源码均已上板调试通过,详细设计说明等待本博更新对用的博客。。。

本方案的SDI接收+纯verilog图像缩放+纯verilog多路视频拼接应用

本方案采用GS2971接收SDI视频,然后进行图像缩放操作(图像缩放方案为纯verilog图像缩放),再进行多路视频拼接(包括2路、4路、8路、16路视频拼接,拼接方案为纯verilogFDMA方案,视频拼接和图像缓存为一个整体,缓存介质包括PL端DDR3、PS端DDR3),最后用GS2972编码器发送SDI视频,最终以3G-SDI输出;提供8套工程源码,8套工程源码详情请参考“1、前言”中的截图,上述所有工程源码均已上板调试通过,详细设计说明等待本博更新对用的博客。。。

本方案的SDI接收+HLS图像缩放+HLS多路视频拼接应用

本方案采用GS2971接收SDI视频,然后进行图像缩放操作(图像缩放方案为HLS图像缩放),再进行多路视频拼接(拼接方案为Xilinx官方的Video Mixer方案,包括2路、4路、8路、16路视频拼接),再进行图像缓存操作(图像缓存方案为VDMA方案,缓存介质包括PS端DDR3),最后用GS2972编码器发送SDI视频,最终以3G-SDI输出;提供4套工程源码,4套工程源码详情请参考“1、前言”中的截图,上述所有工程源码均已上板调试通过,详细设计说明等待本博更新对用的博客。。。

本方案的SDI接收+OSD动态字符叠加输出应用

本方案采用GS2971接收SDI视频,然后进行动态字符叠加(方案为HLS动态字符叠加),再进行图像缓存操作(图像缓存方案为VDMA方案,缓存介质包括PS端DDR3),最后用GS2972编码器发送SDI视频,最终以3G-SDI输出;提供1套工程源码,工程源码详情请参考“1、前言”中的截图,上述所有工程源码均已上板调试通过,详细设计说明等待本博更新对用的博客。。。

本方案的SDI接收+HLS多路视频融合叠加应用

本方案采用GS2971接收SDI视频,然后进行多路视频融合叠加(方案为HLS多路视频融合叠加),再进行图像缓存操作(图像缓存方案为VDMA方案,缓存介质包括PS端DDR3),最后用GS2972编码器发送SDI视频,最终以3G-SDI输出;提供1套工程源码,工程源码详情请参考“1、前言”中的截图,上述所有工程源码均已上板调试通过,详细设计说明等待本博更新对用的博客。。。

本方案的SDI接收+GTX 8b/10b编解码SFP光口传输

本方案采用GS2971接收SDI视频,然后进行8b/10b编解码作(8b/10b编解码方案为GTX高速接口方案,线速率为5G),再通过板载的SFP光口实现数据回环,再进行图像缓存操作(图像缓存方案为FDMA方案,缓存介质包括PL端DDR3、PS端DDR3),最后用GS2972编码器发送SDI视频,最终以3G-SDI输出;提供2套工程源码,2套工程源码详情请参考“1、前言”中的截图,详细设计方案请参考我专门的博客,上述所有工程源码均已上板调试通过,详细设计说明等待本博更新对用的博客。。。

FPGA的SDI视频编解码项目培训

基于目前市面上FPGA的SDI视频编解码项目培训较少的特点,本博专门开设了FPGA的SDI视频编解码高级项目培训班,专门培训SDI视频的编解码,具体培训计划细节如下:
1、我发你上述全套工程源码和对应的工程设计文档网盘链接,你保存下载,作为培训的核心资料;
2、你根据自己的实际情况安装好对应的开发环境,然后对着设计文档进行浅层次的学习;
3、遇到不懂的随时问我,包括代码、职业规划、就业咨询、人生规划、战略规划等等;
4、每周末进行一次腾讯会议,我会检查你的学习情况和面对面沟通交流;
5、你可以移植代码到你自己的FPGA开发板上跑,如果你没有板子,你根据你自己的需求修改代码后,编译工程,把bit发我,我帮你下载到我的板子上验证;或者你可以买我的开发板;

3、详细设计方案

设计原理框图

工程源码1、2的设计原理框图如下,该设计采用FDMA图像缓存方案:
在这里插入图片描述
工程源码3的设计原理框图如下,该设计采用VDMA图像缓存方案:
在这里插入图片描述

视频源选择

视频源有两种,分别对应开发者手里有没有SDI相机的情况,一种是使用HD-SDI相机,也可以使用SD-SDI或者3G-SDI相机,因为本设计是三种SDI视频自适应的;如果你的手里没有SDI相机或者没有SDI相机输入接口,则可使用FPGA内部生成的动态彩条模拟SDI相机视频;视频源的选择通过代码顶层的define宏定义进行选择,默认使用SDI相机作为视频源;如下:
在这里插入图片描述
选择逻辑代码部分如下:
在这里插入图片描述
选择逻辑如下:
当(注释) define COLOR_TEST时,输入源视频是SDI相机;
当(不注释) define COLOR_TEST时,输入源视频是动态彩条;

动态彩条

如果你的手里没有SDI相机或者没有SDI相机输入接口,则可使用FPGA内部生成的动态彩条模拟SDI相机视频;视频源的选择通过代码顶层的define宏定义进行,动态彩条可配置为不同分辨率的视频,视频的边框宽度,动态移动方块的大小,移动速度等都可以参数化配置,我这里配置为辨率1920x1080,动态彩条模块代码位置和顶层接口和例化如下:
在这里插入图片描述
在这里插入图片描述
动态彩条模块的例化请参考工程源码的顶层代码;

SDI 相机

我用到的是SDI相机为HD-SDI相机,输出分辨率为1920x1080@30Hz,本工程对SDI相机的选择要求范围很宽,可以是SD-SDI、HD-SDI、3G-SDI,因为很设计对这三种SDI视频是自动识别并自适应的;如果你的手里没有SDI相机,也可以去某宝买HDMI转SDI盒子,一百多块钱就可以搞定,使用笔记本电脑模拟视频源,用HDMI线连接HDMI转SDI盒子,输出SDI视频做事视频源,可以模拟SDI相机;

GS2971+GS2972架构

本设计采用GS2971解码芯片接收SDI+GS2972芯片编码发送SDI,GS2971和GS2972不需要软件配置,硬件电阻上下拉即可完成配置,本设计配置为输出/输入BT1120格式视频,当然,你在设计电路时也可以配置为输出CEA861格式视频;GS2971+GS2972硬件架构如下,提供PDF格式原理图:
在这里插入图片描述

BT1120转RGB

BT1120转RGB模块的作用是将SMPTE SD/HD/3G SDI IP核解码输出的BT1120视频转换为RGB888视频,它由BT1120转CEA861模块、YUV422转YUV444模块、YUV444转RGB888三个模块组成,该方案参考了Xilinx官方的设计;BT1120转RGB模块代码架构如下:
在这里插入图片描述

图像缓存

FDMA架构使用本博常用的FDMA图像缓存架构实现图像3帧缓存,缓存介质为板载的DDR3;FDMA图像缓存架构由FDMA、FDMA控制器、缓存帧选择器构成、Xilinx MIG IP核(PL端)、Zynq软核(PS端)构成;图像缓存使用Xilinx vivado的Block Design设计,以工程源码1为例如下图:
在这里插入图片描述

关于FDMA更详细的介绍,请参考我之前的博客,博文链接如下:
点击直接前往

VDMA架构使用Xilinx官方力推的VDMA图像缓存架构实现图像3帧缓存,缓存介质为板载的PS端DDR3;VDMA图像缓存架构由Video In to AXI4-Stream、VDMA、Zynq软核、Video Timing Controller、AXI4-Stream To Video Out构成;图像缓存使用Xilinx vivado的Block Design设计,如下图:
在这里插入图片描述

RGB转BT1120

在SDI输出方式下需要使用该模块;RGB转BT1200模块的作用是将用户侧的RGB视频转换为BT1200视频输出给SMPTE SD/HD/3G SDI IP核;RGB转BT1120模块由RGB888转YUV444模块、YUV444转YUV422模块、SDI视频编码模块、数据嵌入模块组成,该方案参考了Xilinx官方的设计;BT1120转RGB模块代码架构如下:
在这里插入图片描述

SDI转HDMI盒子

在SDI输出方式下需要使用到SDI转HDMI盒子,因为我手里的显示器没有SDI接口,只有HDMI接口,为了显示SDI视频,只能这么做,当然,如果你的显示器有SDI接口,则可直接连接显示,我的SDI转HDMI盒子在某宝购买,不到100块;我用的截图如下:
在这里插入图片描述

源码架构

工程源码1使用FDMA图像缓存架构,缓存PL端DDR3,工程源码2也使用FDMA图像缓存架构,缓存PS端DDR3,工程源码3使用VDMA图像缓存架构,缓存PS端DDR3,3套工程源码的Block Design见前面的“图像缓存”章节,3套工程源码的源码架构具有相似性,这里就不一个个截图了,仅以工程源码1为例截图如下,另外两套与之类似;
在这里插入图片描述
工程2使用了自定义的FDMA方案,虽然不需要SDK配置,但FDMA的AXI4接口时钟由Zynq提供,所以需要运行SDK程序才能启动Zynq,从而为PL端逻辑提供时钟;由于不需要SDK配置,所以SDK软件代码就变得极度简单,只需运行一个“Hello World”即可,如下:
在这里插入图片描述
工程3使用了Xilinx官方的VDMA方案,VDMA需要配置才能使用,运行SDK才能启动Zynq软核,SDK需运行VDMA的驱动,软件代码架构如下:
在这里插入图片描述

4、工程源码1详解–>SDI转SDI–FDMA缓存PL端DDR3

开发板FPGA型号:Xilinx–Zynq7100–xc7z100ffg900-2;
开发环境:Vivado2019.1;
输入:HD-SDI相机,分辨率1920x1080@30Hz;
输出:3G-SDI ,分辨率1920x1080@60Hz;
SDI接收方案:GS2971解码芯片;
SDI发送方案:GS2972编码芯片;
图像缓存方案:FDMA方案;
图像缓存路径:PL端DDR3;
工程作用:此工程目的是让读者掌握FPGA实现SDI转SDI的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第3章节“源码架构“小节内容;
工程的资源消耗和功耗如下:
在这里插入图片描述

5、工程源码2详解–>SDI转SDI–FDMA缓存PS端DDR3

开发板FPGA型号:Xilinx–Zynq7100–xc7z100ffg900-2;
开发环境:Vivado2019.1;
输入:HD-SDI相机,分辨率1920x1080@30Hz;
输出:3G-SDI ,分辨率1920x1080@60Hz;
SDI接收方案:GS2971解码芯片;
SDI发送方案:GS2972编码芯片;
图像缓存方案:FDMA方案;
图像缓存路径:PS端DDR3;
工程作用:此工程目的是让读者掌握FPGA实现SDI转SDI的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第3章节“源码架构“小节内容;
工程的资源消耗和功耗如下:
在这里插入图片描述

6、工程源码3详解–>SDI转SDI–VDMA缓存PS端DDR3

开发板FPGA型号:Xilinx–Zynq7100–xc7z100ffg900-2;
开发环境:Vivado2019.1;
输入:HD-SDI相机,分辨率1920x1080@30Hz;
输出:3G-SDI ,分辨率1920x1080@60Hz;
SDI接收方案:GS2971解码芯片;
SDI发送方案:GS2972编码芯片;
图像缓存方案:VDMA方案;
图像缓存路径:PS端DDR3;
工程作用:此工程目的是让读者掌握FPGA实现SDI转SDI的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第3章节“源码架构“小节内容;
工程的资源消耗和功耗如下:
在这里插入图片描述

7、工程移植说明

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软核;

8、上板调试验证

准备工作

需要准备的器材如下:
FPGA开发板;
SDI摄像头,没有摄像头则选择动态彩条;
SDI转HDMI盒子;
HDMI显示器;
我的开发板了连接如下:
在这里插入图片描述
图中居左者为GS2971接收芯片,对应的金色同轴线连接SDI相机;居右者为GS2972发送芯片,对应的黑色同轴线连接SDI转HDMI盒子;SDI转HDMI盒子再连接显示器;

输出视频演示

以工程1为例,输出如下,工程2、3输出效果与之一样:

GS2971接收+GS2972发送

9、福利:工程代码的获取

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

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

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

相关文章

uniapp中人脸识别图片并圈起人脸

效果如上,我用的是阿里云的人脸识别。首先,我们先封装一个阿里云的请求js文件 faceRecognition.js import CryptoJS from crypto-js//SignatureNonce随机数字 function signNRandom() {const Rand Math.random()const mineId Math.round(Rand * 1000…

R语言lavaan结构方程模型(SEM)实践技术应用

基于R语言lavaan程序包,通过理论讲解和实际操作相结合的方式,由浅入深地系统介绍结构方程模型的建立、拟合、评估、筛选和结果展示的全过程。我们筛选大量经典案例,这些案例来自Nature、Ecology、Ecological Applications、Journal of Ecolog…

MySQL 数据库 下载地址 国内阿里云站点

mysql安装包下载_开源镜像站-阿里云 以 MySQL 5.7 为例 mysql-MySQL-5.7安装包下载_开源镜像站-阿里云

C#,图论与图算法,输出无向图(Un-directed Graph)全部环(cycle)的算法与源代码

1 无向图(Un-directed Graph)全部环 图算法中需要求解全部的环。 2 方法 使用图着色方法,用唯一的数字标记不同循环的所有顶点。图形遍历完成后,将所有类似的标记数字推送到邻接列表,并相应地打印邻接列表。 3 算法 将边插入到邻接列表中。调用DFS函数,该函数使用着色方…

C# wpf 使用GDI实现截屏

wpf截屏系列 第一章 使用GDI实现截屏(本章) 第二章 使用GDI实现截屏 第三章 使用DockPanel制作截屏框 第四章 实现截屏框热键截屏 第五章 实现截屏框实时截屏 第六章 使用ffmpeg命令行实现录屏 文章目录 wpf截屏系列前言一、导入gdi32方法一、NuGet获取…

解决无法登录到 ArcGIS Server Administrator

目录 问题复现原因分析解决办法 问题复现 今天在访问arcgisserver后台准备设置arcgis api for js请求路径时,登录之后出现500错误。Services Directoryhttp://xxx.xxx.xxx.xxx:6080/arcgis/admin/system/handlers/rest/servicesdirectory 原因分析 我实在两台虚拟机…

【经验分享】Windows10无法通过SSHFS连接服务器

【经验分享】Windows10如何通过SSHFS连接服务器 前言问题分析解决方法 前言 现在很多公司出于成本考虑,不会为每一台电脑都提供高配置,所以需要通过访问云服务器来进行编译等操作。程序员如果配备的是一台windows电脑,那么需要访问linux服务…

vue iview 级联选择器遇到的坑

我们PC项目用到的前端技术栈是vue+iview,最近有个需求,要做个级联选择器,并且是懒加载动态加载后端返回的数据。效果如下: 如下图所示,在我们封装的公共组件form-box.vue里有我们级联选择器: 代码如下: <!--级联选择器--><template v-else-if="item.type…

基于Java的海南旅游景点推荐系统(Vue.js+SpringBoot)

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用户端2.2 管理员端 三、系统展示四、核心代码4.1 随机景点推荐4.2 景点评价4.3 协同推荐算法4.4 网站登录4.5 查询景点美食 五、免责说明 一、摘要 1.1 项目介绍 基于VueSpringBootMySQL的海南旅游推荐系统&#xff…

在Django中使用PyJWT实现登录及验证功能

目录 1、安装PyJWT 2、对信息加密及解密 3、配置登录视图和及url 4、登录装饰器 5、在验证有登录权限的的视图中登录 PyJWT的使用 1、安装PyJWT pip isntall pyjwt 2、对信息加密及解密 import jwt import datetime from jwt import exceptions# 加密盐 JWT_SALT &qu…

腾讯云轻量服务器地域选择教程,2024最新地域选择攻略

腾讯云服务器地域怎么选择&#xff1f;不同地域之间有什么区别&#xff1f;腾讯云哪个地域好&#xff1f;地域选择遵循就近原则&#xff0c;访客距离地域越近网络延迟越低&#xff0c;速度越快。腾讯云百科txybk.com告诉大家关于地域的选择还有很多因素&#xff0c;地域节点选择…

Android 异常重启--踩坑归来--干货篇

如果你未对自己的app进行过处理&#xff0c;那么线上各种偶发莫名其妙的闪退、白屏、数据丢失&#xff0c;请检查一下是否因此而引发的。 起因 异常重建指的是非配置变更情况下导致的 Activity 重新创建。 常见场景大多是因为内存等资源不足&#xff0c;从而导致后台应用被系…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:XComponent)

可用于EGL/OpenGLES和媒体数据写入&#xff0c;并显示在XComponent组件。 说明&#xff1a; 该组件从API Version 8 开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 构造参数type为"surface"时不支持。 从API version …

VsCode 使用密钥连接 Centos

在 centos 下生成密钥 ssh-keygen 执行上述命令后&#xff0c;一路回车&#xff0c;直到出现如下界面&#xff1a; 查看密钥生成情况 cd /root/.ssh ls 结果如下所示&#xff1a; 服务器上安装公钥 cd /root/.ssh cat id_rsa.pub >> authorized_keys ls >查看确…

Covalent Network(CQT)与 Celo 集成,推动 Web3 下一代现实资产解决方案的发展

Covalent Network&#xff08;CQT&#xff09;是一个统一的区块链 API 提供商&#xff0c;其已正式与 Celo 集成&#xff0c;Celo 是一个以移动优先的 EVM 兼容链。这一重要的里程碑旨在提升 Celo 生态系统中开发者的能力&#xff0c;通过授予他们访问关键链上数据的权限&#…

Python | Bootstrap图介绍

在进入Bootstrap 图之前&#xff0c;让我们先了解一下Bootstrap&#xff08;或Bootstrap 抽样&#xff09;是什么。 Bootstrap 抽样&#xff08;Bootstrap Sampling&#xff09;&#xff1a;这是一种方法&#xff0c;我们从一个数据集中重复地取一个样本数据来估计一个总体参数…

Qt教程 — 3.1 深入了解Qt 控件:Buttons按钮

目录 1 Buttons按钮简介 1.1 Buttons按钮简介 1.2 Buttons按钮如何选择 2 如何使用Buttons按钮 2.1 QPushButton使用-如何自定义皮肤 2.2 QToolButton使用-如何设置帮助文档 2.3 QRadioButton使用-如何设置开关效果 2.4 QRadioButton使用-如何设置三态选择框 2.5 QCom…

学习使用postman软件上传文件发起api接口请求

学习使用postman软件上传文件发起api接口请求 设置headers头信息设置body 设置headers头信息 如图设置&#xff1a; KEY&#xff1a;Content-Type VALUE&#xff1a;multipart/form-data 设置body 设置需要上传的key对应的类型为File&#xff0c;上传类型 设置需要上传的文件…

留学生课设|R语言|研究方法课设

目录 INSTRUCTIONS Question 1. Understanding Quantitative Research Question 2. Inputting data into Jamovi and creating variables (using the dataset) Question 3. Outliers Question 4. Tests for mean difference Question 5. Correlation Analysis INSTRUCTIO…

如何安装ES

Elasticsearch入门安装 ES的官方地址&#xff1a;Elasticsearch 平台 — 大规模查找实时答案 | Elastic 我们进到网页可以看到platform&#xff08;平台&#xff09; 我们可以看到Elasticsearch logstash kibanba beats 这几个产品 Elasticsearch&#xff1a;分布式&…