Start from the drugstore model (free sign-up), or draw your own shop. A shop's plans often leave out its security cameras, or do not show where they are and which way they point. In this article your AI works out, from one still of a camera, where the camera is and which part of the floor it sees, allowing for the distortion of a wide-angle lens. It uses the same tools an AI calls over MCP. Every figure and picture below is their result.

1. What was done

  • The model is a 36 × 24 m drugstore. A security camera hangs in its south-east corner by the checkouts, 2.8 m up, facing west-north-west. Its lens is wide and its picture 1920 × 1080 (its distortion is assumed, at a level typical of security cameras).
  • The AI reads points of the room itself that the picture shows (corners at floor and ceiling, the frames of the entrance, the windows and the back doors) and pairs each with the same point in the model: 16 of 40 candidates, those in the picture and not behind a shelf or a wall.
  • The photo here is made from the model. The AI read the pixel where the actual camera sees each point, with a reading error of ±2 pixels added.
  • With solve_photo_camera the AI solved the camera first without the distortion (as a pinhole camera), then with lens: radial (fitting the wide lens's distortion too). It placed each solved camera as a camera part and compared the floor each one sees with the actual camera's, using get_visibility.

2. The cameras solved

Position off byPoints miss by (mean)Horizontal field (to the picture's edges)Floor seen in common
The actual camera——115.42°—
Solved without the distortion1.12 m6.2 px94.87°0%
Solved with lens: radial0.06 m1.5 px110.15°98%
  • Without the distortion the camera lands inside the east wall. Its position is at x 35.83 m, past the wall's inner face (x 35.8 m), and the camera part sees no floor at all. Its horizontal field also comes out some 20° narrower.
  • The tool doubts the room's size instead. Solved without the distortion, the tool warned that the points would fit much better (6.2 → 3.1 px) with the model's depth 1.155× and height 1.129× what they are, so the room's size might be wrong: the lens's distortion looked like a room of the wrong size.
  • With lens: radial it fits. The 16 points miss by 1.5 px on average, the position is 0.06 m off and the distortion's k1 is −0.287 (actually −0.28). Of the 171.81 m² of floor the actual camera sees, the solved camera agrees on 98% (both see 169.56 m²).
The camera solved with lens: radial and the actual camera
Shaded darker, the floor both the actual camera and the camera solved with lens: radial see: 98% the same
The camera solved without the distortion and the actual camera
Solved without the distortion, the camera lands inside the east wall and sees no floor; the shaded floor is seen only by the actual camera

3. How to use it

  • Solve a wide-angle camera with lens: radial. Read 8 points or more, spread from the picture's middle to its edges. When they stay near the middle, the tool warns that the distortion is only loosely fixed.
  • Read the room itself. Use corners at floor and ceiling, column bases, and door and window frames; not shelves or machines, which may stand somewhere other than where they are drawn.
  • A solved camera becomes a camera part. Once it is placed with the result's cameraPart input, get_visibility reports what it sees and its blind spots, and suggest_cameras counts it as a camera already there. Its range (30 m) is assumed: set it to the real camera's range.
  • Use a picture with nobody in it. A picture in which a face identifies someone is personal information (Camera Image Utilization Guidebook ver3.0, in Japanese). Take a still from before opening, when nobody is there.

4. What we do not know

  • This article's photo is made from the model; reading a real photo can be less accurate.
  • A fisheye lens (seeing nearly 180°) is solved with lens: fisheye (the article on a 360° ceiling camera).
  • What a camera sees is judged by its field of view and lines of sight only, not by its image quality, the light, or whether faces can be told apart.

Tools used

  • solve_photo_camera: solves the camera from the photo's points (lens: radial) and gives the camera part's input (cameraPart)
  • edit_space: places the solved cameras as parts
  • get_visibility: the floor seen, and what it shares with the actual camera
  • get_view_image: the plans of the floor seen