Cuối cùng, cũng đến lúc chúng tôi chia sẻ về những gì đã phát triển và những vấn đề đã vượt qua trong năm vừa qua, một bước tiến quan trọng khác để người dùng SketchAR cảm nhận được sự tự do sáng tạo, không bị giới hạn bởi các quy ước thông thường.
Nhu cầu về các ứng dụng di động cung cấp nội dung ảo đang rất lớn, bất kể những hạn chế của công nghệ hiện tại. Vì thị giác máy tính là một lĩnh vực mà phần mềm gắn liền chặt chẽ với phần cứng, đáng tiếc là hầu hết các ý tưởng về sản phẩm AR sẽ luôn bị giới hạn bởi độ trễ từ phía kỹ thuật.
Các đội ngũ nhỏ hiếm khi giải quyết được những vấn đề mang tính nền tảng, nhưng chúng ta có thể tìm ra một phương pháp giúp đơn giản hóa bài toán này.
Tại sao phải phát minh lại bánh xe, và tại sao chưa ai từng thử làm điều này trước chúng tôi?
Hầu hết các thư viện và nền tảng của bên thứ ba đều dựa trên các marker được cài đặt sẵn để cố định một vật thể ảo tại vị trí của nó trong thế giới thực. Trong trường hợp của chúng tôi, bàn tay đang vẽ tranh lại che mất các marker này, vì vậy chúng tôi buộc phải phát triển phương pháp riêng.

ARKit không thể làm được điều tương tự nếu không có marker.
Ngoài ra, ARKit và ARCore không dựa trên marker (trừ những gì có sẵn trong môi trường), nhưng độ chính xác khi cố định vật thể ảo sẽ tốt hơn nếu có một số marker được cài đặt sẵn giữ vật thể ảo đúng vị trí. Phương pháp hiện tại có bao gồm việc phát hiện và theo dõi các điểm mốc để hướng dẫn người dùng, nhưng người dùng vẫn chưa thể tự thiết lập marker tham chiếu của riêng mình. Vấn đề thứ hai của ARKit và ARCore là không thể di chuyển một vật thể ảo cùng với thế giới thực. Ví dụ, sau khi đặt một vật thể ảo lên một bề mặt vật lý, chúng ta không thể di chuyển bề mặt ảo và bề mặt vật lý đó như một khối thống nhất – như thể được dán chặt vào nhau – vì hình ảnh ảo vẫn giữ nguyên vị trí và không di chuyển theo bề mặt.
Như đã nói ở trên, SketchAR hoạt động trên giấy trắng, vốn là “khắc tinh” của hầu hết các thuật toán thị giác máy tính. Tuy nhiên, thuật toán của chúng tôi được tối ưu hóa đặc biệt cho điều kiện này. Chúng đủ ổn định và chính xác để gắn kết nội dung AR vào tờ giấy. Chúng vẫn tiếp tục hoạt động ngay cả khi việc theo dõi của ARKit bị lỗi. Tốc độ cũng là yếu tố quan trọng. Chúng tôi đã chuyển phần lớn các phép tính sang GPU, giúp SketchAR hoạt động theo thời gian thực trên iPhone, bắt đầu từ mẫu 5SE.
Phương pháp ‘Progressive Markers’.
Điều này có nghĩa là một nét vẽ của người dùng sẽ trở thành một điểm neo (anchor), giúp tăng thêm độ ổn định trong việc giữ vật thể ảo tại vị trí của nó.
Bên cạnh đó, dữ liệu thu thập được cũng giúp chúng tôi tiếp tục phát triển một trợ lý cá nhân hóa hoàn chỉnh cho từng người dùng. Nhân tiện, chúng tôi sử dụng học máy và mạng nơ-ron để phân tích và huấn luyện dữ liệu từ bản vẽ của mỗi người dùng. Chúng tôi sẽ chia sẻ chi tiết hơn về điều này trong các bài viết tiếp theo.
Houston, chúng ta có vấn đề rồi — hay nói cách khác, nguyên lý hoạt động là ‘đừng sợ hãi.’
Để hiểu cách vấn đề được giải quyết, cần phải quay lại từ điểm xuất phát:
Môi trường. Mỗi bề mặt có kết cấu, màu sắc và cấu trúc khác nhau. Ngoài ra, các thuật toán có thể bị phân tán bởi những ‘nhiễu’ ngoại lai từ môi trường xung quanh. Các bộ lọc (‘kênh’, tương tự như các kênh màu trong Photoshop) giúp giải quyết vấn đề này.
Việc thống nhất các loại bề mặt là rất khó, tất nhiên là trừ khi việc huấn luyện mạng nơ-ron dựa trên dữ liệu thực tế từ người dùng. Việc huấn luyện mạng nơ-ron là một quá trình liên tục và vì vậy không bao giờ nên được coi là một phần đã hoàn thiện của sản phẩm.
‘Canvas’ (Bề mặt vẽ). Canvas có thể là một tờ giấy, một bức tường, hoặc bất kỳ bề mặt nào khác mà bạn chọn để vẽ lên. Sự đa dạng của các ‘canvas’ chỉ được xác định bởi kích thước. Đồng thời, màu trắng chính là ‘kẻ thù’ của thị giác máy tính. Hãy đọc bài viết ‘Vấn đề với giấy trắng’ của chúng tôi để hiểu tại sao lại như vậy.
Bản vẽ. Rõ ràng, chúng tôi hiểu trình độ của người dùng và không kỳ vọng bản phác thảo sẽ khớp hoàn hảo với hình ảnh gốc. Vì vậy, thuật toán của chúng tôi có tính đến những sai lệch của người dùng.
Bàn tay. Một ‘kẻ thù’ khác đối với hoạt động thành công của ứng dụng là khi bàn tay trên màn hình che khuất bề mặt, marker hoặc chính bản vẽ. Kích thước và hình dạng bàn tay, màu da, thậm chí cả cách cầm bút chì cũng làm phân tán một phần sự chú ý của thuật toán.
Thiết bị. Vị trí không cố định của thiết bị. Người dùng cầm điện thoại bằng một tay, di chuyển gần và xa bề mặt ở nhiều góc độ khác nhau.
Giải pháp.
Sau khi phân tích kỹ lưỡng những vấn đề này, chúng tôi đã hiểu cách ‘dạy’ cho ứng dụng chỉ nhìn thấy những gì người dùng vẽ, bằng cách lọc bỏ chứ không bỏ qua môi trường xung quanh.
Dưới đây, bạn có thể thấy cách thế giới xung quanh được chuyển đổi thành một hình ảnh phẳng và được chia thành nhiều lớp để phân tích từng lớp thông qua các kênh.

