はじめに
皆さんはOCRと聞いてどのようなイメージをお持ちでしょうか?
自分はOCRについて知識がなく、活字はある程度読めるが、手書きには弱いというイメージでした。
しかし、業務でGoogleのCloud Visionに触れて現在のOCRの性能に驚かされました。
以下URLからデモ版を試すことが可能です。
今回はAPIを使用して文字を認識し、テキストファイルに出力するまでの記事になります。
認識結果
Input
Output
覆水盆に返らず
猫に小判
雨降って地固まる
明日は明日の風が吹く
虎穴に入らずんば虎子を得
4、5行目はあえて汚く書きましたが、ほぼ認識できています。
リポジトリ
手順
前提
- Node.js、npmがインストールされていること
Node.jsのインストールは以下から
1.環境構築
以下は、Google公式の手順です。
自分は公式の手順だけだと難しかったので、他のサイトも見ながら進めました。
APIの有効化
gcloud CLI関連
2.実装
公式のコードを参考に、少しカスタマイズして実装しました。
inputFileName
のパスは各環境のパスに合わせていただくか、test.jpg
というファイル名の画像ファイルを用意してください。
import { ImageAnnotatorClient } from "@google-cloud/vision";
import fs from 'fs';
import moment from 'moment';
const client = new ImageAnnotatorClient();
const inputFileName = './test.jpg';
// 画像内の文字を解析
async function detectText() {
try {
const [result] = await client.textDetection(inputFileName);
const detections = result.textAnnotations;
return detections[0].description;
} catch (error) {
console.error('画像解析でエラーが発生しました。',error);
}
}
// テキストファイルに出力
async function outputTextToFile(text) {
try {
const now = moment().format('YYYY-MM-DD HH-mm-ss');
const outputFileName = now + '.txt';
await fs.promises.writeFile(outputFileName, text);
} catch (error) {
console.error('テキストファイルに出力中にエラーが発生しました。',error);
}
}
async function main() {
try {
const text = await detectText();
await outputTextToFile(text);
} catch (error) {
console.error(error);
}
};
main();
{
"dependencies": {
"@google-cloud/vision": "^4.3.0",
"moment": "^2.30.1"
},
"type": "module"
}
3.実行
ディレクトリ構成
.
├── package.json
├── ocr.js
└── test.jpg
- package.jsonに記載されているライブラリをインストール(初回のみ)
npm install
- ocr.jsがあるディレクトリで以下コマンドを実行
node ocr.js
正常に実行できれば、ディレクトリ内にファイル名が実行日時のテキストファイルが出力されます。
料金
毎月、最初の1000ユニットは無料です。
今回は1枚の画像に対し、1回のテキスト検出を行っています。
個人利用であれば、ほぼ無料で利用できそうです。
https://cloud.google.com/vision/pricing?hl=ja
終わりに
Google Cloud Vision APIを使用して、手書きの文字をほぼ認識することができました。
次はOCRで読み込んだ文字をもとに、処理を行うアプリケーションを作ってみたいと考えています。