在Ubuntu 22.04操作系统下启动虚拟机发现让Install vmmon和vmnet模块,点击安装,最后安装失败。

安装缺失模块

需要手动去编译缺失的vmmon和vmnet模块,依赖git开源仓库,获取仓库命令:

$ git clone https://github.com/mkubecek/vmware-host-modules
按照自己机器的vmware版本切换branch分支
$ cd vmware-host-modules
$ vmware-installer --list-products
Product Name Product Version
==================== ====================
vmware-player 17.5.0.22583795

$ git checkout workstation-17.5.1
开始编译和安装

$ sudo make
$ sudo make install

最后重新加载所有vmware模块服务

$ sudo /etc/init.d/vmware start

Starting VMware services:
Virtual machine monitor done
Virtual machine communication interface done
VM communication interface socket family done
Virtual ethernet done
VMware Authentication Daemon done
Shared Memory Available done

再点击运行vmware即可.

本发明提供一种车辆长度计算方法,包括:
构建图片数据集;
对数据集中的图片进行标注,构建出标注数据集;
建立YOLO模型,根据标注数据集的格式更改模型参数,利用模型对训练集及其标注数据集进行训练获得初始权重文件;
构建车长信息表;
调用初始权重文件,利用模型对测试集及其标注数据集进行测试,根据结果的准确率调整参数,保存测试权重文件;
利用模型对待测照片进行识别,将识别结果与车长信息表进行匹配,获取车辆的长度信息。
本发明还提供了车辆长度计算装置、系统、计算机设备及存储介质。
本发明实现了对车辆长度的计算,应用于智能交通领域,可推动智能驾驶的发展,也可以用于车辆的归类,为交通、物流分析提供了基础数据。

1 .一种车辆长度计算方法,其特征在于,所述方法包括:
S201:构建一图片数据集,所述图片数据集分为训练集与测试集;
S202:调用一图片标注工具对所述图片数据集中的图片进行标注,得到对应的标注结果,将该标注结果与该图片分别存放到不同的文件夹中,从而构建出标注数据集;
S203:建立YOLO模型,根据所述标注数据集的格式更改该YOLO模型的参数,随后利用所述YOLO模型对所述训练集及其标注数据集进行训练,获得适用于当前应用环境的初始权重文件;
S204:依据网络上的车辆信息以及当前应用环境的车辆类型构建车长信息表;
S205:调用所述步骤S203中的初始权重文件,利用所述YOLO模型对所述测试集及其标注数据集进行车辆类型的识别测试,得到测试结果,根据测试结果的准确率调整网络超参数,最终得到最优解,保存对应的测试权重文件;
S206:调用所述步骤S205中的测试权重文件,利用所述YOLO模型对待测照片进行车辆类型的识别,并将识别的结果与所述步骤S204中的车长信息表进行匹配,获取车辆的长度信息。
2 .根据权利要求1所述的一种车辆长度计算方法,其特征在于,所述步骤S201包括:
S2011:获取当前应用环境的现场图片作为数据集主体;
S2012:从网络上获取与所述现场图片相近的图片作为所述数据集的补充;
S2013:将所述图片数据集的所有图片按照预设比例划分为训练集与测试集。
3 .根据权利要求1所述的一种车辆长度计算方法,其特征在于,所述步骤S203包括:
S2031:获取所述标注数据集的格式;
S2032:将所述标注数据集的格式传送给一GPU服务器,所述GPU服务器更改YOLO模型的参数使之与所述标注数据集的格式相适应,并对所述训练集及其标注数据集进行训练;
S2033:获取适用于当前应用环境的权重文件。
4 .一种车辆长度计算装置,其特征在于,所述装置包括:
数据集构建模块,设置为构建一图片数据集,并将其所述图片数据集分为训练集与测试集;
标注模块,设置为调用一图片标注工具对所述图片数据集中的图片进行标注,得到对应的标注结果,将该标注结果与该图片分别存放到不同的文件夹中,从而构建出标注数据集;
训练模块,用于获取所述标注数据集的格式,更改YOLO模型参数使之与所述标注数据集格式相适应,利用所述YOLO模型对所述标注数据集进行训练,训练结束之后,获得适用于当前应用环境的权重文件;
车长信息构建模块,设置为依据网络上的车辆信息以及当前应用环境的车辆类型构建车长信息表;
预处理模块,设置为调用所述步骤S203中的初始权重文件,利用所述YOLO模型对所述测试集及其标注数据集进行车辆类型的识别测试,得到测试结果,根据测试结果的准确率调整网络超参数,最终得到最优解,保存对应的测试权重文件;和匹配模块,设置为调用所述测试权重文件,利用所述YOLO模型对待测照片进行车辆类型的识别,并将识别的结果与所述车长信息表进行匹配,获取车辆的长度信息。

