Xilinx UltraScale系列FPGA纯verilog图像缩放,工程项目解决方案,提供2套工程源码和技术支持

news2024/11/24 4:37:04

目录

  • 1、前言
    • 工程概述
    • 免责声明
    • FPGA高端图像处理培训
  • 2、相关方案推荐
    • 我这里已有的FPGA图像缩放方案
    • 本方案在Xilinx Artix7 系列FPGA上的应用
    • 本方案在Xilinx Kintex7 系列FPGA上的应用
    • 本方案在Xilinx Zynq7000 系列FPGA上的应用
    • 本方案在国产FPGA紫光同创系列上的应用
    • 本方案在国产FPGA高云系列上的应用
  • 3、设计思路框架
    • 设计框图
    • 输入视频之-->OV5640摄像头+动态彩条
    • 输入视频之-->HDMI解码芯片+动态彩条
    • 图像缩放模块详解
    • 图像缩放模块使用(重点阅读)
    • 图像缩放模块仿真
    • FDMA​图像缓存
    • HDMI视频输出架构
    • 工程源码架构
    • 配套的FPGA开发板
  • 4、工程代码1详解:KU060,OV5640输入版本
  • 5、工程代码2详解:KU060,HDMI输入版本
  • 6、工程移植说明
    • vivado版本不一致处理
    • FPGA型号不一致处理
    • 其他注意事项
  • 7、上板调试验证并演示
    • 准备工作
    • 图像缩放案例1输出演示
    • 图像缩放案例2输出演示
    • 图像缩放案例3输出演示
  • 8、福利:工程源码获取

Xilinx UltraScale系列FPGA纯verilog图像缩放,工程项目解决方案,提供2套工程源码和技术支持

1、前言

没玩过图像缩放都不好意思说自己玩儿过FPGA,这是CSDN某大佬说过的一句话,鄙人深信不疑。。。目前市面上主流的FPGA图像缩放方案如下:
1:Xilinx的HLS方案,该方案简单,易于实现,但只能用于Xilinx自家的FPGA;关于HLS实现图像缩放请,参考我之前写的文章HLS实现图像缩放点击查看:
HLS图像缩放
2:非纯Verilog方案,大部分代码使用Verilog实现,但中间的fifo或ram等使用了IP,导致移植性变差,难以在Xilinx、Altera和国产FPGA之间自由移植;
3:纯Verilog方案,也就是本方案,一个字:牛逼!!!

工程概述

本文使用Xilinx的UltraScale系列FPGA纯verilog代码实现图像缩放;输入视频源有两种,分别对应开发者手里有没有摄像头的情况,一种是使用廉价的OV5640摄像头模组或者板载HDMI输入;如果你的手里没有摄像头,或者你的开发板没有摄像头接口,则可使用FPGA内部逻辑生成的动态彩条模拟摄像头视频;视频源的选择通过代码顶层的parameter参数配置,默认使用ov5640作为视频源;FPGA首先对输入摄像头做i2c配置;然后采集输入视频;然后对输入视频做图像缩放操作;图像缩放模块可实现任意比例缩放,支持领域插值和双线性插值2种算法,通过模块顶层参数选择,默认使用双线性插值;缩放后的图像使用本博主常用的FDMA图像缓存架构进行图像缓存,本设计用DDR4做缓存介质实现3帧缓存;缩放后的视频最好进行缓存操作,因为缩放后原本的视频时序已经被打乱,不缓存的话直接读出基本是错误且不对齐的数据,导致输出的图像是乱码;缓存图像从DDR4读出后经过Native时序生成模块输出标准的VGA时序视频,然后经过纯verilog显示的RGB转HDMI模块输出HDMI差分视频;最后送显示器显示即可;本纯verilog图像缩放方案一共移植了16套工程源码,涵盖了目前市面上主流的FPGA平台;本博文介绍其中基于Xilinx UltraScale系列FPGA的2套工程,详情如下:
在这里插入图片描述
这里说明一下提供的4套工程源码的作用和价值,如下:

工程源码1

