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

2023-11-10

一、网上公开数据集

阿里云天池数据集-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网络训练时,输入的图像是任意大小的(参考56),但过高码率的图像会在训练时出现显存不足或者训练速度较慢的情况。因此将进行图像进行下采样处理。在单独使用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讲解

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • gin-巧用Context传递多种参数

    目录 引言 1 巧妙包装gin Context为NewContext 2 在使用gin Use对每一个请求的Context进行组装 3 在路由绑定时解析出NewContext来为应用层函数提供参数 并且调用应用层函数 4 总结 引言 首先给
  • wget

    参考 http apple stackexchange com questions 100570 getting files all at once from a web page using curl 一份份的下载文件有点麻烦 所以 wg
  • 数据结构之图:邻接矩阵和邻接表、深度优先遍历和广度优先遍历

    简介 线性表是一种线性结构 除了头结点和尾节点 线性表的每个元素都只有一个前取节点和一个后继节点 而树结构则相较于线性表更加复杂 它描述的关系为数据元素之间的父子关系 也是现实世界父子关系的缩影 一个父亲节点可以有零个或者多个子节点 而每个
  • 解决tensorflow没有compat的问题

    经过我多年的产bug经验判断 一般这种情况出现在anaconda下载的tensorflow2 x版本中 如果知道自己的tensorflow环境地址的话可以进去检查一下当前版本的tensorflow缺以下哪几个包 不知道也没关系 直接无脑下载
  • 机器学习-GBDT

    GBDT gbdt是一种以CART树 通常 为基分类器的boosting算法 大家可以仔细查一下boosting的介绍 这里不再赘述 gbdt通过多轮迭代 每轮迭代产生一个弱分类器 每个分类器在上一轮分类器的残差基础上进行训练 对弱分类器的
  • @apinote_新的Javadoc标签@ apiNote,@ implSpec和@implNote

    apinote 如果您已经在使用Java 8 则可能会看到一些新的Javadoc标签 apiNote implSpec和 implNote 他们怎么了 如果要使用它们 该怎么办 总览 该帖子将快速查看标签的来源和当前状态 然后 它将解释它们
  • R语言中基本图形的绘制

    条形图 简单的垂直条形图和水平条形图 函数barplot gt library vcd 载入需要的程辑包 grid gt counts lt table Arthritis Improved gt counts None Some Mark
  • matlab插值:拉格朗日插值

    拉格朗日插值即对所要插值的函数进行拉格朗日多项式拟合 这是matlab插值系列的第二期 第一期 数值分析拟合 Matlab三次样条插值拟合数据 以后会有时间的时候再更新更多的插值方法 这篇文章我推导过程参考过了一些其他文章 代码是自己写的
  • HTML5滑动(swipe)事件,移动端触摸(touch)事件

    目有个交互需要实现手指滑动的交互 pc端使用mousedown mousemove mouseup监听实现 但在ios设备上mousemove是不好监听的 同类的方法是touchstart touchmove touchend 项目需求 需
  • 快速搞懂无偏估计及样本方差中的n-1

    期望EX 方差DX 我们知道任一样本和总体是同分布的 所以任一样本的期望即总体期望 均值 任一样本的方差即总体方差 所以对于任一样本X 有 E X E
  • 移动支付行业发展和商业模式迭代孕育新商机

    在短短十几年的时间当中 PC互联网 移动互联网 以及风头正盛的物联网所引发的三次技术浪潮彻底颠覆了人们沿袭数千年的交易支付模式 也让交易介质从实物货币 到数字流转 再到如今更为便捷和安全的刷脸支付 这便是科技改变社会 成为第一生产力的缩影
  • QTabWidget移除部分分页的方法

    1 将各分页保存起来 QList
  • Hands-On Hyperledger Fabric——Byzantine-fault tolerant(BFT)过程详解

    文章目录 拜占庭问题描述 分布式架构遭遇的问题 Practical Byzantine Fault Tolerance PBFT PBFT过程详解 拜占庭问题描述 拜占庭将军问题是分布式计算中的一个经典问题 拜占庭将军问题是Leslie L
  • http协议各个版本

    一 HTTP协议版本更替 http 0 9 1991 原型版本 功能简陋 只有一个命令GET GET index html 服务器只能回应HTML格式字符 串 不能回应别的格式 http 1 0 每个TCP连接只能发送一个请求 发送数据完毕
  • osgEarth的Rex引擎原理分析(六)earth文件如何解析成Config

    目标 解决 一 中的问题 构建地图节点的依据是Config osgEarthDrivers earth EarthFileSerialize2 cpp osg Node EarthFileSerializer2 deserialize co
  • 13. 实战:XPath法抓取某网站外包信息

    目录 前言 思路 代码实现 第一步 先获取页面源代码 第二步 交给XPath的HTML解释器进行解析 第三步 通过源代码检查并获取XPath路径 第四步 创建csv文件 准备写入数据 第五步 遍历所有的div 获取我们需要的信息 完整代码
  • linux:ubuntu mysql 、redis和Mongodb安装

    1 安装mysql sudo apt update sudo apt install mysql server 验证MySQL服务器正在运行 sudo systemctl status mysql 保护MySQL 安装随附一个名为的脚本my
  • 基于KOS系统超详细Aircrack-ng安装保姆级教程

    目录 1 概述 2 安装准备 2 1 操作系统环境 2 2 软件版本 3 安装运行 3 1 安装编译环境 3 2 获取Aircrack ng源码包 3 3 编译Aircrack ng 3 4 运行Aircrack ng 1 概述 浪潮信息K
  • 一些时序计算题

    最近在持续笔试中 今天见的题感觉难度又上升了 因此需要计算一下 首先来看一下题目 已知 输入延时 T in delay 1ns Inverter的延时 T inv max 1ns T inv min 0 5ns Buffer的延时 T bu
  • yolov2检测网数据集获取与预处理_采集健康和非健康猫狗数据

    yolov2检测网数据集获取与预处理 采集健康和非健康猫狗数据 一 网上公开数据集 二 获取并预处理数据集 2 1 获取非健康的猫狗数据 2 2 剔除重复的猫狗数据 2 3 淘宝购买猫狗救助视频 2 4 批量重命名猫狗 2 5 图像数据下采