在学习卷积神经网络的时候,遇到了cifar10图像数据集,用着挺好,但不想局限于固定的几种图像的识别,所以就有了自己制作数据集来识别的想法。

一、cifar10数据集。

据原网站介绍,数据集为二进制。将cifar10解压后,得到data_batch_1等数据集,打开看一下:

import pickle

f = open('./data_batch_1','rb') #以二进制读模式打开

d = pickle.load(f)

print(d)

可知数据集为dict型,主要有’data’和’labels’等四种键值。

二、爬取图片

首先要感谢被爬网站的开放性和包容心,潭州教育坚持对爬虫技术的无私分享以及博主Jimmy。

import requests

import urllib.parse

import threading

设置最大线程锁(与电脑配置和带宽有关)

thread_lock = threading.BoundedSemaphore(value=10)

def get_page(url):

page = requests.get(url)

page = page.content

page = page.decode('utf-8')

# 将 bytes 转换成 字符串

return page

def pages_from_duitang(label):

pages = []

#找到图片链接规律

#将中文转成url编码

label = urllib.parse.quote(label)

for index in range(0,3600,100):

u = url.format(label, index)

print(u)

page = get_page(u)

pages.append(page)

return pages

def findall_in_page(page,startpart,endpart):

all_strings = []

end = 0

while page.find(startpart,end) != -1:

start = page.find(startpart, end) + len(startpart)

end = page.find(endpart,start)

string = page[start:end]

all_strings.append(string)

return all_strings

def pic_urls_from_pages(pages):

pic_urls = []

for page in pages:

urls = findall_in_page(page, 'path":"', '"')

pic_urls.extend(urls)

return pic_urls

def download_pics(url,n):

r = requests.get(url)

path = 'pics/fish/' + str(n) + '.jpg'

with open(path, 'wb') as f:

f.write(r.content)

#下载结束,解锁

thread_lock.release()

def main(label):

pages = pages_from_duitang(label)

pic_urls = pic_urls_from_pages(pages)

n = 0

for url in pic_urls:

n += 1

print('正在下载第 {} 张图片'.format(n))

#上锁

thread_lock.acquire()

t = threading.Thread(target=download_pics, args = (url, n))

t.start()

main('鱼')

三、制作数据集

from PIL import Image

import numpy as np

import pickle,glob,os

arr = [[]]

number of pictures

n = 1

for infile in glob.glob('D:/py/pics/trees/*.jpg'):

file,ext = os.path.splitext(infile)#分离文件名和扩展名

Img = Image.open(infile)

print(Img.mode,file)#图片尺寸和文件名(用于调试过程中定位错误)

if Img.mode != 'RGB':#将所有非'RGB'通道图片转化为RGB

Img = Img.convert('RGB')

width = Img.size[0]

height = Img.size[1]

print('{} imagesize is:{} X {}'.format(n,width,height))

n += 1

Img = Img.resize([32,32],Image.ANTIALIAS)

抗锯齿的过滤属性,这些都是为了保证剪切图片的时候,最大降低失真度,这样出

的图片体积就稍微大些了。

r,g,b = Img.split()

r_array = np.array(r).reshape([1024])

g_array = np.array(g).reshape([1024])

b_array = np.array(b).reshape([1024])

merge_array = np.concatenate((r_array,g_array,b_array))

if arr == [[]]:

arr = [merge_array]

continue

#拼接

arr = np.concatenate((arr,[merge_array]),axis=0)

#打乱顺序

arr = np.random.shuffle(arr)

生成标签

labelset = np.zeros((arr.shape[0],))

labelset = np.reshape(labelset,[arr.shape[0],])

字典分割出训练集和测试集

train_dic = {'data':arr[:2000],'labels':labelset[:2000]}

test_dic = {'data':arr[2000:],'labels':labelset[2000:]}

f = open('./data_batch_8','wb')#二进制写模式打开,如果不存在,直接生成

pickle.dump(train_dic,f,protocol=2)

序列化操作

由于阿里云平台用的是Python2.7版本,我的是3.6,所以要进行退档操作protocol=2

g = open('./test_batch_1','wb')

pickle.dump(test_dic,g,protocol=2)

四、训练和测试

由于本机硬件水平较低,采用阿里云平台进行测试,根据自己的数据集规模,调整平台提供的代**码。经测试,精度达到76%。对于这个结果还是相当满意的,因为数据集中干扰> > 太多,没有进行筛选。

五、问题

在制作数据集过程中,遇到两个问题:

1、r,g,b = img.split():(已解决)

valueError:too many values to unpack(expected 3)

unpack的个数对不上,比如:a,b = tuple(1,2,3) 就会报出这个错误

通过Img.mode发现有的图片是“1”、“L”、“P”和“RGBA”模式,需要convert。

2、r,g,b = img.split():(待解决)

OSError:cannot identify image file:路径+格式

暂时理解为系统兼容性问题

