2018年9月6日木曜日

【Mac】gdrive ツールを利用して、写真データをGoogleドライブのOCRに一括処理しよう!

Googleドライブには、PDFや写真のOCR機能がついています。
サポートされている言語も多くて、最近ではクメール語などを試してみましたが、結構使えそうだなぁと思います。で、単体でのやり方は簡単なのですが一括処理の方法が面倒なため、備忘録として残しておきます。Windowsならバッチファイルの知識、Macならシェルスクリプトの知識があると理解度があがります。以下は、すべてMacでの利用に特化した内容です。Windowsについては、GoogleDriveのOCR機能を使って、大量の画像ファイルをテキストに変換する の情報を参考にすればできるんじゃないかなーと思います。

単体でのやり方


下記の関連サイトをみると簡単にできるはずです。


一括処理のやり方


Google Drive CLI Client ツールであり、 gdrive を使った一括処理ができます。

必要なこと


  1. Google Drive のアップロード先フォルダのフォルダIDをメモる
    https://drive.google.com/drive/folders/◯◯◯◯◯
     
    のようになっていますが、この◯◯◯◯フォルダIDになります。
  2. gdrive を使えるようにする
     【G Suite 専用】G Suite ユーザー会 EDU分科会参加 - Google Drive CLI Client ツール による Google Drive 制御 の「利用準備」を参考にして、gdrive list で Googleドライブのファイル一覧が表示されるまで作業しておきます。

Step 1. OCRしたい写真を用意する


仮に ダウンロードフォルダ(~/Download)の sample フォルダに、拡張子 jpg ファイルをいくつか入れたとします。

/Users/ユーザー名/Download/sample
┣ ○○1.jpg
┣ ○○2.jpg
┣ ○○3.jpg
┣ ○○4.jpg
┣ ○○5.jpg

ここでの写真の名前はなんでも構いません。

Step 2. OCRしたい写真を調整


  • 画像の向きを調整
    プレビューアプリで開いて、回転ツールを使って向きを調整して保存しなおします。
  • 画像容量を2MB以下にする(しなくても動きましたけれど、、保証外なので)
  • その他、https://support.google.com/drive/answer/176692 に書かれた注意点を守る


Step 3. ターミナルより、gdrive コマンドにてOCR変換しつつアップロード(単体)


まずは単体でテストします。
  • gdrive import ~/Downloads/sample/○○1.jpg  -p フォルダID
これで、OCRされた結果のGoogleドキュメントが、フォルダIDのGoogleドライブ内のフォルダにアップロードされます。写真自体をアップロードしたい場合には、 import を upload に変えてください(gdrive upload ~/Downloads/sample/○○1.jpg  -p フォルダID)

Step 3. ターミナルより、gdrive コマンドにてOCR変換しつつアップロード(複数)


まずは複数のコマンドを組み合わせて、gdrive の単体実行を複数実行するようにします。
  • ls ~/Downloads/sample/*.jpg | awk '{ printf "gdrive import %s -p フォルダID\n", $1}'
上記がダウンロードフォルダ→sampleフォルダ内にある拡張子 jpg ファイルに対して、gdrive コマンドを発行するためのコマンドです。

ここで実際に試すために画像として次の名前を使うことにします。
  • IMG_0945.jpg ベトナム語の料理メニュー
  • IMG_1232.jpg ベトナム語の料理メニュー
  • IMG_1546.jpg ラオ語の料理メニュー
  • 遺跡案内.jpg クメール語の遺跡案内看板

すると青文字のコマンドを実行すると、

gdrive import /Users/ユーザー名/Downloads/sample/IMG_0945.jpg -p フォルダID
gdrive import /Users/ユーザー名/Downloads/sample/IMG_1232.jpg -p フォルダID
gdrive import /Users/ユーザー名/Downloads/sample/IMG_1546.jpg -p フォルダID
gdrive import /Users/ユーザー名/Downloads/sample/遺跡案内.jpg -p フォルダID

のようなコマンドが4つ出てきます。

次に一括でこれらのコマンドを実行してみましょう。最期ほどの青文字に対して | sh を加えています。 
  • ls ~/Downloads/sample/*.jpg | awk '{ printf "gdrive import %s -p フォルダID\n", $1'} | sh

Imported 文字列 with mime type: 'application/vnd.google-apps.document'
Imported 文字列 with mime type: 'application/vnd.google-apps.document'
Imported 文字列 with mime type: 'application/vnd.google-apps.document'
Imported 文字列 with mime type: 'application/vnd.google-apps.document'

ということでアップロードされました。


上図にあるように Googleドキュメントとしてアップロードされています。
日本語も問題なくアップロードされています。

たとえば

© ເສັ້ນຫມີ່ເຫຼືອງໄກ່ລາດ - chicken noodle

- ນ້ໍາຊຸບໃສ ໄກ່ລາດ ກະດູກໂຄ່ຍຫມູ, ເສັ້ນຫມີ່ເຫຼືອງໂຮມເມດ ສູດ“ເສັ້ນເສັ້ນ” - ຕ່ອນໄກ່ລາດ , ລູກຊີ້ນຫມູ ແລະ ຕ່ອນເລຶອດ , ໂຮຍຫນ້າດ້ວຍຫອມບົ່ວ , ຫອມເປ , ຫອມປ້ອມ ແລະ ຜັກທຽມຈຽວ
- Chicken, pork soup,homemade noodle by “ sensen “ - Chicken, pork meat ball and chicken blood, with garlic and spring onions


これをみると、+ は読み取れてませんが、割といけてるっぽく思います。
改行はされずに抽出されているところが見づらいかなとは思います。
*ラオ語の専門家じゃないので、正しく抽出できているかは調べていません。目視で大体あってるかなーという感じと、Google翻訳で一応意味が通るなというぐらいです)

以上のように、写真の場所を ダウンロードフォルダ内の sample フォルダに固定するなら、そこに写真をいれて、あとはアップロード先のフォルダIDを指定すれば手軽に一括処理できそうです。ただ大量にやった場合に、どこまで耐えられるかはわかりません。

2018年9月6日 @kimipooh
2019年12月5日 修正(コメントで指摘されていた部分)

2 件のコメント:

  1. 情報参考にさせていただきました。本当にありがとうございます。ocr作業の効率化に苦心していたため、本当に助かりました。
    些細なことではございますが、誤字と考えられる箇所がありましたので、自分自身への備忘録もかねてコメントさせていただきます。
    また、コマンド内「-p」とフォルダidの間の半角スペース2つでエラーにハマりました。
    環境によると思いますが、私は半角スペース1つで実行するとうまくいきました。
    情報ありがとうございました。

    ls ~/Downloads/sample/*.jpg | awk '{ printf "gdrive import %s -p フォルダID\n", $1}’ | sh

    返信削除
    返信
    1. コメントありがとうございました。コマンドの方は修正しました。誤字の部分がここだーって言っていただければ助かります〜

      削除