5 .根据权利要求4所述的一种车辆长度计算装置,其特征在于,所述数据集构建模块包括:
数据集主体单元,设置为获取当前应用环境的现场图片作为数据集主体;
数据集补充单元,设置为从网络上获取与所述现场图片相近的图片作为所述数据集的补充;和数据集划分单元,设置为将所述图片数据集的所有图片按照预设比例划分为训练集与测试集。
6 .根据权利要求4所述的一种车辆长度计算装置,其特征在于,所述训练模块包括:
标注格式获取单元,设置为获取所述标注数据集的格式;
训练单元,设置为将所述标注数据集的格式传送给一GPU服务器,所述GPU服务器更改YOLO模型的参数使之与所述标注数据集的格式相适应,并对所述训练集及其标注数据集进行训练;和权重文件获取单元,设置为获取适用于当前应用环境的权重文件。
7 .一种车辆长度计算系统,其特征在于,所述系统包括:
根据权利要求4-6之一所述的车辆长度计算装置;以及与所述车辆长度计算装置相连的图像获取装置,用于获取应用场景的现场图片。
8 .一种计算机设备,其特征在于,包括存储器和处理器,所述存储器中存储有计算机程序,所述计算机程序被所述处理器执行时,使得所述处理器实现根据权利要求1-3之一所述的车辆长度计算方法。
9 .一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现根据权利要求1-3之一所述的车辆长度计算方法。

车辆长度计算方法、装置、系统、计算机设备及存储介质.pdf

1.一种车辆特征识别的方法,其特征在于,所述方法包括:
在高速公路服务区入口,采集至少一个车辆的第一图像信息;其中,所述第一图像信息包括所述至少一个车辆的车头图像、车尾图像以及车侧图像;
分析所述第一图像信息,得到所述至少一个车辆的第一特征信息;
将所述第一图像信息和所述第一特征信息上传给服务器;
在高速公路服务区出口,采集所述至少一个车辆的第二图像信息;其中,所述第二图像信息包括所述至少一个车辆的车头图像、车尾图像以及车侧图像;
分析所述第二图像信息,得到所述至少一个车辆的第二特征信息;
将所述第二图像信息和所述第二特征信息上传给所述服务器;
所述服务器检索所述至少一个车辆中第一车辆的车牌号码,将所述第一车辆的所述第一特征信息和所述第二特征信息进行比对;
若所述第一车辆的所述第一特征信息与所述第二特征信息不匹配,则服务器将所述第一车辆登记到重点车辆管理名单,并发出告警信息。
2.根据权利要求1所述的方法,其特征在于,所述第一特征信息或所述第二特征信息,包括车头的颜色、车脸的外形、商标、广告以及车牌号,和,包括车身的反光条、条纹、篷布、栅栏、集装箱、敞篷、商标、广告、车轮数以及车轴数。
3.根据权利要求2所述的方法,其特征在于,将所述第一车辆的所述第一特征信息和所述第二特征信息进行比对,包括:
将所述第一车辆的特征信息中任一特征进行对比;
将任一特征中第一特征的所述比对结果与预设第一特征阈值进行比较;
若所述比较结果大于或等于所述预设第一特征阈值,则所述服务器将所述第一车辆登记到重点车辆管理名单,并发出告警信息。
4.根据权利要求1或3任一项所述的方法,其特征在于,所述服务器将所述第一车辆登记到重点车辆管理名单,并发出告警信息,包括:
所述服务器将所述告警信息发送给自身的告警设备;和/或
所述服务器将所述告警信息发送给其他的车辆特征监控平台,以便于提醒其他车辆特征监控平台。
5.一种车辆特征识别的系统,所述系统包括服务器以及至少两个摄像机,所述至少两个摄像机为第一摄像机和第二摄像机;其中,
所述第一摄像机,用于在高速公路服务区入口,采集至少一个车辆的第一图像信息;其中,所述第一图像信息包括所述至少一个车辆的车头图像、车尾图像以及车侧图像;
所述第一摄像机,还用于分析所述第一图像信息,得到所述至少一个车辆的第一特征信息;
所述第一摄像机,还用于将所述第一图像信息和所述第一特征信息上传给服务器;
所述第二摄像机,用于在高速公路服务区出口,采集所述至少一个车辆的第二图像信息;其中,所述第二图像信息包括所述至少一个车辆的车头图像、车尾图像以及车侧图像;
所述第二摄像机,还用于分析所述第二图像信息,得到所述至少一个车辆的第二特征信息;
所述第二摄像机,还用于将所述第二图像信息和所述第二特征信息上传给所述服务器;
所述服务器,用于检索所述至少一个车辆中第一车辆的车牌号码,将所述第一车辆的所述第一特征信息和所述第二特征信息进行比对;
所述服务器,还用于若所述第一车辆的所述第一特征信息与所述第二特征信息不匹配,则将所述第一车辆登记到重点车辆管理名单,并发出告警信息。
6.根据权利要求5所述的系统,其特征在于,所述第一特征信息或所述第二特征信息,包括车头的颜色、车脸的外形、商标、广告以及车牌号,和,包括车身的反光条、条纹、篷布、栅栏、集装箱、敞篷、商标、广告、车轮数以及车轴数。
7.根据权利要求6所述的系统,其特征在于,所述服务器将所述第一车辆的所述第一特征信息和所述第二特征信息进行比对,包括:
所述服务器将所述第一车辆的特征信息中任一特征进行对比;
所述服务器将任一特征中第一特征的所述比对结果与预设第一特征阈值进行比较;
若所述比较结果大于或等于所述预设第一特征阈值,则所述服务器将所述第一车辆登记到重点车辆管理名单,并发出告警信息。
8.根据权利要求5或7任一项所述的系统,其特征在于,所述服务器将所述第一车辆登记到重点车辆管理名单,并发出告警信息,包括:
所述服务器将所述告警信息发送给自身的告警设备;和/或
所述服务器将所述告警信息发送给其他的车辆特征监控平台,以便于提醒其他车辆特征监控平台。

