ドラッグストアのモデルから始める(無料登録)か、自分の店を描いてください。防犯カメラが付いていても、図面にその位置と向きがないことはよくあります。この記事では、カメラの静止画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 m6.2画素94.87°0%
lens: radial で解く0.06 m1.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²)。
lens: radialで解いたカメラと実際のカメラ
濃い所は、実際のカメラと lens: radial で解いたカメラの両方が映す床。98%が重なる
ゆがみを考えずに解いたカメラと実際のカメラ
ゆがみを考えずに解いたカメラは東の壁の中になり、床を映さない。塗った所は実際のカメラだけが映す床

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:映る床の平面図