A desktop privacy protection system that uses YuNet deep learning to detect and selectively anonymize faces in real-time—giving journalists, researchers, and educators granular control over who remains visible and who is protected.
"I need to protect confidential sources in protest photos but keep the journalist visible."
— User Research Participant
This project represents a complete systems design journey: from understanding real-world privacy requirements through independent ML research, architectural iteration, and the development of a production-ready Tkinter application with CPU-deterministic inference.
AnonVision is a privacy protection system for images that provides real-time ability to detect and obscure faces while offering selective control over which individuals remain visible.
Detection Accuracy
Real-Time Processing
Panel Interface
Cloud Dependencies
Left panel displays detected faces as selectable thumbnails → Center canvas shows live preview with bounding boxes → Right panel contains protection controls and anonymization settings. Users detect faces, preview results, toggle protection on specific individuals, adjust blur parameters, and export publication-ready imagery.
The need for privacy-preserving media processing has never been more urgent. Billions of images are shared online daily, and the tension between transparency and privacy creates real ethical dilemmas.
Reporters covering protests, conflict zones, or sensitive investigations need to share visual evidence while protecting sources from identification and potential retaliation. All-or-nothing anonymization doesn't work.
IRB protocols increasingly require face anonymization in published research imagery. Researchers need tools that are reliable, reproducible, and don't require manual pixel-by-pixel editing.
GDPR and similar privacy regulations create compliance requirements. Manual anonymization doesn't scale; automated solutions with audit trails do.
Organizations reviewing security footage face the challenge of protecting innocent bystanders while preserving relevant subjects for investigation.
Users need automation for efficiency combined with granular control for accuracy. They need to trust the detection system while maintaining override capability. Professional-grade output without professional-grade complexity.
This project began as a collaborative exploration with my professor, but evolved into an independent deep-dive into computer vision, face detection architectures, and desktop application development.
V1 (Haar Cascade): ~70% accuracy. Profile faces, partial occlusions, and challenging lighting produced unacceptable miss rates.
V2 (YuNet): 99%+ accuracy. Handles angled faces, variable lighting, partial occlusions. Runs efficiently on CPU.
YuNet DNN as primary detector—high accuracy, fast CPU runtime, robust handling of angled faces.
Protecting specific individuals from anonymization via face matching.
Privacy tools process sensitive imagery. Dark mode reduces visual fatigue during extended sessions and creates professional aesthetic.
Left: "What faces?" Center: "What result?" Right: "How to control?" Left-to-right workflow mirrors natural reading patterns.
High contrast ratios, keyboard navigation, text-based status feedback, appropriate touch-target sizing.
Chose Tkinter over PyQt deliberately. While PyQt offers richer widgets, Tkinter provides zero-dependency deployment—critical for a tool that needs to work without complex environment setup. Built ProDesign class for modern dark mode aesthetics.
Ability to swap detection backends (Haar → YuNet) without rewriting the app saved the project. Abstraction enables future upgrades.
Building detection first then wrapping UI created friction. Building UI shell first and plugging in functionality would be cleaner.
Combining Haar, MediaPipe, and YuNet created debugging nightmares. A single, well-tuned detector outperforms a committee of mediocre ones.
Users encountering cryptic Python exceptions abandon software immediately. Human-readable messages and graceful degradation transformed UX.
The final AnonVision application delivers a complete privacy protection workflow: load any standard image format, YuNet identifies all faces with 99%+ accuracy, detected faces appear as selectable thumbnails, adjustable Gaussian blur with configurable intensity, and export produces publication-ready imagery.
AnonVision represents the intersection of systems design, machine learning engineering, and human-computer interaction that defines my approach to building technology.
The most valuable lesson was the importance of modular architecture. When Haar Cascade proved inadequate, clean separation between detection and UI layers allowed me to swap in YuNet without rebuilding everything. Good architecture isn't about predicting the future—it's about making the future changeable.
User research fundamentally shaped the product. The whitelist feature—now central to AnonVision's value proposition—came directly from interviews with journalists who needed selective protection.
I can take a complex, cross-domain challenge—privacy-preserving computer vision with professional UX—and deliver a working system through independent research, iterative development, and relentless focus on real user needs.