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_camerathe AI solved the camera first without the distortion (as a pinhole camera), then withlens: 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, usingget_visibility.
2. The cameras solved
| Position off by | Points miss by (mean) | Horizontal field (to the picture's edges) | Floor seen in common | |
|---|---|---|---|---|
| The actual camera | — | — | 115.42° | — |
| Solved without the distortion | 1.12 m | 6.2 px | 94.87° | 0% |
Solved with lens: radial | 0.06 m | 1.5 px | 110.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: radialit 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²).
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
cameraPartinput,get_visibilityreports what it sees and its blind spots, andsuggest_camerascounts 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 partsget_visibility: the floor seen, and what it shares with the actual cameraget_view_image: the plans of the floor seen



