基于Yolov5目标检测的物体分类识别及定位(一) -- 数据集原图获取与标注

news2024/11/27 12:56:16

       从本篇博客正式开始深度学习项目的记录,实例代码只会放通用的代码,数据集和训练数据也是不会全部放出。

系列文章:

基于Yolov5目标检测的物体分类识别及定位(一) -- 数据集原图获取与标注

基于Yolov5目标检测的物体分类识别及定位(二) -- yolov5运行环境搭建及label格式转换

目录

原图获取

分析

爬取图片

数据标注

labelme介绍

labelme安装

启动自动化

labelme使用


原图获取

分析

       想要让人工智能有智能,得先训练它,训练要有数据集,制作数据集要有原始数据。

       所以搭建系统的第一步,就是从网上爬一些图片来构建数据集,为什么是爬虫爬取呢,因为太多了,手动下载根本不现实。

爬取图片

       写个爬虫在百度谷歌爬取图片,搜索关键字然后下拉界面到底(设置一个超级大的数或者一直下拉),获取所有的图片元素。

       比如百度图片搜索结果的 

@class="imgitem"  标签的  data-objurl  属性(图片原图的绝对地址),注意不能获取  @class="main_img img-hover"  标签元素里的  src  和  data-imgurl  属性,这两个里的链接都是缩略图,不是原图。

       部分代码展示如下(稍作修改即可复用):

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time
import sys
import urllib
import urllib.request
import requests

class PicSpider(object):
    def main(self):
        chrome_options = Options()
        chrome_options.add_argument('--headless')
        self.browser1 = webdriver.Chrome(chrome_options=chrome_options)
        get_url = 'https://www.baidu.com'
        self.browser1.get(get_url)
        time.sleep(5)
        keys_search = ['cat', 'dog']
        key_cur = 0 
        key_max = len(keys_search) - 1 
        while True:
            pic_count = 0
            if key_cur > key_max:
                break
            the_keyword = keys_search[key_cur]
            search_url = 'https://image.baidu.com/search/index?tn=baiduimage'\
                         '&ct=201326592&lm=-1&cl=2&ie=gb18030'\
                         '&word=' + the_keyword + \
                         '&fr=ala&ala=1&alatpl=adress&pos=0&hs=2&xthttps=000000'
            self.browser1.get(search_url)
            time.sleep(5)
            pre_height = 0
            now_height = 0
            print(self.browser1.execute_script(
                    "return document.documentElement.scrollHeight;"))
            while True:
                self.browser1.execute_script("scrollBy(0,10000)")
                time.sleep(3)
                now_height = self.browser1.execute_script(
                    "return document.documentElement.scrollHeight;")
                print(now_height)
                if now_height == pre_height:
                    break
                if now_height >= 10000000:  
                    break
                pre_height = now_height
            time.sleep(15) 
            try:
                es = self.browser1.find_elements_by_xpath('//li[@class="imgitem"]') 
            except Exception as e:
                    print(e)
            if len(es) == 0:
                break
            for ae in es:
                try:
                    aurl = ae.get_attribute('data-objurl') 
                except Exception as e:
                    print(e)
                else:
                    pic_count += 1
                    try:
                        urllib.request.urlretrieve(aurl, './'+the_keyword+'/'+the_keyword+'_%s.jpg'%pic_count)
                    except Exception as e:
                        print('图片下载异常:' + str(e))
                    else:
                        print('下载成功', pic_count)
            key_cur += 1
        self.browser1.quit()

if __name__ == '__main__':
    spider = PicSpider()
    spider.main()

数据标注

       图片爬完,分类放在几个文件夹里,然后就可以开始数据标注了。

       我们选择labelme来进行这一步工作。

labelme介绍

       Labelme 是一个图形界面的图像标注软件,其设计灵感来自于 http://labelme.csail.mit.edu/ 

       它是用 Python 语言编写的,图形界面使用的是 Qt(PyQt)

       对图像进行多边形,矩形,圆形,多段线,线段,点形式的标注(可用于目标检测,图像分割,等任务)。

       对图像进行进行 flag 形式的标注(可用于图像分类 和 清理 任务)。

       视频标注

       生成 VOC 格式的数据集(for semantic / instance segmentation)

       生成 COCO 格式的数据集(for instance segmentation)

