【目标跟踪】|MOSSE原理及对应代码解释 matlab C

article/2025/9/29 22:24:28

1原理

https://www.bilibili.com/video/av74302620/?spm_id_from=333.788.videocard.0

https://blog.csdn.net/fzp95/article/details/78385795?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-4&spm=1001.2101.3001.4242

相关和卷积操作》
https://blog.csdn.net/qq_17783559/article/details/82254996

1.1 相关性

在这里插入图片描述
其中 f∗表示 f的复共轭。correlation的直观解释就是衡量两个函数在某个时刻相似程度。

1.2 MOSSE 滤波器H公式推导

作者提出的滤波器叫做Minimum Output Sum of Squared Error filter(MOSSE)(误差最小平方和滤波器)。

MOSSE是一种从较少的训练图像中生成滤波器的算法。

1.2.1 结论

先放结论:
整个滤波器的模型公式:在这里插入图片描述
分子是输入和期望输出之间的相关性,分母是输入的能谱。
其中gi表示响应输出,fi表示输入图像,对多组输入和对应的输出求均值,得到h,h表示滤波模板。

Q1: 对于框定的一个目标框,怎么得到多个训练样本输入?
A1: 可以通过任意旋转裁剪

Q2: 训练时候 对应的响应是什么?
A2: 一般来说,gi 可以是任何形状。在这种情况下,gi是由ground truth生成的,它在训练图像fi中有一个以目标为中心的紧凑的(σ = 2.0)二维高斯峰.

Q3:经过样本训练得到了H ,之后怎么用?
A3:利用在这里插入图片描述得到相关性最大的,即响应最大的地方,作为下一次跟踪的目标位置。

ps

在实际跟踪的过程中我们要考虑到目标的外观变换等因素的影响,所以需要同时考虑目标的m个图像作为参考,对跟踪框(groundtruth)进行随机仿射变换,获取一系列的训练样本 fi,

而 gi则是由高斯函数产生,并且其峰值位置是在 fi的中心位置。

获得了一系列的训练样本和结果之后,就可以计算滤波器h的值。注意:这里的f,g,h的size大小都相同。从而提高滤波器模板的鲁棒性。

同时,作者为了让滤波器对与形变、光照等外界影响具有更好的鲁棒性,采取了如下的模板更新策略,作者将滤波器的模型公式分为分子和分母两个部分,每个部分都分别的进行更新:。
在这里插入图片描述
其中 At和 At−1分别表示的是当前帧和上一帧的分子。

1.2.2 推导(可以不管)

我们需要找到一个滤波器,使其在目标上的响应最大,则如下公式:
在这里插入图片描述
其中g表示响应输出,f表示输入图像,h表示滤波模板。

显然,我们要是想获得比较获得响应输出,只需确定滤波器模板h即可。上式的计算是进行卷积计算,这在计算机中的计算消耗时很大的,因此作者对上式进行快速傅里叶变换(FFT)这样卷积操作经过FFT后就变成了点乘操作,极大的减少了计算量。上式变成如下形式:

在这里插入图片描述
为了方便描述,将上式写成如下形式:在这里插入图片描述

后面跟踪的任务就是找到 H∗了

因为上式的操作都是元素级别的,因此要想找到,只要使其中的每个元素的MOSSE都最小即可。因此上式可转换为如下形式:
在这里插入图片描述(w和v是H中每个元素的索引)

要想得到最小的 H*wv,只需要对上式求偏导,并使偏导为0即可。即
在这里插入图片描述
即每个位置的值为:
在这里插入图片描述

结论

整个滤波器的模型公式:在这里插入图片描述
分子是输入和期望输出之间的相关性,分母是输入的能谱。

ps

但是在实际跟踪的过程中我们要考虑到目标的外观变换等因素的影响,所以需要同时考虑目标的m个图像作为参考,对跟踪框(groundtruth)进行随机仿射变换,获取一系列的训练样本 fi,

