On-Device Stitching with Zillow 3D Home
Bài tóm tắt Zillow 2020 3. Quy mô lớn Độ khó: Trung bình
Zillow · 2020 · 3. Quy mô lớn · Độ khó: Trung bình — bài gốc
Bối cảnh
- App Zillow 3D Home (iPhone, ra 10/2017) chụp tour ảnh 360° bằng cách người dùng xoay tại chỗ. Bản đầu chụp 180 frame và gửi 70 MB trở lên mỗi panorama lên cloud để ghép.
- Vấn đề: phải chờ vài phút mới xem được kết quả; nhà đang rao bán thường không có WiFi nên người chụp để offline, vài giờ sau mới thấy ảnh, lúc đó đã rời nhà; giới hạn dung lượng upload nên không tận dụng được camera độ phân giải cao và góc siêu rộng; số tour tăng thì chi phí compute cloud tăng vọt; thiếu dữ liệu đã xử lý trong lúc chụp nên không áp được CV/ML.
Thay đổi chính
- Chuyển việc ghép lên điện thoại (mục tiêu có kết quả trong một phút): OpenCV, AVFoundation chụp 60 Hz, CoreMotion lấy IMU để hướng dẫn người chụp (cảnh báo xoay nhanh, nghiêng); ARKit được thử nhưng hoãn.
- Thuật toán mới cần nhiều frame hơn: 540 frame (full HD, hoặc 4K trên iPhone 11), quá lớn cho ngân sách bộ nhớ (vài trăm MB, quá khoảng 600 MB là gặp crash).
- Pipeline nhiều tầng: chọn một frame tốt nhất cho mỗi 1/540 vòng; chỉ giữ dải dọc ở giữa (frame đầu, cuối và frame phải chụp lại thì giữ rộng hơn); đăng ký ảnh ngay khi chụp; nén JPEG bất đồng bộ (HEIC tốn CPU quá) và giải nén theo nhu cầu với cache vài chục frame.
- Phần còn lại sau khi chụp: khép vòng (phân bổ sai số drift), làm mượt phơi sáng, blend, crop.
- Nếu app vào nền hoặc người dùng chụp panorama mới, ghi dữ liệu xuống đĩa trong vài giây rồi ghép tiếp sau; các bộ dữ liệu lưu lại cũng dùng để tái hiện lỗi và tinh chỉnh thuật toán.
Vì sao
- Gửi dữ liệu thô lên cloud tốn băng thông người dùng, chậm phản hồi và tăng chi phí theo số tour; điện thoại đời mới đủ mạnh để làm tại chỗ (Chi phí hạ tầng và build vs buy, Kiến trúc frontend).
Bài học cho SWE
- Dời compute về client đổi bài toán chi phí server thành bài toán ngân sách bộ nhớ và pin trên thiết bị.
- Thiết kế cho việc bị ngắt (app vào nền) ngay từ đầu: lưu trạng thái và làm tiếp.
- Dữ liệu ghi lại để resume cũng là công cụ debug tốt.
Liên quan
#Zillow 3D Home#panorama stitching#cloud → on-device#OpenCV#AVFoundation#CoreMotion IMU#memory budget#vertical strips#JPEG compression on the fly#loop closure#resumable stitching
Được nhắc tới trong
Công ty (1)
Bài tóm tắt (3)