python制作图片数据集_制作图片数据集相关推荐

  1. 建立自己的voc数据集_制作自己的数据集(VOC2007格式)用于Faster-RCNN训练

    一.数据集文件夹 新建一个文件夹,用来存放整个数据集,或者和voc2007一样的名字:VOC2007 然后在文件夹里面新建如下文件夹: 二.将训练图片放到JPEGImages 将所有的训练图片放到该文 ...

  2. python 回归去掉共线性_以IPL数据集为例的线性回归技术概述

    本文介绍机器学习中的线性回归算法,从https://www.iplt20.com/stats/2018收集了一个IPL数据集示例. 什么是回归呢? 回归是确定因变量/响应变量(我们正在预测的变量(特征 ...

  3. python识图打怪_识别×图片、打飞机游戏,Python这些事你都知道吗?

    Python是挺神奇的. 可以做很多好玩的事情,今天就带大家看看,Python做的那些神奇好玩的事. 1.Python - Django 搭建简易博客 使用 Django 开发一个简单的博客 Web应 ...

  4. 推荐算法python数据集_推荐系统常用数据集

    ps:对原文有所删减 在这篇博客中,作者介绍了九个数据集,其中一些是推荐系统中常用到的标准数据集,也有一些是非传统意义上的数据集(non-traditional datasets),作者相信,这些非传 ...

  5. python分析鸢尾花数据_鸢尾花(iris)数据集分析

    Iris 鸢尾花数据集是一个经典数据集,在统计学习和机器学习领域都经常被用作示例.数据集内包含 3 类共 150 条记录,每类各 50 个数据,每条记录都有 4 项特征:花萼长度.花萼宽度.花瓣长度. ...

  6. 建立自己的voc数据集_将自己数据集转化成voc数据集格式并用mmdetection训练

    一.准备自己的数据 拿nwpu数据集来举例,nwpu数据集文件夹中的内容是: images文件夹:存放数据图片 labelTxt文件夹:存放标注信息,images文件夹中每张图片都对应一个txt文件存 ...

  7. 使用mnist数据集_使用MNIST数据集上的t分布随机邻居嵌入(t-SNE)进行降维

    使用mnist数据集 It is easy for us to visualize two or three dimensional data, but once it goes beyond thr ...

  8. pythonsklearn乳腺癌数据集_【sklearn数据集】SVM之乳腺癌数据集实战

    一.Sklearn介绍 scikit-learn是Python语言开发的机器学习库,一般简称为sklearn,目前算是通用机器学习算法库中实现得比较完善的库了.其完善之处不仅在于实现的算法多,还包括大 ...

  9. python制作图像数据集_详细图像数据集增强原理的python代码

    导读 在深度学习时代,数据的规模越大.质量越高,模型就能够拥有更好的泛化能力,数据直接决定了模型学习的上限.然而在实际工程中,采集的数据很难覆盖全部的场景,比如图像的光照条件,同一场景拍摄的图片可能由 ...

最新文章

  1. linux下命令行安装anaconda3+pytorch+fastai
  2. 第十六届全国大学智能车竞赛全国总决赛竞速组别成绩与奖项
  3. jmeter用户自定义变量的实际使用
  4. Android rxjava2的disposable
  5. ARM7寄存器分布图
  6. yum配置(源配置-光驱,ftp服务器;基本用法)
  7. SAP License:用科学发展观认识会计
  8. 降本增效利器!趣头条 Spark Remote Shuffle Service 最佳实践
  9. 代理http,代理https,代理sk5,的正向代理和反向代理
  10. 相对于就业来讲,前端工程师和后端开发哪个比较好?
  11. C语言中的%f和%lf的区别
  12. Chrome-设置鼠标手势
  13. hdf5 目录没有serial_hdf5
  14. mybatis的插入与批量插入的返回ID的原理
  15. C语言常用转义字符表 和 ASCII码表完整版
  16. Python os.listdir()函数用法介绍
  17. 在线答疑系统源码java_java+jsp+servlet+mysql在线教学答疑系统
  18. 引热议!多所高校明文规定:不再给部分全日制研究生安排宿舍
  19. Python基础------几种循环结构详解
  20. 彩超探头频率高低的区别_【干货】超声探头及使用技巧

热门文章

  1. 如何从Eclipse官网下载我们想要的版本
  2. 商场促销——策略模式(设计模式)
  3. 我懂技术,不就显示个IP 属地嘛!一个小时能搞定吧
  4. 软件开发技术顾问_成为成功的软件开发顾问的5个关键
  5. InterSystems IRIS、IRIS for Health和Health Connect 2021.1预览版现已发布
  6. 未来教育的五大赛道解析推理
  7. 荣耀出货量下滑出击千元机市场,小米压力有点大
  8. FileZilla 425 Can't open data connection
  9. bzoj5018 [Snoi2017]英雄联盟
  10. [KALI] KALI系统、软件更新(附带镜像源)