一种车辆特征识别的方法及系统.pdf

本公开涉及车型识别,尤其涉及一种车型识别方法、装置和系统。一种车型识别方法,包括:获取车辆的车头图像、车身图像和车尾图像;获取车辆的宽高长数据;所述宽高长数据包括第一宽高数据、第二宽高数据、第三宽高数据;获取车辆的车型数据;所述车型数据包括车型信息、车轴信息;整合所述宽高长数据和所述车型数据,输出车型识别数据。在得到车头图像、车身图像、车尾图像后,通过进行车牌检测,进而根据车牌图像尺寸以及车牌物理尺寸得到第一比例系数,进而得到精准的车头的第一宽高数据、车尾的第二宽高数据、车身的第三宽高数据,同时对车型以及车轴类型进行精准识别,能够准确得到经过车辆的车型识别数据,提高识别准确度。

一种车型识别方法,其特征在于,包括:
获取车辆的车头图像、车身图像和车尾图像;
获取车辆的宽高长数据;所述宽高长数据包括第一宽高数据、第二宽高数据、第三宽高数据;其中,对所述车头图像和所述车尾图像进行车牌检测,得到车牌图像尺寸与车牌物理尺寸之间的第一比例系数,进而根据车头图像尺寸、车尾图像尺寸分别得到车头的第一宽高数据和车尾的第二宽高数据;将车头图像和/或车尾图像与所述车身图像进行特征值提取与匹配,根据所述第一比例系数和车身图像尺寸得到车身的第三宽高数据;
获取车辆的车型数据;所述车型数据包括车型信息、车轴信息;其中,通过第一识别模型对所述车头图像进行识别得到所述车型信息;通过第二识别模型对所述车身图像进行识别得到所述车轴信息;
整合所述宽高长数据和所述车型数据,输出车型识别数据。
根据权利要求1所述的车型识别方法,其特征在于,所述第一宽高数据或所述第二宽高的获取步骤包括:
通过第三识别模型对第一图像进行车牌图像识别,得到车牌位置数据和车牌类型数据;所述第一图像为所述车头图像或所述车尾图像;
通过仿射变换将车牌图像的宽高比调整为与对应车牌类型的实际物理宽高比相同,并基于相同的调整比例同步调整所述第一图像的宽高比得到第一调整图像;
获取车牌图像的图像尺寸与车牌的物理尺寸之间的第一比例系数;
获取第一调整图像的图像尺寸,基于所述第一比例系数得到第一宽高数据或第二宽高数据。
根据权利要求2所述的车型识别方法,其特征在于,获取所述比例系数具体包括:
获取车牌图像中每个字符的字符图像尺寸;
根据车牌的字符物理尺寸,得到所述第一比例系数。
根据权利要求2所述的车型识别方法,其特征在于,所述第三宽高数据的获取步骤为:
获取第一调整图像和车身图像的特征匹配点,进而得到对应的第二比例系数;
根据所述第二比例系数将所述车身图像进行归一化处理,得到第一归一化图像;
获取所述第一归一化图像的图像尺寸,基于所述第一比例系数得到第三宽高数据。
根据权利要求2所述的车型识别方法,其特征在于,所述第一调整图像包括车头调整图像和车尾调整图像;
所述第三宽高数据的获取步骤为:
获取车头调整图像和车身图像的特征匹配点,进而得到对应的第三比例系数;
根据所述第三比例系数将所述车身图像进行归一化处理,得到第二归一化图像;
获取车尾调整图像和车身图像的特征匹配点,进而得到对应的第四比例系数;
根据所述第四比例系数将所述车身图像进行归一化处理,得到第三归一化图像;
获取所述第二归一化图像的图像尺寸,基于所述第一比例系数得到第一车身宽高数据;
获取所述第三归一化图像的图像尺寸,基于所述第一比例系数得到第二车身宽高数据;
基于所述第一车身宽高数据和第二车身宽高数据进行加权计算,得到所述第三宽高数据。
根据权利要求2所述的车型识别方法,其特征在于,所述车轴信息包括车轴数、车轴类型;
所述车型识别数据还包括:所述车头图像、所述车身图像、所述车尾图像、车牌类型数据。
根据权利要求1所述的车型识别方法,其特征在于,所述车头图像或所述车尾图像获取步骤包括:
获取第二图像,使用第四识别模型对第二图像进行车头或车尾识别,得到粗略矩形框位置信息;所述第二图像为具有车头特征或车尾特征的图像;
对所述粗略矩形框进行图像边缘检测,得到车头图像或车尾图像。
根据权利要求1所述的车型识别方法,其特征在于,所述车身图像的获取步骤包括:
获取连续生成的多帧第三图像;所述第三图像为具有车身特征的图像;
计算毎帧所述第三图像的特征向量,并分别计算与前一帧所述第三图像的匹配相似度,进而得到对应的偏移量;
将多帧所述第三图像根据对应所述偏移量进行平移变换拼接,得到所述车身图像。
一种车型识别装置,其特征在于,包括:
获取模块,用于获取车辆的车头图像、车身图像和车尾图像;
处理模块,用于获取车辆的宽高长数据;所述宽高长数据包括第一宽高数据、第二宽高数据、第三宽高数据;其中,对所述车头图像和所述车尾图像进行车牌检测,得到车牌图像尺寸与车牌物理尺寸之间的第一比例系数,进而根据车头图像尺寸、车尾图像尺寸分别得到车头的第一宽高数据和车尾的第二宽高数据;将车头图像和/或车尾图像与所述车身图像进行特征值提取与匹配,根据所述第一比例系数和车身图像尺寸得到车身的第三宽高数据;获取车辆的车型数据;所述车型数据包括车型信息、车轴信息;其中,通过第一识别模型对所述车头图像进行识别得到所述车型信息;通过第二识别模型对所述车身图像进行识别得到所述车轴信息;整合所述宽高长数据和所述车型数据,输出车型识别数据。
一种车型识别系统,其特征在于,包括:
多目摄像机,具有多个朝向不同的摄像头;
车型识别装置,与所述多目摄像机连接,用于接收多个摄像头传输的图像,进而得到车辆的车头图像、车身图像和车尾图像;并获取车辆的宽高长数据;所述宽高长数据包括第一宽高数据、第二宽高数据、第三宽高数据;其中,对所述车头图像和所述车尾图像进行车牌检测,得到车牌图像尺寸与车牌物理尺寸之间的第一比例系数,进而根据车头图像尺寸、车尾图像尺寸分别得到车头的第一宽高数据和车尾的第二宽高数据;将车头图像和/或车尾图像与所述车身图像进行特征值提取与匹配,根据所述第一比例系数和车身图像尺寸得到车身的第三宽高数据;获取车辆的车型数据;所述车型数据包括车型信息、车轴信息;其中,通过第一识别模型对所述车头图像进行识别得到所述车型信息;通过第二识别模型对所述车身图像进行识别得到所述车轴信息;整合所述宽高长数据和所述车型数据,输出车型识别数据。

