写真をスマホとパソコン、どちらで管理してますか。スマホでは公式のImage Syncアプリを使えば比較的観点に画像を転送できますけど、パソコンだと似たような方法はありませんよね。ということで、GRの画像をWi-Fiでパソコンに転送する方法を紹介します。
写真の転送・同期イメージ
リコーのGR IIとGR III/GR IIIxは、Image Syncアプリを使うことで、Wi-Fi経由でカメラ内の画像再生や転送、リモート撮影のためにWi-Fiを使っています。
- 画像再生、転送:カメラで撮影した画像を通信端末で確認でき、通信端末にコピーすることができます。コピーした画像をSNSへアップロードできます。
- リモート撮影:カメラのライブビュー画像を通信端末で確認でき、通信端末から露出補正などの撮影条件の変更およびシャッター操作ができます。
今回、説明する方式では、カメラとWinidows 10搭載のパソコンをWi-Fiで接続した上で、パソコン上で動作するスクリプトがImage Syncの画像転送と同じ仕組みを使ってカメラから画像をコピーします。一度、パソコンに画像をコピーすれば、あとは自由に活用できますよね。
パソコン側の準備
Pythonをインストール(Windows 10)
今回はPythonで開発されているスクリプトを活用して写真を取り込むので、Windows 10にスクリプトの実行環境をインストールします。
macOSを使っている方は、最新OSのmacOS Catalina 10.15系には標準でPython 2系がインストールされています。そのため、Windowsのようにインストール作業は必要ありません。
Windows 10のデスクトップ左下にあるスタートボタン(=Windowsアイコン)をクリックして、「Windows システム ツール」の下にある「コマンド プロンプト」を起動してください。コマンドプロンプトでpythonと入力してEnterを押してください。既にPythonがインストールされていると、「Python 3.8.2…」のようにバージョン番号が表示されます。
Pythonがインストールされていない場合はMicrosoft Storeが開き、Pythonをインストールことができます。インストールするには、「入手」ボタンを押してください。ダウンロード後にインストールされると「この製品はインストール済みです。」というメッセージが表示されます。一応、コマンドプロンプトに戻って、「python」と入力してバージョン番号が表示されるか確認してください。
Pythonをインストール(Windows 11)
Windows 10と同様にpythonがインストール済みか確認してください。デスクトップスタートボタン(=Windowsアイコン)をクリックして、「すべてのアプリ」から参照できる「ターミナル」を起動してください。コマンドプロンプトでpythonと入力してEnterを押してください。既にPythonがインストールされていると、「Python 3.11.3…」のようにバージョン番号が表示されます。
Pythonがインストールされていない場合はMicrosoft Storeが開き、Pythonをインストールことができます。インストールするには、「入手」ボタンを押してください。ダウンロード後にインストールされると「このアプリは、[すべてのアプリ]リストで見つかります。」というメッセージが表示されます。一応、ターミナルに戻って、「python」と入力してバージョン番号が表示されるか確認してください。
Rsync.pyスクリプトの入手と修正
GRsync.pyスクリプト(Python 3向け修正版)の入手
GRから写真を取り込むためにGitHubで公開されているPythonで開発されたGRsync.pyスクリプトを活用します。ただし、Windows 10/11でインストールしたPythonが3系なので、Python 2系列を前提に開発されたと推測されるGRsync.pyはそのままでは動作しませんでした。
GRsync.pyスクリプト(Python 2向けオリジナル版)の入手
GitHubのGRsyncスクリプトのサイトからダウンロードしましょう。GitHubの仕組みを使ってダウンロードしてもよいですが、今回はWindows 10向けに修正する必要があるため、直接zipファイルをダウンロードしました。以下のように、「Clone or download」からDownload ZIPをクリックすると最新版をダウンロードすることができます。
Windows 10/11ではPython 3系がインストールされるため、スクリプトの変更が必要です。以下の説明を参考に修正してください。
print関数
Python 3.x系ではprintが構文から関数に変わりました。そのため、print関数のパラメータをカッコ「()」を付ける必要があります。printが呼ばれている箇所を以下のように変更してください。複数個所ありますので、ご注意ください。
変更前:print "Unable to fetch device props from %s" % DEVICE
変更後:print("Unable to fetch device props from %s" % DEVICE)
例外処理
Python 3.x系では例外処理の書き方が変わったので、例外処理の部分を以下のように変更しましょう。複数個所ありますので、ご注意ください。
変更前:except urllib.error.URLError, e:
変更後:except urllib.error.URLError as e:
urllib2の呼び出し
Python 3.x系では、urllib2 モジュールがurllib.request, urllib.error に分割されましたので、urllib2関連の部分を以下のように変更しましょう。複数個所ありますので、ご注意ください。
まずは、import構文を変更します。
変更前:import urllib2
変更後:import urllib.request, urllib.error
import構文を変更しましたので、requestとerror関連の関数呼び出し部分を変更します。
変更前:req = urllib2.Request(GR_HOST + GR_PROPS)
変更後:req = urllib.request.Request(GR_HOST + GR_PROPS)
変更前:resp = urllib2.urlopen(req)
変更後:resp = urllib.request.urlopen(req)
変更前:except urllib2.URLError, e:
変更後:except urllib.error.URLError as e:
POST処理
写真のダウンロード完了後に電源OFFするためのコマンドがHTTPのPOSTになっているようで、dataパラメータをstr型からbytes型に変更しましょう。
変更前:response = urllib2.urlopen(req, "{}")
変更後:response = urllib.request.urlopen(req, json.dumps({}).encode())
ファイル名取得処理
getLocalFiles関数のWindowsのローカルファイル名の取得時にファイルへのパス名の「\(¥マーク)」を「/(スラッシュ)」に置換しましょう。後で転送するファイルが既にパソコンに存在するかどうかを判定する際に問題がでるので、これを解決します。これはPythonのバージョンに起因する問題ではなく、Windows 10のファイル名管理とスクリプトの相性の問題に起因するものです。
変更前:fileList.append(os.path.join(dir, f).replace(PHOTO_DEST_DIR, ""))
変更後:fileList.append((os.path.join(dir, f).replace(PHOTO_DEST_DIR, "")).replace('\\', '/'))
GRsync.pyスクリプトの設定変更
写真の保存先フォルダを指定します。GRsync.pyをメモ帳などお好きなテキストエディタで開いて、上のほうにあるPHOTO_DEST_DIRの値を変更してください。指定したフォルダの下に「100RICOH」などサブフォルダが作成され、その中に写真が保存されます。例えば、以下のように変更します。
変更前:PHOTO_DEST_DIR = ""
変更後:PHOTO_DEST_DIR = "C:/Users/ユーザ名/Pictures/GR3/"
バッチファイルの作成(Windows 10)
必須ではありませんが、GRsync.pyスクリプトを実行するバッチファイルを用意しておくと後々の運用が楽になると思います。私は以下の一行だけ記載したバッチファイルを「grsync.bat」という名前でGRsync.pyと同じフォルダ=写真の保存先フォルダに置いています。
C:\Users\zaka\Pictures\GR3>python C:/Users/zaka/Pictures/GR3/GRsync.py -a
GR側の準備
パソコンからGRにWi-Fiで接続できるように設定しましょう。
GRのWi-Fi有効化
GR本体のセットアップメニューの「無線LAN設定」を選択して、右キーを押します。そこで無線LANの「動作」をオンに設定してください。そうすることで、GRのWi-Fiが有効になります。また、メニューの「通信情報」でSSIDとパスワードを確認できます。
パソコンからGRのWi-Fiへの接続
パソコンでGRの「通信情報」で確認できるSSIDに接続します。パスワードを聞かれるので、合わせてGRの「通信情報」で確認できるパスワードを入力するとパソコンとGRがWi-Fiで接続できます。
実際の転送・同期手順
それでは、実際にGRで撮った写真をパソコンに転送・同期してみましょう。実際にやっているのは、以下の3ステップです。かなり簡単だと思います。
- GRの写真再生ボタンを教えて電源を入れ、Wi-Fiの動作モードをオンに設定
- パソコンからGRのWi-Fiに接続
- パソコンでGRsync.pyスクリプトを実行(バッチファイルを起動)
GRsync.pyスクリプトは以下のコマンドをコマンドプロンプトで実行してください。バッチファイルでも同じコマンドを実行しています。
C:\Users\zaka\Pictures\GR3>GRsync.py -a
GRsync.py -a
「GRsync.py -a」は、パソコンに既に取り込まれたファイルがあれば、そのファイルのコピー処理はスキップされます。新しく撮影されたファイルのみをパソコンにコピーするのでご安心ください。
もし、ファイルを指定して取り込みたい場合には、以下のようにファイル名を指定して取り込むこともできます。
C:\Users\zaka\Pictures\GR3>GRsync -d 100RICOH -f R0000005.JPG
少しでも快適なGRライフを過ごすための助けになれば幸いです。
おまけ:GR IIIへのHTTPコマンドについて
GR IIIの無線LANの動作モードをオンにして、直接カメラにアクセスしてみると画像取得の仕組みの一部が分かりましたので、共有しておきます。
まず、GRは常に「192.168.0.1」というIPアドレスが割り当てられています。公式アプリImage Syncや今回使ったGRsync.pyも192.168.0.1以下の特定URLへアクセスすることで画像取得やGRの電源停止などの機能を実現しているようです。
以下URLにアクセスすると、GRの状態や設定情報を取得できます。
http://192.168.0.1/v1/props
{
"errCode": 200,
"errMsg": "OK",
"manufacturer": "RICOH IMAGING COMPANY, LTD.",
"model": "RICOH GR III",
:
省略
:
"xv": "0.0",
"effect": "off",
"liveState": "idle"
}
以下URLにアクセスすると、GR内の画像一覧を取得できます。
http://192.168.0.1/v1/photos
{
"errCode": 200,
"errMsg": "OK",
"dirs": [
{
"name": "100RICOH",
"files": [
"R0000001.JPG",
"R0000002.JPG",
:
省略
:
"R0000099.JPG",
"R0000100.JPG"
]
}
]
}
以下URLにアクセスすると、GR内の画像を取得できます。
http://192.168.0.1/v1/photos/100RICOH/R0000010.JPG
これまでのURLはHTTPのGETメソッドでアクセスする必要があり、Webブラウザでアクセスすると設定情報や画像などを参照できました。公式アプリのImage Syncはリモート撮影などGRの操作もできるのですが、操作系はPOSTメソッドでアクセスする必要があるようです。例えば、GRsync.pyでは以下URLにPOSTメソッドでアクセスしてカメラの電源をオフにします。(以下URLをクリックしてもGRの電源はオフになりません。ご安心ください。)
http://192.168.0.1/v1/device/finish
コメント
MacOS Big Sur, Python 3で使えました。便利です。
chmodします。
#####
chmod 755 GRsync.py
修正点
#####
1 行目をpython実行モジュールのパスに書き換えます。(必須)
以下diffは修正例です。各人の環境に合わせて修正してください。
15 行目の保存先を変更。(必須)
23 行目のSUPPORT_DEVICEを変更。(テキトーに修正したら動いてしまった)
diff
####
1c1
#!/Library/Frameworks/Python.framework/Versions/3.9/bin/python3 -u
15c15
PHOTO_DEST_DIR = “/Users/login_name/Pictures/”
23c23
SUPPORT_DEVICE = [‘RICOH GR IIIx’]
お陰様でGR IIIxでMac Ventura 13.2.1でも無事転送できました。ありがとうございます!
なお、ファイル指定の場合、GR IIIx特有の「RX」冒頭のファイル名に適用できため、下記のような変更が必要です。
match = re.match(r”^R0\d{6}\.JPG$”, parser.parse_args().file)
match_gr3x = re.match(r”^RX\d{6}\.JPG$”, parser.parse_args().file)
if match or match_gr3x: