制作图片数据集

简介:

在学习卷积神经网络的时候,遇到了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 = 'https://www.duitang.com/napi/blog/list/by_search/?
kw={}&start={}&limit=1000'

#将中文转成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
抖音私信脚本app,协议私信群发工具,抖音python私信模块
这个实现包含三个主要模块:抖音私信核心功能类、辅助工具类和主程序入口。核心功能包括登录
|
应用服务中间件
2022年最新最详细在IDEA中配置Tomcat(含有详细图解过程)、建立使用IEDA建立一个Web项目的案例
这篇文章提供了在IntelliJ IDEA中配置Tomcat服务器的详细步骤,包括添加Tomcat Server、选择安装路径、添加项目Artifact,以及创建和展示Web项目的流程。
|
Java 关系型数据库 MySQL
idea里面完整创建maven项目(包含如何使用)
Maven和Maven Archetype区别? Maven:普通工程 Maven Archetype:模板工程
6100 0
idea里面完整创建maven项目(包含如何使用)
|
10天前
|
人工智能 自然语言处理 安全
阿里云千问办公 QwenWork详细介绍:产品核心能力、典型场景、价格及常见问题解答
千问办公是阿里云推出的一站式AI办公平台,主打"不止于对话,更注重交付",依托通义千问旗舰大模型,用户一句话即可完成数据分析、PPT生成、视频剪辑等复杂任务,直接输出可用成果。产品深度打通钉钉生态与企业OA,覆盖桌面端、网页端,提供企业标准版198元/人/月等多档订阅方案,新用户注册即赠2000积分,适配工程师、HR、财务等多职业办公场景,成为能动手干活的"全能AI同事"。
|
10天前
|
人工智能
千问办公官网入口:阿里AI办公QwenWork产品页和免费网页端链接
千问办公官网含两大入口:一是网页端(qwenwork.cn),即开即用,支持浏览器直接访问;二是阿里云产品页 https://t.aliyun.com/U/JNKJuO 提供免费/付费版详情、功能介绍及使用指南。
|
16天前
|
网络协议 Linux iOS开发
【2026实测】Wireshark下载+安装+汉化+使用教程(图文版,巨详细)
Wireshark 是一款免费开源的网络协议分析工具,可实时捕获、解析并可视化数据包,助你诊断网络故障、分析通信协议(如HTTP、DNS、TCP等)。支持Windows/macOS/Linux,含中文界面,新手入门便捷。(239字)
|
9天前
|
IDE 开发工具
Qoder 上线 Sonus 模型,Computer Use 能力全面增强
Qoder国际版上线全新内置大模型Sonus(/ˈsoʊnəs/),全球领先,专精超长任务执行与电脑操作(Computer Use)。配合Qoder桌面端0.2.3版本,可自主完成编程、金融建模、科研及表格制作等复杂工作。现全面支持Qoder全系产品,效率提升3.2倍。
1064 1
Qoder 上线 Sonus 模型,Computer Use 能力全面增强
|
11天前
|
人工智能 API 内存技术
刚刚 DeepSeek V4.1 Flash 开启内测,1 分钟教你用上!
刚刚 DeepSeek 内测群发布了 DeepSeek V4.1 Flash 中间版本内测的消息,这次的模型采用了新的结构,原生支持多模态、能力更强、速度更快、且成本更低。
1936 15
|
11天前
|
缓存 人工智能 自然语言处理
阿里云qwen3.8-flash大模型介绍:模型能力、模型价格、免费额度与最新活动
本文是阿里云百炼平台Qwen3.8-Flash大模型的选型接入指南,作为兼顾性能与响应速度的高性价比多模态模型,它支持百万级上下文窗口、全场景多模态输入与完整智能体能力矩阵,适配编程辅助、智能体协作等核心场景。文中同步梳理了最新下调的阶梯定价、夜间4折等优惠活动,搭配OpenAI兼容流式调用示例,帮助开发者低成本快速落地高并发AI应用。
阿里云qwen3.8-flash大模型介绍:模型能力、模型价格、免费额度与最新活动