一种车型识别方法、装置和系统.pdf

利用余弦距离计算图像特征之间的相似度(c++代码实现)
1.利用opencv提取hog特征,然后使用hog特征的特征描述子进行两张图像之间的相似度计算

float* get_hog_feature(cv::Mat img)
{


cv::HOGDescriptor hog = cv::HOGDescriptor(cvSize(20, 20), cvSize(10, 10), cvSize(5, 5), cvSize(5, 5), 9);
cv::resize(img, img, cv::Size(30, 30), (0, 0), (0, 0), cv::INTER_LINEAR);
std::vector<float> descriptors;
// float *descriptors;
hog.compute(img, descriptors, cv::Size(20, 20), cv::Size(0, 0));
float *feature_float = (float*)malloc(descriptors.size() * sizeof(float));
assert(feature_float);
for (int i = 0; i < 128; i++)
{
    feature_float[i] = descriptors[i * 2];
}

return feature_float;

}

bool getRectsHogFeature(const cv::Mat& img, DETECTIONS& d)
{

std::vector<cv::Mat> mats;
int feature_dim = 128;
for (DETECTION_ROW& dbox : d)
{
    cv::Rect rc = cv::Rect(int(dbox.tlwh(0)), int(dbox.tlwh(1)), int(dbox.tlwh(2)), int(dbox.tlwh(3)));
    rc.x = (rc.x >= 0 ? rc.x : 0);
    rc.y = (rc.y >= 0 ? rc.y : 0);
    rc.width = (rc.x + rc.width <= img.cols ? rc.width : (img.cols - rc.x));
    rc.height = (rc.y + rc.height <= img.rows ? rc.height : (img.rows - rc.y));
    cv::Mat mattmp = img(rc).clone();
    //cv::resize(mattmp, mattmp, cv::Size(64, 128));
    
    float *feature_float = get_hog_feature(mattmp);

    for (int i=0;i<feature_dim;i++)
    {
        dbox.feature[i] = feature_float[i];
    }
    
}
return true;

}

