欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

h5py文件的创建和读取,数据集的制作也不算很难

程序员文章站 2022-06-15 13:46:54
...


前言

提示:以下内容仅做参考:
本文是针对图片数据集的制作,把图像信息用h5py库来存储。
有错误或者有不足请在评论区指出,我会积极改正,十分感谢。


一、h5py是什么?

h5py存放两类数据,一种是datasets,一种是group。datasets是一种数组类数据,和numpy差不多。group(组),类似字典。
若想要具体了解,请参考官网https://docs.h5py.org/en/latest/index.html

二、创建h5文件

1.引入库

代码如下(示例):

import os
import numpy as np
import cv2
import h5py

2.构建函数

代码如下(示例):

print(data.head())def save_image_to_h5py(path):
    img_list = []
    label_list = []
    dir_counter = 0                  #TwoClass里有两个文件夹,有两类,分别为0,1   dir_counter就为了来方便后面label
                                     #如果你的label不是0,1,是其他或者例如cat,dog类,这里	   也可以不用它,后面直接用文件名做label
    for child_dir in os.listdir(path):
        child_path = os.path.join(path,child_dir)

        for dir_image in os.listdir(child_path):                        #遍历二级文件每个图片并append信息进数组
            img = cv2.imread(os.path.join(child_path,dir_image))
            img_list.append(img)
            label_list.append(dir_counter)

        dir_counter += 1

    img_np = np.array(img_list)

    label_np = np.array(label_list)
    print('数据集标签顺序:\n',label_np)            #这里我打印了label信息,其对应图片信息,前6张为0,后9张为1
                                                 #所以标签会是[0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 ]

    #'a' ,如果已经有这个名字的h5文件存在将不会打开,目的为了防止误删信息。
    #‘w' ,如果有同名文件也能打开,但会覆盖上次的内容。
    with h5py.File('datasets/cat_or_not.h5','a') as f:
        f.create_dataset('training_cat',data = img_np)              #创建两个数据集,分别为training_cat
        f.create_dataset('training_label',data = label_np)          #和training_label的数组集

        f.close()

我在注释中已经写的很详尽了,如果还有懂的我在评论区回复。

三、h5py的读取

with h5py.File('datasets/cat_or_not.h5',"r") as f:
    for key in f.keys():
        print(f[key],key,f[key].name)
    f.close()

直接上代码,这个和c语言读取文件有相似之处。读取的内容可以看下:
h5py文件的创建和读取,数据集的制作也不算很难


总结

h5py的创建和读取都不难,只要稍微一看都能懂,在此附上源码,只要你们稍微花那么点时间看看,很容易懂。https://github.com/Confused-Pig/CreateH5File
以上就是今天要讲的内容,本文仅仅简单介绍了h5py的使用,仅懂它不难,但是要学会用它。在深度学习中很多地方都要用它,用上两次就熟悉了。github里的源码很容易懂,我里面放了几张图片,保存的是他们的像素,你们实在不懂的就去运行一下,结合运行结果来看,就很容易了。