首页 > 编程知识 正文

python做h5网站,微信小程序开发教程

时间:2023-05-03 12:32:57 阅读:130101 作者:3388

代码流程图:本章的代码流程

本章是关于--make_dataset.py的

---------------------请参阅

step1:处理的文件的路径和名称

file _ name=OS.path.basename (JPEG _ dir.RS trip ('/' )

HD F5 _ file=OS.path.join (data _ dir,' %s_data.h5' % file_name ) rstrip ) :将string字符串末尾的指定字符(默认为空格)

OS.path.basename :返回path的最后一个文件名的【python os.path模块的常规方法详细信息】附录中有此函数的分析

“%s_data.h5' % file_name:实际上也可以使用format : ' { } _ data.H5 '.format (file _ name )

withH5py.file(HDF5_file,' w ' ) as hfw:

for dset_type in ['train ',' test ',' val']:

遍历data文件夹下的三个子文件

list _ img=[ imgforimginpath (JPEG _ dir ).glob('%s/*.jpg'%dset_type ) ]

list_img=[str(img ) for img in list_img]

list _ img.extend (list (path (JPEG _ dir ).glob('%s/*.png'%dset_type ) )

list_img=list (映射(str,list _ img ) )

list_img=NP.Array(list_img ) )。

好了,我不想分析这一段。 作者写起来很麻烦。 我自己写的,同样可以实现上述功能。 这是获取每个子文件夹中文件的所有路径。

list _ img=[ OS.path.join (JPEG _ dir,dset_type,name ) forname inos.list dir ) OS.path.join (JPEG _ dir )

list_img=NP.Array(list_img ) )。

NP.array :将python的list数据类型转换为NP.array数据类型。

-------------------------请参阅

step2:将图像处理为h5格式

data _ full=hfw.create _ dataset (' % s _ data _ full ' % dset _ type,

(0,nb_channels,size,size )、

最大形状=(none,3,size,size )、

dtype=np.uint8)

data _ sketch=hfw.create _ dataset (' % s _ data _ sketch ' % dset _ type,

(0,nb_channels,size,size )、

最大形状=(none,3,size,size )、

dtype=np.uint8)

【create_dataset官网说明】这也是我第一次提到这个,以下是我个人的见解。

create_dataset函数在一个h5文件中创建一个dataset。 另外,可以在一个h5文件中创建多个dataset,以存储不同功能的数据。 第一个参数是dataset的名称

数据集中数据的具体大小

dataset最多可以存储多少个数据? 大多数第一个参数在None的说明中可以存储无限个

num_files=len(list_img )

chunk_size=100

num _ chunks=num _ files/chunk _ size

arr _ chunks=NP.array _ split (NP.arange (num _ files ),num_chunks ) NP.array _ split (NP.arange ) ) num

图像太多,需要分组保存到h5文件中

forchunk_idxinTQDM(ARR_chunks ) :

list _ img _ path=list _ img [ chunk _ idx ].to list (

output=parmap.map(format_image,list_img_path,size,nb_channels,pm_parallel=

False)tolist():将array变成numpy的list,这相当于一个迭代器

parmap.map:其是将list_img_path里面的量一个一个的送入到format_image函数中【Welcome to parmap’s documentation!】附录有解析

arr_img_full = np.concatenate([o[0] for o in output], axis=0)

arr_img_sketch = np.concatenate([o[1] for o in output], axis=0)将output的输出分开,且按照第一个维度连接在一起。

format_image返回的有两个元素list

data_full.resize(data_full.shape[0] + arr_img_full.shape[0], axis=0)

data_sketch.resize(data_sketch.shape[0] + arr_img_sketch.shape[0], axis=0)调整dataset的大小,我们调整的只是个数。

注意是先把dataset变大在向里面加数据。

data_full[-arr_img_full.shape[0]:] = arr_img_full.astype(np.uint8)

data_sketch[-arr_img_sketch.shape[0]:] = arr_img_sketch.astype(np.uint8)

向dataset的相应位置存储图片

测试:

tip:想从后面数几个数:-arr_img_full.shape[0]:

#顾名思义这个函数就是检查,你转换的是否成功的

def check_HDF5(jpeg_dir, nb_channels):

"""

Plot images with landmarks to check the processing

"""

# Get hdf5 file

file_name = os.path.basename(jpeg_dir.rstrip("/"))

hdf5_file = os.path.join(data_dir, "%s_data.h5" % file_name)

with h5py.File(hdf5_file, "r") as hf:#注意这里是"r"只读模式

data_full = hf["train_data_full"]

data_sketch = hf["train_data_sketch"]#得到相应的dataset

for i in range(data_full.shape[0]):

plt.figure()

img = data_full[i, :, :, :].transpose(1,2,0)

img2 = data_sketch[i, :, :, :].transpose(1,2,0)#得到图片,将深度在调到最后

img = np.concatenate((img, img2), axis=1)#将图片在次拼在一起

if nb_channels == 1:

plt.imshow(img[:, :, 0], cmap="gray")

else:

plt.imshow(img)

plt.show()

plt.clf()

plt.close()

使用h5文件的思路是:打开h5文件,选取相应的dataset(这时就相当于一个batch了,有四个维度)。很方便

附:

1, os.path.basename

>>> os.path.basename('c:\test.csv')

'test.csv'

>>> os.path.basename('c:\csv')

'csv' (这里csv被当作文件名处理了)

>>> os.path.basename('c:\csv\')

''

2, np.array_split函数

num_files = 5

print(num_files)

chunk_size = 2

num_chunks = num_files / chunk_size

print(num_chunks)

arr_chunks = np.array_split(np.arange(num_files), num_chunks)

print(arr_chunks)

输出:

5

2.5

[array([0, 1, 2]), array([3, 4])]

3,map函数format_image:传入一个功能函数

list_img_path:一个list相当于一个迭代器

size, nb_channels:后面两个参数是传给第一个函数format_image的

pm_parallel:设置map,但不清楚是干嘛的

功能是循环读出list_img_path的数据到format_image函数中,结果放在一个list内返回

注:【Python中*args 和**kwargs的用法】当函数的参数不确定时,可以使用*args 和**kwargs,*args 没有key值,**kwargs有key值。这就很好的区别了那些参数是传给function的,哪些是去设置map函数的

4,format_image函数

def format_image(img_path, size, nb_channels):

"""

Load img with opencv and reshape

"""

if nb_channels == 1:

img = cv2.imread(img_path, 0)

img = np.expand_dims(img, axis=-1)

else:

img = cv2.imread(img_path)

img = img[:, :, ::-1] # GBR to RGB

w = img.shape[1]

#读取图片

# Slice image in 2 to get both parts

img_full = img[:, :w // 2, :]

img_sketch = img[:, w // 2:, :]

#将图片切成两部分

img_full = cv2.resize(img_full, (size, size), interpolation=cv2.INTER_AREA)

img_sketch = cv2.resize(img_sketch, (size, size), interpolation=cv2.INTER_AREA)

#将图片规整到相应大小

if nb_channels == 1:

img_full = np.expand_dims(img_full, -1)

img_sketch = np.expand_dims(img_sketch, -1)

img_full = np.expand_dims(img_full, 0).transpose(0, 3, 1, 2)

img_sketch = np.expand_dims(img_sketch, 0).transpose(0, 3, 1, 2)

#将图片增加一个第一维度,即batch。然后在将深度维度放到1维度

return img_full, img_sketch

?cv2.imread读的是GBR

?python读图片的函数,那些是RGB哪些是

?img[:, :, ::-1]是怎么实现调换通道的: ::-1就是调换顺序

最后附上我的结果:

欢迎关注公众号:huangxiaobai880https://www.zhihu.com/video/924964085190230016

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。