冬将軍を撮影をする6つの方法

サイクリングでの楽しい出来事や美しい景色は写真に残しておきたいもの。普段は大活躍するiPhoneも、これが冬になると操作が怪しくなる。特に厚手の手袋では、画面のタッチ操作ができないし、側面のボタンを押すのも難しいからだ。手袋を脱げば良いとは言え、着脱に手間がかかるし、素手で寒さに震えるのも辛い。そこで厳冬期にiPhoneで撮影をする方法を工夫してみよう。

手袋

iPhoneの操作に限らず細かい作業には、カバーを外せば指が現れる手袋が良い。これまでもすべての指が現れるミトン型やタッチ対応手袋に被せるオーバーミット型を使ってきた。最近のお気に入りはカメラマン用のVallerretのTinden。指先が開くので指でiPhoneを操作できるし、指先だけなので耐寒性も良い。ただ、スキー手袋並みに厚みがあるものの、数回使用すると柔らかく手に馴染んでくる。

Vallerret Hatchet(左)、Vallerret Tinden(右)
Shimano EXS 3(左)、Vallerret Hatchet(中)、Vallerret Tinden(右)

Siri

指先に頼らずにiPhoneを操作することもできる。お馴染みのSiriだ。「Hey Siri カメラ」と言えばスリープ中でも標準のカメラの撮影画面になる。側面の電源ボタンを長押しすることでもSiriが現れる。呼び出すのは他のアプリでも良い。これで側面の音量ボタンを押せば撮影ができる。手ブレする場合はタイマーを設定しておけば良い。もっとも厚手の手袋ではボタンを押せないかもしれない。

設定アプリのSiri設定

背面タップ

背面タップでもカメラを起動できる。これは設定アプリでアクセシビリティ > タッチ > 背面タップ を選び、ダブルタップに「カメラ」を割り当てる。さらにトリップルタップは「音量を上げる」または「音量を下げる」とする。これでiPhoneの背面を指で2回叩けばカメラが開き、3回叩けばシャッターが切られる。ただ、厚手の手袋では反応しない。ハンドルの先などでタップしてもダメなのは賢明過ぎる。

背面タップの設定

ショートカット

iPhoneの操作を自動化するショートカットなら、自動的に撮影ができる。図のようなショートカットを作成して、その名前である「写真撮影」をSiriに呼び掛ければ良い。タイマーの代わりに撮影までの待機時間入れている。ただし、カメラプレビューをオフにする必要があるので、撮影する構図が確認できないのが残念。ビデオ撮影は自動開始後に停止ボタンをタップしなければならず、破綻する。

ショートカットでの写真撮影アクション

自動撮影アプリ

カメラプレビューを表示しながら自動的に撮影するアプリを探したものの、今のところ見つけられていない。それならば自分で作るしかない。Siriでアプリを起動すればカメラプレビューを表示して写真撮影を行い、すぐにホーム画面に戻る自動撮影アプリだ。ただし、初回起動時はカメラやフォト・ライブラリの使用許諾が必要。この時ばかりは手袋を外してタッチしなければならない。

このアプリはXcodeでiOS Appプロジェクトとして作成し、StoryboardとSwiftで記述している。処理としてはイメージ・ピッカー(カメラ)を開き、3秒後に写真を撮影。そして写真を保存してホーム画面に戻る、といった単純な流れ。いくつか謎めいた呪文が必要になるのはお約束。他には使用許諾を求める理由を記述し、アプリ名は英語と日本語で設定している。詳しくはGitHubのレポジトリを参照して欲しい。

import UIKit
import AVFoundation

class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {

    let picker = UIImagePickerController()
    
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        openCamera()
    }
    
    func openCamera () {
        if UIImagePickerController.isSourceTypeAvailable(.camera) {
            picker.sourceType = .camera
            picker.showsCameraControls = false
            picker.allowsEditing = true
            picker.delegate = self
            self.present(picker, animated: false)
            
            NotificationCenter.default.addObserver(self, selector: #selector(self.takePicture), name: NSNotification.Name.AVCaptureSessionDidStartRunning, object: nil)
        }
    }
    
    @objc func takePicture() {
        NotificationCenter.default.removeObserver(self, name:NSNotification.Name.AVCaptureSessionDidStartRunning, object: nil)
        DispatchQueue.main.async {
            Timer.scheduledTimer(withTimeInterval: 3.0, repeats: false, block: { (timer:Timer) in
                self.picker.takePicture()
            })
        }
    }
    
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
        if let image = info[.originalImage] as? UIImage {
            UIImageWriteToSavedPhotosAlbum(image, self, nil, nil)
        }
        self.dismiss(animated: false)
        UIApplication.shared.perform(#selector(NSXPCConnection.suspend))
    }
}
XcodeのAutoShotプロジェクト

NFCタグ

これまでアプリやショートカットの起動にSiriを使ってきた。しかし風や自動車の騒音でSiriが聞き取れないこともある。そのような場合はNFCを使おう。NFCタグは安価で入手できるし、iPhoneではショートカットで利用できる。NFCタグを自転車のハンドルにでも貼っておき、iPhoneを近づけてAutoShotを起動する。そしてカメラプレビューで構図を見定めた頃に自動的にシャッターが切られるわけだ。

NFCタグで自動撮影アプリを起動して撮影する
(iPhoneの画面の黒い横縞はビデオ撮影のフリッカーで、実際には目に見えない)

このようにNFCタグ+ショートカット+自動撮影アプリで、筆者としては満足できる厳冬期撮影システムができた。さらに良い方法があればご教示いただきたい。ともあれ、長年の課題が解決した。それは撮影グッズではなく、プログラミングだったことも感慨深い。億劫になりがちな寒い時期でも、これで冷たい風を切って走り出せる(はずだ)。

【追記】背面タップを追加してタイトルを「冬将軍を撮影をする6つの方法」としました。(2023.02.20)

【追記】自動的に撮影するアプリを「自動撮影カメラ」という名称でApp Storeで公開した。基本機能は同じで、カウトダウンの表示やサウンドやタイマーの時間設定といった機能を追加している。(2023.03.13)

Leave a Reply

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA