【PyAutoGUI】古いScansnapでスキャンしたデータを自動で無理やりクラウドにアップロードさせる

最新じゃなくても古い機械でも使えればいいと思っているめぐみそです。

古い機械だと付属のアプリも古いので、クラウドにアップロードする機能がありません。
そこで、Pythonと画像認識ツールを使って、自動でクラウドにアップロードする環境を構築してみます。

目標

もらう書類や名刺はすべてデジタル化し、クラウドに保存するのを目標にします。

現状

現在はScansnap S1300を使用しています。


この機種は古いので、現在の最新ツールであるScanSnap Homeアプリは対応していないようです。(調べて出てきただけで実際に実験したわけではありません)
なので、古いアプリであるScanSnap Managerを使う必要があります。

Scansnapに名刺をセットして、ボタンを押すと、自動でスキャンが始まってくれます。


スキャンが完了すると、こんな感じでデータをどうするかを聞かれます。

直接クラウドにアップロードするオプションはないので、指定したフォルダに保存しています。


保存したフォルダにあるスキャンしたデータはブラウザからクラウドにアップロードしています。

アップロードしただけだとパソコンにデータが溜まる一方なので、アップロードした後に削除する必要があります。


これが一連の流れですが、はっきりいってスキャナとパソコンを往復する必要があるので、大量に書類があったりするとかなり面倒です。

そこでこれを自動でやってくれる仕組みを構築しましょう。

用意するもの

・小型サーバー
・スキャナ
・クラウド

今回は小型サーバーとして、その辺にあったNUCを使用します。

スキャナは先ほども紹介した、ScanSnap S1300を使用します。

クラウドは、今回はNextCloudというオープンソースのアプリをクラウドのレンタルサーバーにインストールして使用します。

やってみよう

環境構築

まずはサーバーから用意します。ScanSnapはWindowsしか対応していないので、仮想環境にWindowsをインストールします。

少し無理やりやるので、物理サーバーをそのまま使うと操作ができなくなってしまうので、仮想環境を使用します。

環境は2コアCPU,  2GBメモリ, 30GB SSDです。

スキャン環境

この用意した仮想環境に、通常通りスキャンするための環境を構築します。

環境構築は利用するScansnapの型番によって異なると思いますので、「型番 ドライバダウンロード」とかで検索すると出てくると思います。

次にScansnapとサーバーをつないでるUSBを、仮想環境で認識できるように設定します。

VirtualBoxを使用している場合、仮想マシンの右下にある大量のアイコンから、USBのような見た目をしたアイコンがあります。

このアイコンを右クリックします。

このように今つながっているUSB機器一覧が出てくるので、Scansnapをクリックします。

この時点でUSBがつながっているサーバーからは認識されなくなり、代わりに仮想環境でScansnapが認識されるようになります。


この時点でScansnapでスキャンをしてみましょう。

このように仮想環境の中でスキャンが始まれば正常です。


次に仮想環境の中でスキャンした画像をどうするかを聞かれます。

この画面が後で必要になるので、スクショしておきます。
スクショはPrint Screenキーを押した後、ペイントを起動します。

ペイントを起動して、Ctrl+Vをすると、スクショした内容が、ペイントに表示されます。

この画面を保存しておきます。


その後のスキャンした画像を保存するまでに表示されるものはすべて保存します。

保存した画像をサーバーからパソコンにコピーします。

画像認識環境構築

次に画像認識をして、ボタンを自動で押してもらいます。
Pythonでプログラムを書くので、敷居は上がりますが、頑張ります。

Pythonを書くためにVSCodeを使用します。

Pythonでは先ほどの人力でやっていた部分をプログラムでやってもらえるようにします。

まずはプロジェクトを作成した後、スクショした3枚の画像をプロジェクトにコピーします。

このスクショが保存されている場所をエクスプローラーで開いて、画像を編集します。

プログラムにはボタンを押してもらいたいので、押してもらいたいボタンだけをトリミングします。

今回はペイントを使って、以下のように画像をトリミングします。

トリミングした画像は、上書きして保存します。


2枚目は保存ボタンだけをトリミングします。


3枚目はOKボタンだけをトリミングします。

これで画像の準備は完了です。


次にrun.pyを作成します。

プログラムは以下の場所で公開しています。

https://raw.githubusercontent.com/Megumiso/autoScansnap/master/run.py

ただコピペするだけではなく、コードがどのように動作するのかを確認しながらペーストしてくださいね。


次に仮想環境でPythonが実行できるようにします。

