基于Yolov5的入门车辆识别
环境部署
ANACONDA环境
Anaconda官网下载:https://www.anaconda.com/download/
进入会显示需要注册,直接跳过即可
选择对应的系统版本下载
安装
注意选择安装位置(建议不要安装在C盘)
没什么其他特别选项,直接安装即可
安装完成后使用win+r
输入cmd
打开命令行,输入conda --version
命令
如果成功获取到了版本,说明安装成功
如果提示找不到conda
命令,说明环境变量没有配置成功,手动配置一下即可
windows左下角搜索环境变量
找到系统变量中的Path
打开-新建-输入安装目录下的condabin
目录
注意:是包含conda.bat
的目录
然后确认
再win+r
重新打开一个新的命令行窗口,输入conda --version
命令
应当是能获取到对应安装的版本
至此Anaconda
环境配置完成
使用Anaconda创建虚拟环境
这里都是命令行操作
- 创建环境
这里的yolov5
是自定义的命名
conda create -n yolov5
- 激活环境
conda activate yolov5
安装PyTorch
- CPU版本:
conda install pytorch torchvision torchaudio cpuonly -c pytorch
- GPU版本:通常AMD显卡不支持
conda install pytorch torchvision cudatoolkit=11.3 -c pytorch
Yolov5安装
源码地址:https://github.com/ultralytics/yolov5
- 通过
Git
命令克隆到本地
创建好对应文件夹位置作为本地仓库,右键打开Git命令行
执行克隆命令
git clone https://github.com/ultralytics/yolov5
如下表示克隆完成
- 不会使用
Git
,可以在Github直接下载源码
下载解压后,与使用Git
类似
安装依赖库
先把命令行的位置移动到对应的目录下
注意:这个目录是解压之后打开的目录
D:
cd D:\Code\Python\yolov5
执行安装依赖的操作
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
命令中https://pypi.tuna.tsinghua.edu.cn/simple
是清华镜像,国内从镜像下载速度提升
测试运行
python detect.py --weights yolov5s.pt --source data/images/bus.jpg
这里使用的是yolov5s
模型,第一次运行如果没有会自动下载
data/images/bus.jpg
图片时yolov5
源码文件中自带的测试图片
出现如上输出信息说明测试成功,可以在对应的run
目录下找到输出的图片
Pycharm中配置Yolov5
新建项目
创建完成后,将Yolov5
的源码复制到项目中(文件夹的形式)
创建一个src
目录,用来区分自己的代码
右键yolov5
目录,将其作为源码目录
打开File
-Settings
找到项目再找到Python解释器点击齿轮
选择Add
添加AConda环境
选择已存在的环境,找到在配置Aconda环境时创建的yolov5
虚拟环境目录,选择其中的python.exe
添加完成后,注意Python解释器是否已经替换成新增的这个,如果没有手动替换一下,然后应用保存
打开src
目录下自己的Python
文件,重新再打开Python解释器界面又变回了非Aconda的环境,手动替换一下(Pycharm的Bug)
至此Pycharm环境配置完成
Pytharm中运行
使用这样一张图来进行测试
结合OpenCV识别车辆
import torch
import cv2model = torch.hub.load('./yolov5', 'yolov5s', source='local', pretrained=True) # 从本地加载
img = cv2.imread("E:\\test\\testImg\\cars.jpg")
# 模型推理
results = model(img)
for pred in results.pred[0]:x1, y1, x2, y2, conf, cls = pred.tolist()class_name = model.names[int(cls)]# 输出结果print(f"检测到:{class_name}, 置信度:{conf:.2f}")cv2.rectangle(img, (int(x1), int(y1)), (int(x2), int(y2)), (0, 255, 0), 2)cv2.putText(img, f"{class_name} {conf:.2f}", (int(x1), int(y1) - 10),cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2)# 显示或保存结果
cv2.imshow('Result', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
运行结果