目录
3,后端flask调用yolov5生成的模型来识别是否带了安全帽
1,在hai申请一个pytorch环境
1.1点击链接进入 高性能应用服务 HAI 申请体验资格
1.2 用hai新建一个pytorch的环境
按照下面的步骤新建pytorch环境
2,安装人工智能应用yolov5,并且训练安全帽识别模型
hai有时候访问github还是会卡住,所以我把所有的资料都放到了百度网盘,包括四个资料,标注工具(labelimg.zip),已经标注好的图片和数据(safthat.zip),yolov5-7.0的源码(yolov5.zip),yolov5-flask的源码(yolov5-flask.zip)
百度网盘链接:https://pan.baidu.com/s/1Lo-ri2J3gcGUTFPTs-kkTQ
提取码:ddjj
2.1,准备数据和标注数据
可以直接使用我提供的数据集
如果要自定义准备数据集,就根据下面的流程准备自定义的数据:
2.1.1 下载标注工具
labelimg:注意这个标注工具是qt写的,要放在全英文的路径下面,否则会闪退。
2.1.2 下载数据集
2.1.3 进行数据清理和数据标注
修改配置文件predefined_classes.txt,这是是我想识别的类型
safehat
no-safehat
标注图片的步骤
2.1.4 添加配置文件data.yaml
train: ../safehat/train/images
val: ../safehat/test/images
nc: 2
names: ['safehat', 'no-safehat']
到此,数据集准备完毕
2.2,为yolov5创建一个conda环境
进入cmd,执行更新的命令
apt-get update
apt-get upgrade
创建环境:
conda create --name yolov5 python=3.10
激活环境:
conda activate yolov5
上传图片数据到root目录,并解压
unzip safehat.zip
unzip yolov5.zip
2.3 安装yolov5,
进入yolov5,安装依赖
cd yolov5
pip install -r requirements.txt
2.4 修改配置,训练模型
2.4.1 修改配置文件
打开/root/yolov5/models/yolov5s.yaml,nc的值这里修改为2。注:其中nc代表类别,分别代表带安全帽,没带安全帽。
2.4.2 训练模型
python train.py --data ../safehat/data.yaml --epochs 300 --weights '' --cfg models/yolov5s.yaml --batch-size 64
程序开始运行了,这里比较耗时,我数据集不多,运行了十几分钟。
运行完毕,在/root/yolov5/runs/train/exp/weights下生成模型best.pt,这个模型等会被web应用中调用
2.4.3 结果检测
python detect.py --weight runs/train/exp/weights/best.pt --source ../safehat/test/images/001000.jpg
运行完毕,在/root/yolov5/runs/detect/exp下生成图片
2.4.4 性能检测
python val.py --weights runs/train/exp/weights/best.pt --data ../safehat/data.yaml --half
运行完毕,在/root/yolov5/runs/val/exp下生成性能结果,如图所示safehat的分数较高.0.891可以接受,no-safehat的分数较低,说明这个数据集应该多添加一些没有戴安全帽的图片进行训练。
3,后端flask调用yolov5生成的模型来识别是否带了安全帽
3.1为yolov5-flask创建环境:
conda create --name yolov5-flask python=3.8
激活环境:
conda activate yolov5-flask
3.2 安装yolov5-flask及其依赖
上传项目yolov5-flask.zip到root文件夹,并解压
unzip yolov5-flask.zip
进入yolov5-flask,
cd yolov5-flask
把刚刚训练好的best.pt模型拷贝到当前目录,名字改为yolov5s.pt
安装一下依赖
pip install -r requirements.txt
apt-get install libgl1-mesa-glx
3.3 核心代码分析
这里主要就是读取上传的图片,对图片进行分析和渲染,把新的图片渲染到网页上。实际上会把这些值渲染到图片内存中,class类型,confidence自信度,name名字,xmax,xmin,ymax,ymin
@app.route("/", methods=["GET", "POST"])
def predict():
if request.method == "POST":
if "file" not in request.files:
return redirect(request.url)
file = request.files["file"]
if not file:
return
img_bytes = file.read()
img = Image.open(io.BytesIO(img_bytes))
results = model([img]) # 核心代码
results.render() # 核心代码,把红色的框和提示词都渲染图片中
now_time = datetime.datetime.now().strftime(DATETIME_FORMAT)
img_savename = f"static/{now_time}.png"
Image.fromarray(results.ims[0]).save(img_savename)
return redirect(img_savename)
return render_template("index.html")
3.4 运行web应用
为web应用,打开5000端口。
运行web应用
python webapp.py --port 5000
打开网页,上传测试图片,出结果。
4,总结。
人工智能的浪潮来了,我最初接触YOLO(You Only Look Once)是在Stable Diffusion Web UI中,它能够自动选中人物的脸部和手部,并重新渲染图像,给我留下了深刻的印象。然而,当时我仅停留在感官上的认识,并未深入了解。最近,上饶市创新创业产业孵化中心作为“一站式创业创新培育孵化平台”,具体承办了2023年上饶市首届人工智能大赛,我借此机会深入学习了YOLOv5,并将其部署到了腾讯的高性能应用服务HAI上进行实践,最终取得了完美的结果,感谢他们的付出!!!!
这次是我第一次摸索着做一个人工智能的应用,并且做了工人戴安全帽检测的web应用。我深刻感受到了腾讯云HAl在大模型应用部署方面的便捷,它无需手动部署,支持即开即用,支持可视化界面一键登录,方便调优。!
总而言之,腾讯云HAl这次给我的体验非常良好,后续会考虑探索腾讯云HAl更多的功能,为工作进行赋能~