开发板FPGA型号为Xilinx–Kintex UltraScale–xcku060-ffva1156-2-i;输入视频源为OV5640摄像头模组或者FPGA内部逻辑生成的动态彩条;视频源的选择通过代码顶层的parameter参数配置,默认使用ov5640作为视频源;FPGA首先对OV5640摄像头做i2c配置,本设计将OV5640摄像头分辨率配置为1280x720@30Hz;然后采集输入视频,将2个时钟1个像素的RGB565转换为1个时钟1个像素的RGB888图像;然后对输入视频做图像缩放操作,将原视频从1280x720缩放到1920x1080,您可修改缩放参数轻松缩放到其他分辨率,工程只是举例,修改方法博客有说明;缩放后的图像使用本博主常用的FDMA图像缓存架构进行图像缓存,本设计用DDR4做缓存介质实现3帧缓存;缓存图像从DDR4读出后经过Native时序生成模块输出标准的VGA时序视频,输出有效分辨率为1920x1080@60Hz,为了兼容缩放后的其他分辨率,本设计将背景分辨率设计为1920x1080,缩放后的图像叠加在其上显示即可,这也是本博主的创新点;输出然后经过纯verilog显示的RGB转HDMI模块输出HDMI差分视频;最后送显示器显示即可;该工程适用于Xilinx UltraScale系列FPGA做图像缩放相关应用;

工程源码2

开发板FPGA型号为Xilinx–Kintex UltraScale–xcku060-ffva1156-2-i;输入视频为板载的HDMI输入接口,使用笔记本电脑模拟HDMI输入设备连接到开发板HDMI输入接口;HDMI解码方式为ADV7611芯片方案;FPGA纯verilog实现的i2c配置模块完成ADV7611配置,本设计将分辨率配置为1920x1080@60Hz,ADV7611输出RGB888视频流,FPGA采集到视频后打两拍以实现同步;然后对输入视频做图像缩放操作,将原视频从1920x1080缩放到1280x720,您可修改缩放参数轻松缩放到其他分辨率,工程只是举例,修改方法博客有说明;缩放后的图像使用本博主常用的FDMA图像缓存架构进行图像缓存,本设计用DDR4做缓存介质实现3帧缓存;缓存图像从DDR4读出后经过Native时序生成模块输出标准的VGA时序视频,输出有效分辨率为1280x720@60Hz,为了兼容缩放后的其他分辨率,本设计将背景分辨率设计为1920x1080,缩放后的图像叠加在其上显示即可,这也是本博主的创新点;输出然后经过纯verilog显示的RGB转HDMI模块输出HDMI差分视频;最后送显示器显示即可;该工程适用于Xilinx UltraScale系列FPGA做图像缩放相关应用;

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

免责声明

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

FPGA高端图像处理培训

鉴于目前的FPGA就业和行业现状,本博推出了FPGA高端图像处理培训计划;该计划旨在让一部分人先学会FPGA纯verilog图像缩放,提高从业者的技术水平和工资待遇,详细计划如下:在这里插入图片描述

2、相关方案推荐

我这里已有的FPGA图像缩放方案

我的主页目前有FPGA图像缩放专栏,改专栏收录了我目前手里已有的FPGA图像缩放方案,从实现方式分类有基于HSL实现的图像缩放、基于纯verilog代码实现的图像缩放;从应用上分为单路视频图像缩放、多路视频图像缩放、多路视频图像缩放拼接;从输入视频分类可分为OV5640摄像头视频缩放、SDI视频缩放、MIPI视频缩放等等;以下是专栏地址:
点击直接前往

本方案在Xilinx Artix7 系列FPGA上的应用

本方案适应于所有FPGA平台,针对目前市面上主流的FPGA,本博将本方案分别移植到了Xilinx 的Artix7、Kintex7、Zynq7020、紫光同创、高云等平台,本文讲述的是在Xilinx Kintex7 系列FPGA上的应用,想要直接应用于Xilinx Artix7 系列FPGA的读者,可以参考我之前写得博客,以下是博客地址:
点击直接前往

本方案在Xilinx Kintex7 系列FPGA上的应用

本方案适应于所有FPGA平台,针对目前市面上主流的FPGA,本博将本方案分别移植到了Xilinx 的Artix7、Kintex7、Zynq7020、紫光同创、高云等平台,本文讲述的是在Xilinx Artix7 系列FPGA上的应用,想要直接应用于Xilinx Kintex7 系列FPGA的读者,可以参考我之前写得博客,以下是博客地址:
点击直接前往

