[OCR] Google Driveを使ったOCRのシェルスクリプトを書いた…ような?


スクリプトの場所:GitHub - linm25stg/OCR_book2data

これは何?

GoogleDriveに画像を投げると勝手にOCRされてドキュメントが作成される機能を利用するスクリプトです

* 本GIFはWin10、WSL(Ubuntu18.04)環境で作成されています。

出来ること

  • JPGPNGテキストデータに変換してくれます。
  • JPGPNGのみ対応。他は非対応。
    • 上記拡張子2種を一緒のフォルダに混ぜても構いません。
    • ファイルサイズを2MB以下にして下さい。

使用には以下のものが必要です

  1. gdriveをGithubからご自身の使用の環境OSに合わせてDLして下さい
    • そのままでは使えないので、まずデフォルトの OAuth認証を書き直す 必要があります。 こちら(Qiita)の記事を参照してください。
      • 上記のリンクを参照して OAuth(1.client_id 2.client_secret)は取得済だけど、それでも認証が通らない の方はこちら(teratailの自分の回答)を御覧ください
        • 既にバイナリ書換済み、それでも通らない場合、ここ画像の左下 goto <your app name>(unsafe)クリックリンクを見逃している可能性が高いです。
  2. 本スクリプトbook2data.sh
    • スクリプト内で使用したコマンドは ↓
gdrive import $1 -p $2 # $1はディレクトリーパス。$2はGoogleDriveのディレクトリーID
gdrive export --mime text/plain ${id} # ${id}は ↑で発生したドキュメントファイルのID
gdrive delete ${id} 

インストール

Github の releases から落として下さい。

* Mac OS XはLFなのでbook2data-ubuntu.shを使って下さい

Filename Version 改行コード Shasum
book2data-osx.sh 0.9 CR(MacOS9以前) SHA1: 0DD7F2E8979827F6447E6DFD1257BB1273836FC7
book2data-ubuntu.sh 0.9 LF SHA1: 82D0D148A3D21648BF6D413CAB9BF3CF752F7153
$ mv book2data-hoge.sh book2data.sh

$ sudo chmod +x book2data.sh

やった方が便利な事

  • gdrive
$ mv gdrive-hoge-x64 gdrive
$ sudo chmod +x gdrive
$ sudo cp gdrive /bin/
  • 同じく book2data.sh
$ sudo cp book2data.sh /bin/

使い方

# 基本処理
$ sudo book2data.sh $1 $2
# 例
$ sudo book2data.sh /mnt/d/OCR/とある書籍/01/ 1wxzzCXPfmKZV8VnLqaeGPTW1Pxxxxx

このOCR環境での駄目な部分

  • GoogleDrive API の処理上限関係で 一辺に5個以上同時処理させると Failed to get file: googleapi: Error 404: File not found: to., notFound のエラーが出ます

    • 自炊小説4冊同時変換では 400枚 x 4個同時処理して平均2,3個問題発生します
    • 上記エラー発生した場合、スクリプト内gdrive delete ${id} コマンドが実行されない可能性がありますので、ご自身のGoogleDriveのHomeにあるドキュメントを削除して下さい。
    • また、スクリプトを途中終了した場合、最後のrm -rf $workdir 実行されないので、tmpにある作業用フォルダーを削除して下さい
  • 出力テキストファイルの拡張子がtxtではない

    • 仕様です。 export --mime text/plainで指定していますが、OSによって異なるテキスト拡張子で出力されます…
      • 例:Win10 → asm、Ubuntu → asc
    • スクリプトの初期設定ではasc → txtする様に書いています。Ubuntu 以外のユーザーは書き換えてご使用下さい
      • 表示 gif では自分用のスクリプトを動かしてる為、Win10用のasmって出てます
  • 出力されたテキストファイルに半角スペースが発生する

    • 仕様です。
    • 半角指定して置換削除したかったのですが、上手く実装できませんでした…ご教授して下さるとありがたいです
  • 自動的に結合して1個のテキストファイルにならない

    • 頑張ったのですが、上手く実装できませんでした。ご教授下さい!
    • basenameを使って、$1パスの最後のディレクトリ名を取得して basename.txt したいと考えています
  • usageを使った book2data.sh --help が無い

    • 実装予定がありません。
  • ルビ多めの小説だとゴミが多い

    • はい。細かいOCR制御が出来ない為仕方ありません。
      • 音声に変換して聞いてると案外その辺は脳みそがスルッとスルーしてくれる為、OCRを読書として使用する場合はmp3化をオススメします
  • GoogleDriveのゴミ箱が混沌とする

    • 毎回デdeleteコマンドを自動実行してる為、どうしてもそうなってしまいます。
    • ゴミ箱を第2のファイル保管場所としている場合、OCR専用のGoogleアカウントを取得することをおすすめします。

総括

基本的に GoogleDrive のOCR機能を使用しているので、細かい制御は聞きません。オートマです。

しかし、縦読みOK、手書きでも一部OK、印刷フォントなら99%OK、挿絵は自動スルー、多言語対応 と個人用OCRで考えると中々便利です。

1年前は表内の文字は読めなかったりしてたけど、いまは大分マシになってきたりと、大分進化されていますね。

GooglePhotoの学習データを流用しているので、みんなももっと学習データをGoogleさんに上納すればいいと思うよ('A`)

  • 2020-05-27 改稿しました。
  • 2020-05-28 スクリプトのインストールを追加しました。