版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1引言2数字水印的一般原理3数字图像水印本章提出一种以图案作水印、且提取时不需原图的盲数字水印嵌入算法。这个算法是基于变换的一种算法,经过研究知道:在小波变换后,纹理和边缘特征一般集中在高频子带LH1、HL1和HH1中,如把水印信息加在低频系数LL上,则人眼不易察觉,可以加大水印的嵌入量。由于经过一般的图像处理以后,高频上的信息容易丢失,其鲁棒性不够强。但是,一般情况下在嵌入的水印信息的量是较少的,本文为了增强水印的鲁棒性,在嵌入的水印信息量较少的情况下,就把水印信息嵌入到低频系数上,这样水印的鲁棒性将会大大增强。所谓水印攻击分析,就是对现有的数字水印系统进行攻击,以检验其鲁棒性,通过分析其弱点所在及其易受攻击的原因,以便在以后数字水印系统的设计中加以改进。攻击的目的在于使相应的数字水印系统的检测工具无法正确地恢复水印信号,或不能检测到水印信号的存在。这和传统密码学中的加密算法设计和密码分析是相对应的。下面我们对一些典型的攻击方法进行分析[1-9,26-27]。所谓串谋攻击就是利用同一原始多媒体数据集合的不同水印信号版本,来生成一个近似的多媒体数据集合,以此来逼近恢和复原始数据,其目的是使检测系统无法在这一近似的数据集合中检测出水印信号的存在,其最简单的一种实现就是平均法。3.3.1小波变换的数字水印算法3.3.2实验结果及分析DCT域图像水印本章算法及实验结果分析 4小波变换在数字音频水印中的应用5视频水印概述及算法分析6程序附录clearall;closeall;clc;[filename1,pathname]=uigetfile('*.*','selecttheimage');image1=imread(num2str(filename1));subplot(2,2,1);imshow(image1);title('originalimage');%orginalimageforwatermarkingimage1=double(image1);[row,col]=size(image1);imagew=imread('dmg2.tif');subplot(2,2,2);imshow(imagew);title('watermark');%ˮӡǶÈ뺯Êýµ÷ÓÃ[marked]=blockdwt2(image1,imagew);%generatesthewatermarkedimage%markedmax=max(marked(:));%markscale=marked/markedmax*255;subplot(2,2,3);colormap(gray(256));image(marked);title('Watermarkedimage');%showsthewatermarkedimageimwrite(marked,gray(256),'marked_image.bmp');%savesthewatermarkedimageasabmpfile%*******ˮӡÌáÈ¡¹ý³Ì********watermark=marked-image1;%imageadaptivewatermark%watermark=watermark*255/max(watermark(:))fori=1:row%thresholdingforj=1:colifwatermark(i,j)>0watermark(i,j)=255;endifwatermark(i,j)<0watermark(i,j)=0;endendend[w2h2]=size(watermark);[w3h3]=size(imagew);p=1;q=1;mark=zeros(size(imagew));fori=1:w3:w2forj=1:h3:h2mark=mark+watermark(i:p*w3,j:q*h3);q=q+1;endp=p+1;q=1;endmark=mark/8;subplot(2,2,4);colormap(gray(256));image(mark);title('watermark');%showstheimageadaptivewatermarkimwrite(mark,gray(256),'watermark.bmp');%savestheimageadaptivewatermarkasabmpfile%%%%%%%%%%%%ÐÔÄÜÆÀ¼Û%%%%%%%%%%%%%image1=imread(num2str(filename1));x0=image1;imaged=imread('marked_image.bmp');x2=imaged;%%%%%%%%%%%%%%%%%%%%%%¼ÆËãǶÈëÁËˮӡµÄÐźŵÄÐÅÔë±È%%%%fz=sum(x0.*x0);fm=sum((x0-x2).*(x0-x2));SNR=-10*log(fm/fz)%%%%%%%%%%%%%%%%%%%%%¼ÆËãÎóÂëÂÊ%%%%%%%%%%%%%%%%%%%%%%mark=imread('dmg2.tif');mark1=imread('watermark.bmp');[row,col]=size(mark);m1=mark(:);mm1=mark1(:);err=sum(sum(xor(m1',mm1')))/row*colfunction[D]=blockdwt2(A,W);[row,col]=size(A);k=0.007;[ca,ch,cv,cd]=dwt2(A,'db1');c1=[chcvcd];[h,w]=size(ca');[m,n]=size(c1');W=dmg(W,A);[caachhcvvcdd]=dwt2(W,'db1');W=caa;size(W);%Addingwatermarkimage.fori=1:hforj=1:wifW(i,j)==0a=-0.1;elsea=0.1;endCa(i,j)=ca(i,j)*(1+k*a);%<--------k*abs(double(c1(i,j)))*W(i,j);deolabilirendendD=double(idwt2(Ca,ch,cv,cd,'db1'));%Damgauretme%%imgew:Damgaimgesi%imge1:Orjinalimge%functionW=dmg(imgew,imge1);[wh]=size(imgew');[w1h1]=size(imge1');a=1;b=1;W=zeros(size(imge1'));fori=1:w:w1forj=1:h:h1W(i:a*w,j:b*h)=imgew';b=b+1;enda=a+1;b=1;endW=W';基于小波变换图像水印(2)clearall;closeall;clc;M=256;%ÔͼÏñ³¤¶ÈN=64;%ˮӡ³¤¶È[filename1,pathname]=uigetfile('*.*','selecttheimage');image1=imread(num2str(filename1));subplot(2,2,1);imshow(image1);title('originalimage');%orginalimageforwatermarkingimage1=double(image1);imagew=imread('dmg2.bmp');subplot(2,2,2);imshow(imagew);title('originalwatermark');%originalwatermark%ǶÈëˮӡ[ca,ch,cv,cd]=dwt2(image1,'db1');[cas,chs,cvs,cds]=dwt2(ca,'db1');fori=1:Nforj=1:Nifimagew(i,j)==0a=-1;elsea=1;endCa(i,j)=cas(i,j)*(1+a*0.01);endendIM=idwt2(Ca,chs,cvs,cds,'db1');markedimage=double(idwt2(IM,ch,cv,cd,'db1'));%ÏÔʾǶÈëºóˮӡͼÏñsubplot(2,2,3);colormap(gray(256));image(markedimage);title('markedimage');imwrite(markedimage,gray(256),'watermarked.bmp','bmp');%Ìáȡˮӡimage1=imread(num2str(filename1));image1=double(image1);imaged=imread('watermarked.bmp');[ca,ch,cv,cd]=dwt2(image1,'db1');[cas,chs,cvs,cds]=dwt2(ca,'db1');[caa,chh,cvv,cdd]=dwt2(imaged,'db1');[caas,chhs,cvvs,cdds]=dwt2(caa,'db1');forp=1:Nforq=1:Na=caas(p,q)-cas(p,q);ifa<0W(p,q)=0;elseW(p,q)=255;endendend%ÏÔʾÌáÈ¡µÄˮӡsubplot(2,2,4);colormap(gray(256));image(W);title('´Óº¬Ë®Ó¡Í¼ÏñÖÐÌáÈ¡µÄˮӡ');imwrite(W,gray(256),'watermark.bmp','bmp');%%%%%%%%%%%%ÐÔÄÜÆÀ¼Ûimage1=imread(num2str(filename1));x0=image1;imaged=imread('watermarked.bmp');x2=imaged;%%%%%%%%%%%%%%%%%%%%%%¼ÆËãǶÈëÁËˮӡµÄÐźŵÄÐÅÔë±È%%%%fz=sum(x0.*x0);fm=sum((x0-x2).*(x0-x2));SNR=-10*log(fm/fz)%%%%%%%%%%%%%%%%%%%%%¼ÆËãÎóÂëÂÊ%%%%%%%%%%%%%%%%%%%%%%mark=imread('dmg2.bmp');mark1=imread('watermark.bmp');[row,col]=size(mark);m1=mark(:);mm1=mark1(:);err=sum(sum(xor(m1',mm1')))/row*colclearall;closeall;clc;[x,fs,nbits]=wavread('F:\ÑÐÒ»×÷ÒµÏà¹Ø\ÒôƵ\2blues1.wav');[c,l]=wavedec(x,3,'db4');%Èý¼¶Ð¡²¨·Ö½âca3=appcoef(c,l,'db4',3);cd3=detcoef(c,l,3);cd2=detcoef(c,l,2);cd1=detcoef(c,l,1);x=ca3;%ÌáÈ¡µÍƵϵÊýlenx=length(x);%×÷Ϊͬ²½ÐźÅ%y=[0.02;0.02;0.02;0.02;0.02;0.02;0.02;0.02;0.02;0.02];%¶ÁÈëˮӡÐÅÏ¢mark=imread('F:\ÑÐÒ»×÷ÒµÏà¹Ø\ÒôƵ\name.bmp');[row,col]=size(mark);w=mark(:);m=length(w');k=fix(lenx/10/m)*10;subplot(2,1,1);imshow(mark);title('ˮӡͼÏñ','Fontsize',16,'color','blue');w1=w(1:m);a=0.01;fori=1:k:m*kx1=x(i:i+k-1);j=fix(i/k)+1;fort=1:3recordx(j,t)=x1(t);x1(t)=x1(t)*(1+a*w(j));x(i:i+k-1)=x1;endendc1=[x',cd3',cd2',cd1'];s1=waverec(c1,l,'db4');%6ºÏ²¢µÃµ½Ç¶ÈëˮӡºóµÄÒôƵÐźÅ%marked=[y;s1];wavwrite(s1,fs,nbits,'F:\ÑÐÒ»×÷ÒµÏà¹Ø\ÒôƵ\em2blues1.wav');%ˮӡÌáÈ¡[x2,fs,nbits]=wavread('F:\ÑÐÒ»×÷ÒµÏà¹Ø\ÒôƵ\em2blues1.wav');[cr,lr]=wavedec(x2,3,'db4');car3=appcoef(cr,lr,'db4',3);cdr3=detcoef(cr,lr,3);cdr2=detcoef(cr,lr,2);cdr1=detcoef(cr,lr,1);fori=1:k:m*kj=fix(i/k)+1;%5ˮӡÌáÈ¡w21=(car3(i)/recordx(j,1)-1)/a;w22=(car3(i+1)/recordx(j,2)-1)/a;w23=(car3(i+2)/recordx(j,3)-1)/a;w2(j)=(w21+w22+w23)/3;endw3=reshape(w2,row,col);subplot(2,1,2);imshow(w3);title('ÌáÈ¡µÄˮӡͼÏñ','Fontsize',16,'color','blue');imwrite(w3,'watermark.bmp','bmp');%ÐÔÄÜÆÀ¼Û[x0,fs,nbits]=wavread('F:\ÑÐÒ»×÷ÒµÏà¹Ø\ÒôƵ\2blues1.wav');[x2,fs,nbits]=wavread('F:\ÑÐÒ»×÷ÒµÏà¹Ø\ÒôƵ\em2blues1.wav');%%%%%%%%%%%%%%%%%%%%%%¼ÆËãǶÈëÁËˮӡµÄÐźŵÄÐÅÔë±È%%%%fz=sum(x0.*x0);fm=sum((x0-x2).*(x0-x2));SNR=-10*log(fm/fz)%%%%%%%%%%%%%%%%%%%%%¼ÆËãÎóÂëÂÊ%%%%%%%%%%%%%%%%%%%%%%mark=imread('F:\ÑÐÒ»×÷ÒµÏà¹Ø\ÒôƵ\name.bmp');mark1=imread('F:\ÑÐÒ»×÷ÒµÏà¹Ø\ÒôƵ\watermark.bmp');[row,col]=size(mark);m1=mark(:);mm1=mark1(:);err=sum(sum(xor(m1',mm1')))/row*col音视频编码说明1音视频编码参数1.1音频编码参数音频编码格式采用AAC格式,其参数设置比较简单,主要设置参数如下:(1)音频样本格式的设置c->sample_fmt=AV_SAMPLE_FMT_S16;sample_fmt是一个enum类型,包含了多种样本格式,样本格式的设置应保持与Android应用层音频采样格式一致。此处,我们设置为AV_SAMPLE_FMT_S16,Android应用层采样格式也是16位的ENCODING_PCM_16BIT格式。(2)音频码率设置c->bit_rate=64000;此参数为应用层提供参数接口,由应用层根据编码效果来设定。此处参考值为64000。(3)音频采样率设置c->sample_rate=44100;此参数为应用层提供参数接口,由应用层获取实际机型可用的采样率来决定。采样率越低,音频效果越差,反之,越好。音频采样率一般有8000,44100,47250,48000,47250,32000,11025,16000,22050等值,此处参考值为44100HZ,现在基本所有机器都支持44100采样,而且音频效果也很好。(4)音频通道设置c->channels=2;此参数为应用层提供参数接口,根据应用层需求来设置。当设置1时为单声道模式,设置2时为立体声道模式。此处参考值为2.1.2视频编码参数视频编码参数相对音频编码参数复杂,其中一些参数关系到视频编码的质量和编码速度,为此需要设置一套最优的参数以确保质量和速度达到一个平衡点。(1)视频编码基本参数设置<1>DEC_ID_H264;视频编码格式采用H264格式。<2>c->width=480;c->height=480;width和height两个参数为应用层提供参数接口,根据具体需求来设置编码后视频的大小,即最终视频的width和height。应用层也可以考虑通过调节width和height的大小来改变视频编码的速度,例如480*320的大小比480*480的大小编码速度快很多。此处默认是480*480大小。<3>c->time_base.den=15;c->time_base.num=1;这两个参数决定视频播放帧率,即每秒播放多少帧的视频,time_base.num固定为1,time_base.den为应用层提供参数接口。一般应用层录取视频帧率和播放视频帧率一致。此参数的设置需要考虑到编码速度的问题,经过反复测试,15帧/s是一个比较合适的值。<4>c->pix_fmt=AV_PIX_FMT_YUV420P;视频像素格式,采用AV_PIX_FMT_YUV420P格式。(2)重要参数设置以上视频参数是必须设置的基本参数,以下介绍的参数将会直接影响到视频的质量和编码速度。详细如下:<1>c->thread_count编码线程数,将帧分块,由不同的线程去完成。此参数为应用层提供参数接口,大小需要根据设备CPU核心数来动态设定。经过反复测试,此处大小设置为thread_count=CPU核心数*1.5时编码速度达到比较好的水平。<2>opt_set_funcs系列函数的利用opt_set_funcs系列函数有以下10个:intav_opt_set(void*obj,constchar*name,constchar*val,intsearch_flags);intav_opt_set_int(void*obj,constchar*name,int64_tval,intsearch_flags);intav_opt_set_double(void*obj,constchar*name,doubleval,intsearch_flags);intav_opt_set_q(void*obj,constchar*name,AVRationalval,intsearch_flags);intav_opt_set_bin(void*obj,constchar*name,constuint8_t*val,intsize,intsearch_flags);intav_opt_set_image_size(void*obj,constchar*name,intw,inth,intsearch_flags);intav_opt_set_pixel_fmt(void*obj,constchar*name,enumAVPixelFormatfmt,intsearch_flags);intav_opt_set_sample_fmt(void*obj,constchar*name,enumAVSampleFormatfmt,intsearch_flags);intav_opt_set_video_rate(void*obj,constchar*name,AVRationalval,intsearch_flags);intav_opt_set_channel_layout(void*obj,constchar*name,int64_tch_layout,intsearch_flags);我们可以在ffmpeg源码库libavutil\opt.h查看函数的声明,目前只用到前两个av_opt_set、av_opt_set_int来设置x264里的一些编码参数。av_opt_set(c->priv_data,"preset","ultrafast",0);通过preset参数可以设置编码速度的等级,preset的级别有ultrafast、superfast、veryfast、faster、fast、medium、slow、slower、veryslow、placebo,从快到慢。其实,这里的每个参数都是由一组x264参数设置组合而成。例如ultrafast参数是由以下参数设置组合的:-ultrafast:\n""--no-8x8dct--aq-mode0--b-adapt0\n""--bframes0--no-cabac--no-deblock\n""--no-mbtree--media--no-mixed-refs\n""--partitionsnone--rc-lookahead0--ref1\n""--scenecut0--subme0--trellis0\n""--no-weightb--weightp0\n"这些参数可以在x264源码库里x264.c文件中查看到。大部分参数的含义可以参看://x264-settings.wikispaces/x264+settings或者://wmnmtm.blog.163/blog/static/3824571420215673052227/.preset参数为应用层也提供了参数接口,应用层根据编码速度和质量的进行选取合适的等级。经过反复测试,设置为ultrafast这个值,再配合其他参数参考值能达到最优效果。✧av_opt_set(c->priv_data,"x264opts","force-cfr",0);设置force_crf参数,此参数是设置tune参数zerolatency值中挖掘出来的。Zerolatency参数也是由一组参数组合而成,能起到的作用是解决延迟问题,实现实时编码。其组合参数如下:-zerolatency:\n""--bframes0--force-cfr--no-mbtree\n""--sync-lookahead0--sliced-threads\n""--rc-lookahead0\n"其中有的参数与ultrafast中的参数重复,经过反复测试,设置force_crf和设置tune值为zerolatency效果是一样的。✧av_opt_set_int(c->priv_data,"qp",qpValue,0);其中qpValue是一个int类型的值,qp表示固定量化因子,取值范围0到51。经常取值在20-40之间,越小质量越好,要求的码率越高,0表示无损压缩。此参数为应用层提供了参数接口,应用层根据视频质量和编码速度来选取合适的大小。经过反复测试,取值25能达到质量和速度的平衡。码率控制的方法有三种,出了qp控制方法外还有bitrate及crf方法。三种码率控制方法见下表1.表1.三种码率控制方法对比说明:起初使用的码率控制方法是bitrate固定码率的方法,其取值为W*h*15*2*0.07是参考doubango计算方法,其中w是视频图像的宽,h是视频图像的高,15是帧率,2是中等质量等级,0.07一个权重系数,经过反复测试取此值达到速度与质量平衡时的速度并不是非常满意,为了寻求更快的编码速度,测试了qp方法和crf方法。测试crf方法采用默认值23时,速度比较慢,取值增大时质量也变得很差,因此没有找打一个好的平衡点,舍弃了此种方法。最终选取了qp控制方法,当取值为25时,在1.2GHZ双核CPU测试(本文中提到的测试都是基于此设备的)上速度和质量达到预想效果,速度接近15帧/s。在开发中,这三种码率控制的方法应该根据实际需求来选取。1.3编码参数设置总结对于音频参数的设置比较简单,视频参数的设置比较难,主要是因为要考虑到视频编码速度的问题。虽然之后的编码处理方面也会有些问题会影响编码速度,但是设置好了编码参数也就成功了一大半了。这些参数的设置都要根据实际的需求来设置,在没有经验的情况下需要反复的测试,找到最合适的参数值。2编码设置完编码参数和初始化其他工作后,就可以把采集的音视频数据进行编码了。音频编码比较简单,在此不用介绍,下面主要介绍视频的编码工作。2.1视频编码的需求视频编码的需求如下:a.将移动设备采集来的视频数据像素格式转变为AV_PIX_FMT_YUV420P类型的格式;b.对视频图像大小进行裁剪成目标图片大小;c.当设备由横屏变为竖屏录像时,需要对视频图像进行旋转操作;d.最后对处理好的视频数据进行真正的编码,并写入文件。2.2像素格式转换(1)YUV420格式简介YUV主要用于优化彩色视频信号的传输,使其向后相容老式黑白电视。与RGB视频信号传输相比,它最大的优点在于只需占用极少的频宽(RGB要求三个独立的视频信号同时传输)。其中“Y”表示明亮度(Luminance或Luma),也就是灰阶值;而“U”和“V”表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。采用YUV色彩空间的重要性是它的亮度信号Y和色度信号U、V是分离的。如果只有Y信号分量而没有U、V分量,那么这样表示的图像就是黑白灰度图像。其主要的采样格式有YCbCr4:2:0、YCbCr4:2:2、YCbCr4:1:1和YCbCr4:4:4。,在此,只介绍项目用到的YCbCr4:2:0。4:2:0表示2:1的水平取样,没有垂直采样。现以图1来直观地表示描述YUV420的采样方式,其中以黑点表示采样该像素点的Y分量,以空心圆圈表示采用该像素点的UV分量例。图1.YUV420采样图由图可见,YUV4:2:0采样,每四个Y共用一组UV分量。由此可计算出YUV420的存储大小,如640*480大小的图像其存储大小为(640*480*3)>>1字节,即1.5倍的width*height。其中,Y分量:(640*480)个字节;U(Cb)分量:(640*480>>2)个字节;V(Cr)分量:(640*480>>2)个字节。(2)YUV420SP格式转YUV420P格式YUV420SP格式与YUV420P格式都是属于YUV420的格式,它们所占存储空间大小都是width*height*1.5,所不同的是UV两个分量的存储结构。例如一个分辨率为8*4的YUV图像,其存储结构分别如图2、图3所示。图2.YUV420SP格式存储结构图图3.YUV420P格式存储结构图由图2、图3可以清楚的看到,Y分量的存储方式是一样的,但UV两个分量在420SP格式和420P格式中存储方式完全不一样。在420SP中,UV是交替出现的,而在420P中UV是U分量存储完后再存储V分量。分析清楚了不同之处,然后将420SP转换为420P格式将会很简单。其转换算法代码如下:voidYUV420SPToYUV420P(uint8_t*yuv420sp,uint8_t*yuv420,intwidth,intheight){intPixelsCount=width*height;inti=0,j=0;if(yuv420sp==NULL||yuv420==NULL){//copyYfor(i=0;i<PixelsCount;i++){*(yuv420+i)=*(yuv420sp+i);}//copyCb(U)i=0;for(j=0;j<PixelsCount/2;j+=2){*(yuv420+(i+PixelsCount*5/4))=*(yuv420sp+(j+PixelsCount));i++;}//copyCr(V)i=0;for(j=1;j<PixelsCount/2;j+=2){*(yuv420+(i+PixelsCount))=*(yuv420sp+(j+PixelsCount));i++;}}return;}(3)项目中的应用在Android移动设备中,默认的像素采样格式为YCbCr_420_SP即YUV420SP格式,不过在APIlevel8时用NV21格式来代替了。NV21也属于YUV420格式,经过测试,其采样结构与YUV420SP是一致的。Android设备摄像头采样还有其他像素格式,如RGB等。但是最通用的采样格式还是420SP,经过测试,其他格式的采样图像会出现不兼容情况。因此本项目android应用层中采用的是YUV420SP格式。然而,查看ffmpeg源码库里像素支持的格式时发现,并没有与YUV420SP对应的格式,只有YUV420P格式与其最接近,存储大小一致,这样格式转换也比较容易。Ffmpeg库提供了一个通用的图像格式转换大小转换的方法,如下:intsws_scale(structSwsContext*c,constuint8_t*constsrcSlice[],constintsrcStride[],intsrcSliceY,intsrcSliceH,uint8_t*constdst[],constintdstStride[]);第一个参数是是由sws_getContext方法获得,第二个参数和第六个参数分别是指向转换前与转换后的buffer,第三个参数和第七个参数分别是转换前与转换后的linesize大小,第四个参数设置为0,第五个参数是原图像的高度。调用此方法可以很方便的进行像素格式的转换以及图片大小的转换,通过查看ffmpeg源码库里swscale.c文件中sws_scale方法的定义,正如前面所说,它是一个通用的格式转换方法,为了保证通用,因此设计比较复杂,考虑比较全面,然而在此项目中我们仅仅只需要将YUV420SP转换为YUV420P格式。为了提高性能和整个编码速度必须为YUV420SP转换YUV420P提供一个专门的转换方法,即(2)中提出的方法。经过测试,使用专门的转换方法比调用ffmpeg库里的sws_scale方法150帧的视频时间上节约了近2秒。当图片大小更大时,sws_scale方法时间将会花费更久。因此本项目最终选择(2)中的转换方法。2.3视频裁剪在2.2节中提到了sws_scale方法可以转换图像的大小,但当采样图像大小比较大而最
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年黑龙江民族职业学院单招综合素质考试备考题库带答案解析
- 2026年漳州理工职业学院单招综合素质考试模拟试题附答案详解
- 2026年河南对外经济贸易职业学院单招职业技能考试模拟试题带答案解析
- 2026年广西金融职业技术学院高职单招职业适应性测试参考题库有答案解析
- 2026年湖南外国语职业学院单招综合素质考试备考题库带答案解析
- 2026年安徽水利水电职业技术学院高职单招职业适应性测试参考题库带答案解析
- 2026年阜阳科技职业学院单招综合素质考试参考题库带答案解析
- 2026年福建江夏学院单招综合素质笔试模拟试题带答案解析
- 2026年广州民航职业技术学院单招职业技能考试模拟试题带答案解析
- 2026年哈尔滨科学技术职业学院单招综合素质考试模拟试题带答案解析
- 2025年国考《行测》真题库地市完美版
- 2025年中远海运集团招聘笔试备考题库(带答案详解)
- REVIT建筑建模知到智慧树期末考试答案题库2025年武汉职业技术学院
- 黄河鲤鱼规模化生态养殖项目可行性研究报告完整立项报告
- (高清版)DG∕TJ 08-2299-2019 型钢混凝土组合桥梁设计标准
- 睑板腺炎的健康宣教
- 慢性阻塞性肺疾病诊治指南课件
- 劳动与社会保障法-002-国开机考复习资料
- 工厂车间流水线承包合同协议书范文
- 客房服务员理论知识考试题及答案
- HG/T 6262-2024 再生磷酸铁(正式版)
评论
0/150
提交评论