龙空技术网

如何将数据集转换成MindRecord数据集

究极小孢子 108

前言:

今天同学们对“图片转二进制流”大概比较注重,我们都需要学习一些“图片转二进制流”的相关知识。那么小编同时在网上搜集了一些对于“图片转二进制流””的相关资讯,希望朋友们能喜欢,你们一起来学习一下吧!

1 导入文件写入工具类FileWriter;

from mindspore.mindrecord import FileWriter

2 定义数据集结构文件Schema;

cv_schema_json = {"file_name": {"type": "string"}, "label": {"type": "int32"}, "data": {"type": "bytes"}}

Schema文件主要包含字段名name,字段数据类型type和和字段各维度维数,其中字段名是字段的引用名称,可以包含字母、数字和下划线;字段数据类型为包含int32、int64、float32、float64、string、bytes;字段维数是一维数组用[-1]表示,更高维度可表示为[m, n, …],其中m、n为各维度维数。如果字段有属性shape则对应数据类型必须为int32、int64、float32、float64,如果字段有属性shape,则用户传入write_raw_data接口的数据必须为numpy.ndarray类型;

3 按照用户定义的Schema格式,准备需要写入的数据列表,此处传入的是图片数据的二进制流;

data = [{"file_name": "one.jpg", "label": 0, "data": b"\x10c\xb3w\xa8\xee$o&<q\x8c\x8e(\xa2\x90\x90\x96\xbc\xb1\x1e\xd4QER\x13?\xff\xd9"},

{"file_name": "two.jpg", "label": 56, "data": b"\xe6\xda\xd1\xae\x07\xb8>\xd4\x00\xf8\x129\x15\xd9\xf2q\xc0\xa2\x91YFUO\x1dsE1\x1ep"},

{"file_name": "three.jpg", "label": 99, "data": b"\xaf\xafU<\xb8|6\xbd}\xc1\x99[\xeaj+\x8f\x84\xd3\xcc\xa0,i\xbb\xb9-\xcdz\xecp{T\xb1\xdb"}]

4 添加索引字段可以加速数据读取;

indexes = ["file_name", "label"]

5 创建FileWriter对象,传入文件名及分片数量,然后添加Schema文件及索引,调用write_raw_data接口写入数据,最后调用commit接口生成本地数据文件;

writer = FileWriter(file_name="lixiang.mindrecord", shard_num=4)

writer.add_schema(cv_schema_json, "lixiang_schema")

writer.add_index(indexes)

writer.write_raw_data(data)

writer.commit()

6 如果需要在现有数据格式文件中增加新数据,可以调用open_for_append接口打开已存在的数据文件,继续调用write_raw_data接口写入新数据,最后调用commit接口生成本地数据文件。

writer = FileWriter.open_for_append("lixiang.mindrecord0")

writer.write_raw_data(data)

writer.commit()

标签: #图片转二进制流