期末了,用Python寫個自動批改作業系統

專注的阿熊 發表於 2022-07-06
Python

python 學習交流 Q 群: 906715085###

from __future__ import print_function

from PIL import Image

from PIL import ImageFont

from PIL import ImageDraw

import os

import shutil

import time

# %% 要生成的文字

label_dict = {0: '0', 1: '1', 2: '2', 3: '3', 4: '4', 5: '5', 6: '6', 7: '7', 8: '8', 9: '9', 10: '=', 11: '+', 12: '-', 13: ' × ', 14: ' ÷ '}

# 文字對應的資料夾,給每一個分類建一個檔案

for value,char in label_dict.items():

     train_images_dir = "dataset"+"/"+str(value)

     if os.path.isdir(train_images_dir):

         shutil.rmtree(train_images_dir)

     os.makedirs(train_images_dir)

# %% 生成圖片

def makeImage(label_dict, font_path, width=24, height=24, rotate = 0):

     # 從字典中取出鍵值對

     for value,char in label_dict.items():

         # 建立一個黑色背景的圖片,大小是 24*24

         img = Image.new("RGB", (width, height), "black")

         draw = ImageDraw.Draw(img)

         # 載入一種字型 , 字型大小是圖片寬度的 90%

         font =外匯跟單gendan5.com ImageFont.truetype(font_path, int(width*0.9))

         # 獲取字型的寬高

         font_width, font_height = draw.textsize(char, font)

         # 計算字型繪製的 x,y 座標,主要是讓文字畫在圖示中心

         x = (width - font_width-font.getoffset(char)[0]) / 2

         y = (height - font_height-font.getoffset(char)[1]) / 2

         # 繪製圖片,在那裡畫,畫啥,什麼顏色,什麼字型

         draw.text((x,y), char, (255, 255, 255), font)

         # 設定圖片傾斜角度

         img = img.rotate(rotate)

         # 命名檔案儲存,命名規則: dataset/ 編號 /img- 編號 _r- 選擇角度 _ 時間戳 .png

         time_value = int(round(time.time() * 1000))

         img_path = "dataset/{}/img-{}_r-{}_{}.png".format(value,value,rotate,time_value)

         img.save(img_path)

# %% 存放字型的路徑

font_dir = "./fonts"

for font_name in os.listdir(font_dir):

     # 把每種字型都取出來,每種字型都生成一批圖片

     path_font_file = os.path.join(font_dir, font_name)

     # 傾斜角度從 -10 10 度,每個角度都生成一批圖片

     for k in range(-10, 10, 1):

         # 每個字元都生成圖片

         makeImage(label_dict, path_font_file, rotate = k)


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69946337/viewspace-2904536/,如需轉載,請註明出處,否則將追究法律責任。