yolov2检测网数据集获取与预处理_采集健康和非健康猫狗数据

这篇具有很好参考价值的文章主要介绍了yolov2检测网数据集获取与预处理_采集健康和非健康猫狗数据。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、网上公开数据集

阿里云天池数据集-cat-dog

二、获取并预处理数据集

2.1 获取非健康的猫狗数据

因为开源数据库中没有非健康猫狗相关的,所以需要自己下载非健康猫狗数据,并制作数据集。
下面是用于爬取非健康猫狗数据的爬虫代码:

# 爬取代码1,可以输入关键词进行爬取百度图库图片,但是运行报错了
import requests
import os
import re
#设置请求头,防止被百度禁止访问
headers={
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'
}
#word是要爬的图片名字
word=input("请输入关键词:")
#j用来标记图片数量
j=1
class PaChong:
    def __init__(self,word,i):
        #path是图片存放的地方
        self.path="C://Users/tanhui/Desktop/比赛项目文档/3_数据集制作和标注//"+word+"/"
#         第几页
        self.page=i/20+1
        #如果文件夹不存在,则创建文件夹
        if not os.path.exists(self.path):
            os.mkdir(self.path)
    #发出requests请求
    def requests_get(self,url):
        requests.adapters.DEFAULT_RETRIES = 5
        req=requests.get(url,timeout=30)
        req.encoding="utf-8"
        self.req=req.text
    
    #正则找到图片链接
    def  get_imgurl(self):
        imgurls=re.findall('"objURL":"(.*?)"',self.req,re.S)
        self.imgurls=imgurls
    #下载图片到本地
    def download(self):
        global j
        for imgurl in self.imgurls:
            path=self.path+word+str(j)
            #写入文件
            with open(path+".jpg","wb") as f:
                r=requests.get(imgurl)
                f.write(r.content)
            print("%s下载成功"%path)
            j+=1
        print("第{}页下载结束!".format(self.page))
#通过pn参数实现翻页,第一页为0,,间隔为20
for i in range(0,60,20):
    url="https://image.baidu.com/search/flip?tn=baiduimage&ie=utf-8&word={0}&pn={1}&gsm=50&ct=&ic=0&lm=-1&width=0&height=0".format(word,i)
    Run=PaChong(word,i)
    Run.requests_get(url)
    Run.get_imgurl()
    Run.download()
'''
爬取指定关键字图片,这个反爬取效果好
'''
import re# 正则表达式,解析网页
import requests# 请求网页
import traceback
import os
    
def dowmloadPic(html,keyword,startNum):
    headers = {'user-agent':'Mozilla/5.0'}# 浏览器伪装,因为有的网站会反爬虫,通过该headers可以伪装成浏览器访问,否则user-agent中的代理信息为python
    pic_url = re.findall('"objURL":"(.*?)",',html,re.S)# 找到符合正则规则的目标网站
    num = len(pic_url)
    i = startNum
    subroot = root + '/' + word
    txtpath = subroot + '/download_detail.txt'

    print('找到关键词:'+keyword+'的图片,现在开始下载图片...')
    
    for each in pic_url:
        a = '第'+str(i+1)+'张图片,图片地址:'+str(each) + '\n'
        b = '正在下载' + a
        print(b)
        path = subroot + '/' + str(i+1)
        try:
            if not os.path.exists(subroot):
                os.mkdir(subroot)
            if not os.path.exists(path):
                pic = requests.get(each,headers = headers,timeout = 10)
                with open(path+'.jpg','wb') as f:
                    f.write(pic.content)
                    f.close()
                with open(txtpath,'a') as f:
                    f.write(a)
                    f.close()
                    
        except:
            traceback.print_exc()
            print ('【错误】当前图片无法下载')
            continue
        i += 1
 
    return i
 
 
