FC2ブログ

頭と尻尾はくれてやる!

パソコンおやじのiPhoneアプリ・サイト作成・運営日記


iPhone背面のデュアルカメラで同時に写真を得る

2年くらい前に購入したのがiPhone 7 Plus。このデバイスにはリアカメラに広角と望遠の二つのレンズがあってその視差から背景をぼかせるポートレートモードが実装されていた。
私も同時にカメラの画像を得たいといろいろと調べていたのだが、ユーザーが使えるフレームワークでは同時に両方のレンズで画像を得ることはできそうになかった。
公式のフォーラムでもだめなのかねえ、使いたいよねえ、みたいな書き込みがあったと思う。
ここまでがiOS 10の話。

その1年後(去年の秋くらいか)にARKitを引き連れてiOS11がリリースされたんだけど、地味にデュアルカメラ周りのAPIが追加されてた。
そう、デュアルカメラで二つのレンズからの画像を同時に取得できるようになっていたのだ!
と言っても自分は全然ウォッチしてなくてつい最近知ったんだけど。

そんなわけで1年遅れのネタを2年前のコードをベースに遊んでみた。


ios - Capture frames from both cameras (TelePhoto and WideAngle) in the same time - Stack Overflow
↑この記事がとても参考になった。
AVCaptureDeviceオブジェクトは1つでいい!
デバイスタイプはAVCaptureDeviceTypeBuiltInDualCameraでOK(望遠、広角の二つなのか?と思っていた)。

ところが
AVCapturePhotoOutput *output;//インスタンス

output.isDualCameraDualPhotoDeliverySupported
↑これがなぜか真にならない。サポートされていない?なので強引に
output.dualCameraDualPhotoDeliveryEnabled = YES;
とすると
Dual Camera dual photo delivery is not supported in this configuration'
というメッセージを吐いて落ちる。

iPhone 7 Plusだとダメなの?と調べるとiPhone 8 Plusだけどダメ、iPhone Xだけどダメって書き込みが見つかる。公式フォーラムには1年くらい前にバグレポも出されているとある。
どういうことかといろいろと試していたんだが、、、
AVCaptureSession *session;//インスタンス

{
    [session addOutput:output];//—(1)

    if (output.isDualCameraDualPhotoDeliverySupported) {
            output.dualCameraDualPhotoDeliveryEnabled = YES;
        } else {
            NSLog(@"DualCameraDualPhotoDelivery is not supported!");
        }

    //[session addOutput:output];//—(2)
}
↑元々(2)の位置でsessionにaddOutput: しており、その前でデュアルカメラ周りの設定をしていた。この順番を変えてaddOutput: を(1)の位置に持ってきたらすんなりと設定ができたのだ。
そのうち修正されるだろうけど。


いざ、両方のレンズから撮影した画像をライブラリに保存してみたところ、、、

iPhone 7 Plusの望遠レンズによる画像 iPhone 7 Plusの広角レンズによる画像

↑画像が2枚保存されている!これちゃんと視差あるんだよね?ぱっと見ただけじゃよくわからないなあと思って画像編集ソフトで重ねてみた。

視差確認画像1
視差確認画像2

↑iPhoneの文字部分をよく見ると、’i’をぴったり合わせると’e’のところにずれが生じ、その逆も同じようになってる。まったく同じ画像というわけではないことがわかる。
こういう微妙な差から深度を計算していたんだねえ。凄い!

ちなみに画像の箱は今日届いたばかりのiPhone XS Max。この後、7 Plusから機種変更だ。


iOS 12.1



<< iPhone 7 PlusからiPhone XS Maxへの機種変更時にやったこと  TopPage  FFmpegのライブラリをmacOSアプリで使う >>

コメント


管理者にだけ表示を許可する
 

トラックバック

トラックバックURL
http://ringsbell.blog117.fc2.com/tb.php/1243-42eea4ae




Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.

FC2Ad