ganji15 / HiGAN

MIT License
32 stars 8 forks source link

生成hdf5的过程? #3

Closed DietDietDiet closed 3 years ago

DietDietDiet commented 3 years ago

Hi, 非常感谢您的开源工作。 个人想尝试一下在中文数据上的生成效果,能否麻烦简述一下hdf5文件的过程和生成前的大概数据排布,感谢!

ganji15 commented 3 years ago

参考代码

def gen_h5file(all_imgs, all_texts, all_wids, save_name):
    img_seek_idxs, img_lens = [], []
    cur_seek_idx = 0
    for img in all_imgs:
        img_seek_idxs.append(cur_seek_idx)
        img_lens.append(img.shape[-1])
        cur_seek_idx += img.shape[-1]

    lb_seek_idxs, lb_lens = [], []
    cur_seek_idx = 0
    for lb in all_texts:
        lb_seek_idxs.append(cur_seek_idx)
        lb_lens.append(len(lb))
        cur_seek_idx += len(lb)

    save_imgs = np.concatenate(all_imgs, axis=-1)
    save_texts = list(itertools.chain(*all_texts))
    save_lbs = [ord(ch) for ch in save_texts]
    save_path = os.path.join(save_name + '.hdf5')
    h5f = h5py.File(save_path, 'w')
    h5f.create_dataset('imgs',
                        data=save_imgs,
                        compression='gzip',
                        compression_opts=4,
                        dtype=np.uint8)
    h5f.create_dataset('lbs',
                        data=save_lbs,
                        dtype=np.int32)
    h5f.create_dataset('img_seek_idxs',
                       data=img_seek_idxs,
                       dtype=np.int64)
    h5f.create_dataset('img_lens',
                       data=img_lens,
                       dtype=np.int16)
    h5f.create_dataset('lb_seek_idxs',
                       data=lb_seek_idxs,
                       dtype=np.int64)
    h5f.create_dataset('lb_lens',
                       data=lb_lens,
                       dtype=np.int16)
    h5f.create_dataset('wids',
                       data=all_wids,
                       dtype=np.int16)
    h5f.close()
    print('save->', save_path)

每张图片需要人工缩放到大小为[32, 16 * len(text)]。

DietDietDiet commented 3 years ago

中文是要改成32*len(text)吧,但中英混排的场景是不是按照图片宽度不固定的逻辑会比较好

ganji15 commented 3 years ago

@DietDietDiet 这个就要你自己试一下了。

DietDietDiet commented 3 years ago

有个问题想确认下,config里面关于generator的n_class就不用考虑blank了对吧

ganji15 commented 3 years ago

要考虑的。blank是0。

isyyzhang commented 3 years ago

Hi, 非常感谢您的开源工作。 个人想尝试一下在中文数据上的生成效果,能否麻烦简述一下hdf5文件的过程和生成前的大概数据排布,感谢!

请问您在中文数据上实验成功了么,我将中文数据缩放成[32, 32 * len(text)],char_width也设置为32,但生成的图像中字符总是缺一半

ganji15 commented 3 years ago

@isyyzhang 你好,默认的字符长宽比是2:1,设成1:1需要调一下网络结构。

peif1987 commented 3 years ago

Hi, 非常感谢您的开源工作。 个人想尝试一下在中文数据上的生成效果,能否麻烦简述一下hdf5文件的过程和生成前的大概数据排布,感谢!

请问您在中文数据上实验成功了么,我将中文数据缩放成[32, 32 * len(text)],char_width也设置为32,但生成的图像中字符总是缺一半

请问一下中文效果怎么样呢?

zhangshen12356 commented 2 years ago

参考代码

def gen_h5file(all_imgs, all_texts, all_wids, save_name):
    img_seek_idxs, img_lens = [], []
    cur_seek_idx = 0
    for img in all_imgs:
        img_seek_idxs.append(cur_seek_idx)
        img_lens.append(img.shape[-1])
        cur_seek_idx += img.shape[-1]

    lb_seek_idxs, lb_lens = [], []
    cur_seek_idx = 0
    for lb in all_texts:
        lb_seek_idxs.append(cur_seek_idx)
        lb_lens.append(len(lb))
        cur_seek_idx += len(lb)

    save_imgs = np.concatenate(all_imgs, axis=-1)
    save_texts = list(itertools.chain(*all_texts))
    save_lbs = [ord(ch) for ch in save_texts]
    save_path = os.path.join(save_name + '.hdf5')
    h5f = h5py.File(save_path, 'w')
    h5f.create_dataset('imgs',
                        data=save_imgs,
                        compression='gzip',
                        compression_opts=4,
                        dtype=np.uint8)
    h5f.create_dataset('lbs',
                        data=save_lbs,
                        dtype=np.int32)
    h5f.create_dataset('img_seek_idxs',
                       data=img_seek_idxs,
                       dtype=np.int64)
    h5f.create_dataset('img_lens',
                       data=img_lens,
                       dtype=np.int16)
    h5f.create_dataset('lb_seek_idxs',
                       data=lb_seek_idxs,
                       dtype=np.int64)
    h5f.create_dataset('lb_lens',
                       data=lb_lens,
                       dtype=np.int16)
    h5f.create_dataset('wids',
                       data=all_wids,
                       dtype=np.int16)
    h5f.close()
    print('save->', save_path)

每张图片需要人工缩放到大小为[32, 16 * len(text)]。

请问一下,函数中的参数都是什么意思以及是怎么得到的呀?