labelme安装

       这里介绍Windows的anaconda安装方法(个人办公习惯)

       更多安装参考:数据标注软件labelme详解_黑暗星球-CSDN博客_labelme(感谢)

conda create --name=labelme python=3.6
conda activate labelme
pip install pyqt5
pip install labelme
conda install pillow=4.0.0 # Windows 上的 Pillow5 会导致 dll 加载错误,所以请安装 Pillow4。

启动自动化

       接下来是启动labelme进行标注,相关命令如下

labelme # 启动的命令
labelme data_annotated/  # 指定图像文件夹的命令

       然后我把命令放在了bat文件中,以便直接双击启动label

CALL conda activate labelme # 不用CALL来启动conda的话,cmd程序就会闪退
labelme D:\Python\yolov5\datas\f16\

labelme使用

       最常用的是矩形框标注 create rectangle,点击矩形对角的两个点,命名object label,然后save,保存为json格式文件,存在Annotations文件夹中,以备后用。内容示例图如下:

       接下来就是大量的单调还带着繁琐的数据清洗和标注了,在用yolov5训练之前还需要把json转为其需要的txt文件格式,这个放在后续博客中。

参考文章:

数据标注软件labelme详解_黑暗星球-CSDN博客_labelme

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/607923.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【计算机组成原理与体系结构】硬件系统概述

目录 一、计算机的发展 二、计算机的硬件系统 三、硬件的工作原理 四、计算机系统的层次结构 五、计算机的性能指标 一、计算机的发展 第一代计算机:电子管计算机 第一台电子计算机:ENIAC(1946) 设计目的:计算导弹…

实验篇(7.2) 06. 通过安全隧道访问远端内网服务器 (SSL) ❀ 远程访问

【简介】直接映射服务器到公网,没有验证不安全;通过Web浏览器访问远程内网服务器,有验证也安全,但是支持的协议太少。那有没有即安全,又能支持所有协议的访问方法呢?我们来看看SSL VPN的隧道模式。 实验要求…

基于Yolov5目标检测的物体分类识别及定位(二) -- yolov5运行环境搭建及label格式转换

刚开始跟着网上的教程做,把环境安装错了,后来直接用GitHub的官方教程来安装环境。 地址是yolov5官方团队代码及教程,看readme文件就可以。 系列文章: 基于Yolov5目标检测的物体分类识别及定位(一) -- 数据集…

【MySQL】一文带你了解表的增删改查 CRUD

文章目录 1. 增加(Create)1.1 单行插入 全列插入1.2 多行插入 指定列插入 2. 查询(Retrieve)2.1 全列查询2.2 指定列查询2.3 查询字段为表达式2.4 别名2.5 去重2.6 排序 3. 条件查询(Where)3.1比较运算符…

【人工智能】— 学习与机器学习、无/有监督学习、强化学习、学习表示

【人工智能】— 学习与机器学习、无/有监督学习、强化学习、学习表示 上一章Bayesian Networks本章:观测学习学习学习元素机器学习概论机器学习对什么有用自动语音识别计算机视觉Information retrieval—信息检索 机器学习机器学习:定义 电子邮件过滤问题…

全志V3S嵌入式驱动开发(gpio输出)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 不管是对mcu,还是对soc来说,gpio肯定是越多越好。但是一个芯片上,它的引脚总是有限的,特别对于非BG…

修改邻接变量-0day漏洞利用原理(6)

大多数情况下,局部变量在栈中的分布是相邻的,但也有可能出于编译优化等需要而有所例外。具体情况我们需要在动态调试中具体对待,这里出于讲述基本原理的目的,可以暂时认为局部变量在栈中是紧挨在一起的。 提供理论基础 下一篇利用:非法的超长密码去修改 bufer 的邻接变量…

支持向量机练习

练习5:支持向量机 介绍 在本练习中,我们将使用支持向量机(SVM)来构建垃圾邮件分类器。 在开始练习前,需要下载如下的文件进行数据上传: data.tgz -包含本练习中所需要用的数据文件 其中: e…