本方案在Xilinx Zynq7000 系列FPGA上的应用

本方案适应于所有FPGA平台,针对目前市面上主流的FPGA,本博将本方案分别移植到了Xilinx 的Artix7、Kintex7、Zynq7020、紫光同创、高云等平台,本文讲述的是在Xilinx Artix7 系列FPGA上的应用,想要直接应用于Xilinx Zynq7000 系列FPGA的读者,可以参考我之前写得博客,以下是博客地址:
点击直接前往

本方案在国产FPGA紫光同创系列上的应用

本方案适应于所有FPGA平台,针对目前市面上主流的FPGA,本博将本方案分别移植到了Xilinx 的Artix7、Kintex7、Zynq7020、紫光同创、高云等平台,本文讲述的是在Xilinx Artix7 系列FPGA上的应用,想要直接应用于国产FPGA紫光同创系列FPGA的读者,可以参考我之前写得博客,以下是博客地址:
点击直接前往

本方案在国产FPGA高云系列上的应用

本方案适应于所有FPGA平台,针对目前市面上主流的FPGA,本博将本方案分别移植到了Xilinx 的Artix7、Kintex7、Zynq7020、紫光同创、高云等平台,本文讲述的是在Xilinx Artix7 系列FPGA上的应用,想要直接应用于国产FPGA高云系列FPGA的读者,可以参考我之前写得博客,以下是博客地址:
点击直接前往

3、设计思路框架

设计框图

本博客提供2套vivado工程源码,设计框图如下:
在这里插入图片描述

输入视频之–>OV5640摄像头+动态彩条

输入视频源有两种,分别对应开发者手里有没有摄像头的情况,一种是使用廉价的OV5640摄像头模组;如果你的手里没有摄像头,或者你的开发板没有摄像头接口,则可使用FPGA内部逻辑生成的动态彩条模拟摄像头视频;视频源的选择通过代码顶层的parameter参数配置,默认使用ov5640作为视频源;模块顶层接口如下:
在这里插入图片描述
parameter SENSOR_TYPE = 0;输出ov5640的视频
parameter SENSOR_TYPE = 1;输出动态彩条的视频

OV5640摄像头需要i2c初始化配置,本设计配置为1280x720@30Hz分辨率,本设计提供纯verilog代码实现的i2c模块实现配置功能;此外,OV5640摄像头还需要将2个时钟1个像素的RGB565转换为1个时钟1个像素的RGB888图像;动态彩条则由FPGA内部逻辑实现,由纯verilog代码编写;模块代码架构如下:
在这里插入图片描述

输入视频之–>HDMI解码芯片+动态彩条

输入视频源有两种,分别对应开发者手里有没有摄像头的情况,一种是使用板载的HDMI输入视频接口;如果你的开发板没有HDMI输入接口,则可使用FPGA内部逻辑生成的动态彩条模拟摄像头视频;视频源的选择通过代码顶层的parameter参数配置,默认使用板载的HDMI输入视频接口;使用笔记本电脑接入HDMI输入接口,以模拟输入Sensor;本设计的HDMI解码方案为专用芯片ADV7611;FPGA纯verilog实现的i2c配置模块完成ADV7611配置,本设计将分辨率配置为1920x1080@60Hz,IT6802输出RGB888视频流;模块顶层接口如下:
在这里插入图片描述
parameter SENSOR_TYPE = 0;则输出HDMI接口采集的视频;
parameter SENSOR_TYPE = 1;则输出动态彩条的视频;
整个模块代码架构如下:
在这里插入图片描述

图像缩放模块详解