而 gi则是由高斯函数产生,并且其峰值位置是在 fi的中心位置。

获得了一系列的训练样本和结果之后,就可以计算滤波器h的值。注意:这里的f,g,h的size大小都相同。从而提高滤波器模板的鲁棒性。

同时,作者为了让滤波器对与形变、光照等外界影响具有更好的鲁棒性,采取了如下的模板更新策略,作者将滤波器的模型公式分为分子和分母两个部分,每个部分都分别的进行更新:。
在这里插入图片描述
其中 At和 At−1分别表示的是当前帧和上一帧的分子。

2 具体计算过程

首先,它需要一组训练图像fiand训练输出gi。

2.1 输入目标区域

rect

%% 选择目标区域
% select target from first frame
im = imread(img_files(1,:));
f = figure('Name', 'Select object to track'); 
imshow(im);
rect = getrect;
close(f); clear f;
center = [rect(2)+rect(4)/2 rect(1)+rect(3)/2];

2.2 获得高斯核

%% 高斯核
% plot gaussian
sigma = 100;
gsize = size(im);%获取图像尺寸
[R,C] = ndgrid(1:gsize(1), 1:gsize(2));
%两个矩阵R和C,都是m行n列
g = gaussC(R,C, sigma, center);%通过R和C产生size等同于im的高斯滤波函数
g = mat2gray(g);
g = imcrop(g, rect);
G = fft2(g);    % 得到目标区域的高斯滤波核的傅里叶变换

2.3 计算 输入的fi

其中fi是框选的目标区域

img = imcrop(img, rect);

人为地连接图像fi的边界会引入一个影响相关输出的伪影。

解决方法:

首先,使用日志函数对像素值进行转换,这有助于低对比度的照明情况。像素值被归一化为平均值0.0和平均值1.0。

最后,将图像乘以一个余弦窗口,使边缘附近的像素值逐渐减少到零。这也有一个好处,它把重点放在了靠近目标中心的地方。
原因:由于傅里叶变换是周期性的,它不尊重图像的边界。非周期图像的相对边之间的巨大不连续将导致有噪声的傅里叶表示。

%将高斯滤波函数变换到频域
height = size(g,1);
width = size(g,2);
%imresize(img, [height width])将图片调整成滤波器的大小
fi = preprocess(imresize(img, [height width]));

preprocess.m处理函数

function img = preprocess(img)
[r,c] = size(img);
win = window2(r,c,@hann);
save win
eps = 1e-5;
img = log(double(img)+1);
img = (img-mean(img(:)))/(std(img(:))+eps);
img = img.*win;
end

2.4 计算初始的Hi(Ai,Bi)及生成多个训练模板

Ai = (G.*conj(fft2(fi)));%相关性
Bi = (fft2(fi).*conj(fft2(fi)));%fi能量谱N = 128;
for i = 1:Nfi = preprocess(rand_warp(img));Ai = Ai + (G.*conj(fft2(fi)));Bi = Bi + (fft2(fi).*conj(fft2(fi)));
end

2.5 利用初始Hi进行预测响应位置,并在线更新

%预测位置Hi = Ai./Bi;fi = imcrop(img, rect);            fi = preprocess(imresize(fi, [height width])); gi = uint8(255*mat2gray(ifft2(Hi.*fft2(fi))));maxval = max(gi(:))[P, Q] = find(gi == maxval);dx = mean(P)-height/2;dy = mean(Q)-width/2;rect = [rect(1)+dy rect(2)+dx width height];%更新滤波器fi = imcrop(img, rect); fi = preprocess(imresize(fi, [height width]));Ai = eta.*(G.*conj(fft2(fi))) + (1-eta).*Ai;Bi = eta.*(fft2(fi).*conj(fft2(fi))) + (1-eta).*Bi;

code

matlab