利用HOG特征比较两幅图像的相似度

opencv PAI:

CV_WRAP HOGDescriptor(Size _winSize, Size _blockSize, Size _blockStride,

              Size _cellSize, int _nbins, int _derivAperture=1, double _winSigma=-1,
              int _histogramNormType=HOGDescriptor::L2Hys,
              double _L2HysThreshold=0.2, bool _gammaCorrection=false,
              int _nlevels=HOGDescriptor::DEFAULT_NLEVELS, bool _signedGradient=false)
#include<iostream>
#include<vector>
#include "string"
#include "algorithm"
#include"opencv2/opencv.hpp"
 
void GetHOGHistogram(cv::Mat img,std::vector<float>&descriptors)//取得图像img的HOG特征向量
{
    cv::HOGDescriptor *hog=new cv::HOGDescriptor(cvSize(64,128),cvSize(32,32),cvSize(8,8),cvSize(16,16),9);
    hog->compute(img,descriptors,cv::Size(8,8), cv::Size(0,0));
}
int main()
{
    std::string imgDir01 = "/home/.../images/personTestImage/2021-05-14_15-21-06.jpg";
    std::string imgDir02 = "/home/.../images/personTestImage/2021-05-14_15-21-09.jpg";
 
    cv::Mat src01 = cv::imread(imgDir01, 0);
    std::cout<<"src01.size(x,y):"<<src01.cols<<" "<<src01.rows<<std::endl;
    int width=src01.cols;
    int height=src01.rows;
    cv::Mat src02 = cv::imread(imgDir02, 0);
 
    std::cout<<"src02.size(x,y):"<<src02.cols<<" "<<src02.rows<<std::endl;
    cv::Size size=cv::Size(width,height);
    cv::resize(src02, src02,size);
 
    std::vector<float> hogDesc01(0);
    std::vector<float> hogDesc02(0);
    GetHOGHistogram(src01, hogDesc01);
    GetHOGHistogram(src02, hogDesc02);
    std::cout<<hogDesc01.size()<<" "<<hogDesc02.size()<< std::endl;
#if 0
    //欧式距离
    float sum=0;
 
    for (auto i = 0; i < hogDesc01.size(); i++)
    {
        sum+=(hogDesc01[i]-hogDesc02[i])*(hogDesc01[i]-hogDesc02[i]);
    }
 
    sum=std::sqrt(sum);
    std::cout<<sum<<std::endl;
#else
    //余弦距离计算
    assert(hogDesc01.size()==hogDesc02.size());
    float product=0;
    float amp01=0,amp02=0;
    for(size_t i=0;i<hogDesc01.size();i++)
    {
        product+=hogDesc01[i]*hogDesc02[i];
        amp01+=pow(hogDesc01[i],2);
        amp02+=pow(hogDesc02[i],2);
    }
 
    float correlation=product/(sqrt(amp01)* sqrt(amp02));
    std::cout<<correlation<<std::endl;
#endif
 
 
    return 0;
}