AutomatorとApple ScriptとGoogle Driveで蔵書管理に挑戦してみたお話。

※この記事は [IoTLT Advent Calendar 2017](https://qiita.com/advent-calendar/2017/iotlt) の12月24日の記事です。昨日23日は [Mitz](https://qiita.com/CharaDenMitz) さんでした！
そして本日、クリスマスイブ（に全く関係の無い内容）を 飛行石職人?きるり([Kiruriii](https://twitter.com/kiruriiin))がお届けします。

さてさて、突然ですが私、先月引っ越しをしました。
我が家には本が大量に繁殖していて(多分勝手に増殖してるんですが)、結果的にダンボールが60箱近くの引っ越しになってしまい
<img width="200" alt="Books" src="https://qiita-image-store.s3.amazonaws.com/0/161626/2255c302-0f4a-6ca7-5f93-f958e4a1ee97.jpeg">
↑これは前の家の本棚の様子。見えている本の後ろにも文庫やらなにやらと、奥にもまだ本棚が…
ハードカバーと文庫で持っている本が重複していたり、技術書類や素材集とかは表紙とタイトルだけではどれが手元にあるのか判らなくなってしまうことが多く・・・。
なんとかこの本達を管理したいな〜、でもなかなかちょうどいいサービスもない。
んー。じゃあ、これを期に！ということで今回は
# Apple ScriptとAutomatorとGoogle Driveを使って蔵書管理にちょっと挑戦してみたお話です。
今回の蔵書管理の構成？というか、ざっくりとした動きはこんな感じ。
<img width="600" alt="goal" src="https://qiita-image-store.s3.amazonaws.com/0/161626/8ed1eef4-ce2b-2a06-a466-35d15e8ee02d.jpeg">
ってもう途中経過やか進行状況も書いてあるし、なんか最後の落とし所書いてない気がする。
ホワイトボード(自作)に書き出しながら考えてみました。

- バーコード(ISBNコード)をかざすだけくらいで本の登録が出来て欲しい。
シャッターをいちいち押すのは面倒（そのくらいの本の多さ。だって1000回とか押したくないでしょう？
- 蔵書データを外でも見られるようにしたい。またはエクスポート可能な状態にしておく。
- 本だけじゃなくてCD,DVDとかゲーム類もまとめて管理したい。
- 本についてのステータス(読み終わった、これから読む、楽しかったとか）はそこまで重視しない。というかほぼ要らない。

です！
なので、まず「シャッターを手動で押さずに写真を撮る方法」を考えることに。
## **①「バーコードの部分を自動的に(ある一定の間隔で）撮影して保存してみよう！** に挑戦です。
別にこの段階では、バーコードを認識したい！とか無謀なことは考えて居なくて、そこはマンパワー。自分でカメラに背表紙を掲げて保持する地味な作業。うん。。。
そして、私が普段使用しているのはMacBookProなので、なんとかこのMacだけで完結したい。
睡眠ロガーからiTunesを操作する時に使った、Apple ScriptとAutomatorあたりでなんかいけるんじゃないかな？と思ったのでいろいろいじってみることに。
### **Automator編**
ざっくりと言うと、Automatorはブロックを繋げていくだけで簡単にアプリケーションが作れたり、フォルダに指定のファイルが入ったらアクションを起こす。などが出来るソフトウェアなので

1. ビデオキャプチャでキャプチャ【内蔵(iSight)カメラで撮影(自動的に)→TIFFファイルが生成】
2. (インカメラなので左右反転の静止画が生成される為)水平方向の左右反転を行う
3. TIFF形式だとなにかと対応していない可能性が高いので、JPEGに変換する
4. 指定フォルダに保存し、DropboxもしくはGoogleドライブに自動的に共有(Upload)する

あたりの処理が必要かな。と推測。
この時点で、GoogleドライブにPDFファイルをUploadして、【アプリ(Document)から開く】を実行するとPDFに対し、GoogleのOCRを掛けてテキストデータが取れる。という情報を見つけたので
※３のJPEGの工程をPDFの作成ブロックへと変更。[イメージから新規PDFファイルを作成]というブロックを使うことにした。TIFFから直接PDFが生成できた。
※4の指定フォルダのUP先はGoogle Driveのバックアップ用フォルダへと変更とした。
<img width="400" alt="automator1" src="https://qiita-image-store.s3.amazonaws.com/0/161626/299f8ffe-cf8a-8822-0f8e-4fbdbe62934a.png">
こんな感じで、Automatorではブロックを繋げていくとループ処理もしてくれる。便利。
<img width="300" alt="option" src="https://qiita-image-store.s3.amazonaws.com/0/161626/af3bc2a7-e7de-939f-fc5a-49d230e9c675.png">
ブロックを展開すると詳細なオプションを設定可能。ファイル名などには変数も入れられる。
※一番始めの［ビデオスナップショットを撮る］については、カメラを使って写真を撮るブロックだと、外部のwebカメラを使用する場合のため、内蔵カメラで静止画をキャプチャするためなのに「ビデオ」キャプチャを使用している。
※ここで生成されたPDFのページを1つのPDFにまとめようと思ってブロックを追加してはみたものの、結果は上手く行かず。色々ブロックを変えてみたけど思ったような動作が得られなかったので、今回はPDFの結合自体重要ではなかったので一旦保留。次のステップへ

**結果**
ループの期間中に自動的に撮影してくれるキャプチャを使い、PDFの作成・保存に成功。
一応、目指していたギリギリのラインには達成できたかな！という状況。
でも、Automatorで出来たアプリケーションでは、生成される写真サイズが小さめ(480×480 pixelくらい)
OCR掛けるとき、精度大丈夫かな？？とちょっぴり心配なので
次はAppleScriptではカメラがいじれないのかも見てみようと思う。
### **Apple Script編**
やりたいことは、さっきと同じ。
カメラといえば、FaceTime, PhotoBooth, iSight, イメージキャプチャあたりかな？
とTellで呼び出し。
でもなんか、コマンドが上手く動いてくれないので…ライブラリから、該当のソフトウェアを検索してみると、、、

**Apple Scriptに対応していないためライブラリがありません。**

ｶﾞ━━(;ﾟДﾟ)━━ﾝ!!
起動はできるけど、それだけ。
残念！！！！
と、言う事で
今回は残念なApple Scriptさんでした。
(ごめんなさい。多分他にも何か方法はあるはずだと思うんですが)

## **Google DriveのOCR編**
さあ、気を取り直して次は先ほど作った、PDFファイルをドライブに入れて、アプリ(Document)から開いてOCRさせてみよう。です。
特に知識も必要ないので、気軽にしてみようと思ってみました。
## **②生成されたPDFファイルから、バーコード部分のテキストデータを抽出する。**
ここはとても簡単。
1. Google DriveにPDFファイルをUploadします。
2. 右上の設定（歯車アイコン）>設定>アップロードしたファイルを変換するのチェックボックスにチェックを入れる
3. OCRを掛けたいPDFファイルを右クリックで［アプリから開く>Google ドキュメント］を選択
4. 待つ

以上！
ね、簡単。
その結果はというと・・・

### **結果**
（あ、Qiitaの画像のアップロード限界がきてしまった。すみません。）
本の写真だけだとなかなか画像認識の判定が難しかったので、ティッシュのBOXやココアの箱などいろいろ試してみた所、がんばっているけど…画像が悪かったのか

- バーコード部分の数字は認識してくれていない。
- 全部日本語の文章でもいろんな文体(2〜3段組みみたいな状況や、ロゴ、背景が賑やかなど...)が入り混じっている素材だと、ちゃんと使うのは難しそう。

という状況になった。
GoogleのOCR自体の精度は良いほうだと思っていたので、PDFの状態が悪いのかを判断するために、Google Cloud PlatformのGoogle Cloud Vision APIのデモに同一の画像を掛けてみた。
すると、バーコード部分も、細かなテキスト部分も難なくテキストデータとして取得することができた。
Google Documentとして開くときに、「あ、これはバーコードだから、書類には要らないね？」みたいな判断でもしているのかもなー。とちょっと思ったので(個人の感想なので、真偽は不明です)
よし！Google Cloud Visionを使ってみよう！！！という結論に到達しました。

## **Google Cloud Platform編**
なんやかんやで辿り着いてしまった、GCPの入り口。
仕方がないので、ちょっと覗いてみることにしました。（キャンペーン中だったし)
でも…早速色々な洗礼の嵐。
まず、MacのターミナルでSDKをインストールの段階から詰まる詰まる。
コマンド通らない。
新しい用語ばっかりで全く右も左も、ここは何処？私は誰？レベル。
と、まだまだ入り口にも辿り着いていないところで、これ以上はぐだぐだと書くしかできない状況に。
なので **ちょっとGCP勉強します！** あ、書いちゃった。
# **最後に**
人生初のLTをしたのが今年1月の新年会。IoTLTでは2回LTさせて貰い、10日間チャレンジで睡眠ロガー+iTunesの制御に挑戦してみたり、滅びの呪文を唱える。という物騒な内容で、全くエンジニアでもないのに無謀な挑戦をしてみましたが、すごく貴重な体験とやっぱり何かを作るのは楽しいな。と思いながら作業をしていました。
最近はイベント自体にも顔が出せていないので、まぁゆるゆるとですがこの蔵書管理をもう少し進めてLTで報告できたらいいなと思っています。長々とここまで読んでくれた皆様、ありがとうございます！

アドベントカレンダーも初挑戦。Qiitaの公開記事も初投稿。笑
初物尽くしの年末ですが、みなさま良いお年を！そしてメリークリスマスです。
そして明日はIoTLTアドベントカレンダー2017最終日！
担当は[RenetButler](https://qiita.com/RenetButler)さんです！お楽しみに！