はじめに
画像の中にある文字をテキストとして抽出したいと思ったことはありませんか?
写真で撮った説明書きや資料、あるいは、イメージスキャナで取り込んだ画像にある文字をテキスト化するためには、手でタイピングしてテキスト化する必要がありました。
しかし、ここで紹介する機能を使用することで、画像中の文字をテキストとして抽出することが可能となります。
という事で、今日の課題はこれです。
今日の課題
- 画像中の文字をテキストとして抽出したい
今回から数回にわたり、画像中の文字をテキストとして抽出するOCR(光学文字認識)の実現方法について解説します。
今後の解説予定としては以下の内容を紹介しようと思います。
- OCRの結果をメールで送信する。
- OCRの結果をEvernoteに取り込む。
- 撮影した写真をLineで送ると、抽出したテキストのメッセージがくる。
今回はまず基礎編として、Google Apps Scriptで提供されるOCR機能について紹介します。
では、どのように実現するのかを見ていきましょう。
Google Apps ScriptのOCR機能について
Google Apps ScriptのDrive APIを使用することによりOCR機能を実装することができます。
Drive APIを使えるようにするには、以下のようにスクリプトが使用するサービスにDrive APIを追加します。
サービス」の右の「+」をクリックし、「サービスを追加」画面を表示して「Drive API」を選択します
追加したサービスは一覧から確認できます。
これで準備は整いました。
OCR処理の実装
全てのコード
Google Driveの特定フォルダの中にある画像を全てOCRにかける処理を考えます。
全てのコードは以下の通りです。
// OCRテスト(1)
// ・Drive APIを使用してOCRを行う
//
// 画像保存場所
const folderId = '<フォルダIDを指定してください>';
function ocrTest() {
var folder = DriveApp.getFolderById(folderId);
var files = folder.getFiles();
while(files.hasNext()){
var file = files.next();
Logger.log(file);
// 一時ファイル名
var resource = {
title: "tmp"
};
// OCR設定
var option = {
"ocr": true, // OCRを行う
"ocrLanguage": "ja",// OCRの言語設定
}
// ファイルコピー時にOCR処理を行う
var fileId = file.getId();
var image = Drive.Files.copy(resource, fileId, option); // ファイルコピー(OCR処理実施)
var text = DocumentApp.openById(image.id).getBody().getText(); // OCRテキスト取得
Drive.Files.remove(image.id); // 一時ファイル削除
// OCR内容表示
Logger.log(text);
}
}
「<フォルダIDを指定してください>」の部分は、OCR対象の画像を保存するフォルダIDを指定します。
Google Driveで画像を保存したいフォルダを開いた時のURLの、「drive.google.com/drive/folders/」の後ろがフォルダIDです。
解説
OCR対象ファイルをコピーする際に、以下のようにオプションとしてOCRを行う設定にします。
ここでOCRの言語設定も行います。日本語を使いたいので「ja」を指定します。
// OCR設定
var option = {
"ocr": true, // OCRを行う
"ocrLanguage": "ja",// OCRの言語設定
}
その後、一時ファイルにコピーします。
「fileId」は指定したフォルダに格納されたファイルIDです。
// 一時ファイル名
var resource = {
title: "tmp"
};
var fileId = file.getId();
var image = Drive.Files.copy(resource, fileId, option); // ファイルコピー(OCR処理実施)
コピーした際にOCRも行われるので、以下のようにテキストを取得します。
var text = DocumentApp.openById(image.id).getBody().getText(); // OCRテキスト取得
取得したテキストは、コンソールに出力されます。
// OCR内容表示
Logger.log(text);
実行
以下の画像を使ってテキストが得られるか確認してみます。
結果は以下の通りです。テキストが得られていることがわかりますね。
まとめ
いかがでしたでしょうか。
画像データから文字情報を抽出できると、いろいろなシステムが組めるかと思います。
応用範囲の広い技術ですので、一度試してみることをお勧めします。
では、今日もよい一日を。