USB カメラで写真を撮り、その画像を Google Drive へアップロード
「Google Drive へのファイルのアップロード」では、 ローカルのファイルを Google Drive 上にアップロードする方法を示しました。
ここではもう少しだけ発展させて、PC のウェブカムで写真を撮影して、その画像ファイルを Google Drive へアップロードする、 という一連の流れを実装してみましょう。
前提として OS は Ubuntu を利用しています。Windows の場合は下記の fswebcam で直ちに画像を取得できるわけではないかもしれませんが、 代わりに WIA なり CameraCaptureUI なりがありますので、きっと何とかなるでしょう。
ウェブカムは UVC がサポートされていて fswebcam で画像ファイルを取得できるとしています。
アップロードする先の Google Drive 上のフォルダの ID はあらかじめ取得しておいてください。
以上の条件が揃えばあとは簡単です。以下のコードで実現可能です。
import subprocess
import os.path
import time
from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive
gauth = GoogleAuth()
gauth.LocalWebserverAuth()
drive = GoogleDrive(gauth)
time_stamp = time.strftime('%Y%m%d-%H%M%S')
image_fname = 'pic_{}.jpg'.format(time_stamp)
image_path = '/home/hanako/{0}'.format(image_fname)
#Take a picture with webcam
#fswebcam -i 0 -d v4l2:/dev/video0 -r 640x480 --jpeg 85 test.jpg
rc = subprocess.call(
"fswebcam -i 0 -d v4l2:/dev/video0 -r 640x480 --jpeg 85 {}".format(image_path),
shell=True)
if os.path.isfile(image_path):
folder_id = 'フォルダ ID'
f = drive.CreateFile({
'title': image_fname,
'mimeType': 'image/jpeg',
"parents": [{"kind": "drive#fileLink","id": folder_id}]})
f.SetContentFile(image_path)
f.Upload()
else:
print('Unabled to upload a picture.')
ここでは subprocess を利用してコマンドを実行しています。
fswebcam は Linux 環境で利用でき、 Arduino Yun や Raspberry Pi などでも利用できます。 これを使えば各種デバイスへのセキュリティカメラ的な機能の実現も簡単ですね。