Nó hoạt động như thế nào?
Việc chuyển đổi nội dung được kết xuất, ánh xạ nó với hình ảnh gốc, rồi đặt một vật thể ảo lên bề mặt, đòi hỏi một cách tiếp cận đa chiều. Thực tế, một số lớp trong đó quan trọng hơn nhiều so với các lớp khác. Điều này càng rõ ràng khi ta chỉ nhìn vào một phần nhỏ của quá trình để thấy có bao nhiêu thao tác diễn ra mỗi giây.
Đây là một sơ đồ đơn giản mô tả cách môi trường xung quanh trở thành một hình ảnh phẳng. Sau đó nó được tách thành nhiều lớp (kênh) để phân tích.
Như đã mô tả ở trên, các lớp được tách riêng, và một thuật toán dạy cho camera phân biệt mọi thứ nó nhìn thấy. Ví dụ, nền được tách khỏi bàn tay, bàn tay được tách khỏi bóng của chính nó, v.v.

Các màn hình được sắp xếp theo thứ tự từ trái sang phải:
- Hình ảnh ảo được đặt trên bề mặt, hiển thị cho người dùng trên màn hình điện thoại thông minh.
- Nhận diện tờ giấy trên bề mặt
- Tờ giấy được tách sơ bộ khỏi nền. Có thể thấy nhiễu trên bề mặt bàn, và bóng của bàn tay được nhận diện như một vật thể riêng.
- Sự tách biệt rõ ràng giữa bàn tay và bề mặt.
- Chỉ phát hiện nội dung đã được vẽ.
- Nhận diện nội dung đã vẽ trong mối tương quan với môi trường xung quanh.
Khi ứng dụng đã biết cách nhận diện rõ ràng từng vật thể, nó sẽ đối chiếu chúng với hình ảnh gốc. Hãy nhớ rằng, mỗi thao tác của thuật toán diễn ra trong khi camera và bàn tay liên tục di chuyển trong khung hình.

Một ví dụ về việc có rất nhiều so sánh sai lệch xảy ra trong phiên bản đầu tiên của thuật toán.

Đây là ví dụ về những so sánh chính xác trong các phiên bản sau của thuật toán.
Không đi sâu vào chi tiết, cách tiếp cận này đã giải quyết được nhiều vấn đề và bài toán của sản phẩm nhằm cải thiện trải nghiệm người dùng. Nó mở rộng phạm vi ứng dụng của dữ liệu thu thập được, từ đó cho phép chúng tôi đưa sản phẩm lên những tầm cao mới. Đây là một trợ lý hoàn chỉnh, được hậu thuẫn bởi dữ liệu từ học máy và mạng nơ-ron.
SketchAR đã có mặt trên App Store được gần một năm, trên Google Play được nửa năm, và thậm chí trên cả MS Hololens. Bất chấp những đánh giá đầy nhiệt tình từ người dùng và báo chí, vẫn chưa có ứng dụng đối thủ nào sở hữu chức năng tương tự. Điều này càng khẳng định mức độ phức tạp của bài toán và tính độc đáo trong thuật toán của chúng tôi.
Hãy theo dõi những cập nhật mới, vẽ nhiều hơn và yêu công nghệ, vì nó giúp chúng ta phát triển… và chẳng bao lâu nữa nó sẽ thống trị nhân loại! ;)
Nghệ thuật cho tất cả mọi người!



