车牌号检测数据集 7800张 车牌识别 带标注 voc yolo
车牌号检测数据集 7800张 车牌识别 带标注 voc yolo
构建一个基于YOLOv8的车牌号检测系统,并使用PyQt5设计一个简洁的UI界面。这个系统将支持视频文件、图片文件的检测以及实时摄像头检测。我们还将使用已标注的数据集进行模型训练。
数据集准备
假设你已经有了一个包含7800张已标注图片的数据集,数据集结构如下:
license_plate_dataset/ │ ├── images/ │ ├── train/ │ ├── val/ │ └── test/ │ ├── labels/ │ ├── train/ │ ├── val/ │ └── test/ │ └── data.yaml数据集标注
确保你的数据集已经标注,并且标注文件是YOLO格式的。每个标注文件包含以下格式:
# Example YOLO format label file 0 0.5 0.5 0.1 0.1 # Class ID, x_center, y_center, width, height 1 0.6 0.6 0.1 0.1 # Class ID, x_center, y_center, width, height数据配置文件 (data.yaml)
创建一个data.yaml文件,用于配置数据集:
train:./license_plate_dataset/images/trainval:./license_plate_dataset/images/valtest:./license_plate_dataset/images/testnc:70# 类别数量(70类)names:['plate','粵','Z','Y','G','W','P','澳','M','R','J','H','藏','F','X','N','E','U','辽','皖','闽','青','云','冀','新','苏','晋','贵','川','蒙','吉','浙','B','T','8','3','港','L','S','5','0','A','7','1','警','9','2','豫','V','6','Q','4','C','鲁','D','K','沪','湘','京','津','桂','琼','赣','渝','鄂','陕','黑','宁','甘','学']# 类别名称YOLOv8模型训练
使用以下命令训练模型:
python train.py--data./license_plate_dataset/data.yaml--img640--batch16--epochs100--nameyolov8_license_plate--weightsyolov8n.ptUI界面设计
使用PyQt5设计一个简洁的UI界面。
importsysimportcv2importnumpyasnpfromPyQt5.QtWidgetsimportQApplication,QMainWindow,QLabel,QPushButton,QVBoxLayout,QWidget,QFileDialogfromPyQt5.QtGuiimportQImage,QPixmapfromPyQt5.QtCoreimportQTimerfromultralyticsimportYOLOclassMainWindow(QMainWindow):def__init__(self):super().__init__()self.setWindowTitle("License Plate Detection")self.setGeometry(100,100,800,600)self.central_widget=QWidget(self)self.setCentralWidget(self.central_widget)self.layout=QVBoxLayout(self.central_widget)self.image_label=QLabel(self)self.layout.addWidget(self.image_label)self.detect_button=QPushButton("Detect from Camera",self)self.detect_button.clicked.connect(self.start_camera)self.layout.addWidget(self.detect_button)self.file_button=QPushButton("Load Image/Video",self)self.file_button.clicked.connect(self.load_file)self.layout.addWidget(self.file_button)self.yolov8_model=YOLO('runs/train/yolov8_license_plate/weights/best.pt')self.cap=Noneself.timer=QTimer(self)self.timer.timeout.connect(self.update_frame)defstart_camera(self):self.cap=cv2.VideoCapture(0)self.timer.start(30)defload_file(self):file_dialog=QFileDialog()file_path,_=file_dialog.getOpenFileName(self,"Open File","","Images (*.png *.jpg *.jpeg);;Videos (*.mp4 *.avi)")iffile_path:self.cap=cv2.VideoCapture(file_path)self.timer.start(30)defupdate_frame(self):ret,frame=self.cap.read()ifret:frame=cv2.cvtColor(frame,cv2.COLOR_BGR2RGB)results=self.yolov8_model(frame)forresultinresults:boxes=result.boxesforboxinboxes:x1,y1,x2,y2=box.xyxy[0].tolist()cv2.rectangle(frame,(int(x1),int(y1)),(int(x2),int(y2)),(0,255,0),2)label=box.cls[0].item()cv2.putText(frame,self.yolov8_model.names[int(label)],(int(x1),int(y1)-10),cv2.FONT_HERSHEY_SIMPLEX,0.9,(0,255,0),2)qimage=QImage(frame.data,frame.shape[1],frame.shape[0],QImage.Format_RGB888)pixmap=QPixmap.fromImage(qimage)self.image_label.setPixmap(pixmap)defcloseEvent(self,event):ifself.cap:self.cap.release()self.timer.stop()event.accept()if__name__=="__main__":app=QApplication(sys.argv)window=MainWindow()window.show()sys.exit(app.exec_())说明
- UI界面:使用PyQt5设计了一个简单的界面,包含一个图像标签和两个按钮(检测摄像头、加载文件)。
- YOLOv8车牌号检测:使用YOLOv8进行车牌号检测,并在检测到的目标区域上绘制矩形框。
- 实时摄像头检测:使用OpenCV进行实时摄像头检测,并在UI界面上显示检测结果。
- 模型替换:你可以通过修改
self.yolov8_model = YOLO('path_to_your_model.pt')来更换自己训练的YOLOv8模型。
总结
通过上述步骤,你可以构建一个基于YOLOv8的车牌号检测系统,包括UI界面设计、实时摄像头检测、模型训练以及整体代码实现。
