XunziALLMからXunzi_VLが公開されたので、漢文(古典中国語)OCRとして、ちょっと使ってみることにした。プログラムはこんな感じ。
#! /usr/bin/python3
#pip3 install transformers jinja2
img="http://kanji.zinbun.kyoto-u.ac.jp/db-machine/toho/L/B0010001.jpg"
import os
from transformers import pipeline
url="https://www.modelscope.cn/models/XunziALLM/Xunzi_VL"
mdl=os.path.basename(url)
os.system(f"test -d {mdl} || git clone --depth=1 {url}")
nlp=pipeline("image-text-to-text",mdl,max_new_tokens=2048)
d=nlp([{"role":"user","content":[{"type":"image","image":img},
{"type":"text","text":"閱讀垂直文言文,逐行輸出。"}]}])
print(d[0]["generated_text"][1]["content"])
『漢書零片』を読み込ませてみたところ、私(安岡孝一)の手元では以下の結果が出力された。
因章事舉直言極諫並見耶從官展盡其
意加於徃前以明示四方使天下咸知主
上聖明不以言罪下也若此則流言消釋
疑惑著明鳳白行其策欽之補過將美皆
此類也(師古曰)優游不仕以壽終欽子及
昆弟支屬至二千石者且十人欽兄緩前
免太常以列疾奉成帝時乃薨子業
嗣業有材能以列疾選復為太常數言
失不事權貴與丞相翟方進衛尉定事爰
都尉會定陵矣出關伏罪當就國長舅紅陽
淳于長不平後業坐法免官復為函谷關
丞下雒陽獄丞相史搜得紅陽疾書奏業
聽請不韙(師古曰垂白者言白髮)願勿復用前事相
方進薨業上書言方進本與長深結厚夏
「失不事權貴與丞相翟方進衞尉定陵矦」までは各行順にそこそこ読めているが、版心から左側では行の順序が無茶苦茶になってしまっている。画像を半分に切って、左半分だけを読ませてみよう。プログラムはこんな感じ。
#! /usr/bin/python3
#pip3 install transformers jinja2 pillow
img="http://kanji.zinbun.kyoto-u.ac.jp/db-machine/toho/L/B0010001.jpg"
import os
from transformers import pipeline
from PIL import Image
url="https://www.modelscope.cn/models/XunziALLM/Xunzi_VL"
mdl=os.path.basename(url)
os.system(f"test -d {mdl} || git clone --depth=1 {url}")
f=os.path.basename(img)
os.system(f"test -f {f} || curl -LO {img}")
p=Image.open(f)
q=p.crop((0,0,p.size[0]/2,p.size[1]))
nlp=pipeline("image-text-to-text",mdl,max_new_tokens=2048)
d=nlp([{"role":"user","content":[{"type":"image","image":q},
{"type":"text","text":"閱讀垂直文言文,逐行輸出。"}]}])
print(d[0]["generated_text"][1]["content"])
私の手元では、以下の結果が出力された。
淳于長不平後業坐法免官復為函谷關
都尉會定陵戾長有罪當就國長勇紅陽
戾立與業書曰誠哀老姊垂白隨棄骸于
出關下垂也無狀猶言不肖願勿復用前事相
侵定陵戾既出關伏罪復發(蘇林曰長與許)
請不苛(服䖍曰受立)坐免就國其春丞相
威下雒陽獄丞相史搜得紅陽戾書奏業
方進薨業上書言方進本與長深結厚夏
相稱薦(師古曰更)長陷大惡獨得不坐苛
「矦」が読めていないのと、夾註がうまく処理できてないのを除いては、まずまずの出来のようだ。ただ、読ませるだけでもNVIDIA RTX 3080 Laptop (16GB)がカツカツなので、このXunzi_VLをさらにチューニングしていくには、もっと大きなGPUが必要だなあ。