Phone screen swap
사진: $ARGUMENTS. 사진이 없으면 하나를 요청하거나, find_photos.py로 찾습니다.
휴대폰 전면 전체가 코드로 대체됩니다: 화면, 검은색 프레임, 그리고 노치 또는 아일랜드. 유리 외부의 사진은 그대로 유지됩니다.
이미 존재하는 템플릿에는 이 스킬이 필요하지 않습니다: python3 swap.py <image>.
새 템플릿
실제 iPhone 사진을 찍으세요, 화면이 카메라를 향하게. 건너뜁니다: Android, 25° 이상 기울어진 경우, 한쪽이 다른 쪽보다 1.2배 이상인 경우(자르기에서 거부). 화면에 손가락이나 소매가 있는 사진은 건너뜁니다: 회색 프레임이 없으면 덮어씌워집니다. 모든 유리는 우리 것이며, 유리 위의 눈부심도 마찬가지입니다. 사진 밖에서 들어오는 피부만 사진에 남습니다.
P=<이름, 8자, 고유>; D=templates/corners
mkdir -p out
# 1. 사진을 보고 화면의 대략적인 모서리(TL,TR,BR,BL)를 읽습니다.
python3 tools/slide_crop.py --q '<모서리>' <photo.jpg> templates/crop/$P.jpg # 크롭된 이미지에 모서리를 출력합니다.
# 2. 정확한 직선 모서리. `live`가 낮으면: R=34
python3 tools/slide_lines.py $P '<크롭 이미지 위의 모서리>' out/l.jpg # 출력 끝에 정제된 모서리가 표시됩니다.
# 3. 윤곽선: 원근, 렌즈 굴절, 반경, 유리 윤곽
python3 tools/slide_trace.py $P '<모서리>' out/t.jpg $D/$P.json
# 4. 핏이 보지 못한 부분에 대한 증명. 항상 사진을 확인하세요.
python3 tools/slide_proof.py $P $D/$P.json out/$P-proof.jpg
# 5. 포즈, 반사에만 사용됩니다.
python3 tools/slide_sheet.py $P $D/$P.pose.json init
# 6. 노치 또는 아일랜드, 상태 아이콘, 검은색 영역을 측정합니다.
python3 tools/slide_check.py $P measure
# 레시피 $D/$P.recipe.json: a841f108 (노치) 또는 f5dad639 (아일랜드)를 복사한 다음, frame=$P, pose, 모서리 및 측정된 옵션을 설정합니다.
# 7. 시간과 아이콘을 이 휴대폰의 위치로 이동합니다.
python3 tools/slide_status.py $P init <measure의 라인>; python3 tools/slide_status.py $P build
# 8. 빌드 및 빨간색 테스트
python3 tools/slide_check.py $P build
# 9. 누출 열 지도
python3 tools/slide_check.py $P leak
# 10. 프레임 너비
python3 tools/slide_check.py $P frame
그 후에는 템플릿이 됩니다: python3 swap.py <image> -t $P.
신뢰하기 전에 확인하세요
out/$P-split.jpg: 사진, 빨간색, 결과. 빨간색이 맞고, 프레임이 케이스에서 끝나며, 본체 안쪽의 모든 것이 우리 것입니다.out/$P-leak.jpg: 검은색 화면 위의 프레임, 밝기는 로그 스케일로 표시됩니다. 밝은 것은 모두 사진에서 온 것입니다: 컷아웃 주변의 선, 점, 눈부심. 스피커와 정말 앞에 있는 것만 나타날 수 있습니다.out/$P-top.jpg: 사진 위의 컷아웃 녹색 윤곽선, 아이콘이 제자리에 있습니다.out/$P-zoom.jpg: 모서리와 프레임을 크게 확대하여 사진 옆에 표시합니다.- 흰색 이미지를
swap.py를 통해 적용한 템플릿: 어두운 페이지가 잘못된 모서리와 가장자리를 숨깁니다. out/$P-frame.jpg: 흰색 화면 위의 네 모서리. 아래 프레임 검사가 통과할 때까지 템플릿이 완료된 것이 아닙니다.
프레임 검사
검은색 프레임은 하드웨어이며, 모든 면에서 동일한 너비입니다. slide_check.py $P frame은 흰색 화면 위에 빌드하고, 이를 평평하게 만든 다음 각 면 중앙의 검은색을 스크린샷 픽셀(591 너비) 단위로 측정합니다. 각 면의 ours와 photo 값을 출력하고, 편차와 판정을 표시합니다: 최대 4px까지는 OK, 그 이상은 FIX입니다.
4px 제한은 다음 휴대폰에서 선택되었습니다: 7.5px의 편차는 명확히 보였고, 4px는 보이지 않았습니다.
새 템플릿에서 FIX가 표시되면:
slide_trace.py를 다시 실행합니다: 보이는 검은색을 읽고 각 면에 중앙값(frame:라인)을 제공합니다.- 다시 빌드한 다음
frame을 다시 실행합니다. - 여전히
FIX:ours와photo를 비교합니다. 일치하면 눈부심, 케이스 또는 손이 사진에서 그 면의 프레임을 가리는 것입니다. 일치하지 않으면 윤곽이 잘못된 것입니다:-frame.jpg와-split.jpg를 확인합니다. - 수렴되지 않으면 템플릿이 완료되었다고 말하지 마십시오. 어떤 면이 얼마나 차이가 나는지 알려주십시오.
-frame.jpg도 육안으로 확인하세요: 상단과 측면이 일치해야 합니다. 출시된 템플릿:f38fe44a2.2,791866583.2,895d3ee83.8 통과.f5dad6395.8,a841f1086.2,14278a0b8.5는 통과하지 못함: 프레임이 처음 빌드된 대로 유지되었습니다.
설정
- 검은색:
floor, 프레임과 컷아웃이 사진과 일치하도록 합니다..003에서 시작하여 사진이 더 어두우면 낮춥니다.build가 둘 다 출력합니다. - 노치:
measure의 값. 녹색 윤곽선으로cr을 조정합니다.measure는 낮게 읽습니다. - 노치 위의 스피커:
grille=45. 노치 주변에 이전 페이지의 얇은 선이 보이면:gband=1. - 아일랜드: 그 중심은 하드웨어이며, 591 중 295.5입니다.
measure가 1px 이상 차이난다고 말하면, 밝은 것이 가장자리를 삼킨 것입니다: 깨끗한 가장자리를 가져와 중심을 기준으로 대칭시킵니다. 잠금 화면에서, 아일랜드가 있는 휴대폰(시간 111, 아이콘 479)에서x를 가져오고measure에서y를 가져옵니다. - 아일랜드 위의 스피커: 유리 윤곽선 안에 있으면,
grille=45가 그 안의 윤곽만 복원합니다. - 유리 위의 소매:
sleeve=1,templates/grey/(f38fe44a)에 실제 회색 프레임이 있는 경우에만 사용합니다. - 어두운 배경 위의 어두운 물체:
slide_trace.py는 720개 포인트 중 400개 미만이 상승할 때 자동으로 전환됩니다. 추가로 주의하여-split을 확인하세요.
작동 방식
휴대폰은 단단하므로 화면은 iOS의 연속 모서리를 가진 직사각형이며, 원근과 하나의 방사형 렌즈 굴절을 통해 보입니다. 가장자리는 로그 밝기에서 찾아지므로 어두운 배경 위의 어두운 물체도 작동하며, 선형 광에서 중간 지점에 배치됩니다. 그림은 평평해진 사진 위에 그려진 다음 유리와 함께 다시 구부러집니다.
알려진 함정
- 어두운 페이지만으로 판단하기.
- 한 방향으로 맞추고 다른 방향으로 확인하기: 확인은 맞춤이고 증명은 빠진 것입니다.
- 사진 위에 직접 직선 그리기: 사진은 구부러져 있습니다. 직선은 평평해진 사진에만 존재합니다.
- 밝은 화면에서 바깥에서 안으로 케이스 가장자리 찾기: 천의 주름이 케이스처럼 보입니다. 화면에서 바깥으로 진행하세요.