生活随笔
收集整理的這篇文章主要介紹了
批量生成印刷字体字库
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
主要目的
本文主要是為了做印刷體字體識別的前期工作做準備,后期需要大量字體樣本做神經網絡訓練,但缺乏印刷體樣本,因此特地寫了個程序自動生成所需要的樣本。
##主要實現過程
本文主要分為三個部分實現,主要包括文本字庫預處理,生成圖片字已及保存到相應文件夾。其中文本字庫采用的是百度上搜索到的《常用漢字3500個》,生成圖片用的是PIL模塊。
?
#文件目錄一
# -*- coding: utf-8 -*-
#獲取字體文件名,字體文件可以在百度下載或者電腦字體目錄下尋找
import os
def Word_Font():Word_Font_Path = 'D:\pycharm11\文字生成\Word_Font'dirs = os.listdir(Word_Font_Path)Word_Font_List=[]for dir in dirs:Word_Font_List.append(dir)return Word_Font_List#文件目錄二
import re
f = open ("D:\pycharm11\文字生成\常用漢字3500個.txt","r")
lines = f.readlines() # 讀取全部內容 ,并以列表方式返回
Library = []
for line in lines:line = line.split('\n')line = re.sub(r'\n', "", line[0])line = re.sub(':', "", line)line=line.replace(" ", "")line = line.lstrip(':')line = line[:0] + line[13:]for i in line:Library.append(i)
size_L=len(Library)#主程序目錄
from PIL import Image, ImageDraw, ImageFont, ImageOps
import os
import re
import Word_Font
#讀取字體文件
Word_Font_List = Word_Font.Word_Font()#選擇字體以及圖片參數的初始值
class LetterImage():def __init__(self, imgSize=(0, 0), imgMode='RGB', bg_color=(0, 0,0), fg_color=(255, 255, 255),fontsize=10,Word_Font=Word_Font_List[1]):self.imgSize = imgSizeself.imgMode = imgModeself.fontsize = fontsizeself.bg_color = bg_colorself.fg_color = fg_colorself.font = ImageFont.truetype(Word_Font, fontsize)#設定生成圖片大小def GenLetterImage(self, letters):self.letters = letters(self.letterWidth, self.letterHeight) = self.font.getsize(letters)if self.imgSize == (0, 0):self.imgSize = (self.letterWidth - 0, self.letterHeight +15) #底邊邊距self.imgWidth, self.imgHeight = self.imgSizeself.img = Image.new(self.imgMode, self.imgSize, self.bg_color)self.drawBrush = ImageDraw.Draw(self.img)textY0 = (self.imgHeight - self.letterHeight-2 )textY0 = int(textY0)textX0 = int((self.imgWidth - self.letterWidth-2 )) #顯示窗口坐標self.drawBrush.text((textX0, textY0), self.letters, fill=self.fg_color, font=self.font)if __name__ == '__main__':f = open("D:\pycharm11\文字生成\常用漢字3500個.txt", "r")lines = f.readlines() # 讀取全部內容 ,并以列表方式返回Library = []for line in lines:line = line.split('\n')line = re.sub(r'\n', "", line[0])line = re.sub(':', "", line)line = line.replace(" ", "")line = line.lstrip(':')# line = line[:0] + line[13:]for i in line:Library.append(i)letterList = []#---------------將圖片參數追加到列表以便后期調用--------------------for j in range (0,len(Word_Font_List),1):letterList.append(LetterImage(bg_color=(0, 120, 0), fontsize=100,Word_Font=Word_Font_List[j]))print(Word_Font_List[j])num_letter = len(Library) #字體數量# ---------------------------創建文件夾------------------------------File_name = re.sub(r'\.', '_', Word_Font_List[j])paths = os.getcwd()[:-4] + '文字生成\\'+File_name # 獲取此py文件路徑,在此路徑選創建文件夾if not os.path.exists(paths):os.makedirs(paths)paths = paths +"\\"# -----------------在某一種字體下,對字庫遍歷,生成相應字體圖片------------------------for i in range(num_letter-1):letterList[j].GenLetterImage(Library[i])grayImg = ImageOps.grayscale(letterList[j].img)grayImg.save(paths+str(i)+".png")
流程圖:
總結:
本文在在字庫文本庫里中,處理得不干凈,主要有里面的冒號以及重復字處理,后期有待改進,另外程序中沒有寫入判斷機制,比如創建的文件夾是否存在,里面的文件是否要重新更新。
?
總結
以上是生活随笔為你收集整理的批量生成印刷字体字库的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。