if __name__ == '__main__':
    
    headers = {'user-agent':'Mozilla/5.0'}
    words = ['病猫','病狗']
    #words为一个列表,可以自动保存多个关键字的图片
    root = './download_images_of_'
    for word in words:
        root = root + word + '&'
    if not os.path.exists(root):
        os.mkdir(root)
    for word in words:
        lastNum = 0
        # word = input("Input key word: ")
        if word.strip() == "exit":
            break
        pageId = 0
        #此处的参数为需爬取的页数,设置为20页
        for i in range(20):
            url = 'http://image.baidu.com/search/flip?tn=baiduimage&ie=utf-8&word=' + word + "&pn="+str(pageId)+"&gsm=?&ct=&ic=0&lm=-1&width=0&height=0"
            pageId += 20#好像没啥影响
            html = requests.get(url,headers = headers)
            # print(html.text) #打印网页源码,相当于在网页中右键查看源码内容
            lastNum = dowmloadPic(html.text, word, lastNum,)#本条语句执行一次获取60张图

2.2 剔除重复的猫狗数据

使用图片去重/相似图片清理利器 软件清除重复的图片数据。

2.3 淘宝购买猫狗救助视频

使用ffmpeg将救助视频文件按照一秒截取一张PNG图片,ffmpeg相关链接可以参考5.3.2.3节

ffmpeg -i xxx.mp4 -r 1 -y C:\Users\tanhui\Desktop\比赛项目文档\3_数据集制作和标注\4_unhealthy_dogs\xxx_%6d.png

2.4 批量重命名猫狗

按照如下命名:

1_healthy_cats/healthy_cat_1.jpg
2_unhealthy_cats/unhealthy_cat_1.jpg
3_healthy_dogs/healthy_dog_1.jpg
4_unhealthy_dogs/unhealthy_dog_1.jpg

批量重命名程序1:

# -*- coding: utf-8 -*-
import os
#对所有文件以数字递增的方式重命名
def file_rename():
    i = 0
    #需要重命名的文件绝对路径
    path = r"C:\Users\tanhui\Desktop\比赛项目文档\3_数据集制作和标注\4_unhealthy_dogs"
     #读取该文件夹下所有的文件
    filelist = os.listdir(path)  
    #遍历所有文件
    for files in filelist:   
        i = i + 1
        Olddir = os.path.join(path, files)    #原来的文件路径
        if os.path.isdir(Olddir):       #如果是文件夹则跳过
                continue
        #os.path.splitext(path)  #分割路径,返回路径名和文件扩展名的元组
        #文件名,此处没用到
        filename = os.path.splitext(files)[0]     
        #文件扩展名
        filetype = os.path.splitext(files)[1]         #如果你不想改变文件类型的话,使用原始扩展名
        Newdir = os.path.join(path, str(i)+filetype)   #新的文件路径
        os.rename(Olddir, Newdir)   
    return True

if __name__ == '__main__':
    file_rename()

批量重命名程序2:

import os

def rename():
    i = 0
    path = r"C:\Users\tanhui\Desktop\比赛项目文档\3_数据集制作和标注\4_unhealthy_dogs"

    filelist = os.listdir(path)   #该文件夹下所有的文件(包括文件夹)
    for files in filelist:   #遍历所有文件
        i = i + 1
        Olddir = os.path.join(path, files)    #原来的文件路径
        if os.path.isdir(Olddir):       #如果是文件夹则跳过
                continue
        filename = '4_unhealthy_dog_'     #文件名
        filetype = '.jpg'        #文件扩展名
        Newdir = os.path.join(path, filename + str(i) + filetype)   #新的文件路径
        os.rename(Olddir, Newdir)    #重命名
    return True

if __name__ == '__main__':
    rename()

2.5 图像数据下采样

使用ffmpeg截取视频帧获得的图像大小为1080P的,虽然使用Yolov2网络训练时,输入的图像是任意大小的(参考5、6),但过高码率的图像会在训练时出现显存不足或者训练速度较慢的情况。因此将进行图像进行下采样处理。在单独使用cv2.resize函数进行调整图片会出现图片文件还是几百kb的情况,所以我们需要用cv的jpeg进行压缩,这里的压缩比设置为50,能够得到10-40kb的图像。

