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

目录

  • 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 UltraScale系列FPGA上的应用,想要直接应用于Xilinx Artix7 系列FPGA的读者,可以参考我之前写得博客,以下是博客地址:
点击直接前往

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

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

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

本方案适应于所有FPGA平台,针对目前市面上主流的FPGA,本博将本方案分别移植到了Xilinx 的Artix7、Kintex7、Zynq7020、紫光同创、高云等平台,本文讲述的是在Xilinx UltraScale系列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.rhkb.cn/news/453479.html

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

相关文章

Java爬虫API:获取商品详情数据的利器

为什么选择Java爬虫API 强大的库支持:Java拥有丰富的网络编程库,如Apache HttpClient、OkHttp等,这些库提供了强大的HTTP请求功能,使得发送请求和处理响应变得简单。高效的数据处理:Java的数据处理能力,结…

C语言:单链表(不带头节点)

目录 一、单链表概念 单链表的特点 二、单链表的实现 1、打印函数的实现 2、尾插函数的实现 3、全部函数的实现 总结: 一、单链表概念 链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。…

沈阳乐晟睿浩科技有限公司:引领抖音小店迈向新纪元

在当今数字化浪潮汹涌的时代,电子商务以其独特的魅力和无限潜力,正深刻改变着人们的消费习惯与商业模式。在这场变革中,沈阳乐晟睿浩科技有限公司凭借其敏锐的市场洞察力和卓越的技术实力,成为了抖音小店领域的佼佼者,…

Maven与Gradle的区别

Maven与Gradle是两种流行的构建工具,广泛用于Java项目的管理和构建。以下是它们的对比,包括官网、Windows 11配置环境、在IDEA中的相同点和不同点,以及它们各自的优缺点。 官网 Maven官网: https://maven.apache.orgGradle官网: https://gr…

Print Settings Page 打印设置页面

“打印设置”页面提供了设计时工具,用于自定义控制视图打印版本外观的打印选项。此页面如下图所示。 “选项”和“行为”选项卡式页面提供对视图打印选项的设计时访问,这些选项可通过其 GridView.OptionsPrint 属性或卡片视图的 CardView.OptionsPrint 进…

【Next.js 项目实战系列】07-分配 Issue 给用户

原文链接 CSDN 的排版/样式可能有问题,去我的博客查看原文系列吧,觉得有用的话,给我的库点个star,关注一下吧 上一篇【Next.js 项目实战系列】06-身份验证 分配 Issue 给用户 本节代码链接 Select Button​ # /app/issues/[i…

51单片机快速入门之 串行通信 2024/10/21

51单片机快速入门之 串行通信 并行通信: 好处:传输快 适合短距离通信弊端:占用大量io 接线形式为8对8 串行通信 异步通信: 数据一帧一帧传送,传输完一帧之后,可继续或者等待(等待时为高电平) 其帧细分为(图片来源) 起始位:数据帧开始,一定为 0 外部设备只有接受到 0 之后…

北京大学冯惠:与卓越者同行,方能更快的成长 | OceanBase数据库大赛获奖选手访谈

本文邀请2022 OceanBase 数据库大赛的季军,来自北京大学的冯惠同学,与我们分享如何寻找自己的兴趣;在一番经历后,对于产品与研发的职业方向观察;以及如何在学生时期提升个人专业能力,和参加数据库大赛的个人…

微信小程序用开发工具在本地真机调试可以正常访问摄像头,发布了授权后却无法访问摄像头,解决方案

今天开发上线了一个拍照的微信小程序&#xff0c;用uniapp的Vue3开发的&#xff0c;调用的camera组件&#xff0c;相关代码如下&#xff1a; <!-- 微信小程序相机组件 --><view v-if"showCamera" class"camera-container"><camera :device…

Ability内页面的跳转和数据传递(router和want显/隐跳转)

目录 案例:使用router完成页面跳转 1.创建一个Arkts项目 2.创建第二个页面 3.手动创建第三个页面 4.编写跳转路由 5.编写接受路由 6.编写返回上一个页面的代码 7.第三个界面代码完善 8.效果 案例:使用want启动Ability 1.创建一个新的项目 2.创建第二个界面 3.创建一个Ability 4…