2. 卷积的经典模型

一、什么是卷积神经网络 卷积神经网络就是含有卷积层的网络。 二、有哪些经典的模型?每一次的技术进步在哪里? 卷积神经网络(LeNet) LeNet第一次将卷积神经网络推上舞台,通过梯度下降训练卷积神经网络可以达到手写数字…

chatgpt赋能python:Python中取出中间文本的方法

Python中取出中间文本的方法 在Python开发中,我们常常需要从字符串中取出特定位置的文本,例如从一个网页源码中提取出指定的内容。而且,一份好的代码需要清晰易懂、高效可靠。那么,在Python中如何取出中间文本呢?下面…

超详细Redis入门教程——Redis 主从集群(下)

前言 本文小新为大家带来 Redis 主从集群 相关知识,具体内容包括哨兵机制实现(包括:哨兵机制简介,Redis 高可用集群搭建,Redis 高可用集群的启动,Sentinel 优化配置),哨兵机制原理&a…

史上最全网络安全面试题汇总

最近有不少小伙伴跑来咨询: 想找网络安全工作,应该要怎么进行技术面试准备?工作不到 2 年,想跳槽看下机会,有没有相关的面试题呢? 为了更好地帮助大家高薪就业,今天就给大家分享一份网络安全工…

vmware创建ubuntu服务器>>(使用xshell)配置连接

目录 引言服务器创建准备镜像创建服务器全过程新建虚拟机选择虚拟机硬件兼容性镜像选择服务器目录名和基础信息设置虚拟机命名和存储位置设置处理器配置内存配置网络选型下一步连续点击启动 服务器配置root用户密码设置root用户切换安装ssh服务并启动vmware-ssh配置链接 xshell…

算法(三)—— 双指针

文章目录 27 移除元素344 反转字符串(手写reverse)剑指 Offer 05 替换空格19 删除链表的倒数第N个节点面试题 02.07. 链表相交15 三数之和二、使用步骤1.引入库2.读入数据 总结 27 移除元素 题目:原地移除数组中值为val的元素 思路&#xff…

Jetson Orin Nano nvme系统备份和恢复

大家好,我是虎哥,Jeston Orin nano 8G模块,我自己也玩了一段时间,配置了很多环境后,我就在琢磨如何将系统像之前的模块一样捞取出来后,在新模块上进行恢复。过程是曲折的,结果也是曲折的&#x…

开源字节 考研集训营小程序

考研集训营的价格要比普通的班课贵很多,价格通常在上万元。考研集训营分为春季、暑期、秋季等短期集训营,还有半年和全年长期集训,为学生提供英语、数学、政治的公共课辅导和各种专业课的教学。想要了解更多的考研相关信息,获得适…

自然语言处理从入门到应用——自然语言处理的基本问题:结构预测问题

分类目录:《自然语言处理从入门到应用》总目录 与文本分类问题不同,在结构预测问题中,输出类别之间具有较强的相互关联性。例如,在词性标注任务中,一句话中不同词的词性之间往往相互影响,如副词之后往往出现…

1、mysql的安装与配置

下载安装配置 下载zip文件解压之后配置环境变量 在path后面添加mysql bin文件夹的路径:C:\Program Files (x86)\MySQL\bin 配置完环境变量后,在C:\Program Files (x86)\MySQL目录下新建一个配置文件mysql.ini,同时在bin的同级目录C:\Program …

算法的复杂度【数据结构】

1、时间复杂度 算法在编写成可执行程序后,运行时需要耗费时间资源和空间(内存)资源,因此衡量一个算法的好坏一般是从时间和空间两个维度来衡量的,即时间复杂度和空间复杂度时间复杂度主要衡量一个算法的运行快慢,而空间复杂度主要…

Jenkins安装配置

前言:Jenkins是一款CICD(持续集成与持续交付)工具。Jenkins可以帮你在写完代码后,一键完成开发过程中的一系列自动化部署的工作。 Jenkins 2.346.1 版本支持 jdk1.8 和 jdk11,最后一版支持jdk1.8的版本。 安装Jenkins前…