用python写楷书 实现文字转换

简介: 用python写楷书 实现文字转换
import os
import pdb
import PIL
import numpy as np
from PIL import Image, ImageFont
from PIL import ImageDraw
import scipy.misc as misc
CANVAS_SIZE = 256
# CANVAS_SIZE = 224
# CHAR_SIZE = 200
CHAR_SIZE = 220
EMBEDDING_DIM = 128
X_OFFSET = 20
Y_OFFSET = 20
def _draw_single_char(font, ch, width, height):
    img = Image.new("RGB", (width, height), (255,255,255))
    draw = ImageDraw.Draw(img)
    draw.text((0, 0), ch, fill=0, font=font)
# 这里的设置是为了和原始的训练集参数设置一致
    # draw.text((X_OFFSET, Y_OFFSET), ch, fill=0, font=font)
    return img
def get_textsize(font, ch):
    img = Image.new("RGB", (1, 1), (255, 255, 255))
    draw = ImageDraw.Draw(img)
    char_size = draw.textsize(ch, font=font)
    return char_size
def draw_single_char(img, canvas_size, char_size):
    width, height = img.size
    factor = width * 1.0 / char_size
    max_height = canvas_size * 2
    if height / factor > max_height:  # too long
        img = img.crop((0, 0, width, int(max_height * factor)))
    if height / factor > char_size + 5:  # CANVAS_SIZE/CHAR_SIZE is a benchmark, height should be less
        factor = height * 1.0 / char_size
    img = img.resize((int(width / factor), int(height / factor)), resample=PIL.Image.LANCZOS)
    bg_img = Image.new("RGB", (canvas_size, canvas_size), (255, 255, 255))
    offset = ((canvas_size - img.size[0]) // 2, (canvas_size - img.size[1]) // 2)
    bg_img.paste(img, offset)
    return bg_img
def draw_single_char_by_font(ch, font, canvas_size, char_size):
    width, height = get_textsize(font, ch)
    char_img = _draw_single_char(font, ch, width, height)
    return draw_single_char(char_img, canvas_size, char_size)
def save_imgs(imgs, count, save_dir):
    # 这里的0是label标签
    p = os.path.join(save_dir, "0_%03d.jpg" % count)
    imgs.save(p)
def draw_paired_image(src_img, dst_img, canvas_size):
    assert src_img.size == (canvas_size, canvas_size)
    assert dst_img.size == (canvas_size, canvas_size)
    example_img = Image.new("RGB", (canvas_size * 2, canvas_size), (255, 255, 255))
    example_img.paste(dst_img, (0, 0))
    example_img.paste(src_img, (canvas_size, 0))
    return example_img
def draw_example(ch, src_font, dst_font, canvas_size, filter_hashes, char_size):
    src_img = draw_single_char_by_font(ch, src_font, canvas_size, char_size)
    dst_img = draw_single_char_by_font(ch, dst_font, canvas_size, char_size)
    # check the filter example in the hashes or not
    dst_hash = hash(dst_img.tobytes())
    if dst_hash in filter_hashes or np.min(src_img) == 255 or np.min(dst_img) == 255:
        return None
    return draw_paired_image(src_img, dst_img, canvas_size)
def draw_example_src_only(ch, src_font, dst_img, canvas_size, char_size):
    src_img = draw_single_char_by_font(ch, src_font, canvas_size, char_size)
    assert dst_img.size == (canvas_size, canvas_size), pdb.set_trace()
    if np.min(src_img) == 255 or np.min(dst_img) == 255:
        return None
    example_img = Image.new("RGB", (canvas_size * 2, canvas_size), (255, 255, 255))
    example_img.paste(dst_img, (0, 0))
    example_img.paste(src_img, (canvas_size, 0))
    return example_img
if __name__ == '__main__':
    dst_font = "fonts/font/caoti.ttf"
    save_dir = "test/"
    test = "我想要图片"
    print(os.path.isfile(dst_font))
    dst_font = ImageFont.truetype(dst_font, size=CHAR_SIZE)
    count=0
    for ch in list(test):
        dst_img = draw_single_char_by_font(ch, dst_font, CANVAS_SIZE, CHAR_SIZE)
        save_imgs(dst_img,count,save_dir)
        count = count+1



9caee103fa0d401bba5df95184bb529a.png




相关文章
|
5月前
|
数据挖掘 数据安全/隐私保护 开发者
使用Spire.PDF for Python插件从PDF文件提取文字和图片信息
使用Spire.PDF for Python插件从PDF文件提取文字和图片信息
455 0
|
12月前
|
人工智能 机器人 UED
AIGC革新,将文字或者LOGO融入AI视频基于PIKA-labs(Python3.10)
很多平台都会禁止用户使用带有网址或者二维码的头像以及文章配图,这样可以有效的防止用户的一些“导流”行为。当然,头像、文章或者视频现在都是AI来审,毕竟现在人工的成本实在太高,但是如果我们把文字元素直接融入图像或者视频之中,如此一来,AI也会很难识别出一些“导流”的元素。 本次我们依靠PIKA-labs平台,无需本地环境,直接简单粗暴输出带有文字元素的光影视频效果,基于Python3.10。
AIGC革新,将文字或者LOGO融入AI视频基于PIKA-labs(Python3.10)
|
4天前
|
人工智能 小程序 API
文字转语音神器+Python编程搞定语音报时小程序
文字转语音神器+Python编程搞定语音报时小程序
11 2
|
8天前
|
API 语音技术 开发者
用python实现文字转语音的5个较好用的模块
这篇文章介绍了五个Python模块:gtts、pyttsx3、baidu-aip、pywin32和speech,它们能够实现文本到语音的转换功能。
12 1
|
2月前
|
机器学习/深度学习 人工智能 文字识别
轻松识别文字,这款Python OCR库支持超过80种语言
轻松识别文字,这款Python OCR库支持超过80种语言
|
2月前
|
Linux UED iOS开发
Python colorama 设置控制台、命令行输出彩色文字
Python colorama 设置控制台、命令行输出彩色文字
32 0
|
3月前
|
Python
Python模拟火焰文字效果:炫酷的火焰字动效
Python模拟火焰文字效果:炫酷的火焰字动效
34 1
|
4月前
|
Python 索引
【Python字符串攻略】:玩转文字,编织程序的叙事艺术
【Python字符串攻略】:玩转文字,编织程序的叙事艺术
|
12月前
|
机器学习/深度学习 人工智能 自然语言处理
栩栩如生,音色克隆,Bert-vits2文字转语音打造鬼畜视频实践(Python3.10)
诸公可知目前最牛逼的TTS免费开源项目是哪一个?没错,是Bert-vits2,没有之一。它是在本来已经极其强大的Vits项目中融入了Bert大模型,基本上解决了VITS的语气韵律问题,在效果非常出色的情况下训练的成本开销普通人也完全可以接受。
栩栩如生,音色克隆,Bert-vits2文字转语音打造鬼畜视频实践(Python3.10)
|
5月前
|
文字识别 数据挖掘 网络安全
Python实现avif图片转jpg格式并识别图片中的文字
在做数据分析的时候有些数据是从图片上去获取的,这就需要去识别图片上的文字。Python有很多库可以很方便的实现OCR识别图片中的文字。这里介绍用EasyOCR库进行图片文字识别。easyocr是一个比较流行的库,支持超过80种语言,识别率高,速度也比较快。
99 2
下一篇
无影云桌面