Pythonのダウンロードページ(https://www.python.org/downloads/)を開いて、ダウンロードします。

インストールするときに、「Add python.exe to PATH」にチェックを入れる必要があります。

ここにチェックを入れないでインストールすると、Pythonが実行できないので注意してください。(一敗)


次に先ほど作成した画像とプログラムを仮想環境にコピーします。

画像を保存したフォルダ内でShiftを押しながら右クリックすると、PowerShellウィンドウを開くボタンが出てくるので、これをクリックします。

起動したら最初に「pip install pyautogui pillow」と入力します。
これでプログラムの実行に必要なツールがインストールされます。

次に「python ./run.py」と入力すると、プログラムが実行されます。
これを実行したままにしておきます。

実行中はマウスが自動で動く状態になるので、このまま仮想環境は最小化しておきましょう。

もし、何か問題が起こったときは、PowerShellで「Ctrl+C」を押したら強制終了できます。
まだやることがあるので、とりあえず起動できたら終了しておきます。

アップロード環境構築

最後にクラウドに自動でアップロードされるための環境を構築します。

今回はrcloneというツールを使用します。
このツールを使用すると、NextCloudだけでなく、Googleドライブなどのクラウドにもアップロードできるようになります。

rcloneのダウンロードは、公式サイトから行います。

ダウンロードページから、Windowsの64Bitを選択します。

rcloneは自動でインストールしてくれないので、手動でインストールします。
ファイルを解凍したら、rcloneをC:/Windowsにコピーします。

ここはWindowsが管理するフォルダなので、権限が必要と言われますが、続行します。
(本来はWindowsフォルダに入れるのはよくないですが、Pathを追加する作業をこのためだけにやるのは難易度が高いのでこうしています)

こうすると、PowerShell上でrcloneが実行できるようになります。


rcloneの設定をするので、「rclone config」と入力して実行します。

nを入力して、新しい設定を作成します。


名前を入力します。英語で入力するほうが後で楽なので、英語で入力します。
今回はnc(NextCloudの略)にしました。


何かたくさん出てきますが、どこのサービスに接続するかが聞かれています。
rcloneは大量のサービスに対応しているので、このようにたくさん出てきます。
ですが、rcloneはNextCloudへの直接アップロードは対応していません。
代わりにWebDAVには対応しているので、これを利用します。

webdavと入力して次に進みます。


どこのWebDAVサーバーに接続するか聞かれます。
Nextcloudの場合はwebdavサーバーのURLが書いてあるので、それを入力します。


どのサービスかを聞かれます。ここにはNextcloudがあるので、「nextcloud」と入力します。


NextCloudのユーザー名を入力します。


パスワードをどう入力するか聞かれますが、自分でパスワードを入力するので、「y」と入力します。


NextCloudのパスワードを入力します。2回入力するよう言われます。
入力中は文字が見えないですが、Enterを押すと進んでくれます。


トークンを入れろと言われますが、今回は関係ないのでそのままEnterを押します。


追加の設定をするか聞かれますが、設定はせずにそのままEnterを押します。


入力した内容が表示されるので、正しいか確認をしてEnterを押します。
もし間違っていたら、dを押して設定をやり直します。


設定が終わったので、qを押して閉じます。


次に今作成したサーバーが、Windowsのエクスプローラーで表示されるようにします。
「Winsfp」というツールが必要になるので、ダウンロードします。

公式サイトのDownloadからダウンロードします。
インストールはそのままインストーラーで行います。


インストールしたら、PowerShellに戻り、「rclone mount nc: X: –vfs-cache-mode=writes」と入力します。
ncの部分は、先ほど設定した名前を入力します。

こうすると、エクスプローラーに先ほど作成した接続先が、X:として表示されます。

空き領域が1PB(1024TB)とかいう大容量になっていますが、気にしないことにします。
一応ダブルクリックして、ちゃんとファイルが表示されているのを確認しましょう。

ちゃんと表示されるのを確認したら、ScansnapのScanボタンの設定を行います。

保存先の設定で、マウントしたクラウドを指定しておきます。

このままPythonを起動したいところですが、マウント中はPowerShellを閉じれないので、新しいPowerShellウィンドウを開きます。

新しいウィンドウでPythonの実行をしておきます。

Scansnapはデスクトップの一番後ろに表示されてしまうので、開いているウィンドウはすべて最小化しておきます。

これで一通りの作業は終了です。

テスト

最後に実際にスキャンをして、スキャンしたデータがクラウドにアップロードされるか見てみましょう。

クラウド上でファイルが見れるのが確認できました!

まとめ

今回は古いScansnapアプリで、無理やりクラウドに直接アップロードするための仕組みを構築してみました。

実際は再起動された直後に自動でアプリが起動してくれたり、スキャンが途中でエラーを出したりしたときにも対応する必要がありますが、そのあたりはまた後日公開します。

個人的にはこれでより手軽に適当にスキャンするだけでクラウドにアップロードできるので、かなり負担が減りました。

同じことをしたい方のために少しでも参考になれば幸いです。