图像缩放模块功能框图如下,由跨时钟FIFO、插值+RAM阵列构成,跨时钟FIFO的目的是解决跨时钟域的问题,比如从低分辨率视频放大到高分辨率视频时,像素时钟必然需要变大,这是就需要异步FIFO了,插值算法和RAM阵列具体负责图像缩放算法层面的实现;
在这里插入图片描述
插值算法和RAM阵列以ram和fifo为核心进行数据缓存和插值实现,设计架构如下:
在这里插入图片描述
依据上图,图像缩放模块内部核心是例化了4个双口RAM,作用是缓存4行图像,以得到4个临近的像素,以此为基础做线性插值;如果是做图像放大操作,就以这4个临近的像素为基准,以线性插值为算法,在原图像中插入更多的像素点来扩大分辨率;如果是做图像缩小操作,就以这4个临近的像素为基准,以线性插值为算法,在原图像中删除更多的像素点来缩小分辨率;此外,前面描述的工作是实时的、整幅图像全部扫描式的进行,所以需要对RAM的读写操作进行精准控制;

图像缩放模块代码架构如下:模块的例化请参考工程源码的顶层代码;
在这里插入图片描述
图像缩放模块FIFO的选择可以调用工程对应的vivado工具自带的FIFO IP核,也可以使用纯verilog实现的FIFO,可通过接口参数选择,图像缩放模块顶层接口如下:
在这里插入图片描述
FIFO_TYPE选择原则如下:
1:总体原则,选择"xilinx"好处大于选择"verilog";
2:当你的FPGA逻辑资源不足时,请选"xilinx";
3:当你图像缩放的视频分辨率较大时,请选"xilinx";
4:当你的FPGA没有FIFO IP或者FIFO IP快用完了,请选"verilog";
5:当你向自学一下异步FIFO时,,请选"verilog";
6:不同FPGA型号对应的工程FIFO_TYPE参数不一样,但选择原则一样,具体参考代码;

2种插值算法的整合与选择
本设计将常用的双线性插值和邻域插值算法融合为一个代码中,通过输入参数选择某一种算法;
具体选择参数如下:

input  wire i_scaler_type //0-->bilinear;1-->neighbor

通过输入i_scaler_type 的值即可选择;

输入0选择双线性插值算法;
输入1选择邻域插值算法;

代码里的配置如下:
在这里插入图片描述

图像缩放模块使用(重点阅读)

图像缩放模块使用非常简单,顶层代码里设置了四个参数,如下:
在这里插入图片描述
上图是将输入视频分辨率从1280x720缩放为1920x1080;
如果你想将输入视频分辨率从1280x720缩放为640x480;
则只需修改为如下:
在这里插入图片描述
再比如你想将输入视频分辨率从1280x720缩放为960x540;
则只需修改为如下:
在这里插入图片描述

在本博主这里,想要实现图像缩放,操作就是这么无脑简单,就该两个参数就能搞定貌似高大上的双线性插值图像缩放,这种设计、这种操作、这种工程源码,你还喜欢吗?

图像缩放模块仿真

图像缩放模块需要vivado和matlab联合仿真;
需要注意的是,仿真的目的是为了验证,这一步我已经替你们做完了,所以读者不再需要单独仿真,如果读者是在需要自己仿真玩玩儿,需要自己写仿真代码;vivado和matlab联合仿真详细步骤如下:
第一步:网上下载一张1280X720的图片,并用matlab将图片转换为RGB格式的txt文档;
第二步:在vivado下设计tstbench,将RGB格式的txt文档作为视频输入源给到图像缩放模块,并将缩放后的图像数据写入输出txt文档;
第二步:用matlab将输出txt文档转换为图片,并于原图一并输出显示以做比较;
根据以上方法得到以下仿真结果:
双线性插值算法原图1280X720缩小到800x600如下:
在这里插入图片描述
邻域插值算法原图1280X720缩小到800x600如下:
在这里插入图片描述
双线性插值算法原图1280X720放大到1920x1080如下:
在这里插入图片描述
邻域插值算法原图1280X720放大到1920x1080如下:
在这里插入图片描述

FDMA​图像缓存

