Matlab 车牌识别技术
1.1设计内容及要求:
课题研究的主要内容是对数码相机拍摄的车牌,进行基于数字图像处理技术的车牌定位技术和车牌字符分割技术的研究与开发,涉及到图像预处理、车牌定位、倾斜校正、字符分割等方面的知识,总流程图如图1-1所示。
图1-1系统总流程图
1.2方案
1、车牌图像的定位。分析了车牌定位的基本原理和现有的定位方法,利用图像处理的技术,提出了基于数学形态学与边缘检测以及颜色相结合的车牌定位方法。最后对车牌定位实验结果进行分析。
2、倾斜校正。分析了倾斜校正的基本原理和一些倾斜校正方法,并对实验结果进行分析。
3、车牌字符分割。分析了各种字符分割算法,然后对分割出的车牌图像进行灰度化、灰度拉伸、二值化、去边框处理等一系列预处理后,提出了一种
基于模板匹配与垂直投影相结合的字符分割方法。最后对字符分割实验结果进行了分析。
设计原理及设计方案
课题研究的主要内容是对数码相机拍摄的车牌,进行基于数字图像处理技术的车牌定位技术和车牌字符分割技术的研究与开发,涉及到图像预处理、车牌定位、倾斜校正、字符分割等方面的知识,总流程图如图2-1所示,其中车牌定位的流程图如图2-2所示,字符分割与归一化的流程图如图2-3所示。
图2-1系统总流程图
图2-2 车牌定位的流程图
图2-3 字符分割与归一化流程图
设计的步骤和结果
3.1 图像灰度变换
灰度图指的是包含光亮程度,但没有色彩信息的图片,比如亮度持续变化的黑白图像就是一张灰度图。灰度变换就是将有色彩的图像转化为只有光亮度的图像。色彩图片分为R、G、B 三个量,依次对应着红、绿、蓝等三种颜色,灰度变换就是将R、G、B 三个分量变为一个等值的过程。像素点越亮的灰度值越大(显白色时像素值最大的为255),相反则越暗(显黑色时像素值为0)。要把原来的彩图变化为用灰度表示时,其图像的灰度变换的值可以用下面两个公式计算:
第一个式子用的是权值加重的方法,第二个式子用的是均值法。Matlab中的R、G、B转灰度的函数rgb2gray① 使用的就是第一个式子权值加重[6]。
对应代码实现如下:
Scolor=imread([pn fn]);
figure,imshow(Scolor),title('原始图像');
Sgray = rgb2gray(Scolor);%rgb2gray转换成灰度图
figure;imshow(Sgray);title('灰度图')
3.2 图像边缘检测
图像边缘是指图片的灰度空间突变或梯度上突变的全部像素组合。接下来在车牌定位与字符的识别前我们需先对图片做边缘检测处理,提升图像像素,让图像更容易接下来的后续操作。在进行完边缘检测处理之后,能在相当程度上压低噪声影响、切割出车牌区域、留下完整车牌字符,使其方便接下来的定位与识别。
根据牌照字符识别所用的图像采集仪器基本装在固有的位置和车牌的特有属性,相对容易看出汽车车牌一般都在一个水平的长方形区域里,位置范围基本比较固定,而且牌照里的字符基本都在一水平方向上。因此,再进行一些转换,容易清晰的呈出车牌区域的边缘。本次系统设计采用了Roberts算子来对图像进行边缘检测。还有别的算法如Sobel算子和拉普拉斯算子等。
Roberts算子是通过对图像局部做差分处理来寻找图像边缘的,使用互为九十度角上的差分来估计梯度,Roberts算子则是采用对角方向相邻两像素之差,
其幅值为:
grd=edge(Egray,'canny',0.09,'both');
figure,imshow(grd);title('robert算子边缘检测');
3.3 车牌定位
基于Matlab车牌识别设计与实现的关键的是牌照位置标记与车牌分割,在整幅图像中先通过合适的算法去提取图像,得到牌照的位置然后再进行平滑、灰度与二值化等处理接着再对提取出来的图片进行分割得到字符。
定位与分割牌照和二值化处理是本次毕业设计的几个重要技术,其主要是为了将已经过前期预处理后所得到的灰度图象中车牌的区域显示出来,接着把包括车牌符号的那块区域图象从处理过的原始图象中提取出来,再由程序的子系统进行识别,要是能准确的切割出车牌的位置就能更好的提升整个程序识别的效率。而且由于车牌图片是初始图片中一个相对突出的子区域图像,简单的概况就是一个水平度比较高近似矩形的横区域图。它在原图中所占的位置相对比较集中,且其灰度值与原图的其它区域也有很大的区别,因此在其边缘就形成了一个灰度有很大变化的区域边界,这样也就有利于我们直接通过边缘检测对图象进行分割。而汽车车牌的二值化处理是字符分割方法中一个非常重要的步骤。
实现代码如下:
[y,x,]=size(bg2);
I6=double(bg2);
%绘制行曲线图
Y1=zeros(y,1);%y行1列的零矩阵
for i=1:y
for j=1:x
if(I6(i,j,1)==1)
Y1(i,1)= Y1(i,1)+1;
end
end
end
[temp, MaxY]=max(Y1);
PY1=MaxY;
while ((Y1(PY1,1)>=50)&&(PY1>1))
PY1=PY1-7;
end
PY2=MaxY;
while ((Y1(PY2,1)>=50)&&(PY2<y))
PY2=PY2+7;
end
%绘制列曲线图
X1=zeros(1,x);
for j=1:x
for i=PY1:PY2
if(I6(i,j,1)==1)
X1(1,j)= X1(1,j)+1;
end
end
end
PX1=1;
while ((X1(1,PX1)<3)&&(PX1<x))
PX1=PX1+1;
end
PX2=x;
while ((X1(1,PX2)<3)&&(PX2>PX1))
PX2=PX2-1;
end
DW=Scolor(PY1:PY2,PX1:PX2,:);
%subplot(1,3,3);
figure,imshow(DW),title('车牌定
3.4 车牌的二值化
车牌二值化处理是决定字符分割好坏非常重要的一个步骤,所谓二值化实际上就是把原图中的每个像素点的分别设置为0或255两个值,简单来说就是把整副原图转换成黑白图像。这个二值化主要是在灰度的基础上实际也就是取一个比较合适的值,将字符准确地从车牌中分割出来。过程大致就是选取一个合适的值,若当图中的哪点的灰度值大于这个值时就将该点设为最大255,反之如果图像中的某点的灰度值小于这个值的时候就将该点值设为最小0。因此,只有选取好一个合适的阈值,才能使二值化之后的图像能较好地区分出字符和车牌背景。根据实验经验得知图像最大灰度值减去图像最大灰度值与最小灰度值之差的三分之一可获得令人满意的阈值,二值化的效果较好。选取合适的阈值就能使二值化图像准确的表达图像的车牌区域与其他区域,所以二值化阈值的选取就成为了图像二值化的关键所在。
实现的代码如下:
figure,imshow(DW),title('车牌定位后图像');
I1 = rgb2gray(DW); %将RGB图像转化为灰度图像
g_max=double(max(max(I1)));
g_min=double(min(min(I1)));
T=round(g_max-(g_max-g_min)/3); % T 为二值化的阈值
[m,n]=size(I1);% d:二值图像
imane_bw=im2bw(I1,T/256);
figure,imshow(imane_bw),title('二值化车牌图像');
位后图像');
fname=strcat('code module\Sam',liccode(k2),'.jpg');
%SamBw2 = imread(fname);
SamBw22 = imread(fname);
SamBw22 = rgb2gray(SamBw22);
SamBw2=imresize(SamBw22,[22 14],'nearest');
level=graythresh(SamBw2);
SamBw2=im2bw(SamBw2,level);
for i=1:22
for j=1:14
SubBw2(i,j)=SegBw2(i,j)-SamBw2(i,j);
end
end
% 以上相当于两幅图相减得到第三幅图
Dmax=0;
for k1=1:22
for l1=1:14
if ( SubBw2(k1,l1) > 0 || SubBw2(k1,l1) <0 )
Dmax=Dmax+1;
end
end
end
Error(k2)=Dmax;
end
Error1=Error(kmin:kmax);
MinError=min(Error1);
findc=find(Error1==MinError);
if tt==1
findc=findc+36;
end
if tt==2
findc=findc+10;
end
tt=tt+1;
res=liccode(findc);
shibiejieguo(1,l)=res;
l=l+1;
end
图3-5字符识别流程图
在此我取用字符与模板相减的方式计算两者中那些字符相似度最高,其值为0越多证明两者越相似。接着依次输出相似度最高的字符,基本所有牌照上都只有7个字符,而且第一位基本都为汉字,是车辆所属省份的缩写,接着是大写字母与阿拉伯数字。所有的基本只有50多个汉字,26个大写字母与10个数字。此次我只设定4个汉字26个字母与10个数字的模板。设待识别字符为X,标准模板为Ti,相似度为Si,则有:
参考文献
[1] 冈萨雷斯.数字图像处理(第二版).电子工业出版社,2007.8.
[2] 王永利,苏金明. MATLAB7.0实用指南. 北京: 电子工业出版社, 2004
[3] 宋建才.汽车牌照识别技术研究[J].工业控制计算机,2004,44~45.
[4] 郁梅等,基于视觉的车辆牌照检测,计算机应用研究,1999(5),P65~67
[5] 王枚、王国宏.基于伴生与互补颜色特征的车牌字符分割技术[J].山东大学学报,2007。第37卷
[6] 田蕾,董秀芳 MATLAB图形图像处理应用教程. 北京: 中国水利水电出版社, 2003
[7] 朱学芳等,一种自适应细化方法,模式识别与人工智能,Vol.10,No.2,1997(6),P140~145
[8] 叶晨洲,杨杰,宣国荣.车辆牌照字符识别[J].上海交通大学学报,2000,5(34): 672~675.
[9]刘阳,伊铁源等.数字图象处理应用于车辆牌照的识别.辽宁大学学报.2004,65~68.
[10] 刘佐濂 , 邓荣标 , 孔嘉圆.中国科技信息 [J].2005(23期)9~12.
[11] 袁志伟,潘晓露.车辆牌照定位的算法研究[J].昆明理工大学学报,2001,26(2): 56~60
[12] 廖金周,宣国荣. 车辆牌照的自动分割[J].微型电脑应用, 1999年07期
[13] 刘卫国. MATLAB程序设计与应用. 北京:高等教育出版社,2002
[14] 叶晨洲等,车辆牌照字符识别系统,计算机系统应用,1999(5),P10~13
[15] 李宏升等,利用牌照识别技术的停车场安全防盗系统,计算机系统应用,1999(5),P14~16
[16] 许志影、李晋平.MATLAB极其在图像处理中的应用.计算机与现代化,2004(4)
程序附录
%获取图像 装入待处理彩色图像并显示原始图像
[fn,pn,fi]=uigetfile('*.bmp','选择图片');
Scolor=imread([pn fn]);
figure,imshow(Scolor),title('原始图像');
%将彩色图像转换为黑白并显示
Sgray = rgb2gray(Scolor);%rgb2gray转换成灰度图
%figure,imshow(Sgray),title('原始黑白图像');
%c=histeq(Sgray);
%figure,imshow(c);title('直方图均衡化图像');
s=strel('disk',13);%strei函数13
Bgray=imopen(Sgray,s);%打开sgray s图像
%figure,imshow(Bgray);title('背景图像');%输出背景图像
I3=imerode(Bgray,se); %腐蚀图像
figure,imshow(I3),title('腐蚀后边缘图像');
bg1=imclose(I3,strel('rectangle',[8,18]));%取矩形框的闭运算即平滑8,18
figure,imshow(bg1);title('图像闭运算[5,19]');%输出闭运算的图像
bg3=imopen(bg1,strel('rectangle',[8,14]));%取矩形框的开运算8,18
figure,imshow(bg3);title('图像开运算[5,19]');%输出开运算的图像
bg2=bwareaopen(bg3,700);%去除聚团灰度值小于1000的部分800
figure,imshow(bg2);title('从对象中移除小对象');
[y,x,]=size(bg2);
I6=double(bg2);
%绘制行曲线图
Y1=zeros(y,1);%y行1列的零矩阵
for i=1:y
for j=1:x
if(I6(i,j,1)==1)
Y1(i,1)= Y1(i,1)+1;
end
end
end
% figure();
% subplot(1,3,1);
% plot(0:y-1,Y1),title('行像素灰度值累计'),xlabel('行值'),ylabel('像素和');
[temp, MaxY]=max(Y1);
PY1=MaxY;
while ((Y1(PY1,1)>=50)&&(PY2>1))
PY1=PY1-7;
end
PY2=MaxY;
while ((Y1(PY2,1)>=50)&&(PY1<y))
PY2=PY2+7;
end
%绘制列曲线图
X1=zeros(1,x);
for j=1:x
for i=PY1:PY2
if(I6(i,j,1)==1)
X1(1,j)= X1(1,j)+1;
end
end
end
% subplot(1,3,2);
% plot(0:x-1,X1),title('列像素灰度值累计'),xlabel('列值'),ylabel('像数和');
PX1=1;
while ((X1(1,PX1)<3)&&(PX1<x))
PX1=PX1+1;
end
PX2=x;
while ((X1(1,PX2)<3)&&(PX2>PX1))
PX2=PX2-1;
end
DW=Scolor(PY1:PY2,PX1:PX2,:);
%subplot(1,3,3);
figure,imshow(DW),title('车牌定位后图像');
%if isrgb(DW)
I1 = rgb2gray(DW); %将RGB图像转化为灰度图像
%else I1=DW;
%end
%figure,imshow(I1),title('车牌灰度图像');
g_max=double(max(max(I1)));
g_min=double(min(min(I1)));
T=round(g_max-(g_max-g_min)/3); % T 为二值化的阈值
[m,n]=size(I1);% d:二值图像
%h=graythresh(I1);
imane_bw=im2bw(I1,T/256);
figure,imshow(imane_bw),title('二值化车牌图像');
% imane_bw=bwareaopen(I1,3);
% figure,imshow(imane_bw),title('形态学滤波后的二值化图像');
[y1,x1,z1]=size(imane_bw);
I3=double(imane_bw);
TT=1;
%%%%%%%去除图像顶端和底端的不感兴趣区域%%%%%
Y1=zeros(y1,1);
for i=1:y1
for j=1:x1
if(I3(i,j,1)==1)
Y1(i,1)= Y1(i,1)+1 ;
end
end
end
Py1=1;
Py0=1;
while ((Y1(Py0,1)<9)&&(Py0<y1))
Py0=Py0+1;
end
Py1=Py0;
while((Y1(Py1,1)>=9)&&(Py1<y1))
Py1=Py1+1;
end
I2=imane_bw(Py0:Py1,:,:);
figure,imshow(I2),title('目标车牌区域');
% 寻找连续有文字的块,若长度大于某阈值,则认为该块有两个字符组成,需要分割
d=qiege(I2);
[m,n]=size(d);
%figure,subplot(2,1,1),imshow(d),title(n)
k1=1;k2=1;s=sum(d);j=1;
while j~=n
while s(j)==0
j=j+1;
end
k1=j;
while s(j)~=0 && j<=n-1
j=j+1;
end
k2=j-1;
if k2-k1>=round(n/6.5)
[val,num]=min(sum(d(:,[k1+5:k2-5])));
d(:,k1+num+5)=0; % 分割
end
end
% 再切割
d=qiege(d);
% 切割出 7 个字符
y1=10;y2=0.25;flag=0;word1=[];
while flag==0
[m,n]=size(d);
left=1;wide=0;
while sum(d(:,wide+1))~=0
wide=wide+1;
end
if wide<y1 % 认为是左侧干扰
d(:,[1:wide])=0;
d=qiege(d);
else
temp=qiege(imcrop(d,[1 1 wide m]));
[m,n]=size(temp);
all=sum(sum(temp));
two_thirds=sum(sum(temp([round(m/3):2*round(m/3)],:)));
if two_thirds/all>y2
flag=1;word1=temp; % WORD 1
end
d(:,[1:wide])=0;d=qiege(d);
end
end
% 分割出第二个字符
[word2,d]=getword(d);
% 分割出第三个字符
[word3,d]=getword(d);
% 分割出第四个字符
[word4,d]=getword(d);
% 分割出第五个字符
[word5,d]=getword(d);
% 分割出第六个字符
[word6,d]=getword(d);
% 分割出第七个字符
[word7,d]=getword(d);
% figure(9),imshow(word1),title('1');
% figure(10),imshow(word2),title('2');
% figure(11),imshow(word3),title('3');
% figure(12),imshow(word4),title('4');
% figure(13),imshow(word5),title('5');
% figure(14),imshow(word6),title('6');
% figure(15),imshow(word7),title('7');
[m,n]=size(word1);
% 商用系统程序中归一化大小为 40*20,此处演示%%%%%22,14
word1=imresize(word1,[22 14]);
word2=imresize(word2,[22 14]);
word3=imresize(word3,[22 14]);
word4=imresize(word4,[22 14]);
word5=imresize(word5,[22 14]);
word6=imresize(word6,[22 14]);
word7=imresize(word7,[22 14]);
figure,
subplot(3,7,8),imshow(word1),title('1');
subplot(3,7,9),imshow(word2),title('2');
subplot(3,7,10),imshow(word3),title('3');
subplot(3,7,11),imshow(word4),title('4');
subplot(3,7,12),imshow(word5),title('5');
subplot(3,7,13),imshow(word6),title('6');
subplot(3,7,14),imshow(word7),title('7');
imwrite(word1,'1.jpg');
imwrite(word2,'2.jpg');
imwrite(word3,'3.jpg');
imwrite(word4,'4.jpg');
imwrite(word5,'5.jpg');
imwrite(word6,'6.jpg');
imwrite(word7,'7.jpg');
liccode=char(['0':'9' 'A':'Z' '藏川甘赣贵桂黑沪吉济冀津晋京警兰辽领鲁蒙闽宁青琼陕使苏皖湘新学渝豫粤云浙']); %建立自动识别字符代码表
tt=1;
l=1;
for I=1:7
ii=int2str(I);
t=imread([ii,'.jpg']);
t=255-t;
level=graythresh(t);
t=im2bw(t,level);
SegBw2=imresize(t,[22 14],'nearest');
if tt==1 %第一位汉字识别
kmin=37;
kmax=72;
t=~t;
SegBw2=imresize(t,[22 14],'nearest');
elseif tt==2 %第二位 A~Z 字母识别
kmin=11;
kmax=36;
else %第三位以后是字母或数字识别
kmin=1;
kmax=36;
end
for k2=kmin:kmax
fname=strcat('code module\Sam',liccode(k2),'.jpg');
%SamBw2 = imread(fname);
SamBw22 = imread(fname);
SamBw22 = rgb2gray(SamBw22);
SamBw2=imresize(SamBw22,[22 14],'nearest');
level=graythresh(SamBw2);
SamBw2=im2bw(SamBw2,level);
for i=1:22
for j=1:14
SubBw2(i,j)=SegBw2(i,j)-SamBw2(i,j);
end
end
% 以上相当于两幅图相减得到第三幅图
Dmax=0;
for k1=1:22
for l1=1:14
if ( SubBw2(k1,l1) > 0 || SubBw2(k1,l1) <0 )
Dmax=Dmax+1;
end
end
end
Error(k2)=Dmax;
end
Error1=Error(kmin:kmax);
end
if tt==2
findc=findc+10;
end
tt=tt+1;
res=liccode(findc);
shibiejieguo(1,l)=res;
l=l+1;
end
%=====对话框显示显示======================
shibiejieguo
相关文章:
Matlab 车牌识别技术
1.1设计内容及要求: 课题研究的主要内容是对数码相机拍摄的车牌,进行基于数字图像处理技术的车牌定位技术和车牌字符分割技术的研究与开发,涉及到图像预处理、车牌定位、倾斜校正、字符分割等方面的知识,总流程图如图1-1所示。 图1-1系统总…...
CUDA-求最大值最小值atomicMaxatomicMin
作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 实现原理 atomicMax和 atomicMin是 CUDA 中的原子操作,用于在并行计算中安全地更新共享变量的最大值和最小值。它们确…...
新的Midjourney就是一个增强版的Photoshop,你现在可以轻松的用它换衣服、换发型了
好久没有聊 Midjourney 了,昨晚他们发布了一项引人注目的新功能:AI 图像编辑,一个基于网页的加强版的 Photoshop 呼之欲出,让我大为震撼,也让用户们赞叹不已。 基于现有图像进行参考,进而生成新的图片&…...
Linux系统安装软件的4种方式【源码配置编译安装、yum安装、rpm包安装、二进制软件包安装(.rpm/.tar.gz/.tgz/.bz2)】
一.源码安装 linux安装软件采用源码安装灵活自由,适用于不同的平台,维护也十分方便。 (一)源码安装流程 源码的安装一般由3个步骤组成: 1.配置(configure) Configure是一个可执行脚本…...
基于Spring Boot的洪涝灾害应急信息管理系统设计与实现
摘要 近年来,全球气候变化加剧,洪涝灾害频发,给各国的经济发展和人民生活带来了巨大的威胁。为了提高洪涝灾害的应急响应能力,开发高效的应急信息管理系统变得至关重要。本文基于Spring Boot框架,设计并实现了一个洪涝…...
912.排序数组(桶排序)
目录 题目解法 题目 给你一个整数数组 nums,请你将该数组升序排列。 你必须在 不使用任何内置函数 的情况下解决问题,时间复杂度为 O(nlog(n)),并且空间复杂度尽可能小。 解法 class Solution { public:vector<int> sortArray(vect…...
IPC 进程间通信 消息队列
操作系统内核中采用一个链式队列管理消息,每个节点就对应一个消息: 操作系统规定了单个消息的数据长度不能超过8k(8192个字节),一个消息队列的表长(节点数)最多不超过256个 利用消息队列进行通信的特点: 1. 全双工:任何参与通信的…...
opencv 图像翻转- python 实现
在做图像数据增强时会经常用到图像翻转操作 flip。 具体代码实现如下: #-*-coding:utf-8-*- # date:2021-03 # Author: DataBall - XIAN # Function: 图像翻转import cv2 # 导入OpenCV库path test.jpgimg cv2.imread(path)# 读取图片 cv2.namedWindow(image,1) …...
使用DolphinScheduler接口实现批量导入工作流并上线
使用DS接口实现批量导入工作量并上线脚本 前面实现了批量生成DS的任务,当导入时发现只能逐个导入,因此通过接口实现会更方便。 DS接口文档 DS是有接口文档的地址是 http://IP:12345/dolphinscheduler/swagger-ui/index.html?languagezh_CN&lang…...
pycharm导出环境安装包列表
pycharm导出环境安装包列表 一、导出安装包列表二、安装requirements.txt三、列表显示已安装的包四、显示特定包的信息 一、导出安装包列表 pip freeze > requirements.txt二、安装requirements.txt pip install -r requirements.txt三、列表显示已安装的包 pip list四、…...
分体式智能网关在现代电力物联网中的优势有哪些?
随着电力系统的不断数字化和智能化,电力物联网已经成为现代电力行业发展的重要方向。电力物联网通过各种智能设备和传感器实现电力系统的监测、数据采集和分析,从而优化电力资源配置,提高电网的安全性和稳定性。在这个背景下,&quo…...
第14篇:下一代网络与新兴技术
目录 引言 14.1 下一代网络(NGN)的定义与特点 14.2 IPv6协议的改进与未来应用 14.3 软件定义网络(SDN) 14.4 网络功能虚拟化(NFV) 14.5 量子通信网络 14.6 软件定义广域网(SD-WAN&#x…...
物联网数据采集网关详细介绍-天拓四方
一、物联网数据采集网关的概述 物联网数据采集网关,简称数据采集网关,是物联网系统中的重要组成部分,位于物联网设备和云端平台之间。其主要职责是实现数据的采集、汇聚、转换、传输等功能,确保来自不同物联网设备的数据能够统一…...
2024软考网络工程师笔记 - 第10章.组网技术
文章目录 交换机基础1️⃣交换机分类2️⃣其他分类方式3️⃣级联和堆叠4️⃣堆叠优劣势5️⃣交换机性能参数 🕑路由器基础1️⃣路由器接口2️⃣交换机路由器管理方式2️⃣交换机路由器管理方式 交换机基础 1️⃣交换机分类 1.根据交换方式分 存储转发式交换(Store…...
C语言——字符串指针和字符串数组
目录 前言 一、定义区别 1、数组表示 2、指针表示 二、内存管理区别 1.字符数组 2.字符指针 三、操作区别 1、访问与修改 2、遍历 3...... 总结 前言 在C语言中,字符串随处可见,字符串是由字符组成的一串数据,字符串以null字符(\0)结尾&#…...
7-1回文判断(栈和队列PTA)
回文是指正读反读均相同的字符序列,如“abba”和“abdba”均是回文,但“good”不是回文。编写一个程序,使用栈判定给定的字符序列是否为回文。 若用C,可借助STL的容器实现。 输入格式: 输入待判断的字符序列,按回车…...
使用 NCC 和 PKG 打包 Node.js 项目为可执行文件(Linux ,macOS,Windows)
🎬 江城开朗的豌豆:个人主页 🔥 个人专栏 :《 VUE 》 《 javaScript 》 📝 个人网站 :《 江城开朗的豌豆🫛 》 ⛺️ 生活的理想,就是为了理想的生活 ! 目录 📘 文章引言 步骤 1:…...
LeetCode:2747. 统计没有收到请求的服务器数目(滑动窗口 Java)
目录 2747. 统计没有收到请求的服务器数目 题目描述: 实现代码与解析: 滑动窗口 原理思路: 2747. 统计没有收到请求的服务器数目 题目描述: 给你一个整数 n ,表示服务器的总数目,再给你一个下标从 0 开…...
项目管理工具--【项目策划任务书】模板
项目策划任务书是项目管理中的重要文件,它详细描述了项目的各个方面,以确保项目能够顺利进行。撰写项目策划任务书时需要考虑以下几个关键要素: 基本信息:包括项目名称、负责人、所在单位、联系方式以及日期等基本信息,…...
雷池社区版那么火,为什么站长都使用雷池社区版??
雷池社区版是长亭科技开发的一款免费开源的 Web 应用防火墙(WAF),具有诸多优势,因此值得使用。 防护效果强大。能够检测并防御各种网络攻击,包括 SQL 注入、跨站脚本(XSS)、跨站请求伪造&#x…...
分布式日志有哪些?
分布式日志系统(Distributed Logging Systems)是在分布式计算环境中用来收集、存储和管理来自多个节点的日志数据的系统。这些系统通常设计用于处理高并发、大规模的日志数据流,并提供强大的查询和分析功能。 一、定义与背景 分布式系统通常…...
ETCD未授权访问风险基于角色认证和启用https的ca证书修复方案
ETCD未授权访问风险安全漏洞修复方案 ETCD未授权访问风险介绍基于角色认证的访问控制(BASIC认证)基于ca证书的https访问控制(TLS传输)下载cfssl认证配置工具生成ca认证证书修改etcd配置方式一方式二 访问etcd节点信息 patroni使用…...
执行Django项目的数据库迁移命令时报错:(1050, “Table ‘django_session‘ already exists“);如何破?
一、问题描述: 当我们写Django时,由于自己的操作不当,导致执行数据库迁移命令时报错,报错的种类有很多,例如: 迁移文件冲突:可能你有多个迁移文件试图创建同一个表。数据库状态与迁移文件不同…...
问丫:创新社交平台的技术魅力与发展潜力
最近偶然间发现了一个很特别的社交网站,叫问丫。一开始我也只是抱着随便看看的心态去了解一下,没想到这个网站还蛮有意思的。 这个网站是由 LLMWorld 推出的,据说是一款跨时空跨次元的社交新产品。这个描述给网站蒙上了一层魔幻的纱布&#…...
iOS Swift逆向——被编译优化后的函数参数调用约定修复
头文件导入: typedef long long s64; typedef unsigned long long u64;typedef s64 Int; typedef u64 Bool;struct Swift::String {u64 _countAndFlagsBits;void *_object; };union Swift_ElementAny {Swift::String stringElement; };struct Swift_Any {Swift_Ele…...
self-supervised learning(BERT和GPT)
1芝麻街与NLP模型 我們接下來要講的主題呢叫做Self-Supervised Learning,在講self-supervised learning之前呢,就不能不介紹一下芝麻街,為什麼呢因為不知道為什麼self-supervised learning的模型都是以芝麻街的人物命名。 因為Bert是一個非常…...
基于RBF神经网络的双参数自适应光储VSG构网逆变器MATLAB仿真模型
“电气仔推送”获得资料(专享优惠) 模型简介 此模型源侧部分采用光伏发电系统与混合储能系统(蓄电池超级电容),并网逆变器采用虚拟同步发电机(VSG)控制,为系统提供惯量阻尼支撑。同…...
Openpyxl--学习记录
1.工作表的基本操作 1.1 工作表的新建打开与保存 1.1.1 创建工作簿 from openpyxl import Workbook from pathlib import Pathfile_path Path.home() / "Desktop" / "123.xlsx"# 1.创建工作簿 wb Workbook() # 2.访问默认工作簿 ws wb.active # 3.填充…...
高边坡稳定安全监测预警系统解决方案
一、项目背景 高边坡的滑坡和崩塌是一种常见的自然地质灾害,一但发生而没有提前预告将给人民的生命财产和社会危害产生严重影响。对高边坡可能产生的灾害提前预警、必将有利于决策者采取应对措施、减少和降低灾害造成的损失。现有的高边坡监测技术有人工巡查和利用测…...
计算机毕业设计 | vue+springboot借书管理 图书馆管理系统(附源码)
1,项目背景 1.1 课题背景 随着现在科学技术的进步,人类社会正逐渐走向信息化,图书馆拥有丰富的文献信息资源,是社会系统的重要组成部分,在信息社会中作用越来越重要,在我国图书馆计算机等 信息技术的应用…...
该网站正在紧急升级维护中/百度竞价推广关键词优化
看这本书之前,对wait和notify认识大概就是,调用wait的线程A阻塞之后,一旦另外有线程调用notify方法,线程A会立刻从wait方法处返回。看完这本书后,发现自己的认识实在太肤浅了。。。。。。 线程调用wait()后,…...
家乡特产网络营销方案/天津关键词优化专家
1.在下列的 HTML 中,哪个可以添加背景颜色?()A.<body color"yellow">B.<background>yellow</background>C.<body bgcolor"yellow"> 2.在下列的 HTML 中,哪个可以插入背景…...
如何做网站需求/北京云无限优化
1、电子烟组装机组要针对电子烟产品的配件进行生产、组装,节省人力成本,提高产品品质,提高生产效率。 2、设备的生产过程,振动盘自动上料铆钉,发热丝,剪棉,硅胶片,钢管,外…...
环保工程网站建设价格/国内比较好的软文网站
实验须知:实验主机1:192.168.1.11,作为web服务器实验主机2:192.168.1.12,作为CA签署证书的主机配置流程:(1) 为服务器申请数字证书;这里出于测试的目的,需要建立私有CA创建私有…...
如何用ps做网站界面/新手怎样做网络推广
Linux是免费开源的操作系统,随着时代的发展以及进步,越来越多的企业都开始使用Linux。那么Linux有什么特点,为何如此受欢迎呢?下面和千锋广州小编一起来看看吧! Linux系统以高效和灵活著称,Linux运行在PC上,是在GNU …...
书法网站开发的前景/线上营销策略都有哪些
对于鞋服行业的零售分销企业,大多数是多级组织架构的,如下图所示: 如何处理每个组织内部的业务以及和其它组织间的业务,是鞋服行业软件好坏的一个关键指标. 以上图为例,我们来讨论一下多级组织间的软件业务流程。 图中表示的是&a…...