ドラッグストアのモデルから始める(無料登録)か、自分の店を描いてください。防犯カメラが付いていても、図面にその位置と向きがないことはよくあります。この記事では、カメラの静止画1枚から、カメラの位置と、床のどこが映るかを、AIに出してもらいました。AIがMCPで呼ぶのと同じ道具を動かしました。以下の数字と図は、すべてその結果です。
1. やったこと
- モデルは、36 × 24 mのドラッグストアです。レジのそばの南東の隅に、高さ2.8 mで西北西を向く防犯カメラが付いている、とします。レンズは広角で、写真は1920 × 1080画素(ゆがみの大きさは、防犯カメラによくある程度の仮定)。
- AIは、写真に写る部屋そのものの点(床と天井の角、入口と窓の枠、奥の扉の枠)を読み、モデルの同じ点と組にします。40点の候補のうち、棚や壁の陰にならず写真に入る16点です。
- この記事の写真は、モデルから作りました。 実際のカメラがそれぞれの点を写す画素に、読み取りの誤差(±2画素)を足したものを、AIが読んだ値としています。
- AIは
solve_photo_cameraで、まずゆがみを考えずに(ピンホールのカメラとして)、次にlens: radial(広角レンズのゆがみも合わせる)で解き、解いたカメラをそれぞれカメラの部品として置いて、get_visibilityで映る床を実際のカメラと比べました。
2. 解いたカメラ
| 位置のずれ | 点の外れ(平均) | 水平の画角(写真の端まで) | 映る床の重なり | |
|---|---|---|---|---|
| 実際のカメラ | — | — | 115.42° | — |
| ゆがみを考えずに解く | 1.12 m | 6.2画素 | 94.87° | 0% |
lens: radial で解く | 0.06 m | 1.5画素 | 110.15° | 98% |
- ゆがみを考えないと、カメラは東の壁の中になる。 解いた位置は東の壁の内側の面(x 35.8 m)より外の x 35.83 mで、カメラの部品は床をどこも映しません。水平の画角も20°ほど狭く出ます。
- 道具は、部屋の寸法のほうを疑う。 ゆがみを考えずに解くと、道具は「モデルの奥行きを1.155倍、高さを1.129倍にすると点がずっと合う(6.2→3.1画素)、部屋の大きさが違うかもしれない」と注意を出しました。レンズのゆがみが、部屋の寸法の違いに見えたものです。
lens: radialなら合う。 16点が平均1.5画素で合い、位置は0.06 m、ゆがみの係数 k1 は −0.287(実際は −0.28)。映る床は、実際のカメラの171.81 m²と解いたカメラが98%重なります(両方が映すのは169.56 m²)。
3. 使い方
- 広角のカメラは
lens: radial。 8点以上を、写真の真ん中から端まで散らして読みます。点が真ん中に寄っていると、道具は「ゆがみがゆるくしか決まらない」と注意します。 - 部屋そのものの点を読む。 床と天井の角、柱の根もと、扉と窓の枠など。棚や機械はずれて置かれていることがあるので使いません。
- 解いたカメラは、そのままカメラの部品になる。 結果の
cameraPartの入力で置けば、get_visibilityが映る範囲と死角を出し、suggest_camerasで足すカメラを考えるときの、今あるカメラになります。届く距離(30 m)は仮定なので、カメラの性能で直します。 - 人の写らない写真を使う。 顔で個人を識別できる画像は個人情報です(カメラ画像利活用ガイドブック ver3.0)。開店前など人のいない時間の静止画を使ってください。
4. 分からないこと
- この記事の写真はモデルから作ったもので、実際の写真では読み取りの誤差がもっと大きいことがあります。
- 魚眼レンズ(180°近く写すもの)は
lens: fisheyeで解きます(天井の360°カメラの記事)。 - カメラが映す範囲は、視野と視線だけで数えています。画質や明るさ、人の顔が見分けられるかは数えていません。
使った道具
solve_photo_camera:写真の点からカメラを解く(lens: radial)、カメラの部品の入力(cameraPart)edit_space:解いたカメラを部品として置くget_visibility:映る床と、実際のカメラとの重なりget_view_image:映る床の平面図