FDMA图像缓存架构实现的功能是将输入视频缓存到板载DDR3中再读出送后续模块,目的是实现视频同步输出,实现输入视频到输出视频的跨时钟域问题,更好的呈现显示效果;由于调用了Xilinx官方的MIG作为DDR控制器,所以FDMA图像缓存架构就是实现用户数据到MIG的桥接作用;架构如下:
在这里插入图片描述
FDMA图像缓存架构由FDMA控制器+FDMA组成;FDMA实际上就是一个AXI4-FULL总线主设备,与MIG对接,MIG配置为AXI4-FULL接口;FDMA控制器实际上就是一个视频读写逻辑,以写视频为例,假设一帧图像的大小为M×N,其中M代表图像宽度,N代表图像高度;FDMA控制器每次写入一行视频数据,即每次向DDR4中写入M个像素,写N次即可完成1帧图像的缓存,读视频与之一样;同时调用两个FIFO实现输入输出视频的跨时钟域处理,使得用户可以AXI4内部代码,以简单地像使用FIFO那样操作AXI总线,从而达到读写DDR的目的,进而实现视频缓存;本设计图像缓存方式为3帧缓存;图像缓存模块代码架构如下:
在这里插入图片描述
基于FDMA的图像缓存架构在Block Design设计中如下:
在这里插入图片描述

HDMI视频输出架构

缓存图像从DDR4读出后经过Native时序生成模块输出标准的VGA时序视频,然后经过纯verilog显示的RGB转HDMI模块输出HDMI差分视频;最后送显示器显示即可;需要注意的是,UltraScale系列FPGA不支持oserdese2原语,所以只能用oserdese3原语实现10 bit串化,基于此,本博主提供的RGB转HDMI模块可支持7系列、ULTRASCALE系列FPGA、ULTRASCALE_PLUS系 FPGA,顶层代码如下:
在这里插入图片描述
代码例化如下:
在这里插入图片描述

工程源码架构

提供2套工程源码,以工程源码1为例,工程Block Design设计如下:
在这里插入图片描述
提供2套工程源码,以工程源码1为例,综合后的工程源码架构如下:
在这里插入图片描述
工程编译后资源消耗低、功耗低、时序收敛,符合工程项目应用要求,如下:
在这里插入图片描述
上图只是举例,资源消耗并非本工程的实际消耗,实际消耗请看下文的《工程代码详解》;

配套的FPGA开发板

由于Xilinx UltraScale系列FPGA开发板价格普片较贵,所以暂不推荐具体的开发板。。。

4、工程代码1详解:KU060,OV5640输入版本

开发板FPGA型号:Xilinx–Kintex UltraScale–xcku060-ffva1156-2-i;
开发环境:Vivado2019.1;
输入:OV5640摄像头或者FPGA内部动态彩条,分辨率1280x720@30Hz;
输出:HDMI,RTL纯逻辑编码方案,输出分辨率1920x1080@60Hz;
图像缩放方案:纯Verilog图像缩放;
图像缩放实例:1280x720缩放到1920x1080,其他分辨率缩放可自行修改;
图像缓存方案:FDMA图像缓存+DDR3颗粒+图像3帧缓存;
实现功能:FPGA实现纯verilog图像缩放;
工程作用:掌握FPGA实现纯verilog图像缩放的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第3章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
在这里插入图片描述

5、工程代码2详解:KU060,HDMI输入版本

开发板FPGA型号:Xilinx–Kintex UltraScale–xcku060-ffva1156-2-i;
开发环境:Vivado2019.1;
输入:HDMI或者FPGA内部动态彩条,ADV7611芯片解码方案,分辨率1920x1080@60Hz,笔记本电脑模拟输入源;
输出:HDMI,RTL纯逻辑编码方案,输出分辨率1280x720@60Hz;
图像缩放方案:纯Verilog图像缩放;
图像缩放实例:1920x1080缩放到1280x720,其他分辨率缩放可自行修改;
图像缓存方案:FDMA图像缓存+DDR3颗粒+图像3帧缓存;
实现功能:FPGA实现纯verilog图像缩放;
工程作用:掌握FPGA实现纯verilog图像缩放的设计能力,以便能够移植和设计自己的项目;
工程Block Design和工程代码架构请参考第3章节的《工程源码架构》小节内容;
工程的资源消耗和功耗如下:
在这里插入图片描述

6、工程移植说明

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

7、上板调试验证并演示

准备工作

需要如下器材设备:
1、FPGA开发板;推荐适用本博主配套的开发板;
2、OV5640摄像头或HDMI输入设备,比如笔记本电脑,两者都没有则使用动态彩条;
2、HDMI连接线和显示器;

