dailenson / SDT

This repository is the official implementation of Disentangling Writer and Character Styles for Handwriting Generation (CVPR23).
MIT License
956 stars 81 forks source link

英文字母相关问题。 #83

Open HughesField opened 2 months ago

HughesField commented 2 months ago

请问怎么使用自己书写的英文字母进行训练呢,以及怎样可以得到英文字母的书写轨迹(坐标)呢,非常感谢。 另外有没有可能以连笔的单词进行训练,实现没训练过的单词也能做到(输入字母)输出连笔单词呢?

dailenson commented 2 months ago

首先下载我们的英文预训练模型,然后执行python test.py --pretrained_model checkpoint_path --store_type online --sample_size 500 --dir Generated/English即可输出英文图像。如果想要合成轨迹数据,在test.py中将--store_type的参数设置成online即可。至于连笔单词,这个工作暂时还不支持哈

HughesField commented 1 month ago

您好,请问使用 test.py 最后生成的结果,每个字符的书写点序列是在.mdb文件里对吗?在windows office和python试了一些方法解析数据库文件,提示文件类型不符或者其他错误。请问是就是使用一般数据库文件格式打开,只是我windows access 安装不正确;还是是使用别的方法解析呢? image

aceliuchanghong commented 1 month ago

您好,请问使用 test.py 最后生成的结果,每个字符的书写点序列是在.mdb文件里对吗?在windows office和python试了一些方法解析数据库文件,提示文件类型不符或者其他错误。请问是就是使用一般数据库文件格式打开,只是我windows access 安装不正确;还是是使用别的方法解析呢? image

import os
import lmdb
import pickle

script = {"CHINESE": ['CASIA_CHINESE', 'Chinese_content.pkl'],
          'JAPANESE': ['TUATHANDS_JAPANESE', 'Japanese_content.pkl'],
          "ENGLISH": ['CASIA_ENGLISH', 'English_content.pkl']
          }

root = '../data' # 记得改下
dataset = 'CHINESE'
num_img = 15
index = 1
max_len = 150
if __name__ == '__main__':
    data_path = os.path.join(root, script[dataset][0])
    lmdb_path = os.path.join(data_path, 'train')
    print(lmdb_path)

    lmdb = lmdb.open(lmdb_path, max_readers=8, readonly=True, lock=False, readahead=False, meminit=False)
    print(lmdb.begin(write=False).get('num_sample'.encode('utf-8')).decode())
    with lmdb.begin(write=False) as txn:
        num_sample = int(txn.get('num_sample'.encode('utf-8')).decode())
        for i in range(index):
            data = pickle.loads(txn.get(str(i).encode('utf-8')))
            print(data)
            tag_char, coords, fname = data['tag_char'], data['coordinates'], data['fname']
            print(str(i) + "个:\ntag_char: {}\ncoords_shape: {}\nfname: {}".format(tag_char, coords.shape, fname))
HughesField commented 1 month ago

非常感谢!

HughesField commented 1 month ago
    您好,这边我在阅读您的代码的时候对一些数据结构不太明白。
    其中用于训练的和生成的data.mdb数据,每项有三个关键字,键coordinates对应的数据是一个汉字的5列n行矩阵。util.py中的coords_render函数接收coordanates矩阵时按照第五列/第四列的0或1进行分割。请问这两位标志位是代表什么含义/怎么对笔画进行分割的呢?
    期待您的回复。
dailenson commented 1 month ago
    您好,这边我在阅读您的代码的时候对一些数据结构不太明白。
    其中用于训练的和生成的data.mdb数据,每项有三个关键字,键coordinates对应的数据是一个汉字的5列n行矩阵。util.py中的coords_render函数接收coordanates矩阵时按照第五列/第四列的0或1进行分割。请问这两位标志位是代表什么含义/怎么对笔画进行分割的呢?
    期待您的回复。

矩阵的每一行是一个五元组,五元组的前两位是[x,y]坐标,最后三位是笔画的三种状态位,[0,0,1]代表起笔,抬笔是[0,1,0],[0,0,1]是停笔。从第四列或者第五列分割是为了按笔画把字符分开~

HughesField commented 2 weeks ago

作者大大您好,我在使用 --store_type online 模式运行test.py之后,在文件夹中 image 得到这样一些文件。我在查看data.mdb的内容后,对里面的矩阵代表的含义不太了解。例如: image image 请问您能否帮忙解答呢,非常感谢。