本專案的核心功能為「文字圖像生成工具」,取名為 WordCanvas,即「文字畫布」的意思。
我們透過合成資料的方式,生成大量多樣性的中文文字圖像,以應對資料量不足、類別不平衡、缺乏多樣性等問題。對此我們參考了一些現有的文字合成工具,他們的設計方式帶給了我們很多啟發,讓我們決定從頭打造一個新的文字圖像生成器。
套件安裝和使用的方式,請參閱 WordCanvas Documents。
在那裡你可以找到所有有關本專案的詳細資訊。
目前沒有提供 Pypi 上的安裝包,短時間內也沒有相關規劃。
若要使用本專案,你必須直接從 Github 上 clone 本專案,然後安裝相依套件。
- 注意:安裝前請確認你已經安裝了
DocsaidKit
。如果你還沒有安裝DocsaidKit
,請參考 DocsaidKit 安裝指南。
-
Clone 本專案:
git clone https://github.com/DocsaidLab/WordCanvas.git
-
進入專案目錄:
cd WordCanvas
-
安裝相依套件:
pip install wheel
-
建立打包文件:
python setup.py bdist_wheel
-
安裝打包文件:
pip install dist/wordcanvas-*-py3-none-any.whl
遵循這些步驟,你應該能夠順利完成 WordCanvas
的安裝。
安裝完成後即可以使用本專案。
你可以使用以下指令來測試安裝是否成功:
python -c "import wordcanvas; print(wordcanvas.__version__)"
# >>> 0.4.2
如果你看到類似 0.4.2
的版本號,則表示安裝成功。
萬事起頭難,所以我們需要一個簡單的開始。
先給定一個基本宣告,然後就可以開始使用了。
from wordcanvas import WordCanvas
gen = WordCanvas()
全部使用預設功能,直接調用函數即可生成文字圖像。
text = "你好!Hello, World!"
img, infos = gen(text)
print(img.shape)
# >>> (67, 579, 3)
使用 font
參數可以指定自己喜歡的字型。
gen = WordCanvas(
font_path="/path/to/your/font/OcrB-Regular.ttf"
)
text = 'Hello, World!'
img, infos = gen(text)
當字型不支援輸入文字時,會出現豆腐字。
text = 'Hello, 中文!'
img, infos = gen(text)
使用 output_size
參數可以調整影像尺寸。
gen = WordCanvas(output_size=(64, 1024)) # 高度 64,寬度 1024
img, infos = gen(text)
print(img.shape)
# >>> (64, 1024, 3)
當設定的尺寸小於文字圖像的尺寸時,會自動縮放文字圖像。
也就是說,文字會擠在一起,變成瘦瘦地長方形,例如:
text = '你好' * 10
gen = WordCanvas(output_size=(64, 512)) # 高度 64,寬度 512
img, infos = gen(text)
使用 background_color
參數可以調整背景顏色。
gen = WordCanvas(background_color=(255, 0, 0)) # 藍色背景
img, infos = gen(text)
使用 text_color
參數可以調整文字顏色。
gen = WordCanvas(text_color=(0, 255, 0)) # 綠色文字
img, infos = gen(text)
使用 align_mode
參數可以調整文字對齊模式。
from wordcanvas import AlignMode, WordCanvas
gen = WordCanvas(
output_size=(64, 1024),
align_mode=AlignMode.Center
)
text = '你好! Hello, World!'
img, infos = gen(text)
使用 direction
參數可以調整文字方向。
-
輸出橫向文字
text = '你好!' gen = WordCanvas(direction='ltr') # 從右到左的橫向文字 img, infos = gen(text)
-
輸出直向文字
text = '你好!' gen = WordCanvas(direction='ttb') # 從上到下的直向文字 img, infos = gen(text)
-
輸出直向文字且分散對齊
text = '你好!' gen = WordCanvas( direction='ttb', align_mode=AlignMode.Scatter, output_size=(64, 512) ) img, infos = gen(text)
使用 output_direction
參數可以調整輸出方向。
-
直向文字,水平輸出
from wordcanvas import OutputDirection, WordCanvas gen = WordCanvas( direction='ttb', output_direction=OutputDirection.Horizontal ) text = '你好!' img, infos = gen(text)
-
橫向文字,垂直輸出
from wordcanvas import OutputDirection, WordCanvas gen = WordCanvas( direction='ltr', output_direction=OutputDirection.Vertical ) text = '你好!' img, infos = gen(text)
有些場景的文字會特別扁,這時候可以使用 text_aspect_ratio
參數。
gen = WordCanvas(
text_aspect_ratio=0.25, # 文字高度 / 文字寬度 = 1/4
output_size=(32, 1024),
) # 壓扁文字
text="壓扁測試"
img, infos = gen(text)
基礎功能大致上就是這樣。
最後我們介紹一下儀表板的功能。
gen = WordCanvas()
print(gen)
你也可以不需要 print
,直接輸出就好,因為我們有實作 __repr__
方法。
輸出後可以看到一個簡單的儀表板。
你可以看到:
- 第一個 column 是 Property,是所有的設定參數。
- 第二個 column 是 Current Value,是參數「此時此刻」的值。
- 第三個 column 是 SetMethod,是參數的設定方法。寫著
set
的參數,可以直接指定修改;寫著reinit
的參數,則是需要重新初始化WordCanvas
物件。 - 第四個 column 是 DType,是參數的資料型態。
- 第五個 column 是 Description,是參數的描述。
沒錯,參數大部分可以直接設定,這表示當你需要修改輸出特性時,不需要重新建立一個 WordCanvas
物件,只需要直接設定即可。會需要使用 reinit
的參數,通常是涉及到字型格式的初始化,例如文字高度 text_size
之類的。所以請注意,不是所有的參數都可以直接設定。
gen.output_size = (64, 1024)
gen.text_color = (0, 255, 0)
gen.align_mode = AlignMode.Center
gen.direction = 'ltr'
gen.output_direction = OutputDirection.Horizontal
設定完之後,直接調用,就可以得到新的文字圖像。
如果你設定了 reinit
相關的參數,那你會收到錯誤:
-
AttributeError: can't set attribute
gen.text_size = 128 # >>> AttributeError: can't set attribute
還有許多功能沒有提到,但是基本功能已經介紹完畢。
以上就是本專案的基本使用方法,更多詳細資訊和使用方法,請直接查閱 WordCanvas Documents。
如果你認為我們的工作對你有幫助,請引用以下內容:
@misc{yuan2024wordcanvas,
author = {Ze Yuan},
title = {WordCanvas},
year = {2024},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {\url{https://github.com/DocsaidLab/WordCanvas}}
}