图像缩放案例1输出演示

我将ov5640摄像头和动态彩条原图从1280x720缩小到800x600输出的视频剪辑整理后如下:
视频前半段为动态彩条原图从1280x720缩小到800x600输出;
视频前后段为ov5640摄像头原图从1280x720缩小到800x600输出;

R-720P-600P-2024

图像缩放案例2输出演示

我将ov5640摄像头和动态彩条原图从1280x720放大到1920x1080输出的视频剪辑整理后如下:
视频前半段为动态彩条原图从1280x720放大到1920x1080输出;
视频前后段为ov5640摄像头原图从1280x720放大到1920x1080输出;

R-720P-1080P-2024

图像缩放案例3输出演示

我将HDMI输入和动态彩条原图从1920x1080缩小到1280x720输出的视频剪辑整理后如下:
左边视频为笔记本1920x1080的原视频;
右边视频为FPGA缩放到1280x720的视频;

R-1080P-720P-2024

8、福利:工程源码获取

福利:工程代码的获取
代码太大,无法邮箱发送,以某度网盘链接方式发送,
资料获取方式:私,或者文章末尾的V名片。
网盘资料如下:
在这里插入图片描述
此外,有很多朋友给本博主提了很多意见和建议,希望能丰富服务内容和选项,因为不同朋友的需求不一样,所以本博主还提供以下服务:
在这里插入图片描述

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

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

相关文章

Python OpenCV精讲系列 - 目标检测与识别深入理解(二十)

💖💖⚡️⚡️专栏:Python OpenCV精讲⚡️⚡️💖💖 本专栏聚焦于Python结合OpenCV库进行计算机视觉开发的专业教程。通过系统化的课程设计,从基础概念入手,逐步深入到图像处理、特征检测、物体识…

java ---- 关于接口的常见面试题

🚀 个人简介:某大型国企资深软件开发工程师,信息系统项目管理师、CSDN优质创作者、阿里云专家博主,华为云云享专家,分享前端后端相关技术与工作常见问题~ 💟 作 者:码喽的自我修养&#x1f9…

前端学习-css的元素显示模式(十五)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 什么是元素显示模式 块元素 常见的块元素 块元素的特点 注意 行内元素 行内元素的特点 注意 行内块元素 行内块元素的特点 元素显示模式的转换 语法格…

决策智能与强化学习:重放比率(replay ratio)

知乎:DILab决策实验室(已授权)链接:https://zhuanlan.zhihu.com/p/898641863 0. 概览 近年来,深度强化学习(Deep Reinforcement Learning, DRL)在诸多领域取得了显著的成果。然而,随…

01电力电子技术介绍

电力电子技术介绍 介绍 讲到电力电子技术就要先说说一位老先生,他就是威廉纽厄尔(William Newell)。1972年,他在美国杜克大学首次提出了电力电子的概念。电力电子的概念可以表示为一个倒三角的关系。 首先,我们看到电…

C# WinForm实现画笔签名及解决MemoryBmp格式问题

目录 需求 实现效果 开发运行环境 设计实现 界面布局 初始化 画笔绘图 清空画布 导出位图数据 小结 需求 我的文章 《C# 结合JavaScript实现手写板签名并上传到服务器》主要介绍了 web 版的需求实现,本文应项目需求介绍如何通过 C# WinForm 通过画布画笔…

Gitxray:一款基于GitHub REST API的网络安全工具

关于Gitxray Gitxray是一款基于GitHub REST API的网络安全工具,支持利用公共 GitHub REST API 进行OSINT、信息安全取证和安全检测等任务。 Gitxray(Git X-Ray 的缩写)是一款多功能安全工具,专为 GitHub 存储库而设计。它可以用于…

NASA:ARCTAS 区域的二级 FIRSTLOOK 气溶胶产品子集。 它包含气溶胶光学深度和粒子类型,以及相关的大气数据

目录 简介 信息 代码 引用 网址推荐 知识星球 机器学习 MISR L2 FIRSTLOOK Aerosol Product subset for the ARCTAS region V001 简介 这是 ARCTAS 区域的二级 FIRSTLOOK 气溶胶产品子集。 它包含气溶胶光学深度和粒子类型,以及相关的大气数据,…

