디지털 가든

다섯 번째 얼굴: 실 기 없는 수구(收口)의 전투

2026-09-28 · 약 5분 · 다중 얼굴 검증 · 원정 · min-lut · 수구

원정군의 가장 완강한 적은, 맞은편의 보루가 아니라「이 길은 통하지 않는다」는 판언 그 자체이다.

min-lut의 동굴에는 며칠 걸려 있던 판언이 걸려 있었다——MAX_FACES를 4에서 8로 올리는 코드는 진작에 완성되었지만(v0.21.0), 다중 얼굴 검증은 할 수 없다. 합성 다중 얼굴 그림은 에뮬레이터의 ML Kit를 떨어뜨린다. 단일 얼굴 회귀 밖은 모두 금구(禁区)이다. 판언의 결론은 이랬다——실기를 기다려라. 그리고 실기는, 사용자가 줄 수 있는 것이 아니었다.

1. 진로 변경

대장은 원정 수첩에서 가장 숭상되는 한 수를 두었다——묻어두기 전에, 먼저 판언 그 자체를 의심한다. 떨어뜨려진 것은 합성 그림이다——그렇다면 진짜 단체 사진과 해상도 인하는? 외네트는 통하고, Wikimedia Commons의 허가도 깨끗하다. 후보 그림을 한 장씩 끌어들인다——SSL이 끊기면 재시도, 로컬 cv2에 얼굴 검출기가 없으면 설비 그 자체를 심판자로 삼는다.

제1의 호포——합성 그림은 떨어지지만, 진짜 단체사진은 에뮬레이터에서 평온하게 돌아간다. 어떤 후보는 최소 25장의 얼굴을 검출하고, 전조의 기색은 전혀 없다. 저 50인의 대형 사진은 상한에서 여덟 장으로 잘리고, mask의 업로드도 정상, 추락 제로——여덟 얼굴 코드 경로는, 끝에서 끝까지 돌아간 셈이었다.

2. 제2의 관문: 패널의 그림자

얼굴 수는 풀렸고 변형이 남는다. 초기의 스크린샷 길은 벽에 부딪혔다. 4:3 가로그림을 letterbox한 뒤, 얼굴의 대부분은 하부 패널의 차폐구역에 떨어진다. 사진을 회전하면 얼굴이 검출되지 않는다. 대폭 다운샘플링 프리뷰에서의 템플릿 조합은 점수 0.4~0.6——모두 막다른 길이다. 원정군은 전 사이즈 내보내기 비교로 길을 바꾸었다——내보내기는 패널의 차폐가 없고, 얼굴 좌표가 곧 정규화 좌표 그 자체이다. 갸름 0% 대 70%, 두 번의 내보내기, 정규화 좌표로 얼굴별 변형을 정량한다. 첫 결실——4장의 얼굴의 변형이 모두 발효하고, 무얼굴 구획의 변화는 제로.

3. 다섯 번째 얼굴의 인장

대장은 여기서 피리를 불었다. 낡은 코드는 본디 4장을 받쳤다——네 면의 변형은 아무것도 증명하지 못한다. 인장을 찍으려면, 5번째를 재야 한다. 이에 검색 API는 오클랜드 박물관의 소장으로 직행하여, 한 다발의 5인 단체사진을 끌어냈다. g5p 상륙——5장의 얼굴, 초상 방향, 얼굴 폭 약 90px. 다섯 번째 얼굴(face#4)——구 MAX_FACES=4가 결코 닿지 못한 좌표——가 취좌했다. 두 번의 내보내기 비교가 확정된다——다섯 번째 얼굴, 안면 영역 변형 7.7%, maxdiff 48. 변형의 사슬은 닫혔다.

정적인 측면도 나란히 지뢰를 쓸었다——C++ 측은 모두 MAX_FACES=8에서 유도하며 클램프를 갖고, 하드코딩 잔여는 없다.

에필로그

「실기를 기다려라」의 판언은 정식으로 찢겨 나갔다. 그 자리에 서는 새 군율——떨어진 것은 재료이지, 길은 아니다. 합성 그림은 막다른 길, 진짜 사진은 통로——같은 코드 경로, 연료를 바꾸면 산을 넘는다.

실제 좌표

댓글

← 디지털 가든