電話画面の差し替え
写真: $ARGUMENTS。指定がない場合は、写真を依頼するか、find_photos.py で見つけてください。
電話の前面全体がコードによって置き換えられます:画面、黒枠、ノッチまたはアイランド。ガラス部分の外側の写真はそのまま保持されます。
既存のテンプレートがある場合、このスキルは不要です:python3 swap.py <画像>
新しいテンプレート
使用するもの: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、corners および計測されたオプションを設定
# 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 <画像> -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、その差、判定結果を表示します:最大4ピクセルまで OK、それ以上は FIX。
4ピクセルの制限は以下の電話から決定されました:7.5ピクセルの差は明らかに見え、4ピクセルでは見えませんでした。
新しいテンプレートで 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が 1 ピクセル以上のずれを示す場合、明るい部分がエッジを侵食している:クリーンなエッジを取り、中心を通して鏡像にします。ロック画面では、アイランド搭載電話からx(時刻 111、アイコン 479)を、yをmeasureから取得します。 - アイランド上のスピーカー: ガラスの輪郭内にある場合、
grille=45でその浮き彫りのみ復元。 - ガラス上の袖:
sleeve=1。templates/grey/(f38fe44a)に実際のグレーフレームがある場合のみ有効。 - 暗い部分が重なる場合:
slide_trace.pyは720ポイントのうち立ち上がりが400未満の場合、自動的に切り替えます。-splitは特に注意して確認すること。
仕組み
電話は剛体であるため、画面はiOSの連続的な角丸を持つ長方形であり、透視変換と1つの放射状レンズ歪みを通して見られます。エッジは対数輝度で検出されるため、暗い部分の重なりでも機能し、線形光の中間点に配置されます。画像は補正された写真上に描画され、その後ガラスとともに元に戻されます。
既知の落とし穴
- 暗いページだけで判断すること。
- ある方法でフィッティングし、別の方法で確認すること:確認がフィッティングであり、証明は除外されたものです。
- 写真上に直接直線を引くこと:写真は歪んでいます。直線は補正後の画像上にのみ存在します。
- 明るい画面で外側からケースのエッジを探すこと:布の折り目がケースのように見えます。画面から外側に向かって探索します。