基于Segment Anything 模型的智能抠图开发的产品原型,基于官网案例升级改造

最近在研究图像处理的过程中,接触到了Mate开源的 Segment Anything模型,花点时间研究了一番,之前也写了一篇部署模型的教程,感兴趣的同学可以查看一下之前的文章 基于丹摩DAMODEL部署Segment Anything 模型,智能分割一…

多模态模型架构的演进

人工智能咨询培训老师叶梓 转载标明出处 多模态学习正成为连接不同类型数据(如图像、文本、音频等)的桥梁。随着深度学习技术的发展,多模态模型在理解和处理跨领域数据方面表现出了显著的效能。来自普渡大学、混沌工业公司、斯坦福大学和亚马…

ICM20948 DMP代码详解(80)

接前一篇文章:ICM20948 DMP代码详解(79) 本回继续对“上半场”即ICM20948传感器各寄存器初始化状态进行回顾复盘。 接下来是 icm20948_sensor_setup() ---> icm20948_set_fsr() ---> inv_icm20948_set_fsr() ---> inv_icm20948_set_accel…

ARM 之十九 详解 Semihosting、SWO 以及在 MDK-ARM、IAR、Eclipse、SEGGER-ES 的使用

在嵌入式系统开发中,我们通常会将标准输入输出作为一个控制台功能添加到我的嵌入式应用程序中。这样我就有了一个命令行接口,可以检查和修改目标系统。在 ARM 架构中,Semihosting 和 SWO 是经常会遇到的两个概念,在调试输出方面也…

python+appium+雷电模拟器安卓自动化及踩坑

一、环境安装 环境:window11 1.1 安装Android SDK AndroidDevTools - Android开发工具 Android SDK下载 Android Studio下载 Gradle下载 SDK Tools下载 这里面任选一个就可以,最终下载完主要要安装操作安卓的工具adb,安装这个步骤的前提是要…

MarsCode--字符串有多少种可能性【简单】

问题描述 给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数&#x…

[翻译]MOSIP Blue Book

目录 Preface(前言) Executive summary(执行摘要) 1 Introduction(介绍/序言) 1.1 Principles on Identification(识别原则) 1.2 Need for a Foundational ID(需要基…

【Java进阶】Java进阶-手撕java agent

文章目录 Java Agent一、定义与工作原理二、主要特点三、应用场景四、使用注意事项 Java Agent相关接口1. Instrumentation接口2. ClassFileTransformer接口3. 其他相关类和接口 手写一个Java Agent1. 编写Java Agent代码2. 编写MANIFEST.MF文件3. 编译代码并打包成JAR文件4. 运…

JavaWeb——Maven(2/8):概述-介绍安装(步骤、具体操作、测试)

目录 介绍 安装 步驟 具体操作 测试 主要讲解两个方面:Maven的介绍以及Maven的安装。 先来介绍一下没问当中的一些概念和模型。 介绍 Apache Maven是一个项目管理和构建工具,它基于项目对象模型(POM:project object model…

Java | Leetcode Java题解之第477题汉明距离总和

题目&#xff1a; 题解&#xff1a; class Solution {public int totalHammingDistance(int[] nums) {int ans 0, n nums.length;for (int i 0; i < 30; i) {int c 0;for (int val : nums) {c (val >> i) & 1;}ans c * (n - c);}return ans;} }

基于Flink+Hologres搭建实时数仓

Apache Paimon是一种流批统一的数据湖存储格式&#xff0c;结合Flink及Spark构建流批处理的实时湖仓一体架构。Paimon创新地将湖格式与LSM技术结合起来&#xff0c;给数据湖带来了实时流更新以及完整的流处理能力。借助实时计算Flink版与Apache Paimon&#xff0c;可以快速地在…

多人播客的生成#使用OpenAI Swarm框架

使用Swarm来写多智能体的代码&#xff0c;非常简洁高效。 什么是Swarm&#xff1f; Swarm是由OpenAI开发的一个实验性多代理系统框架&#xff0c;旨在探索多代理系统的高效接口。该框架注重轻量级、可控性高且易于测试&#xff0c;主要用于展示代理之间的交接与例行操作模式。S…