字が汚いと困るというお話です

iPad / Apple Pencil などでメモを取る事も増えました。紙やデータなどを問わず、手書き文字が綺麗だと凄く良い感じの印象になりますね。自分は小学生みたいな字なので、いつも汚い字だなあと実感しています。という訳で、今回はGoogle Cloud Vision APIを使って、画像内の汚い手書き文字を検出してみるという内容です。

Cloud Vision APIの使い方、ドキュメントなど

様々なページでCloud Vision APIの環境構築や使い方などが掲載されていますので、ここでは省略します。できるだけ新しい情報を参考にするのが良いですね。まずは公式ページからどうぞ。

Cloud Vision のドキュメント  |  Cloud Vision API  |  Google Cloud
機械学習のビジョンモデルをアプリケーションに統合し、強力な OCR、モデレーション、顔検出、ロゴ認識、ラベル検出モデルを活用します。

使用したコード

コードはGoogle のサンプル(python)からです。python以外にもあります。お好きな言語でどうぞ。

"""Detects text in the file."""
from google.cloud import vision
import io
client = vision.ImageAnnotatorClient()

# [START vision_python_migration_text_detection]
path = r"ここに画像のパス"
with io.open(path, 'rb') as image_file:
    content = image_file.read()

image = vision.Image(content=content)

response = client.text_detection(image=image, image_context=image_context)
texts = response.text_annotations
print('Texts:')

for text in texts:
    print('\n"{}"'.format(text.description))

    vertices = (['({},{})'.format(vertex.x, vertex.y)
                for vertex in text.bounding_poly.vertices])

    print('bounds: {}'.format(','.join(vertices)))

if response.error.message:
    raise Exception(
        '{}\nFor more info on error messages, check: '
        'https://cloud.google.com/apis/design/errors'.format(
            response.error.message))

使用した画像と、実行結果

雑誌

まず試してみたのは「月刊 企業診断」という雑誌です。

左側が読み込ませた画像、右側が結果です(スマホの方は上下)。どうでしょう、印刷した文字は結構いけてますね。若干日本語で使わない漢字が混ざっているところがあり、標的型攻撃メール風になっていますが。

K企業診断2
KIGYO SHINDAN
2021年2月1日発行(每月1回1日発行)/通卷第68巻第2号
コンサルティング実務/診断士受験情報
February
2021 vol.68
|特集1|
これから始める
診断士のSDGS支援
CO
|特集2|
它業経営理論の解法
-60点を超えるノウハウのすべて
その他大勢を抜け出す 経営と広報
複業診断士の働動き方
新連載
LIFE TIPS! -診断士流,人生を楽しむヒント
中小企業支援の現場 「参謀ドットコム」
「ホワイト企業」の現場一株式会社河合電器製作所
生命保険会社の企業内診断士活動
レポート
Umano! #33
講 座
中小企業診断士試験 実戦! 鍊成
Alを駆使した先進経営
VISITS Technologies t
松本 勝ん

手書き

次は手書きの文字で試してみました。左側が読み込ませた画像、右側が結果です(スマホの方は上下)。

手書さ。文字は
ちゃ人て読みとれ3 ?
大雪漢サケRッ7は,
軽风持5運以か簡单
お酒は20歳をすぎてから

むむむ。そのままでは読み取り精度が落ちるようですね。(単純に字が汚い)

language_hints を設定してみる

language_hints

Googleのドキュメントには、自動で言語判定を行うのでlanguage_hintsは省略可能との記載がありましたが、設定して試してみます。

以下のように変更しました。

image = vision.Image(content=content)
image_context = vision.ImageContext(language_hints =["ja-t-i0-handwrit"])

response = client.text_detection(image=image, image_context=image_context)

実行してみる

左側が読み込ませた画像、右側が結果です(スマホの方は上下)。

千書さの文字は
ちゃんと読みとれる?
大雪漢サケパッックは,
軽くて持ち理びか簡単
お酒は20歳をすぎてから

だいぶ向上しましたね。もっと綺麗な字だと良かったですね。

まとめ

Cloud Vision APIを使って、手書き日本語を読み込ませてみました。language_hintsは設定した方が良さそうですね。あと、やはり綺麗な文字の方が良さそうではあります。どなたかオンラインで綺麗な文字の書き方を教えて貰えると嬉しいです。