スキップしてメイン コンテンツに移動

GASでOCR自動化

GASでOCR自動化

GAS応用でOCRを自動化

Google Apps Script(GAS)を使えば、画像ファイルやPDFから文字を抽出するOCR機能を簡単に組み込むことができます。GASはGoogle Workspaceとシームレスに連携できるため、スプレッドシートに自動でテキストを入力したり、ドキュメントを整理したりするワークフローを構築できます。

まずは、DriveAppで対象ファイルを取得し、Vision APIを呼び出すサンプルコードを紹介します。

function extractTextFromImage(fileId) {
  var file = DriveApp.getFileById(fileId);
  var blob = file.getBlob();
  var apiKey = 'YOUR_GOOGLE_CLOUD_API_KEY';
  var url = 'https://vision.googleapis.com/v1/images:annotate?key=' + apiKey;
  var payload = {
    requests: [{
      image: { content: Utilities.base64Encode(blob.getBytes()) },
      features: [{ type: 'TEXT_DETECTION', maxResults: 1 }]
    }]
  };
  var options = {
    method: 'post',
    contentType: 'application/json',
    payload: JSON.stringify(payload)
  };
  var response = UrlFetchApp.fetch(url, options);
  var json = JSON.parse(response.getContentText());
  return json.responses[0].fullTextAnnotation.text;
}

この関数をトリガーに設定すれば、指定フォルダにアップロードされた画像を自動でOCRし、抽出した文字列をスプレッドシートに書き込むことが可能です。

Drive APIとOCR機能の連携

Drive APIを利用すると、ファイルのメタデータや共有設定を細かく制御できます。OCR機能と組み合わせることで、特定のフォルダ内にある画像やPDFを一括で処理し、結果を別のフォルダに保存する自動化スクリプトを作成できます。

以下は、フォルダ内の全画像を走査し、OCR結果をテキストファイルとして保存する例です。

function batchOcrAndSave() {
  var folder = DriveApp.getFolderById('TARGET_FOLDER_ID');
  var files = folder.getFiles();
  while (files.hasNext()) {
    var file = files.next();
    if (file.getMimeType().startsWith('image/')) {
      var text = extractTextFromImage(file.getId());
      var txtFile = folder.createFile(file.getName() + '.txt', text);
      txtFile.setDescription('OCR結果');
    }
  }
}

Drive APIの検索クエリ機能を使えば、更新日時やラベルで絞り込むこともでき、効率的なデータ化が実現します。

PDF読み取りとテキスト抽出

PDFは画像として埋め込まれている場合もありますが、テキストレイヤーが存在する場合は直接抽出できます。GASとVision APIを組み合わせることで、画像PDFとテキストPDFの両方に対応した汎用的な抽出スクリプトを作ることができます。

以下は、PDFを画像として分割し、OCRでテキストを取得するサンプルです。

function pdfToText(pdfId) {
  var pdf = DriveApp.getFileById(pdfId);
  var blob = pdf.getBlob();
  var url = 'https://vision.googleapis.com/v1/images:annotate?key=' + apiKey;
  var payload = {
    requests: [{
      image: { content: Utilities.base64Encode(blob.getBytes()) },
      features: [{ type: 'DOCUMENT_TEXT_DETECTION', maxResults: 1 }]
    }]
  };
  var options = { method: 'post', contentType: 'application/json', payload: JSON.stringify(payload) };
  var response = UrlFetchApp.fetch(url, options);
  var json = JSON.parse(response.getContentText());
  return json.responses[0].fullTextAnnotation.text;
}

取得したテキストはスプレッドシートに貼り付けることで、検索や集計が容易になります。

自動入力とデータ化で効率化

OCRで抽出した文字列をそのままスプレッドシートに入力するだけでなく、正規表現や文字列操作で必要な項目を抽出し、データベース化することが可能です。例えば、請求書の金額や日付を自動で抽出し、別シートに集計するといった業務効率化が実現します。

以下は、抽出したテキストから金額と日付を取り出し、スプレッドシートに書き込む例です。

function parseInvoice(text) {
  var amountRegex = /¥\s?([0-9,]+)/;
  var dateRegex = /(\d{4})\/(\d{2})\/(\d{2})/;
  var amountMatch = text.match(amountRegex);
  var dateMatch = text.match(dateRegex);
  return {
    amount: amountMatch ? amountMatch[1] : '',
    date: dateMatch ? dateMatch[0] : ''
  };
}

function writeInvoiceData(fileId) {
  var text = extractTextFromImage(fileId);
  var data = parseInvoice(text);
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Invoices');
  sheet.appendRow([new Date(), data.date, data.amount, fileId]);
}

このように、GAS応用でOCR機能を組み込むことで、画像文字認識からテキスト抽出、PDF読み取り、そして自動入力・データ化までを一連のワークフローとして構築でき、業務の効率化を大幅に推進できます。

この記事はAIによって作成されました。

コメント