---
title: 'CV Dazzle'
date: '2026-06-08T15:01:13+00:00'
type: post
word_count: 649
char_count: 4383
tokens: 844
categories:
  - Uncategorized
---

# CV Dazzle

In 2010, artist Adam Harvey published a masters thesis proposing that hair and makeup could break computer vision. The idea was that bold geometric patterns could confuse face detection algorithms while leaving the wearer visible to people. He called it [CV Dazzle](https://adam.harvey.studio/cvdazzle/), after the WWI ship camouflage.

The original designs worked. They blocked the face detector that was standard at the time. That algorithm has been dead since about 2013. Harvey tells people not to use the old patterns anymore. His project page includes a [newer look](https://adam.harvey.studio/cvdazzle/) from 2020, Look 6, designed against convolutional neural networks, the kind of detector everything uses now.

The old patterns shouldn’t do anything against modern systems. I ran all six looks through four current face detectors to check.

---

The detectors:

- [MediaPipe](https://ai.google.dev/edge/mediapipe/solutions/vision/face_detector). Google’s on-device detector. Tuned for precision over recall. Runs behind Android’s camera pipeline.
- [RetinaFace](https://github.com/serengil/retinaface). CVPR 2020. Multi-task model that does detection, landmarks, and 3D face reconstruction in one pass.
- [SCRFD](https://insightface.ai/). Near the top of the WIDER Face benchmark. Handles wide variation in scale, pose, and occlusion.
- [YOLOv11-face](https://github.com/akanametov/yolo-face). Community-trained on the YOLOv11 architecture. YOLO detectors favour recall.

Default confidence thresholds. No tuning. I ran everything on an RTX 2060.

---

Look 1
------

Look 1 reverses the dark and light areas the old algorithm expected around the eyes and nose bridge. MediaPipe didn’t find a face. RetinaFace, SCRFD, and YOLOv11 all did.

MediaPipe also missed faces in other images during this test. It’s tuned to not fire unless it’s real sure.



[![Overlay of all four detectors on Look 1. MediaPipe missed it, the other three found the face.](https://gregr.org/wp-content/uploads/2026/06/cvd-look1_overlay.jpg)](cvd-look1_overlay.jpg)





Look 2
------

Look 2 was designed to exploit the old algorithm’s expectation of facial symmetry. Every detector found the face. The bounding boxes are nearly identical across models.



[![Overlay of all four detectors on Look 2. All four found the face.](https://gregr.org/wp-content/uploads/2026/06/cvd-look2_overlay.jpg)](cvd-look2_overlay.jpg)





Look 3
------

Look 3 uses a split-face pattern that caused the old algorithm to register two partial faces instead of one whole one. SCRFD and YOLOv11 produced near-identical boxes. RetinaFace and MediaPipe agreed on the region.



[![Overlay of all four detectors on Look 3. All four found the face.](https://gregr.org/wp-content/uploads/2026/06/cvd-look3_overlay.jpg)](cvd-look3_overlay.jpg)





Look 4
------

Look 4 was the strongest of the original patterns. It blocked the old algorithm across all detection profiles in 2010.

Every CNN detector found the face.



[![Overlay of all four detectors on Look 4. All four found the face.](https://gregr.org/wp-content/uploads/2026/06/cvd-look4_overlay.jpg)](cvd-look4_overlay.jpg)





Look 5
------

[![Overlay of all four detectors on Look 5. Detectors find 2 or 3 faces.](https://gregr.org/wp-content/uploads/2026/06/header-look-05_overlay.jpg)](header-look-05_overlay.jpg)

Three faces in frame. MediaPipe found two. RetinaFace, SCRFD, and YOLOv11 each found three. The extra detection shows up near the left edge.

Look 6
------

[![Overlay of all four detectors on Look 6. The detectors disagree.](https://gregr.org/wp-content/uploads/2026/06/cvdazzle-06-copyright-adam-harvey-2020_overlay.jpg)](cvdazzle-06-copyright-adam-harvey-2020_overlay.jpg)

Look 6 was designed in 2020 to break CNN-based recognition by disrupting, in Harvey’s words, “the key geometric relationships of facial components.” The detectors disagree. MediaPipe found one face. RetinaFace and SCRFD found two. YOLOv11 found three. The bounding boxes vary in size and placement more than on any of the earlier looks.

---

[detect\_faces\_compare.py](https://gist.github.com/greg-randall/62e65093fb1a0b851da24500b97f0575) runs all four separately, one model per output image. [detect\_faces\_overlay.py](https://gist.github.com/greg-randall/35ebd41c98e1a69c91c6d76d46b63b88) composites everything onto a single image with a legend.
