Tesseract.js で紙の「お薬手帳」を画像認識してみる

※ 本ページ使用前の注意 ※

ここでは Tesseract.js というライブラリを使っていますが、完全にブラックボックスとして使っています。 つまり、ここでは、 「認識対象の画像のデータをどこかのサーバにひっそり送信したり蓄積したりしていないか」 といった疑問は棚上げにして、このライブラリを使っています (おそらくそういう疑問は杞憂だろうとは思いますが、特に確認したわけではありません)。

一方、「お薬手帳」は、非常にセンシティブな内容を含む可能性があります。 ですので、プライバシーが心配な場合は、 「画像の一部を黒塗り等で隠す」 「画像のうち最小限の部分だけ切り取る」 「人に知らせたくない持病の薬ではなく、一般的な風邪薬のページで試す」 などの対策をおとりください。 それでもまだ心配な場合は、以下のサンプル画像で画像認識をお試しになることも可能です。

とりあえず実行してみる

紙のお薬手帳を撮影した画像ファイル (または電子版のお薬手帳アプリのスクリーンショット) を選択して () そのファイルを ください。 どの程度まで画像認識で読めるのか、実験できます。

あるいは、上記のようにどうしてもプライバシーが心配な場合は、 か、 ことも可能です。

お薬手帳のサンプル お薬手帳のサンプル (2)
認識対象画像読み取り結果

ところでこのページの目的は何?

先日、Tesseract.js を利用して、書店のレシートから ISBN を画像認識し、書籍のページへのリンクを生成する、というページを作ってみたが、 そこで認識対象になる文字は数字のみである。 というわけで、認識タスクとしては容易な方だろう。 一方、Tesseract.js は多言語対応が売りである。 日本語を対象としたタスクも試してみたい。

そこで思い出したのが、「お薬手帳」にまつわるこのツイートと、そのリンク先のページ。 私は持病があるので、そういうのが気になるのです。

で、実際のシステムはしかるべき人がしかるべく作るであろうから、ここでは 「素人がちょこっとオプションを設定してみた程度だと、 Tesseract.js はどんな感じの認識結果を出してくるのかな〜?」 という好奇心を満たすのが目的である。 自分のお薬手帳を使って数例の実験を行った感じだと、 「実用には程遠いけれど、目的に合わせて作った訓練データもなしに認識しているにしては、結構健闘しているのでは?」 という印象であった。 とはいえ、「〜カプセル」のようによく使われるはずの「ル」が「レ」に誤認識されやすいようだったり、数字の「1」が長音符号「ー」になってしまったり (縦書きと横書きの区別ができていない?) といったあたりは、どうにも残念なのだが。

Tesseract.js に対して行ったオプション設定

というわけで好奇心は満たされたのだが、せっかくなので、「どういう理由で、どういうオプション設定を行ったのか」を以下に書き留めておく。 似ても似つかぬ文字に認識される部分は、下記のようなオプション設定が原因の場合も多かろうと思う。 なお、Tesseract.js には山のようにオプションがあるようだが、 私はこれらをきちんと検討したわけではないので、改善の余地はもちろん大きいだろう。

以上のように、本当に単純な設定しかしていないが、お遊びなので構わないだろう。 こういう便利なライブラリが手軽に使えるとは良い時代じゃ。