GoogleDriveのOCR機能を使って大量の画像ファイルをテキストに変換する方法

2019年11月28日Mac, GoogleDrive, Googleドキュメント, Mac OS X, OCR機能, シェルスクリプト, ターミナルコマンド, 複数ファイル処理

This post is also available in: English (英語)

はじめに

私の環境はMacBook ProでMacOS X 10.13.6で、スキャナーで取った画像ファイルをgoogle ドキュメントにアップロードしていた。Google ドキュメントを右クリックで「アプリで開く」のなかの「googleドキュメント」を選択するとOCRができる。大変便利な機能で、しかもOCRの精度が高いので重宝している。問題は、この操作は1ファイルごとにしなければならないため、複数ファイルの一括変換があれば一層便利になると思っていた。

Google Cloud Supportに問い合わせると、「お調べいたしましたところ、複数の画像を一度にgoogleドキュメントアプリで開く機能は、現状実装されておりませんでした。ご要望に沿うことができず、誠に恐れ入ります」という答えだった。(2018年8月23日)

検索すると以下のサイトが見つかった。

GoogleDriveのOCR機能を使って、大量の画像ファイルをテキストに変換する

このサイトは大変参考になったが、何分ターミナルでコマンドを打ち込んで・・・という作業を日ごろしていないことと、バッチファイルの中身がよくわからない。ただ、gdriveというプログラムがその処理をしてくれるということがわかった。

「これらの問題については、Petter Rasmussen氏がgithub上で公開しているgdriveというソフトウエアを使うことで解消できます。」

結局、敬愛する友人Gさんにお願いしてそのgdriveを使って処理するプログラムを書いてもらった。そのプログラムは後ほど上げるが、gdriveのreadmeをよく読んでおく必要がある。

  1. gdriveをダウンロードして展開しておく必要がある。上のgdriveに行ってDownloadsの部分で自分の環境に適合したファイルをダウンロードする。
  2. MacOS XでインストールするにはHomebrewをダウンロードしてインストールする。Homebrewには日本語も選択できる。ターミナルコマンドが準備されているのでそれを使ってgdriveを展開しておく。

さて、gdriveを使って処理するプログラムはgdrive-import-export.plである[ref]このPerlスクリプトはLinuxで動きます。Bash on Windows10でも動くでしょう。以上、G氏からの助言を付け加えておきます。[/ref]。


#!/usr/bin/perl

# After download: chmod +x gdrive-import-export.pl
#
# Usage examples
# ./gdrive-import-export.pl file1.png file2.png file3.jpg
# ./gdrive-import-export.pl uploads/*.jpg uploads/*.png

my $num_files = 0;
my $FILE = '';
my $IMPORT_TEST = 0; # for debug
my $EXPORT_TEST = 0; # for debug

$num_files = @ARGV;
print "Number of Files: $num_files\n";

if ($num_files < 1) {
print STDERR "give a file name\n";
exit(1);
}

for (my $i=0; $i < $num_files; $i++) {
$FILE = $ARGV[$i];
print STDERR "INPUT $FILE\n";

# gdrive import
my $command="gdrive import $FILE"; # modify this line for command options
my $imported = '';

if (!$IMPORT_TEST) {
$imported=`$command`;
print STDERR "$imported";
} else { print "DEBUG: $command\n"; }

# get FileiD
$imported =~ s/^Imported\s+(\S+)\s+.*/$1/;
chomp($imported);
print STDERR "FileID: $imported\n";

if ($imported ne '') {
my $command ="gdrive export --mime text/plain -f $imported";
# -f is for overwrite. modify mime type as text/rtf or other
#
# "gdrive about export" lists all available types
# From: application/vnd.google-apps.document
# To: text/html, application/rtf, text/plain, application/epub+zip
# and more

if (!$EXPORT_TEST){
my $exported = `$command`;
print STDERR "$exported";
} else { print "DEBUG: $command\n"; }
} else {
print STDERR "import failed. skip export and exit\n";
}

} # end of for

exit(0);
# end of the program


このプログラムのタスクは

  1. jpgやpngファイルをGoogle Driveにドキュメントとしてアップロードする。アップロードするファイル数を表示する。
  2. ドキュメントに変換されたファイルのテキストをローカルフォルダにダウンロードする。

以上である。上のソースコードをテキストエディットなどのエディターで適宜ファイル名を変えて、自分のMacの/user/local/bin/のディレクトリに保存する。

変換するデータは特権のいらない普通のフォルダに入れておきます。

後はターミナルで実行するだけ。Macのターミナルは私のようなコマンド苦手の人間には優しい。他のアプリケーションのようにドラッグ・アンド・ドロップに対応している。やり方を動画にしたので参考にしてください。[ref]動画ではMacのターミナルにドラッグ・アンド・ドロップしたため、パス名が入っていますが、記述する場合はパス名は不要です。[/ref]