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読み取り、そして自動入力・データ化までを一連のワークフローとして構築でき、業務の効率化を大幅に推進できます。
コメント
コメントを投稿