Codex Creator Challenge · Solo prototype
MemoryLens
MemoryLens takes a live camera feed, compares detected faces with enrolled profiles, and uses quiet-mode rules to decide when to play a spoken reminder.
Project context
Built with Codex, then tested by hand
I made MemoryLens for the Handshake x OpenAI Codex Creator Challenge and used Codex throughout development. I kept the repository public as an example of building and narrowing an AI-assisted prototype, not as a production-ready face-recognition claim.
The camera, model, database, and speech paths were exercised on a computer. I also configured and ran the project on a Raspberry Pi; the deployment helper remains experimental rather than a supported installation path.
System diagram
How a frame becomes a reminder
-
01
Capture
A webcam or Pi camera provides a frame.
-
02
Detect + align
SCRFD finds a face and five landmarks line it up.
-
03
Encode + match
MobileFaceNet creates an embedding and compares it with enrolled records.
-
04
Speak
A local TTS backend can read the matched name and relationship.
The software
The project is a Python command-line application with separate flows for detection, embedding, enrollment, profile editing, and live recognition. During enrollment, the camera automatically captures centered, high-confidence samples at set intervals. Matching compares each new embedding with the local database using cosine similarity.
The default quiet mode announces each known person once per session and then stops. A manual input can repeat the visible matches. I also added editable text profiles so a name, relationship, or note can change without enrolling the face again. Unit tests cover the database, synthetic matching logic, enrollment rules, profile sync, and announcement control. The live model, camera, TTS, and Pi paths were checked manually rather than covered by those tests.
What I took away
Most of my work went into keeping profile data local and splitting the recognition flow into pieces I could test. The final setup pairs small ONNX models with SQLite, plus separate commands for enrollment, recognition, and profile editing.
The quiet-mode logic ended up being one of my favorite parts. Known matches speak once, unknown faces stay silent, and a manual input can repeat what is currently on screen. The cue stays brief instead of narrating continuously.