%get images from source directory
%% 获取图像
%此处仅仅用于得到图片序列所在地址
datadir = 'H:/code/1doctor_code/matlab_code/tracking/mosse-tracker-master/data/';
dataset = 'Surfer';
path = [datadir dataset];
img_path = [path '/img/'];
D = dir([img_path, '*.jpg']);%在img_path下的所有jpg后缀文件的地址放入D中seq_len = length(D(not([D.isdir])));%得到图片总数
if exist([img_path num2str(1, '%04i.jpg')], 'file')img_files = num2str((1:seq_len)', [img_path '%04i.jpg']);
elseerror('No image files found in the directory.');
end
%% 选择目标区域
% select target from first frame
im = imread(img_files(1,:));
f = figure('Name', 'Select object to track'); 
imshow(im);
rect = getrect;
close(f); clear f;
center = [rect(2)+rect(4)/2 rect(1)+rect(3)/2];
%% 高斯核
% plot gaussian
sigma = 100;
gsize = size(im);%获取图像尺寸
[R,C] = ndgrid(1:gsize(1), 1:gsize(2));
%两个矩阵R和C,都是m行n列
g = gaussC(R,C, sigma, center);%通过R和C产生size等同于im的高斯滤波函数
g = mat2gray(g);
g = imcrop(g, rect);
G = fft2(g);    % 得到目标区域的高斯滤波核的傅里叶变换
%% 随机裁剪原始目标区域,得到N个训练样本
%randomly warp original image to create training set
if (size(im,3) == 3) img = rgb2gray(im); 
end
img = imcrop(img, rect);%将高斯滤波函数变换到频域
height = size(g,1);
width = size(g,2);
%imresize(img, [height width])将图片调整成滤波器的大小
fi = preprocess(imresize(img, [height width]));
Ai = (G.*conj(fft2(fi)));
Bi = (fft2(fi).*conj(fft2(fi)));N = 128;
for i = 1:Nfi = preprocess(rand_warp(img));Ai = Ai + (G.*conj(fft2(fi)));Bi = Bi + (fft2(fi).*conj(fft2(fi)));
end% MOSSE online training regimen
eta = 0.25;
fig = figure('Name', 'MOSSE');
t = figure;
mkdir(['results_' dataset]);
for i = 1:size(img_files, 1)img = imread(img_files(i,:));im = img;if (size(img,3) == 3)img = rgb2gray(img);%灰度图endif (i == 1)Ai = eta.*Ai;Bi = eta.*Bi;%似乎没有意义,在i=2的时候同时约了etaelse%预测位置Hi = Ai./Bi;fi = imcrop(img, rect);            fi = preprocess(imresize(fi, [height width])); gi = uint8(255*mat2gray(ifft2(Hi.*fft2(fi))));maxval = max(gi(:))[P, Q] = find(gi == maxval);dx = mean(P)-height/2;dy = mean(Q)-width/2;rect = [rect(1)+dy rect(2)+dx width height];%更新滤波器fi = imcrop(img, rect); fi = preprocess(imresize(fi, [height width]));Ai = eta.*(G.*conj(fft2(fi))) + (1-eta).*Ai;Bi = eta.*(fft2(fi).*conj(fft2(fi))) + (1-eta).*Bi;end% visualizationtext_str = ['Frame: ' num2str(i)];box_color = 'green';position=[1 1];result = insertText(im, position,text_str,'FontSize',15,'BoxColor',...box_color,'BoxOpacity',0.4,'TextColor','white');result = insertShape(result, 'Rectangle', rect, 'LineWidth', 3);imwrite(result, ['results_' dataset num2str(i, '/%04i.jpg')]);imshow(result);drawnow;rect
end

c

// This file ispart of the OpenCV project. 
// It is subject to the license terms in the LICENSEfile found in the top-level directory 
// of this distribution and athttp://opencv.org/license.html. // 
//[1] David S. Bolme et al. "Visual Object Trackingusing Adaptive Correlation Filters" 
//   http://www.cs.colostate.edu/~draper/papers/bolme_cvpr10.pdf 
// // 
// credits: 
// Kun-Hsin Chen: for initial c++ code 
// Cracki: for the idea of only converting the usedpatch to gray 
// #include "opencv2/tracking.hpp" namespace cv { 
namespace tracking { struct DummyModel :TrackerModel 
{ virtual void modelUpdateImpl(){} virtual void modelEstimationImpl( const std::vector<Mat>& ){} 
}; const double eps=0.00001;      // fornormalization 
const double rate=0.2;         //learning rate 
const double psrThreshold=5.7; //no detection, if PSR is smaller than this struct MosseImpl :TrackerMOSSE 
{ 
protected: Point2d center;//center of the bounding box Size size;      //size ofthe bounding box Mat hanWin; Mat G;          //goal Mat H, A,B;    //state//  Element-wisedivision of complex numbers in src1 and src2 Mat divDFTs( const Mat &src1, const Mat &src2 ) const { Mat c1[2],c2[2],a1,a2,s1,s2,denom,re,im; // split into re and im per src cv::split(src1, c1); cv::split(src2, c2); // (Re2*Re2 + Im2*Im2) = denom //   denom is same forboth channels cv::multiply(c2[0], c2[0], s1); cv::multiply(c2[1], c2[1], s2); cv::add(s1,s2, denom); // (Re1*Re2 + Im1*Im1)/(Re2*Re2 + Im2*Im2) = Re cv::multiply(c1[0], c2[0], a1); cv::multiply(c1[1], c2[1], a2); cv::divide(a1+a2, denom, re, 1.0 ); // (Im1*Re2 - Re1*Im2)/(Re2*Re2 + Im2*Im2) = Im cv::multiply(c1[1], c2[0], a1); cv::multiply(c1[0], c2[1], a2); cv::divide(a1+a2, denom, im, -1.0); // Merge Re and Im back into a complex matrix Mat dst,chn[] = {re,im}; cv::merge(chn, 2, dst); return dst; } void preProcess( Mat &window) const { window.convertTo(window, CV_32F); log(window+ 1.0f, window); //normalize Scalarmean,StdDev; meanStdDev(window, mean, StdDev); window =(window-mean[0]) /(StdDev[0]+eps); //Gaussain weighting window =window.mul(hanWin); } double correlate( const Mat &image_sub, Point&delta_xy ) const//计算相对位移 { MatIMAGE_SUB, RESPONSE, response; // filter in dft space dft(image_sub, IMAGE_SUB, DFT_COMPLEX_OUTPUT); mulSpectrums(IMAGE_SUB, H, RESPONSE, 0, true ); idft(RESPONSE, response, DFT_SCALE|DFT_REAL_OUTPUT); // update center position double maxVal; Point maxLoc; minMaxLoc(response, 0, &maxVal, 0, &maxLoc); delta_xy.x= maxLoc.x - int(response.size().width/2); delta_xy.y= maxLoc.y - int(response.size().height/2); // normalize response Scalarmean,std; meanStdDev(response, mean, std); return (maxVal-mean[0]) / (std[0]+eps); // PSR } Mat randWarp( const Mat& a ) const { cv::RNGrng(8031965); // random rotation double C=0.1; double ang = rng.uniform(-C,C); double c=cos(ang), s=sin(ang); // affine warp matrix Mat_<float> W(2,3); W <<c + rng.uniform(-C,C), -s + rng.uniform(-C,C), 0, s +rng.uniform(-C,C),  c +rng.uniform(-C,C), 0;// random translation Mat_<float> center_warp(2, 1); center_warp << a.cols/2, a.rows/2; W.col(2) = center_warp - (W.colRange(0, 2))*center_warp; Mat warped;warpAffine(a, warped, W, a.size(), BORDER_REFLECT); return warped; } virtual bool initImpl( const Mat& image, const Rect2d& boundingBox ){ model =makePtr<DummyModel>(); Mat img; if (image.channels() == 1) img =image; else cvtColor(image, img, COLOR_BGR2GRAY); int w = getOptimalDFTSize(int(boundingBox.width)); int h = getOptimalDFTSize(int(boundingBox.height)); //Get the center position int x1 = int(floor((2*boundingBox.x+boundingBox.width-w)/2)); int y1 = int(floor((2*boundingBox.y+boundingBox.height-h)/2)); center.x =x1 + (w)/2; center.y =y1 + (h)/2; size.width= w; size.height= h; Mat window;getRectSubPix(img, size, center, window); createHanningWindow(hanWin, size, CV_32F); // goal Matg=Mat::zeros(size,CV_32F); g.at<float>(h/2, w/2) = 1;GaussianBlur(g, g, Size(-1,-1),2.0); double maxVal; minMaxLoc(g, 0,&maxVal); g = g /maxVal; dft(g, G,DFT_COMPLEX_OUTPUT); // initial A,B and H A =Mat::zeros(G.size(), G.type()); B =Mat::zeros(G.size(), G.type()); for(int i=0; i<8; i++) { Matwindow_warp = randWarp(window); preProcess(window_warp); MatWINDOW_WARP, A_i, B_i; dft(window_warp, WINDOW_WARP, DFT_COMPLEX_OUTPUT); mulSpectrums(G          ,WINDOW_WARP, A_i, 0, true); mulSpectrums(WINDOW_WARP, WINDOW_WARP, B_i, 0, true); A+=A_i;B+=B_i;} H =divDFTs(A,B); return true; } virtual bool updateImpl( const Mat& image,Rect2d& boundingBox ) { if (H.empty()) // not initialized return false; Matimage_sub; getRectSubPix(image, size, center, image_sub); if (image_sub.channels() != 1) cvtColor(image_sub, image_sub, COLOR_BGR2GRAY); preProcess(image_sub); Pointdelta_xy; double PSR =correlate(image_sub, delta_xy); if (PSR < psrThreshold) return false; //update location center.x +=delta_xy.x; center.y +=delta_xy.y; Matimg_sub_new; getRectSubPix(image, size, center, img_sub_new); if (img_sub_new.channels() !=1) cvtColor(img_sub_new, img_sub_new, COLOR_BGR2GRAY); preProcess(img_sub_new); // new state for A and B Mat F, A_new,B_new; dft(img_sub_new, F, DFT_COMPLEX_OUTPUT); mulSpectrums(G, F, A_new, 0, true ); mulSpectrums(F, F, B_new, 0, true ); // update A ,B, and H A = A*(1-rate) + A_new*rate; B = B*(1-rate) + B_new*rate; H =divDFTs(A, B); // return tracked rect double x=center.x, y=center.y; int w = size.width,h=size.height; boundingBox= Rect2d(Point2d(x-0.5*w,y-0.5*h), Point2d(x+0.5*w, y+0.5*h)); return true; } public: MosseImpl() {isInit = 0; } // dummy implementation. virtual void read( const FileNode& ){} virtual void write( FileStorage& ) const{} }; // MosseImpl } // tracking Ptr<TrackerMOSSE> TrackerMOSSE::create() 
{ returnmakePtr<tracking::MosseImpl>(); 
} } // cv

http://chatgpt.dhexx.cn/article/XQXX06Lg.shtml

相关文章

单目标跟踪MOSSE详细算法步骤+理论说明

单目标跟踪MOSSE详细算法步骤理论推导 算法概述详细步骤候选框处理初始滤波器生成滤波器更新 理论说明对数变换(log函数)窗函数的理解 更新中 为了理解傅里叶变换&#xff0c;花了一周时间&#xff0c;可惜还是没有搞很清楚原理&#xff0c;暂且将其看作是数学家从浩瀚的知识海…

MOSSE相关滤波目标跟踪论文

论文全名&#xff1a;Visual Object Tracking using Adaptive Correlation Filters 论文摘自CVPR 2010&#xff0c;由David S. Bolme、J.Ross Beveridge、Bruce A. Draper与Yui Man Lui撰写&#xff0c;简称MOSSE。 摘要 虽然不常用&#xff0c;但相关滤波器可以通过旋转&…

上海2022年平均工资为12184,涨幅只有6.9%

大家好&#xff01;我是韩老师。 到了每年的7月份&#xff0c;就是上海调整社保和公积金基数的时候了。 今天&#xff0c;上海人社局发布了有关民生保障待遇及社会救助待遇调整&#xff0c;其中最重要的信息透露了上海市2022年度职工月平均工资&#xff0c;即上海市2023年度社保…

上海市人才引进落户条件有哪些

在沪工作稳定,专业(业绩)与岗位相符,一般应能在本单位工作五年以上,且符合下列条件之一: 1、具有博士研究生学历并取得相应学位或者具有高级专业技术职务任职资格并受聘相应职务的专业技术人员和管理人员。 2、获得省部级及以上政府奖励的人员。 3、国家重大科技专项项…

全国平均工资水平排序 北京上海西藏居前三名

全国工资排序 你的工资涨了吗&#xff1f;省统计局昨日发布的数据显示&#xff0c;今年三季度末&#xff0c;江苏省城镇单位在岗职工平均工资达到21999元&#xff0c;比上年同期增加3211元&#xff0c;增长17.1%。这意味着1-9月份平均每月同比增收356元左右。 金融业平均工资排…

你的工资是怎样被平均的?终于有人把平均数、中位数和众数讲明白了

导读&#xff1a;我们在数据处理时&#xff0c;要小心各种陷阱&#xff01;人们习惯使用统计数据来简化事物描述&#xff0c;但错误的统计方法不仅不能反映事实&#xff0c;还会让数据变得毫无意义。 作者&#xff1a;徐晟 来源&#xff1a;大数据DT&#xff08;ID&#xff1a;…

计算机软件集成项目工程师上海,上海系统集成项目管理工程师积分政策,可以加多少分?...

系统集成项目管理工程师是计算机技术与软件专业技术资格(水平)考试中级资格里的一项考试&#xff0c;获得系统集成项目管理工程师证书在上海市办理居住证时可以获得100分的积分&#xff0c;具体依据如下&#xff1a; 系统集成项目管理工程师是计算机软件资格(水平)考试里中级的…

23省份2011年平均工资排行 北京最高甘肃垫底

2019独角兽企业重金招聘Python工程师标准>>> 23省份2011年平均工资排行 统计发现&#xff0c;目前全国已有北京等23个省区公布了2011年城镇单位在岗职工平均工资。数据显示&#xff0c;在这23省区中&#xff0c;北京职工月平均工资最高&#xff0c;为4672元/月&…

再见,工资!2020年6月程序员工资统计,平均14404元,网友:又跌了!

Python实战社群 Java实战社群 长按识别下方二维码&#xff0c;按需求添加 扫码关注添加客服 进Python社群▲ 扫码关注添加客服 进Java社群▲ 作者丨有数可据 来源丨 https://blog.csdn.net/juwikuang/article/details/106503404 见了鬼&#xff01; 工资竟然又跌了 #平均工资 2…

上海落户说明

&#xfeff;&#xfeff; 当前位置&#xff1a;合肥家园网—楼市资讯—家园看房 上海最新户口政策 新闻来源&#xff1a;合肥家园网 2012-02-24 width"100" height"24" src"http://news.hfhome.cn/hits.aspx?NewsID77154" frameborder"0…

2020年6月程序员工资统计,平均14404元,网友:又跌了!

见了鬼&#xff01; 工资竟然又跌了 #平均工资 2020年6月全国招收程序员313739人。2020年6月全国程序员平均工资14404元&#xff0c;工资中位数12500元&#xff0c;其中95%的人的工资介于5250元到35000元。 虽然收入又下降了&#xff0c;但是岗位比上个月多了起来&#xff0c;随…

上海市职称计算机证明补办,职称证书丢了还能补办吗?上海落户政策详解。

很多朋友们在准备积分申请的时候&#xff0c;由于时间过去太久&#xff0c;等找材料的时候发现&#xff0c;职称证书不见了&#xff0c;这可怎么办呢&#xff1f;别急&#xff0c;职称证书是可以补发的&#xff01;只需要个人提供以下材料&#xff1a; 1、原《专业技术职务任职…

python一个月工资多少钱_python工资收入

13.9K / 月平均工资 数据统计来自近一年 13903 份样本&#xff0c;截至 2020-11-21 全国python一个月多少钱&#xff1f;平均工资 &#xffe5;13.9K/月 其中拿10K-15K工资的人占比最多&#xff0c;达 30.5% 其次拿15K-20K工资的占 20.3%&#xff0c;20K-30K占 19.3% 对比…

2021年全国平均工资出炉,你达标了吗?

我国人的收入是个谜&#xff0c;如果你去各大论坛&#xff0c;就会发现各个都是富人。比如“刚下飞机&#xff0c;人在漂亮国&#xff0c;年入刚过百万”。人均法拉利、劳斯莱斯&#xff0c;以至于中国的法拉利、劳斯莱斯、兰博基尼等豪车的拥有量已经超过了其全球销量。 那么大…

java开发深圳平均工资_深圳2017平均工资100173元!!这次你又又又拖后腿了吗!?...

原标题&#xff1a;深圳2017平均工资100173元&#xff01;&#xff01;这次你又又又拖后腿了吗&#xff01;&#xff1f; 最近深圳的天气 我和烤肉之间真的只差一撮孜然 简直热到原地爆炸 虽然未来的几天即将开启雨雨雨的模式 但是依然湿热 不过大家也不要灰心 毕竟有位名人曾经…

海口java工资水平2017,2019年海口平均工资公布,海口平均工资水平最新数据

海口市平均工资是什么&#xff1f;2017年海口市的平均工资是多少&#xff0c;下面现代语文网小编就关于2017年海口市平均工资相关信息给大家整理下&#xff01; 平均工资&#xff0c;是一项反映工资总体水平的指标&#xff0c;指企业、事业、机关单位的职工在一定时期内平均每人…

济宁java平均工资,2019年济宁平均工资公布,济宁平均工资水平最新数据

济宁市平均工资是什么&#xff1f;2017年济宁市的平均工资是多少&#xff0c;下面现代语文网小编就关于2017年济宁市平均工资相关信息给大家整理下&#xff01; 平均工资&#xff0c;是一项反映工资总体水平的指标&#xff0c;指企业、事业、机关单位的职工在一定时期内平均每人…

kali免驱网卡ifconfig不显示?

一、问题现象 1. 插上 kali 免驱网卡后&#xff0c;ifconfig不显示 2. lsusb 显示有网卡的信息 联系了商家远程搞了一天&#xff0c;又是改 USB兼容性 &#xff0c;又是安装各种包&#xff0c;最后重新装了kali系统还是没成功 二、后来我研究了一下解决了 1. 插上网卡&#x…

Linux下通过iwconfig命令连接无线

在无线抓取报文后&#xff0c;或者未启动图形化桌面&#xff0c;只有命令行的情况下&#xff0c;需要通过命令来配置无线上网。 1、启动无线接口 ifconfig -a ifconfig wlan0 up 2、扫描无线信号&#xff0c;找到要连接的无线 iwlist wlan 0 scanning 3、连接相应的无线ssid i…

kali之iwconfig

工具说明 iwconfig类似于ifconfig(8)&#xff0c;但专门用于无线接口。它用于设置特定于无线操作的网络接口的参数(例如:频率)。还可以使用iwconfig来显示这些参数和无线统计信息(从/proc/net/wireless中提取)所有这些参数和统计数据都依赖于设备。每个驱动程序根据硬件支持只…