?女神说要来我家吹空调?
我揉了揉惺忪的双眼,反复确认了多遍,嗯,没有看错!
为了给女神一个好的印象,我打算提前打开空调让室内降到一个舒适的温度;可猛然间发现空调遥控器找不见了!
这可怎么办?我急中生智:可以用 Yolov5 训练个空调遥控器目标识别模型并调用手机摄像头找找看嘛!
事不宜迟,开整!
目录
1 万事大吉
1.1 数据集准备
1.2 标注数据集
1.3 训练模型
2 别高兴得太早
2.1 调用人家训练好的模型
3 大功告成
3.1 调用手机摄像头找遥控器
训练一个模型, 首先要准备一定量的数据集,如果一张一张从网上下载的话太费时间,没等收集完照片女神早就来了,那时还没找到空调遥控器的话不太好,于是我打算用 python 爬虫技术来快速完成这一步操作!
读者若有对爬虫的学习需求可以点击下方链接参考我的 python 爬虫专栏:
Python 网络数据爬取及分析「从入门到精通」
我决定就对百度图片库中的 “空调遥控器” 相关图片进行爬取,今天是七夕,就爬 520 张吧。
百度图片库 “空调遥控器” 相关图片爬取代码如下:
#!/usr/bin/python
# -*- coding:utf-8 -*-
import re
import requests
word = "空调遥控器"
url = 'https://image.baidu.com/search/flip?tn=baiduimage&ie=utf-8&word=' + word + '&pn='
numPicture = 520
file = 'E:/images'
t, num = 0, 0
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36'
}
response = requests.Session()
response.headers = headers
while t <= numPicture:
url = url + str(t)
html = response.get(url, timeout=10, allow_redirects=False)
pic_urls = re.findall('"objURL":"(.*?)",', html.text, re.S)
for pic_url in pic_urls:
print('Download 第' + str(num) + '张图片,图片 url:' + str(pic_url))
string = file + r'\\' + word + '+' + str(num) + '.jpg'
local_path = open(string, 'wb')
photo = requests.get(pic_url, timeout=7)
local_path.write(photo.content)
local_path.close()
num += 1
t = t + 52
爬取结果示例:
为了便于下一步框选数据集标签操作,吻合 yolov5 对于数据集图片及对应标签名字必须一致的特点,以及避免因出现中文而报错的隐患,我打算在标注数据集图片之前先进行一下重命名操作:直接按顺序依次重命名为 1.jpg、2.jpg、3.jpg ……
重命名代码如下:
#!/usr/bin/python
# -*- coding:utf-8 -*-
import os
folderpath = r'E:\images'
picsPath = os.listdir(folderpath)
i = 1
for picPath in picsPath:
pass_name = os.path.join(folderpath, picPath)
new_name = os.path.join(folderpath + '/' + str(i) + '.jpg')
os.rename(pass_name, new_name)
print("旧路径:", pass_name," ---> 重命名后路径:", new_name)
i += 1
运行结果展示:
至此,数据集准备工作就告一段落啦!
关于如何制作和训练自己的数据集,我之前也写过相应文章,读者可点击下方链接查看:
GitHub YOLOv5 开源代码项目系列讲解(二)------制作和训练自己的数据集
这一步我按照 Github Yolov5 官网源码指示,选用下面链接网站进行线上数据标注:https://www.makesense.ai/
值得注意的是,yolov5 要求图片与对应标签名称必须一致,且要求必须分别放置到 images 和labels 文件夹中。
而这部分要求,这个线上标注数据的网站就可以帮我们制作好。
因为我要做的是 “空调遥控器” 的目标检测,所以仅设置一个标签:"remote"
注:若设置两个或多个标签,则依次为第 “0" 个"、第 “1” 个,顺序很重要喔。
接再来就是漫长而枯燥的框选目标的过程……
520 张图片终于标完啦,伸个懒腰,把它们对应目标的标签 txt 文件。
至此,枯燥乏味的数据标注工作也结束啦。
在 yolov5-v5.0 目录下新建 mydata 文件夹,并在其中新建 images 文件夹和 labels 文件夹,随后在 images 文件夹和 labels 文件夹下新建 train 文件夹和 test 文件夹。将上几步得到的 label 文件和 image 文件分别传入对应位置。
接下来在开源代码 data 目录下新建 mydata.yaml 文件并键入
值得注意的是,在 train.py 文件的 add_argument 方法中找到 “--data”,并将其设置为上一步新建的 mydata.yaml 文件目录;强烈建议将 “--workers” 值设置为 “0”,避免因多线程问题而报错。
注:train.py 文件的参数作用可点击下面链接参考
GitHub YOLOv5 开源代码项目系列讲解(四)------训练相关参数解释
正在欢天喜地打算庆祝工作做完大半之时,突然想到官网给出的训练模型已经提供了 80 种物体识别实例, 我记得其中有个叫 “remote” 的物体可识别,应该就是遥控器!
于是我果断点了暂停,还好这一想法迸发得早,不然在女神来之前恐怕都训练不完呢!
一拍大腿,都怪我太冲动,仔细想想就不用干那么多无用功了。
接受现实,赶紧数一数 “remote” 在第几类吧,并注意一些重要配置参数待会要进行键入。
注:datect.py 文件的参数作用可点击下面链接参考
GitHub YOLOv5 开源代码项目系列讲解(三)------预测相关参数解释
首先打开手机上的 “IP摄像头” APP。
点击 “打开IP摄像头服务器”。
勾选 “RTSP” 并点击 “分享”。
记下局域网地址
在 GitHub 上就已经提供了连接手机实时检测的代码示例。
打开 PyCharm,在右上角点击 “Edit Configuration”,填入 “Parameters” 值。
--source http://admin:admin@后面紧接局域网地址
如:--source http://admin:admin@192.***.***.***:****
啊这……这结果看得我目瞪口呆:空调遥控器这不在电脑键盘上呢么;可能是想到女神要来我家我激动地脑袋嗡嗡的叭,不然怎么会 “骑着毛驴找毛驴” 呢!
就在这时,门口传来了温柔而轻盈敲门声 ……
版权声明:本文为CSDN博主「荣仔!最靓的仔!」的原创文章,遵循 CC 4.0 BY-SA 版权协议。
转载请在醒目位置附上原文出处链接及本声明。
CSDN博主「荣仔!最靓的仔!」的其他原创专栏链接:
《机器学习》学习笔记专栏:https://blog.csdn.net/it_charge/category_9920949.html
《数字图像处理》学习笔记专栏:https://blog.csdn.net/it_charge/category_9899861.html
《Python网络数据爬取及分析》专栏:https://blog.csdn.net/it_charge/category_10097766.html
《GitHub YOLOv5 开源代码项目系列讲解》专栏:https://blog.csdn.net/it_charge/category_11244228.html
《「深度学习一遍过」必修篇》专栏:https://blog.csdn.net/it_charge/category_11251478.html
《23种设计模式在王者荣耀中的应用》专栏:https://blog.csdn.net/it_charge/category_9842143.html博主B站地址:https://space.bilibili.com/386691571
欢迎大家交流评论,一起学习!
年七夕节于中国大陆 • 重庆