精华内容
下载资源
问答
  • OCR手写字体生成数据

    万次阅读 2020-10-29 19:14:36
    根据CASIA的HWDB1.X的手写字符生成了一些带有字符级标注、行级别标注的文本数据,分享给需要的同学。 生成基于不同人的字体、字体大小、行间字体间隔、旋转角度、文本布局的文字贴图。 生成素材:共65种贴图背景...

    简述:

            根据CASIA的HWDB1.X的手写字符生成了一些带有字符级标注、行级别标注的文本数据,分享给需要的同学。

    1.  生成基于不同人的字体、字体大小、行间字体间隔、旋转角度、文本布局的文字贴图。
    2.  生成素材:共65种贴图背景, 由420位手写字体作者完成的71,122个符号, 1,609,136个汉字/3,866类。
    3.  数据量:Train:2597张, Test:662张,目前完了HWDB1.0部分,part2,part3如果需要后期可以继续制作。

    字符素材:

    数据示例:

         

    字符级标注信息:

    行级标注信息:

    CASIA HWDB数据下载地址:http://www.nlpr.ia.ac.cn/databases/handwriting/Download.html

    欢迎加入OCR交流群,在群文件中可以直接领取生成数据~~~

    展开全文
  • 程序使用pytorch库,利用生成对抗网络(GAN)算法和MNIST数据集生成手写字体,pytorch+python3.6
  • 先放结果这是通过GAN迭代训练30W次,耗时3小时生成手写字图片效果,大部分的还是能看出来是数字的。实现原理简单说下原理,生成对抗网络需要训练两个任务,一个叫生成器,一个叫判别器,如字面意思,一个负责生成...

    先放结果

    这是通过GAN迭代训练30W次,耗时3小时生成的手写字图片效果,大部分的还是能看出来是数字的。

    实现原理

    简单说下原理,生成对抗网络需要训练两个任务,一个叫生成器,一个叫判别器,如字面意思,一个负责生成图片,一个负责判别图片,生成器不断生成新的图片,然后判别器去判断哪儿哪儿不行,生成器再不断去改进,不断的像真实的图片靠近。

    这就如同一个造假团伙一样,A负责生产,B负责就鉴定,刚开始的时候,两个人都是菜鸟,A随便画了一幅画拿给B看,B说你这不行,然后A再改进,当然需要改进的不止A,随着A的改进,B也得不断提升,B需要发现更细微的差异,直至他们觉得已经没什么差异了(实际肯定还存在差异),他们便决定停止"训练",开始卖吧。

    实现代码

    # -*- coding: utf-8 -*-

    # @author: Awesome_Tang

    # @date: 2019-02-22

    # @version: python2.7

    import tensorflow as tf

    from tensorflow.examples.tutorials.mnist import input_data

    from datetime import datetime

    import numpy as np

    import os

    import matplotlib.pyplot as plt

    os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'

    class Config:

    alpha = 1e-2

    drop_rate = 0.5 # 保留比例

    steps = 300000 # 迭代次数

    batch_size = 128 # 每批次训练样本数

    epochs = 100 # 训练轮次

    num_units = 128

    size = 784

    noise_size = 100

    smooth = 0.01

    learning_rate = 1e-4

    print_per_step = 1000

    class Gan:

    def __init__(self):

    print('Loading data......')

    # 读取MNIST数据集

    self.mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)

    # 定义占位符,真实图片和生成的图片

    self.real_images = tf.placeholder(tf.float32, [None, Config.size], name='real_images')

    self.noise = tf.placeholder(tf.float32, [None, Config.noise_size], name='noise')

    self.drop_rate = tf.placeholder('float')

    self.train_step()

    def generator_graph(self, noise, n_units, out_dim, alpha, reuse=False):

    with tf.variable_scope('generator', reuse=reuse):

    # Hidden layer

    h1 = tf.layers.dense(noise, n_units, activation=None)

    # Leaky ReLU

    h1 = tf.maximum(alpha * h1, h1)

    h1 = tf.layers.dropout(h1, rate=self.drop_rate)

    # Logits and tanh output

    logits = tf.layers.dense(h1, out_dim, activation=None)

    out = tf.tanh(logits)

    return out

    @staticmethod

    def discriminator_graph(image, n_units, alpha, reuse=False):

    with tf.variable_scope('discriminator', reuse=reuse):

    # Hidden layer

    h1 = tf.layers.dense(image, n_units, activation=None)

    # Leaky ReLU

    h1 = tf.maximum(alpha * h1, h1)

    logits = tf.layers.dense(h1, 1, activation=None)

    # out = tf.sigmoid(logits)

    return logits

    def net(self):

    # generator

    fake_image = self.generator_graph(self.noise, Config.num_units, Config.size, Config.alpha)

    # discriminator

    real_logits = self.discriminator_graph(self.real_images, Config.num_units, Config.alpha)

    fake_logits = self.discriminator_graph(fake_image, Config.num_units, Config.alpha, reuse=True)

    # discriminator的loss

    # 识别真实图片

    d_loss_real = tf.reduce_mean(

    tf.nn.sigmoid_cross_entropy_with_logits(logits=real_logits, labels=tf.ones_like(real_logits)) * (

    1 - Config.smooth))

    # 识别生成的图片

    d_loss_fake = tf.reduce_mean(

    tf.nn.sigmoid_cross_entropy_with_logits(logits=fake_logits, labels=tf.zeros_like(fake_logits)))

    # 总体loss

    d_loss = tf.add(d_loss_real, d_loss_fake)

    # generator的loss

    g_loss = tf.reduce_mean(

    tf.nn.sigmoid_cross_entropy_with_logits(logits=fake_logits, labels=tf.ones_like(fake_logits)) * (

    1 - Config.smooth))

    net_vars = tf.trainable_variables()

    # generator中的tensor

    g_vars = [var for var in net_vars if var.name.startswith("generator")]

    # discriminator中的tensor

    d_vars = [var for var in net_vars if var.name.startswith("discriminator")]

    # optimizer

    dis_optimizer = tf.train.AdamOptimizer(Config.learning_rate).minimize(d_loss, var_list=d_vars)

    gen_optimizer = tf.train.AdamOptimizer(Config.learning_rate).minimize(g_loss, var_list=g_vars)

    return dis_optimizer, gen_optimizer, d_loss, g_loss

    def train_step(self):

    dis_optimizer, gen_optimizer, d_loss, g_loss = self.net()

    print('Training & Evaluating......')

    start_time = datetime.now()

    sess = tf.Session()

    sess.run(tf.global_variables_initializer())

    for step in range(Config.steps):

    real_image, _ = self.mnist.train.next_batch(Config.batch_size)

    real_image = real_image * 2 - 1

    # generator的输入噪声

    batch_noise = np.random.uniform(-1, 1, size=(Config.batch_size, Config.noise_size))

    sess.run(gen_optimizer, feed_dict={self.noise: batch_noise, self.drop_rate: Config.drop_rate})

    sess.run(dis_optimizer, feed_dict={self.noise: batch_noise, self.real_images: real_image})

    if step % Config.print_per_step == 0:

    dis_loss = sess.run(d_loss, feed_dict={self.noise: batch_noise, self.real_images: real_image})

    gen_loss = sess.run(g_loss, feed_dict={self.noise: batch_noise, self.drop_rate: 1.})

    end_time = datetime.now()

    time_diff = (end_time - start_time).seconds

    msg = 'Step {:3}k Dis_Loss:{:6.2f}, Gen_Loss:{:6.2f}, Time_Usage:{:6.2f} mins.'

    print(msg.format(int(step / 1000), dis_loss, gen_loss, time_diff / 60.))

    self.gen_image(sess)

    def gen_image(self, sess):

    sample_noise = np.random.uniform(-1, 1, size=(25, Config.noise_size))

    samples = sess.run(

    self.generator_graph(self.noise, Config.num_units, Config.size, Config.alpha, reuse=True),

    feed_dict={self.noise: sample_noise})

    plt.figure(figsize=(8, 8), dpi=80)

    for i in range(25):

    img = samples[i]

    plt.subplot(5, 5, i + 1)

    plt.imshow(img.reshape((28, 28)), cmap='Greys_r')

    plt.axis('off')

    plt.show()

    if __name__ == "__main__":

    Gan()

    Peace~~

    展开全文
  • 此工具将帮助您将文本转换为手写xD https://saurabhdaware.github.io/text-to-handwriting/我讨厌编写作业,因此我制作了此工具,可将文本转换为看起来像手写的图像:face_with_tongue:输出:hugging_face:用于本地...
  • 手写文章生成脚本,可模仿手写字体。 安装方法 1.下载脚本地址:https://github.com/DaviesGit/office_handwriting 2.安装handwriting_font_config文件夹内的所有字体。 3.打开word选择视图>宏>查看宏...

    目录

    效果图

    安装方法

    使用方法


    效果图

    先上效果图


     

    手写文章生成脚本,可模仿手写字体。

     

    安装方法

     

    1.下载脚本地址:https://github.com/DaviesGit/office_handwriting

    2.安装handwriting_font_config文件夹内的所有字体。

    3.打开word选择视图>宏>查看宏

    4.填写宏的名称handwriting点击创建

    5.将handwriting.vba文件中的内容复制到vbs编辑器中保存

    6.右键Class Modules选择插入>Class Module

    7.将FontConfig.vba中的内容复制到编辑器中保存,并将类名改为FontConfig

     

     

    使用方法

     

    1.打开查看宏的窗口,选择刚刚创建的宏,点击执行。

    2.手动调整部分字体格式。

    3.进行你需要的操作。

    4.Good luck!

     

    展开全文
  • 直接从文本文件生成几乎真实的喜欢手写文本到.webp进行打印 模拟手写与中文以及几乎所有采用Unicode编码的语言兼容 支持自定义手写字体,每个单词的整体(包括其笔划旋转角度)应被随机打乱 支持三个自由度变换。 ...
  • 手写文字生成器-源码

    2021-02-16 23:26:50
    手写文字生成器 在找到它V1.0: 一切正常,但您可以创建问题或删除邮件。请等待更多更新! 输出:
  • Java代码生成手写笔记

    2020-06-05 13:15:24
    在家上网课时老师会不会需要你拍照上传你的笔记呢? 看完本文章让你告别手写...起始的bg.jpg和biji.txt和ss2.ttf文件我会上传在笔记生成文件里,包括源码 import come.MainFuncation.WorkWrite; import java.awt.*; imp

    Java小白修炼手册


    在家上网课时老师会不会需要你拍照上传你的笔记呢?
    看完本文章让你告别手写笔记
    话不多说,先来看一下效果图
    在这里插入图片描述
    是不是跟手写的一样
    接下来直接上代码,由于没有啥技术含量,无非就是给图片添加水印
    代码我就不再细说了
    有兴趣的朋友可以自己看一下源码
    主函数和实现方法不在同一个class,注意!!
    主函数如下
    起始的bg.jpg和biji.txt和ss2.ttf文件我会上传在笔记生成文件里,包括源码

    import come.MainFuncation.WorkWrite;
    import java.awt.*;
    import java.util.Scanner;
    public class StartFunction {
    
        public static void main(String[] args) {
            System.out.print("请输入你的作业题目:");
            Scanner scanner = new Scanner(System.in);
            String fileName=scanner.next();
            System.out.println("开始生成笔记...");
            //启动
            WorkWrite workWrite = new WorkWrite();
            String backgroundImgPath="bg2.jpg"; //纸张图片地址
            String bijiPath="biji.txt";//你的笔记文本的地址
            String fontPath="ss2.ttf";//你的自定义字体文件的地址
            Font newFont=workWrite.newFont(fontPath,110);//自定义字体和大小,未设置大小则默认90
            String[] txt=workWrite.MarkContent(bijiPath);//笔记文本
            workWrite.setRowlen(120);//设置行间距,未设置默认为100
            Color color= new Color(Color.black.getRGB());//文字为黑色
            workWrite.addWaterMark(backgroundImgPath, fileName,txt,color,newFont);//生成
            System.out.println("完成");
        }
    }
    

    你可以自定义bg.jpg,即更换纸张图片
    将你网上白嫖来的笔记内容复制粘贴在biji.txt中
    字体文件我已经提供2种(代码里用的第二种手写体,个人感觉比另一种真实),不需要更改,你也可以网上下载个其他的手写体

    实现方法代码:
    这部分代码是干活的

    import java.awt.*;
    import java.awt.image.BufferedImage;
    import java.io.*;
    import javax.imageio.ImageIO;
    public class WorkWrite {
    
        private float fontSize=90;//字体大小
        private int rowlen=100;//行间距
        private int page=0;//页码
        /**
         * 绘制水印
         * @param split
         * @param markContentColor
         * @param font
         */
        public void addWaterMark(String backgroundImgPath, String resultImgPath, String[] split,Color markContentColor,Font font) {
    
            try {
                // 读取原图片信息
                File srcImgFile = new File(backgroundImgPath);//得到文件
                Image srcImg = ImageIO.read(srcImgFile);//文件转化为图片
                int srcImgWidth = srcImg.getWidth(null);//获取图片的宽
                int srcImgHeight = srcImg.getHeight(null);//获取图片的高
                BufferedImage bufImg = new BufferedImage(srcImgWidth, srcImgHeight, BufferedImage.TYPE_INT_RGB);
                Graphics2D g;
                g = bufImg.createGraphics();
                g.drawImage(srcImg, 0, 0, srcImgWidth, srcImgHeight, null);
                g.setColor(markContentColor); //设置水印颜色
                g.setFont(font);              //设置字体
    
                //内容起始坐标
                int x = 100;
                int y = 100;
                int maxWord= (int) (srcImgWidth/fontSize);//每行最多的字数
                for (int i=0;i<split.length;i++) {
                    //字符串可能会出现��,导致出现一些空白,所以为了保险起见将这些字符替换成空字符串
                    split[i]=split[i].replace("��","");
                    //获取字符串的字数
                    int collen=split[i].length();
                    /*
                    对每行的字符数进行规范
                     */
    
                    if(collen>maxWord){//如果大于每行规定的字数
                        String substring = split[i].substring(0, maxWord);
                        g.drawString(substring, x, y);  //绘制从0截取到最大字数的字符串
                        y += rowlen;//换行
                        String more=split[i].substring(maxWord,collen);//截取多出来的字符串
                        g.drawString(more, x, y);//绘制多出来的字符串
                        y += rowlen;//换行
                    }else {
                        //直接绘制
                        g.drawString(split[i], x, y);
                        y += rowlen;
                    }
                    //内容超出页面高度则分页
                    if(y>=srcImgHeight-1.5*rowlen) {
                        g.dispose();
                        //导出已经写满的笔记
                        productImage(bufImg,resultImgPath,++page);
                        y=rowlen;
                        g = bufImg.createGraphics();
                        g.drawImage(srcImg, 0, 0, srcImgWidth, srcImgHeight, null);
                        g.setColor(markContentColor); //设置水印颜色
                        g.setFont(font);              //设置字体
                    }
                }
                //将最后一张笔记生成
                g.dispose();
                productImage(bufImg,resultImgPath,++page);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 生产笔记图片
         * @param image
         * @param tarImgPath
         * @param page
         */
        public void productImage(BufferedImage image,String tarImgPath,int page){
            try {
                tarImgPath=tarImgPath+page+".jpg";
                FileOutputStream outImgStream = new FileOutputStream(tarImgPath);
                ImageIO.write(image, "jpg", outImgStream);
                outImgStream.flush();
                outImgStream.close();
            }catch (Exception e){
                e.printStackTrace();
            }
    
        }
    
        /**
         * 获取笔记所有内容,存入字符串数组
         * @param path path
         * @return String[]
         */
        public String[] MarkContent(String path){
            StringBuilder builder = new StringBuilder();
            try {
                FileInputStream inputStream = new FileInputStream(path);
                byte[] bytes = new byte[1024];
                int temp;
                while ((temp=inputStream.read(bytes))!=-1){
                    builder.append(new String(bytes,0,temp));
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
    
            return builder.toString().split("。");
        }
    
        /**
         * 采用自定义手写字体,看起来更真实
         * @param path path
         * @param fontSize fontSize
         * @return Font
         */
        public Font newFont(String path,float fontSize){
            Font font = null;                     //水印字体
            try {
                font = Font.createFont(Font.TRUETYPE_FONT,new File(path));
                font=font.deriveFont(fontSize);
                setFontSize(fontSize);
            } catch (FontFormatException | IOException e) {
                e.printStackTrace();
            }
            return font;
        }
        public void setFontSize(float size){
            this.fontSize=size;
        }
        public void setRowlen(int rowlen){
            this.rowlen=rowlen;
        }
    }
    

    整体运行一下
    这是biji.txt的内容
    在这里插入图片描述
    运行时输入作业名称
    在这里插入图片描述
    回车运行
    在这里插入图片描述
    运行完成后会在桌面生成一个output的文件夹

    在这里插入图片描述
    里面的图片就是你的笔记,笔记名字就是你开始时输入的
    在这里插入图片描述
    大功告成!
    相信老师应该看不出来,哈哈
    如果有疑问可以评论区留言,包回复
    如果有不足之处望指出,感谢阅读!!

    展开全文
  • 手写字体生成

    千次阅读 2019-10-28 16:36:51
    风格迁移在图像应用 ... 基于风格迁移的手写字体生成 http://www.dataguru.cn/article-11281-1.html 论文:http://www.doc88.com/p-8058499366708.html ...
  • 你不知道的python,我们将探讨如何将文本转换为手写体以及如何将其保存为任何格式。 我们需要下载一个名为“pywhatkit”的python模块。 第 1 步 :安装模块pywhatkit。 您只需要在系统命令提示符(或终端)中运行此...
  • 用于 IAM 手写数据库的 RNNlib 数据集生成器 这是的训练数据生成器, 是一种循环神经网络实现。 有关网络的更多信息,请参阅 。 先决条件 为了生成训练数据,请安装Python 、 Pillow (PIL) 和NetCDF 。 目前,生成器...
  • Deep Visual-Semantic Alignments for Generating Image Descriptions 个人理解 ...本文工作:实现了生成图片的密集描述,也就是说对于包含大量内容的图片,本文的模型可以轻松地识别出图片的内容以及自然语言中
  • 用于合成时尚的计算机生成手写体的程序。 您可以直接 (。jar文件) 概述 Muse可以从纯文本中合成时尚的英语手写内容。 它的算法仔细连接相邻字符的笔触以创建草书单词,并使用随机扰动来确保每个字符在渲染结果...
  • 那么今天盘哥就来分享一款可以解决这一问题的神器,它的作用很简单,就是将电子文档转化为手写字体。 手写模拟器(PC电脑) 软件名字叫手写模拟器,完全纯净,免费无广告,是绿色版本软件,无需安装注册。软件启动...
  • 作者 | Saurabh Daware 译者 | 弯月,责编 | 郭芮 来源 | CSDN(ID:CSDNnews) 最近,有一个名叫Saurabh Daware的印度大学生只花了3个小时就编写了一款自动化工具,能够将文本转换成手写文字,并用这个工具来应付...
  • 文字裁剪 此工具生成scss,less和手写笔混合,以删除Web文本上方和下方的多余空格。 参见 。
  • 告别手写 API文档生成工具推荐

    万次阅读 2017-04-26 22:38:11
    你是否还通过手写的方式来生成和编写这些文档呢?那么你就OUT啦!话说工欲善其事必先利其器,本文分享7款非常好的API文档生成工具给大家。 Web API文档工具列表 Swagger ——Swagger框架可以通过代码生成漂亮的...
  • 该开源工具是一名来自印度塔内的大学生 Saurabh Daware 开源,他花费了 3 个小时编写了这么一款自动化工具,能够将文本转换为手写文字看起来像笔迹的图像,并通过该工具来应付需要手写的大学作业。 我们先来看看...
  • OCR文本图像合成工具

    2020-10-27 17:14:35
    OCR文本图像合成工具 问题 在进行文字识别时候,需要使用的数据集样式为一张...生成数据:通过文本生成对应的文本图片 真实数据的收集是比较费事费力的,因此可以使用一些生成数据的工具来无限量的生成想要的数据。
  • 1,应该实现对于手写笔迹的记录,生成字迹截图 1.1怎么实现呢?在定点和移动中的鼠标所在处画一条线,鼠标按住移动的话,线也会跟着移动 使用一个列表保存所有移动过的点,然后要画线的时候,循环遍历列表,依次画出...
  • 用预训练的Bert模型进行文本分类,主要的工作有两个,分别是: 文本预处理 自定义全连接层分类网络并将分类网络连接到 预训练好的Bert网络之后 1 配置文件 首先,我们需要定义一个配置文件,定义一系列要使用到的...
  • 论文信息: 作者: 王馨悦,董兰芳 ( 中国科学技术大学计算机科学与技术学院,合肥230027) ... 脱机中文手写体; Attention 机制; LSTM 中图分类号: TP391 文献标识码: A 文章编号: 1000-1220( 2019)
  • 文本分类(文本分类)是自然语言处理中的一个重要应用技术,根据文档的内容或主题,自动识别文档所属的预先定义的类别标签。文本分类是很多应用场景的基础,某些垃圾邮件识别,舆情分析,情感识别,新闻自动分类,...
  • 基于文本描述的图像生成研究(Python)(任务书,开题报告,论文15000字,参考代码)摘要生成对抗网络是图像生成方面的重点关注模型。本文主要论述了如何将文字中的描述信息正确对应到生成的图像中。系统的实现原理分为两个...
  • 本字体是一款基于 的手写风格的字体。利用原字体中已有的笔划和部件,通过拼接和调整造出新字 (必要时自己用鼠标写出部件) 。目前已补全原字体中有对应繁体字的简体字、 GB 2312 范围内的所有汉字 (6763 个) 、...
  • 生成对抗网络(GAN)实例 代码+数据集 很实用的代码,并且简单易学,对深度学习感兴趣的可以看看 数据集有手写图片的识别,也可以替换成自己的数据集
  • 全卷积自编码器来提取退化图像的字符文本(前景),并用高斯混合模型进行背景重建,最后,将字符文本和背景进行融合生成重建图像。 c.提出了第二种改进的图像重建方法。即采用深度卷积网络代替高斯混合模型。 ...
  • ASP.NET(c#) 对一个空白的word文件编程,生成图文并茂的Word文件。可以用程序设置文本段落格式、填充数据、插入图片、插入另一个word或excel文件(企业版支持) 不是服务器端自动化。 使用的是PageOffice,除了提供...
  • 关注公众号,发现CV技术之美本文收集文本检测与识别相关论文,包含任意形状文本检测、场景文本识别、手写文本识别、文本分割、文本图像检索、视频文本识别等,有趣的方向很多,共计 17 篇。去年C...
  • 手写汉字分割2

    千次阅读 2018-11-22 21:33:16
    手写汉字的处理中对于不同的文本采用不同的分割处理方法: 对于文本块的处理应先进性腐蚀操作在进行连通域判断即可在一张仅有文本区域的内容中。 利用连通区域腐蚀的方法也可以进行目标的检测。 在对比较贵整的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 21,181
精华内容 8,472
关键字:

文本生成手写