Javascript製のOCRライブラリ「Tesseract.js」の紹介です。
OCR ( 光学文字認識 ) と言えば、一般的に 文章をスキャンしてコンピューター上で認識できる文字に変換するソフトウェアです。
私達の身近な所では、ハガキや封筒の郵便番号を読み取るのに使われているようです。
そんなOCRをjavascriptで実装されたライブラリが「Tesseract.js」です。
javascriptで書かれているので、サーバー上でもブラウザ上でも実行できます。

Tesseract.jsはOCRとしては驚異的で、日本語を含む62言語に対応しています。っということで、どれぐらいの精度があるのか試してみました!
Tesseract.jsはnpmパッケージからインストールする方法と、ブラウザ上からはCDNも利用出来ます。
(ブラウザから使う場合はCDNを使うほうが手軽そうです)
# npm
npm install tesseract.js --save
<!-- ブラウザ上でCDNで読み込む場合 -->
<script src='https://cdn.rawgit.com/naptha/tesseract.js/1.0.7/dist/tesseract.js'></script>
下のスニペットがTesseract.jsの基本的な使い方です。recognize
関数の第一引数に読み込む画像
、第二引数で言語
を指定します。
( * その他にもオプションが用意されていますが今回は認識精度を試す目的なので割愛しています )
// tesseract.jsの基本的な使い方
// tessseract.jsの呼び出し
var Tesseract = require('tesseract.js') //ブラウザで使う場合はこの項目は必要ありません
Tesseract
// (読み込む画像, 言語) jpeg || png
.recognize('sampleImage.jpg', {lang: 'language'}) //exp: jpn, eng
//.ImageLike('media', lang) //* browser only img || video || canvas
.progress(function(p) {
// 進歩状況の表示
console.log('progress', p)
})
// 結果のコールバック
.then(function(result) {
console.log(result)
});
// 実行後 '.trained'というトレーニングファイルが作成されます
一発目として、下の画像をスキャニングしてみました。下の文章はwikipediaの"光学文字認識"からキャプチャを取りました。
# 元のテキスト
# wikipedia "光学文字認識"から抜粋
光学文字認識(こうがくもじにんしき、Optical character recognition)は、活字の文書の
画像(通常イメージスキャナーで取り込まれる)をコンピュータが編集できる形式(文字コードの列)に
変換するソフトウェアである。一般にOCRと略記される。OCRは、人工知能やマシンビジョンの研究分野として始まった。
研究は続けられているが、OCRの中心はその実装と応用に移っている。
紙に印刷された文書をデジタイズし、よりコンパクトな形で記録するのに必要とされる。
さらに、文字コードに変換することで機械翻訳や音声合成の入力にも使えるようになり、テキストマイニングも可能となる。
研究分野としては、パターン認識、人工知能、コンピュータビジョンが対応する。


# tesseractの解析結果 *表示し易いように改行を加えています
光宇文字麗疆 (こうが〈 も …こんしき、 0pticaー =haracter rec。gn=iDn) は丶
活字の文書の画像 魎常ィメ一ジスキャナ一で取り込まれる) をコンユ一夕が編集できる形式 (文字コ一ドの列〕 に
変換するソフ 卜ワェアでぁる〟 一般に。CRと略記される〟 。CRは、 人エ知能やマシンビジョ ンの研究分襄と して始まった〟
研究はけられているが丶 。CRの中心はその実装と応用に移っている〝
紙にE口刷された文書をデジ夕イズし丶 ょりコンバク 卜な形で記録するのに必要とされる〝
さらに丶 文字コ一 ドに変換することで機械翻訳ゃ音声合成の入力にも使えるょうになり丶
テキス 卜マィ二ングも可能となる〝 研究分襄と しては、 バ夕一ン認識、 人エ知能丶 コンビユ一タ ビジョンが対応する〝
上の文章がTesseract.jsが認識した日本語です。日本語特有の細々した文字が原因なのか、認識精度が悪くなっています。
今度は同じ画像を拡大して、再度 精度を調べてみました。


# tesseractの解析結果 *表示し易いように改行を加えています
光学文字認識 (こうがくもじにんしき丶 0pticaー character rec。gn…。n) は、 活字の文害の画像
(通常イメ一ジスキャナ一で取り込まれる) をコンピュ一夕ヵヾ編集できる形式 (文字コ一 ドの列) に変換するソフ トウェア
でぁる〝 一般に。CRと略記される〝 。CRは、 人工知能やマシンビジョンの研究分野として始まった" 研究は続けられているが、
。CRの中心はその実装と応用に移っている。
紙に印刷された文害をデジ夕ィズし` よりコンパク 卜な形で記録するのに必要とされる。 さらに丶
文字コ一ドに変換することで機械翻訳や音声合成の入力にも使えるよぅになり丶 テキス卜マイニンダも可能となる。
研究分野としては` ノヾタ一ン認識、 人工知能丶 コンピュ一タ ビジョ ンヵヾ対応する。
画像を拡大して文字を大きくすることで、認識度がカナリ上がりました!
日本語文章に有りがちですが、文章内にアルファベットが含まれると認識精度が落ちるようです。
( "O"が"。"と認識され、濁点が独立した特殊文字として認識されています )
最後に英語の文章で試してみました。こちらもWikipedia内の" OCR "ページを切り取っています。


# Wikipedia Optical character recognitionから * Original
Optical character recognition (optical character reader, OCR) is the mechanical or electronic
conversion of images of typed, handwritten or printed text into machine-encoded text, whether
from a scanned document, a photo of a document, a scene-photo (for example the text on signs and
billboards in a landscape photo) or from subtitle text superimposed on an image
(for example from a television broadcast).[1] It is widely used as a form of information
entry from printed paper data records, whether passport documents, invoices, bank statements,
computerised receipts, business cards, mail, printouts of static-data, or any suitable documentation.
It is a common method of digitising printed texts so that they can be electronically edited,
searched, stored more compactly, displayed on-line, and used in machine processes such as cognitive
computing, machine translation, (extracted) text-to-speech, key data and text mining. OCR is a field
of research in pattern recognition, artificial intelligence and computer vision.
# Tesseract.jsで解析したテキスト
Optical character recognition (optical character reader, OCR) is the mechanical or electronic
conversion of images of typed, handwritten or printed text into machine-encoded text, whether
from a scanned document, a photo of a document, a scene-photo (for example the text on signs and
billboards in a landscape photo) or from subtitle text superimposed on an image
(for example lrom a television broadcast).m It is widely used as a form ol inlormation
entry from printed paper data records, whether passport documents, invoices, bank statements,
computerised receipts, business cards, mail, printouts of static-data, or any suitable documentation.
It is a common method of digitising printed texts so that they can be electronically edited,
searched, stored more compactly, displayed on—line, and used in machine processes such as cognitive
computing, machine translation,(extracted) text-to-speech, key data and text mining. OCFt is a field
of research in pattern recognition, artificial intelligence and computer vision.
英語での精度は凄まじく、上の文の間違え箇所はわずか二箇所 ( ' f ' を ' l 'と認識していました
) でした。
以上がTesseract.jsの紹介でした。
Tesseract.jsはリリースされて間もないライブラリですが、62言語対応ということもあり、GitHub上でも凄いスピードでスター数が増加しています。
使う場面によっては、今まで部分的に手作業だった事務処理も大幅に効率化できそうですね!
GitHub: naptha/tesseract.js