初步先这样,之后有时间再慢慢改
文章目录
一、环境配置
1、安装pycharm
参考:
安装教程
2、安装miniconda
Miniconda下载网址:
https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/
选上面那个版本下载,双击安装,尽量在C盘,其他盘也可以,路径不要出现非英文和空格。
最后安装完成,点击Finsh。
打开cmd输入下面命令,创建一个名字为yolov5的环境,python版本是3.8,回车:
conda create -n yolov5 python=3.8
等待一会儿,提示需要安装一些包,输入“y”再回车
环境创建完毕,然后激活环境(每次进cmd都要先激活),接下来的pip安装都在环境中进行,输入以下命令再回车:
conda activate yolov5
补充:
查看现在已经安装的所有环境。
conda env list
删除这个环境
conda remove --name 环境名 --all
3、PYPI镜像源
激活完成(先别关闭cmd),下面配置一个国内的PYPI镜像,以便于后续下载python的一些包。PYPI镜像安装帮助:
https://mirrors.tuna.tsinghua.edu.cn/help/pypi/
这里我们选取上面安装帮助的这段代码:(输入到cmd)
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
4、Pytorch框架
YOLOv5是基于PyTorch框架开发的,安装PyTorch是为了更好地运行YOLOv5算法。PyTorch提供了丰富的功能和API,使得训练和推理深度学习模型变得更加简单和高效。
Pytorch官网:https://pytorch.org/
YOLOv5用不到这么高的版本,点击下面的“Previous version of Pytorch”
这里选择1.8.2版本Wheel里面的pip安装方法(不推荐conda install的安装形式)。
注:如果只有CPU就选择第三个,有10和20系列显卡的选第一个,有30系列显卡选第二个(具体什么型号的显卡对应第1个还是第2个一定要实现调查清楚)
将对应的安装命令输入到cmd,这里选择的是CUDA 10.2
# CUDA 10.2
pip3 install torch==1.8.2 torchvision==0.9.2 torchaudio==0.8.2 --extra-index-url https://download.pytorch.org/whl/lts/1.8/cu102
# CUDA 11.1
pip3 install torch==1.8.2 torchvision==0.9.2 torchaudio==0.8.2 --extra-index-url https://download.pytorch.org/whl/lts/1.8/cu111
# CPU Only
pip3 install torch==1.8.2 torchvision==0.9.2 torchaudio==0.8.2 --extra-index-url https://download.pytorch.org/whl/lts/1.8/cpu
5、YOLOv5检测算法
YOLOv5官方github:https://github.com/ultralytics/yolov5
点进右边Releases的v7.0-YOLOV5版本,下滑下载Source code(zip),可以解压到桌面,打开里面的requairments记事本文件。修改numpy和pillow的版本(更改时要用英文),并注释掉torch和torchvision(因为之前已经安装了符合要求的版本,自动安装可能会默认成cpu版本),保存txt记事本。
下面在cmd安装该requirements文件。首先进入该文件夹所创建的环境(一定要保证环境是激活状态即前面有环境名yolov5)
pip install -r requirements.txt
安装完成,到这里基本可以认为环境配置完成。
注:可以在官网下载weights模型文件
yolov5s.pt
yolov5l.pt
yolov5x.pt
yolov5n.pt
yolov5m.pt等
二、Pyside6 UI设计
1、准备工作
pip install pyside6
miniconda/envs/(环境名)/Lib/site-packages/PySide6
找到designer.exe并运行,可以发送快捷方式到桌面以方便打开。
2、设计工作
①创建一个Main Window
②利用左侧的Label,创建两个图片显示框,一个显示原图片/视频,另一个显示检测结果(可自行设计)
③用到左侧的Push Button来充当功能按钮
文字位置等可在右侧属性编辑器中更改居中,图片和检测结果框需选中scaledContents勾选,因为实际图片的尺寸是不确定的。
设计布局:
如此UI设计结束,将其保存在我们的yolov5-7.0文件夹中,.ui文件命名为main_window
再ui文件转py文件:
pyside6-uic main_window.ui -o main_window.py
三、接入蜂鸣器
pip install pyserial
串口通信:
def control(self, obj_name):
print(obj_name)
if not self.serial_thread.isRunning():
self.serial_thread.start() # 启动线程
if obj_name == 'lacks':
self.serial_thread.write('0'.encode('utf-8'))
print("Sent '0' to Arduino")
elif obj_name == 'good':
self.serial_thread.write('1'.encode('utf-8'))
print("Sent '1' to Arduino")
串口线程:
class SerialCommunicationThread(QThread):
data_received = Signal(str)
def __init__(self, port, baudrate):
super().__init__()
self.port = port
self.baudrate = baudrate
self.running = False
self.serial = None
self.serial = serial.Serial(port=self.port, baudrate=self.baudrate, timeout=2)
def run(self):
self.running = True
while self.running:
data = self.serial.readline().decode('utf-8').strip()
if data:
self.data_received.emit(data)
self.serial.close()
def write(self, data):
if self.serial.isOpen():
self.serial.write(data)
def stop(self):
self.running = False
if self.serial and self.serial.isOpen():
self.serial.close()
self.wait()
arduino代码:
// 定义蜂鸣器连接的引脚
const int buzzerPin = 13;
void setup()
{
pinMode(buzzerPin, OUTPUT); // 设置蜂鸣器引脚为输出模式
Serial.begin(9600); // 启动串行通信,设置波特率
digitalWrite(buzzerPin, LOW);
}
void loop()
{
if(Serial.available() > 0){ // 检查是否有数据可读
int a = Serial.parseInt(); // 读取解析的整数值
Serial.flush(); // 清空串口缓冲区,防止读取错误
if(a == 0){ // 如果收到信号0
Serial.println("收到来自Python的信号0");
digitalWrite(buzzerPin, HIGH);
delay(2000);
digitalWrite(buzzerPin, LOW); // 关闭蜂鸣器
}
else if(a == 1){ // 如果收到信号1
Serial.println("收到来自Python的信号1");
digitalWrite(buzzerPin, LOW);
}
// 默认情况下,不改变蜂鸣器状态(即保持关闭)
}
}
总结
本文设计并实现了训练好的YOLOv5模型检测到特定标签时,与arduino进行通信,从而触发蜂鸣器进行报警处理。