Inspiration
Shops, schools and homes in Uzbekistan have cheap cameras, but making them do a job with computer vision needs a programmer. And most camera AI is built for surveillance. Hidden cameras in toilets and changing rooms are a real problem. I wanted a camera you can simply talk to, and that refuses to spy.
What it does
You type a job in Uzbek, Russian or English ("Do'konga kirgan odamlarni sana", "find the green ball", "найди мой телефон"). Ko'z turns it into a recipe of tested OpenCV 5 blocks. It runs the recipe on the live camera for 3 seconds and checks the result with numbers from OpenCV. If the check fails, it changes one setting based on what the camera measured (for example the ball's colour, hue 52 → 31) and tries again, up to 3 times. Then the job runs: counting people through a doorway, following a coloured ball, or finding everyday objects.
Privacy lives in fixed code, not in the AI:
- faces are blurred before anything else;
- frames never leave the computer; the cloud gets numbers only;
- a privacy guard stops the camera when it sees a toilet, a bed, a sink in a bathroom, or a covered lens;
- no face recognition, no profiling, no audio.
How we built it
- Vision: Python + OpenCV 5: YuNet (faces), NanoDet (people and objects), Places365 (rooms), plus colour-finder and line-counter blocks.
- Recipe contract: a fixed contract checked by code. The AI can only propose a recipe, and the code rejects anything unknown.
- Runner: a WebSocket runner on the Mac.
- Web app: on AWS (CloudFormation, EC2, DynamoDB with auto-delete). It receives only numbers.
- Help: Claude and Codex were my coding assistants (logged in AI_LOG.md). The product's own agent loop is separate.
Challenges we ran into
- A room classifier called my bedroom an "airplane cabin". So the guard now stops on objects it can actually see.
- On 71 real photos, the default mode still let 4 of 23 bathroom and bedroom photos through. Strict mode let none through. It is an alarm, not proof.
- The fly-brain robot car is built and passes its software tests. The real trials were stopped for safety when the camera board overheated.
Accomplishments that we're proud of
- On the live camera, the agent fixed a wrong colour by itself (52 → 31) and then followed the ball.
- Every private view I tried live was stopped: toilet, bathroom sink, bed and covered lens.
- The planner got 20/20 on new sentences after tuning; I mark that as tuned, not fresh.
- Every failure is kept in docs/TRIALS.md.
What we learned
Safety has to be fixed code, not a promise from the AI. An AI that tries to "make it work" could otherwise remove the blur. And an honest measurement on real photos beats a nice demo.
What's next for Ko'z
- Find anything from words (open-vocabulary detection).
- Several cameras in one job.
- Voice in Uzbek.
- My own Uzbek model as the planner.
Built With
- amazon-dynamodb
- amazon-ec2
- amazon-web-services
- aws-cloudformation
- javascript
- node.js
- onnx
- opencv
- python
- websockets
Log in or sign up for Devpost to join the conversation.