ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

使用YOLOv8在Veri-776车辆重识别 推理识别检测 车辆的品牌、型号、车牌、颜色、年份、时空关系

使用YOLOv8在Veri-776车辆重识别 推理识别检测 车辆的品牌、型号、车牌、颜色、年份、时空关系 使用YOLOv8在Veri-776车辆重识别数据集上进行训练 通过训练的权重推理识别检测 车辆的品牌、型号、车牌、颜色、年份、时空关系文章目录1. 安装 CUDA 驱动2. 安装 Anaconda3. 创建 Python 虚拟环境4. 安装必要的依赖项5. 准备数据6. 使用官方预训练模型7. 训练模型8. 推理代码9. 评估代码✅ 一、系统功能概述 二、环境依赖 三、项目结构 四、Flask 主程序 (app.py)️ 五、前端页面 (templates/index.html) 六、样式文件 (static/css/style.css)数据集描述Veri-776车辆重识别数据集训练集37778测试集11579由776辆汽车的50000张图像组成其中每个ID由2~18个样本组成对车辆的品牌、型号、车牌、颜色、年份、时空关系等都进行了标注。每张图像分辨率为1920*1080。111YOLOv8 对 Veri-776 车辆重识别数据集进行训练、推理和评估我们需要完成一系列步骤包括安装必要的软件、配置环境、准备数据以及编写训练、推理和评估代码。以下是详细的指南1. 安装 CUDA 驱动确保你的系统已经安装了适合你 GPU 的最新版本的 NVIDIA CUDA 驱动程序。你可以从 NVIDIA官网 下载并安装。2. 安装 Anaconda下载并安装最新版本的 Anaconda这是一个开源的Python和R语言的发行版用于大规模数据处理、预测分析和科学计算。3. 创建 Python 虚拟环境打开终端或命令提示符创建一个新的虚拟环境并激活它conda create-nyolov8_veripython3.8-yconda activate yolov8_veri4. 安装必要的依赖项在激活的虚拟环境中安装 PyTorch 和其他必要的库pipinstalltorch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu117 pipinstallultralytics opencv-python matplotlib tqdm注意根据你的CUDA版本调整PyTorch的安装链接。5. 准备数据已经有Veri-776数据集你需要将其组织为YOLOv8可接受的格式。通常需要将图像文件放置在一个文件夹中并创建一个与之对应的标签文件夹其中包含每个图像的标注信息如车辆边界框和类别ID。6. 使用官方预训练模型首先确保你已经克隆了 YOLOv8 的仓库到本地gitclone https://github.com/ultralytics/ultralytics.gitcdultralytics加载官方提供的预训练模型fromultralyticsimportYOLO# 加载预训练模型modelYOLO(yolov8n.pt)# 或者选择其他尺寸的预训练模型7. 训练模型创建一个train.py文件来定义训练过程fromultralyticsimportYOLOdeftrain_yolo():modelYOLO(yolov8n.yaml)# 如果要从头开始训练可以指定yaml配置文件resultsmodel.train(datapath/to/veri776/data.yaml,epochs100,imgsz640)if__name____main__:train_yolo()确保你已经准备好了一个名为data.yaml的文件该文件指定了训练和验证数据集的位置以及类的数量和名称。8. 推理代码创建一个detect.py文件来进行推理fromultralyticsimportYOLOimportcv2defdetect_yolo(image_path):modelYOLO(runs/train/exp/weights/best.pt)# 替换为你的最佳权重路径resultsmodel.predict(sourceimage_path,saveTrue)if__name____main__:detect_yolo(path/to/test/image.jpg)9. 评估代码YOLOv8 提供了内置的评估函数可以直接调用fromultralyticsimportYOLOdefevaluate_yolo():modelYOLO(runs/train/exp/weights/best.pt)# 替换为你的最佳权重路径metricsmodel.val()# 自动对验证集进行评估if__name____main__:evaluate_yolo()根据你已有的训练好的 YOLOv8 权重文件我们可以建立一个完整的车辆识别系统用于识别图像、视频或实时摄像头画面中的车辆并展示检测结果。以下是一个基于 Flask 框架的 Web 识别系统的完整实现方案包括前端页面上传图片/视频后端调用 YOLOv8 模型进行检测显示检测结果图像支持摄像头实时识别可选✅ 一、系统功能概述功能描述图像检测上传图片进行车辆识别视频检测上传视频进行帧级识别实时摄像头检测打开摄像头实时识别检测结果显示显示识别结果图像模型权重加载使用训练好的best.pt文件 二、环境依赖确保你已经安装了以下依赖pipinstallflask opencv-python ultralytics numpy 三、项目结构vehicle_recognition_system/ ├── app.py # Flask 主程序 ├── static/ │ ├── uploads/ # 用户上传的图片/视频 │ ├── detections/ # 检测结果保存路径 │ └── css/ │ └── style.css # 网页样式 ├── templates/ │ └── index.html # 前端页面 └── models/ └── best.pt # 你的训练好的YOLOv8权重文件 四、Flask 主程序 (app.py)fromflaskimportFlask,render_template,request,jsonifyimportcv2fromultralyticsimportYOLOimportnumpyasnpimportos appFlask(__name__)app.config[UPLOAD_FOLDER]static/uploadsapp.config[DETECTION_FOLDER]static/detections# 加载模型modelYOLO(models/best.pt)app.route(/)defindex():returnrender_template(index.html)app.route(/load_model,methods[POST])defload_model():globalmodelreturnjsonify({status:Model loaded})app.route(/detect_image,methods[POST])defdetect_image():iffilenotinrequest.files:returnjsonify({error:No file uploaded})filerequest.files[file]iffile.filename:returnjsonify({error:Empty filename})# 保存原始图像original_pathos.path.join(app.config[UPLOAD_FOLDER],file.filename)file.save(original_path)# 检测图像resultsmodel(original_path)forrinresults:imr.plot()imcv2.cvtColor(im,cv2.COLOR_BGR2RGB)detected_pathos.path.join(app.config[DETECTION_FOLDER],file.filename)cv2.imwrite(detected_path,im)returnjsonify({original:file.filename,detected:file.filename})app.route(/detect_video,methods[POST])defdetect_video():iffilenotinrequest.files:returnjsonify({error:No file uploaded})filerequest.files[file]iffile.filename:returnjsonify({error:Empty filename})# 保存原始视频original_pathos.path.join(app.config[UPLOAD_FOLDER],file.filename)file.save(original_path)capcv2.VideoCapture(original_path)fourcccv2.VideoWriter_fourcc(*mp4v)output_pathos.path.join(app.config[DETECTION_FOLDER],file.filename)outcv2.VideoWriter(output_path,fourcc,20.0,(int(cap.get(3)),int(cap.get(4))))whilecap.isOpened():ret,framecap.read()ifnotret:breakresultsmodel(frame)forrinresults:imr.plot()imcv2.cvtColor(im,cv2.COLOR_BGR2RGB)out.write(im)cap.release()out.release()returnjsonify({original:file.filename,detected:file.filename})app.route(/open_camera,methods[POST])defopen_camera():capcv2.VideoCapture(0)whileTrue:ret,framecap.read()ifnotret:breakresultsmodel(frame)forrinresults:imr.plot()imcv2.cvtColor(im,cv2.COLOR_BGR2RGB)cv2.imshow(Vehicle Detection,im)ifcv2.waitKey(1)ord(q):breakcap.release()cv2.destroyAllWindows()returnjsonify({status:Camera closed})if__name____main__:os.makedirs(app.config[UPLOAD_FOLDER],exist_okTrue)os.makedirs(app.config[DETECTION_FOLDER],exist_okTrue)app.run(debugTrue)️ 五、前端页面 (templates/index.html)!DOCTYPEhtmlhtmllangenheadmetacharsetUTF-8title车辆识别系统/titlelinkrelstylesheethref{{ url_for(static, filenamecss/style.css) }}/headbodydivclasscontainerh1车辆识别系统/h1divclasscontrol-panelh2控制面板/h2buttononclickloadModel()加载模型/buttonbuttononclickuploadImage()图像检测/buttonbuttononclickuploadVideo()视频检测/buttonbuttononclickopenCamera()打开摄像头/buttoninputtypefileidimageInputacceptimage/*onchangedetectImage()hiddeninputtypefileidvideoInputacceptvideo/*onchangedetectVideo()hidden/divdivclassdisplay-areadivclassimage-containerh3原始图像/h3imgidoriginalImagesrcaltOriginal Image/divdivclassimage-containerh3检测图像/h3imgiddetectedImagesrcaltDetected Image/div/div/divscriptfunctionloadModel(){fetch(/load_model,{method:POST}).then(resres.json()).then(console.log);}functionuploadImage(){document.getElementById(imageInput).click();}functiondetectImage(){constfiledocument.getElementById(imageInput).files[0];constformDatanewFormData();formData.append(file,file);fetch(/detect_image,{method:POST,body:formData}).then(resres.json()).then(data{document.getElementById(originalImage).src/static/uploads/data.original;document.getElementById(detectedImage).src/static/detections/data.detected;});}functionuploadVideo(){document.getElementById(videoInput).click();}functiondetectVideo(){constfiledocument.getElementById(videoInput).files[0];constformDatanewFormData();formData.append(file,file);fetch(/detect_video,{method:POST,body:formData}).then(resres.json()).then(data{document.getElementById(originalImage).src/static/uploads/data.original;document.getElementById(detectedImage).src/static/detections/data.detected;});}functionopenCamera(){fetch(/open_camera,{method:POST});}/script/body/html 六、样式文件 (static/css/style.css)body{font-family:Arial,sans-serif;background-color:#f4f4f4;margin:0;padding:0;}.container{width:90%;margin:auto;overflow:hidden;padding:20px;}.control-panel{margin-bottom:20px;}.display-area{display:flex;justify-content:space-around;align-items:center;flex-wrap:wrap;}.image-container{margin:10px;text-align:center;border:1px solid #ccc;padding:10px;background:white;width:40%;}img{max-width:100%;height:auto;}、
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进