デジタルインク認識

ML Kit のデジタルインク認識 API を使用すると、手書きのテキストを認識し、何百もの言語でデジタル表示面上のジェスチャーを分類し、スケッチを分類できます。デジタルインク認識 API は、Gboard、Google 翻訳、Quick, Draw! ゲームの手書き入力認識と同じテクノロジーを使用しています。

デジタルインク認識では、次のことができます。

  • 仮想キーボードではなく、画面に書くことができます。これにより、ラテン アルファベット キーボードの Э、ヘイト キーボード、森など、キーボードでは使用できない文字を描画できます。
  • ジェスチャーを使用して、基本的なテキスト操作(ナビゲーション、編集、選択など)を行います。
  • 手書きの図形と絵文字を認識する。

デジタルインク認識は、ユーザーが画面上に描画したストロークに基づいて動作します。カメラで撮影した画像からテキストを読み取る必要がある場合は、Text Recognition API を使用します。

デジタルインク認識は完全にオフラインで動作し、Android と iOS でサポートされています。

iOS Android

主な機能

  • 手書き文字を Unicode 文字の文字列に変換します
  • ほぼリアルタイムでデバイス上で実行
  • ユーザーの手書き入力はデバイス上に保持され、ネットワーク接続がなくても認識が行われます。
  • 300 以上の言語と 25 以上の書記体系をサポートしています。サポートされている言語の一覧をご覧ください。
  • 絵文字と基本的な図形を認識
  • 必要に応じて言語パックを動的にダウンロードすることで、デバイス上のストレージ使用量を抑える

認識ツールは、Ink オブジェクトを入力として受け取ります。Ink は、ユーザーが画面に書き込んだもののベクトル表現です。ストロークのシーケンスはそれぞれ、「タッチポイント」と呼ばれる時間情報を持つ座標のリストです。ストロークは、ユーザーがタッチペンまたは指を下に置いたときに開始し、上にスワイプすると終了します。Ink が認識機能に渡されます。これにより、1 つ以上の認識結果候補が信頼度とともに返されます。

英語の手書き入力

下の左側の画像は、ユーザーが画面に何を描画したかを示しています。右側の画像は、対応する Ink オブジェクトです。各ストローク内のタッチポイントを表す赤いドットのストロークが含まれています。

    

ストロークは 4 本です。Ink オブジェクトの最初の 2 つのストロークは次のようになります。

インク
ストローク 1 x 392、391、389、287、...
y 52、60、76、97、...
t 0、37、56、75、...
ストローク 2 x 497、494、493、490、...
y 167、165、165、165、...
t 694、742、751、770、...
...

この Ink を英語の認識機能に送信すると、5 文字または 6 文字を含む複数の音声文字変換テキストが返されます。これらは信頼度が高い順に並べられます。

RecognitionResult
RecognitionCandidate #1 Handw
RecognitionCandidate #2 Handrw
RecognitionCandidate #3 ハードウ
RecognitionCandidate #4 Handu
RecognitionCandidate #5 Handwe

操作

ジェスチャー分類器は、インク ストロークを下記の 9 つのジェスチャー クラスのいずれかに分類します。

ジェスチャー
arch:above
arch:below
caret:above
caret:below
circle
corner:downleft
scribble
strike
verticalbar
writing

絵文字のスケッチ

下の左側の画像は、ユーザーが画面に何を描画したかを示しています。右側の画像は、対応する Ink オブジェクトです。各ストローク内のタッチポイントを表す赤いドットのストロークが含まれています。

    

Ink オブジェクトには 6 つのストロークがあります。

           

インク
ストローク 1 x 269、266、262、255、...
y 40、40、40、41、...
t 0、36、56、75、...
ストローク 2 x 179、182、183、185、...
y 157、158、159、160、...
t 2475、2522、2531、2541、...
...

この Ink を絵文字認識ツールに送信すると、音声文字変換テキストの候補が信頼度の降順で表示されます。

RecognitionResult
RecognitionCandidate #1 😂?(U+1f62d)
RecognitionCandidate #2 🙁?(U+1f605)
RecognitionCandidate #3 😹?(U+1f639)
RecognitionCandidate #4 🎉?(U+1f604)
RecognitionCandidate #5 ❤(U+1f606)