import cv2
import os
import time
# 图像处理函数
def resize_image(lr_path,sr_path):
   
    #读入图片
    img_lr = cv2.imread(lr_path,1)

    #获取图像尺寸
    height, width = img_lr.shape[:2]

    #判断图像等于1080p
    if height == 1080 and width == 1920:
        #图像缩放到原来的1/4
        img_sr = cv2.resize(img_lr,(1920//4,1080//4),interpolation=cv2.INTER_CUBIC)
        #保存图像
        #对于jpg文件的压缩,第三个参数是压缩质量
        #1M 100K 10K 图片质量的范围是0-100 有损压缩
        #jpg图片的额压缩压缩质量参数数值越小,压缩比越高
        cv2.imwrite(sr_path,img_sr,[cv2.IMWRITE_JPEG_QUALITY,50]) # 保存图片的质量,值为0到100,越高质量越好,默认95
        print(sr_path + ' resize success')
    #图像不等于1080p
    else:
        print(lr_path + ' is not 1080p')
        cv2.imwrite(sr_path,img_lr) 

if __name__ == "__main__":
    print("处理图片中...\n")
    start = time.time()
    # 遍历原始目录,对每个低分辨率图片进行处理,并保存到对应文件夹中
    for root, dirs, files in os.walk("2_unhealthy_cats"):
        for file in files:
            # 构造低分辨率图片路径
            lr_path = os.path.join(root, file)
            # 构造处理后图片保存路径
            sr_path = lr_path.replace("2_unhealthy_cats", "2_unhealthy_cats_resize")
            # 创建保存目录
            os.makedirs(os.path.dirname(sr_path), exist_ok=True)

            # 进行图片处理并保存
            resize_image(lr_path, sr_path)
    end = time.time()
    print("处理完成,耗时:{:.2f}s".format(end - start))
    

相关链接

  1. 关键词爬取图片(Python)-CSDN博客

  2. Python根据关键字进行图片爬取-CSDN博客]

  3. 一款公认的图片去重/相似图片清理利器 - 知乎 (zhihu.com)

  4. ffmpeg制作数据集使用教程

  5. yolov2对输入图片有啥要求吗?输入图片不是正方形的咋办?对手工定义?

  6. 史上最通俗易懂的YOLOv2讲解文章来源地址https://www.toymoban.com/news/detail-633709.html

到了这里,关于yolov2检测网数据集获取与预处理_采集健康和非健康猫狗数据的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 1.0数据采集与预处理概述

    大数据的来源: 1.搜索引擎数据 2.电商交易数据 3.社交网络数据 4.物联网传感器数据 5.网站日志数据 数据采集的概念: 数据采集的ETL 工具负责将分布的、异构数据源中的不同种类,和结构的数据如文本数据、关系数据以及图片、视频等非结构化数据等抽取到临时中间层后进

    2024年02月02日
    浏览(44)
  • 【数据采集与预处理】数据接入工具Kafka

    目录 一、Kafka简介 (一)消息队列 (二)什么是Kafka 二、Kafka架构 三、Kafka工作流程分析 (一)Kafka核心组成 (二)写入流程 (三)Zookeeper 存储结构 (四)Kafka 消费过程 四、Kafka准备工作 (一)Kafka安装配置 (二)启动Kafka (三)测试Kafka是否正常工作 五、编写Spark Str

    2024年01月19日
    浏览(72)
  • 【数据采集与预处理】数据传输工具Sqoop

    目录 一、Sqoop简介 二、Sqoop原理 三、Sqoop安装配置 (一)下载Sqoop安装包并解压 (二)修改配置文件 (三)拷贝JDBC驱动 (四)验证Sqoop (五)测试Sqoop是否能够成功连接数据库 四、导入数据 (一)RDBMS到HDFS (二)RDBMS到HBase (三)RDBMS到Hive 五、导出数据 HDFS/Hive到RDBMS 六、

    2024年01月21日
    浏览(55)
  • 数据预处理matlab matlab数据的获取、预处理、统计、可视化、降维

    1.1 从Excel中获取 使用readtable() 例1: 使用 spreadsheetImportOptions(Name,Value) 初步确定导入信息, 再用 opts.Name=Value 的格式添加。 例2: 先初始化 spreadsheetImportOptions 对象, 再用 opts.Name=Value 的格式逐个添加。 例3: 将导入信息存到变量里, 再使用 spreadsheetImportOptions(Name,Value)

    2024年02月15日
    浏览(56)
  • YOLOv7教程系列:一、基于自定义数据集训练专属于自己的目标检测模型(保姆级教程,含数据集预处理),包含对train.py/test.py/detect.py/export.py详细说明

    YOLOv7作为YOLO系列的又一大巅峰之作,下面将介绍利用自己的数据集训练YOLOv7模型。 github代码链接:https://github.com/WongKinYiu/yolov7 目前版本为v0.1 运行环境如下: ubuntu20.04 cuda11.0 cudnn8.0.4 python3.8 torch1.12.0 torchvision0.11.0 在data目录下新建Annotations, images, ImageSets, labels 四个文件夹 i

    2024年01月22日
    浏览(50)
  • 基于爬虫和Kettle的书籍信息采集与预处理

    将读书网上的书籍的基本信息,比如:封面、书名、作者、出版社、价格、出版时间、内容简介、作者简介、书籍目录、ISBN和标签爬取出来,并将爬取的结果放入数据库中,方便存储。     图1读书网书籍类别详情 此次实验爬取读书网页面中文学、小说、传记、青春文学、

    2024年01月21日
    浏览(54)
  • 基于Python的海量豆瓣电影、数据获取、数据预处理、数据分析、可视化、大屏设计项目(含数据库)

    项目介绍 有需要本项目的代码或文档以及全部资源,或者部署调试可以私信博主!!!!!!!!!! 本文基于Python的网络爬虫手段对豆瓣电影网站进行数据的抓取,通过合理的分析豆瓣网站的网页结构,并设计出规则来获取电影数据的JSON数据包,采用正态分布的延时措施

    2024年02月12日
    浏览(62)
  • 基于爬虫和Kettle的豆瓣电影的采集与预处理

    将豆瓣电影网上的电影的基本信息,比如:电影名称、导演、电影类型、国家、上映年份、评分、评论人数爬取出来,并将爬取的结果放入csv文件中,方便存储。     图1豆瓣网网站结构详情 此次实验爬取豆瓣网中电影页面中的电影的基本信息。 每一个电影包括电影名称、

    2024年02月02日
    浏览(49)
  • matlab数据的获取、预处理、统计、可视化、降维 | 《matlab数学建模方法与实践(第三版)》学习笔记

    一、数据的获取 1.1 从Excel中获取 使用readtable() 使用xlsread()——xlswrite() 1.2  从TXT中获取 使用load() 使用textread() 使用fopen() fread() fclose()  使用fprintf()写入信息到txt  1.3 从图片中获取 使用imread  1.4 从视频获取  使用视觉工具箱中的VideoFileReader  二、数据的预处理 2.1 缺失值处

    2024年01月19日
    浏览(67)
  • 【预处理】——获取可变参数宏的参数数量

    用于获取可变参数宏实际传递了多少个参数。 COUNT_ARGS(1, 2, 3) ,填入了 3 个参数,返回值就是 3 COUNT_ARGS(\\\"Hello\\\", \\\'a\\\', 3.14, 4) ,填入了 4 个 参数,返回值就是 4 COUNT_ARGS(1) ,我们填入了 1 个参数,返回值就是 1 __COUNT_ARGS 宏定义了一个带有多个参数的宏,其中 _0 到 _20 是占位符参

    2024年02月15日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包