23年408数据结构

第一题&#xff1a; 解析&#xff1a; 第一点&#xff0c;我们要知道顺序存储的特点&#xff1a;优点就是随用随取&#xff0c;就是你想要查询第几个元素可以直接查询出来&#xff0c;时间复杂度就是O(1)&#xff0c;缺点就是不适合删除和插入&#xff0c;因为每次删除和插入一…

android app执行shell命令视频课程补充android 10/11适配-千里马android

(https://blog.csdn.net/learnframework/article/details/120103471) https://blog.csdn.net/learnframework/article/details/120103471 hi&#xff0c;有学员在学习跨进程通信专题课程时候&#xff0c;在实战app执行一个shell命令的项目时候&#xff0c;对课程本身的android …

MySQL-13.DQL-聚合函数

一.DQL-分组查询 二.聚合函数 -- DQL:分组查询 -- 聚合函数 -- 1.统计该企业员工数量 count select count(id) from tb_emp; select count(job) from tb_emp;select count(A) from tb_emp; select count(*) from tb_emp;-- 2.统计该企业最早入职的员工 min select min(entr…

Pyside6 布局管理器(3)--- 控件尺寸、尺寸策略与布局的关系详解

在学习QWidget时我们已经学习了控件尺寸的一些基本设置&#xff0c;比如设置其作为顶层窗口时resize()方法&#xff0c;setGeometry()等方法。但在将控件添加到布局中后我们会发现&#xff0c;这些方法对于QWidget做为子控件时却是无效的。而布局的显示与大小也受到控件的影响。…

网络资源模板--Android Studio 实现简易新闻App

目录 一、项目演示 二、项目测试环境 三、项目详情 四、完整的项目源码 一、项目演示 网络资源模板--基于Android studio 实现的简易新闻App 二、项目测试环境 三、项目详情 登录页 用户输入&#xff1a; 提供账号和密码输入框&#xff0c;用户可以输入登录信息。支持“记…

RabbitMQ最新版本4.0.2在Windows下的安装及使用

RabbitMQ 是一个开源的消息代理和队列服务器&#xff0c;提供可靠的消息传递和队列服务。它支持多种消息协议&#xff0c;包括 AMQP、STOMP、MQTT 等。本文将详细介绍如何在 Windows 系统上安装和使用最新版本的 RabbitMQ 4.0.2。 前言 RabbitMQ 是用 Erlang 语言开发的 AMQP&…

【Linux】【命令】diff

diff DescriptionsArgumentsExamples直接使用diff命令-u 输出格式-c 输出格式并列输出-s 和 -q 脚本示例示例1&#xff1a;目录及文件差异 Descriptions diff命令用于对比两个文件或者两个文件夹的不同之处&#xff0c;求基本语法如下所示&#xff1a; diff [OPTION]... FILES…

信号与噪声分析——第一节-确定信号的分析

目录 1.确定信号的分析 1.1确定信号的分类&#xff1a; 1.周期信号与非周期信号&#xff1a; 周期信号的定义&#xff1a; 性质&#xff1a; 2.能量信号与功率信号&#xff1a; 定义 区别&#xff1a; 3.基带信号与频带信号&#xff1a; 基带信号的定义&#xff1a; …

使用Matplotlib绘制箱线图:详细指南与示例

在数据分析和可视化领域&#xff0c;箱线图&#xff08;Box Plot&#xff09;是一种强大的工具&#xff0c;用于展示数据的分布特征&#xff0c;包括中位数、四分位数、异常值等。本文将详细介绍如何使用Matplotlib库在Python中绘制箱线图&#xff0c;并通过一个实际的血压数据…

基于微信小程序二手物品调剂系统设计与实现

文章目录 前言项目介绍技术介绍功能介绍核心代码数据库参考 系统效果图文章目录 前言 文章底部名片&#xff0c;获取项目的完整演示视频&#xff0c;免费解答技术疑问 项目介绍 二手物品调剂系统是一种在线平台&#xff0c;旨在促进用户之间的二手物品交易。该系统提供了一个…