드디어 지난 한 해 동안 우리가 개발한 것과 극복한 문제들에 대해 이야기할 때가 되었습니다. 이는 SketchAR 사용자들이 관습의 한계 없이 창작의 자유를 느낄 수 있도록 하는 또 하나의 중요한 발걸음입니다.
현재 기술의 한계와 상관없이 가상 콘텐츠를 제공하는 모바일 앱에 대한 수요는 매우 큽니다. 컴퓨터 비전은 소프트웨어가 하드웨어와 밀접하게 연결된 분야이기 때문에, 안타깝게도 대부분의 AR 제품 개념은 기술적인 측면에서의 지연으로 인해 항상 한계를 가질 수밖에 없습니다.
소규모 팀이 근본적인 문제를 해결하는 경우는 드물지만, 작업을 단순화할 수 있는 방법을 찾을 수는 있습니다.
왜 바퀴를 재발명하는가, 그리고 왜 아무도 우리보다 먼저 시도하지 않았는가?
대부분의 서드파티 라이브러리와 플랫폼은 가상 객체를 현실 세계의 특정 위치에 고정하기 위해 사전 설치된 마커를 기반으로 합니다. 하지만 우리의 경우, 그림을 그리는 손이 이 마커들을 가리기 때문에 자체적인 방법을 개발해야 했습니다.

ARKit은 마커 없이는 동일한 작업을 할 수 없습니다.
또한 ARKit과 ARCore는 (환경을 제외하면) 마커를 기반으로 하지 않지만, 사전 설치된 마커가 가상 객체를 고정해준다면 가상 객체의 위치 고정 정확도는 더 좋아질 것입니다. 현재 방식은 사용자를 안내하기 위해 핵심 지점을 감지하고 추적하는 것을 포함하지만, 사용자가 자신만의 기준 마커를 설정하는 것은 아직 불가능합니다. ARKit과 ARCore의 두 번째 문제는 가상 객체를 현실 세계와 함께 움직일 수 없다는 점입니다. 예를 들어, 물리적 표면에 가상 객체를 배치한 후에는 마치 접착된 것처럼 가상 표면과 물리적 표면을 하나로 움직일 수 없습니다. 가상 이미지가 같은 위치에 고정된 채로 표면을 따라가지 않기 때문입니다.
앞서 언급했듯이, SketchAR은 대부분의 컴퓨터 비전 알고리즘에게 '킬러'와도 같은 흰 종이 위에서 작동합니다. 하지만 우리의 알고리즘은 이런 조건에 특별히 최적화되어 있습니다. AR 콘텐츠를 종이에 결속시킬 만큼 안정적이고 정확합니다. ARKit의 트래킹이 실패한 이후에도 계속 작동합니다. 속도 또한 중요합니다. 우리는 대부분의 연산을 GPU로 옮겨서, SketchAR이 iPhone 5SE 모델부터 실시간으로 작동할 수 있게 했습니다.
'프로그레시브 마커' 방식
이는 아티스트가 그린 선이 앵커로 변환되어 가상 객체를 고정하는 데 안정성을 더한다는 의미입니다.
또한 수집된 데이터는 각 사용자를 위한 완전한 개인화 어시스턴트를 개발하는 데 지속적으로 활용됩니다. 참고로 우리는 각 사용자의 그림 데이터를 분석하고 학습시키기 위해 머신러닝과 신경망을 사용합니다. 이에 대해서는 다음 글에서 더 자세히 다루겠습니다.
휴스턴, 문제가 발생했다 — 아니, 작동 원리를 알면 '두려워할 것 없다.'
이 문제가 어떻게 해결되었는지 이해하려면 처음부터 다시 살펴볼 필요가 있습니다:
환경. 모든 표면은 서로 다른 질감, 색상, 구조를 가지고 있습니다. 또한 알고리즘은 환경의 불필요한 '노이즈'에 의해 방해받을 수 있습니다. 필터가 이 문제를 해결합니다 (Photoshop의 채널과 동일한 '채널' 개념입니다).
표면을 통일하는 것은 어려운 일입니다. 물론 신경망 학습이 실제 사용자 데이터를 기반으로 하지 않는다면 말이죠. 신경망 학습은 지속적인 과정이며, 따라서 제품의 완성된 부분으로 여겨져서는 안 됩니다.
'캔버스'. 캔버스는 종이 한 장, 벽, 또는 그림을 그릴 수 있는 어떤 표면이든 될 수 있습니다. '캔버스'의 다양성은 오직 크기에 의해서만 결정됩니다. 동시에 흰색은 컴퓨터 비전의 '적'입니다. 왜 이런 일이 발생하는지 이해하려면 저희 글 '흰 종이 문제'를 읽어보세요.
그림. 당연히 우리는 사용자의 실력 수준을 알고 있으며, 스케치가 원본 이미지와 완벽하게 일치할 것이라고 기대하지 않습니다. 그래서 우리 알고리즘은 사용자의 불일치를 고려합니다.
손. 앱이 성공적으로 작동하는 데 있어 또 다른 '적'은 화면상의 손이 표면, 마커 또는 그림 자체를 가로지를 때입니다. 손의 크기와 모양, 피부색, 심지어 연필을 쥐는 방식까지도 알고리즘의 주의를 일부 분산시킵니다.
기기. 기기의 위치가 고정되어 있지 않다는 점입니다. 사용자는 한 손으로 폰을 들고, 다양한 각도에서 표면에 가까워지거나 멀어집니다.
해결.
이 문제들을 자세히 분석한 후, 우리는 앱이 환경을 무시하지 않으면서도 필터링하여 사용자가 그리는 것만 볼 수 있도록 '학습'시키는 방법을 이해하게 되었습니다.
아래에서 주변 세계가 어떻게 평면 이미지로 변환되고, 각 레이어를 채널을 통해 분석하기 위해 여러 층으로 나뉘는지 확인할 수 있습니다.

어떻게 작동하나요?
렌더링된 콘텐츠를 변환하고, 원본에 매핑한 다음, 표면에 가상 객체를 배치하는 것은 다각적인 접근이 필요합니다. 실제로 이 레이어들 중 일부는 다른 것들보다 훨씬 더 중요합니다. 이 과정의 아주 작은 부분만 살펴봐도 매초 얼마나 많은 작업이 일어나는지 알 수 있습니다.
이것은 환경이 어떻게 평면 이미지로 변환되는지에 대한 간단한 도식입니다. 그런 다음 분석을 위해 여러 레이어(채널)로 분리됩니다.
위에서 설명한 것처럼, 레이어들이 분리되고 알고리즘은 카메라가 보는 모든 것을 구별하도록 학습합니다. 예를 들어, 배경은 손과 분리되고, 손은 그 그림자와 분리됩니다.

화면은 왼쪽에서 오른쪽 순서입니다:
- 사용자가 스마트폰 화면에서 보게 되는, 표면 위에 위치한 가상 이미지.
- 표면 위 종이의 인식.
- 종이가 배경으로부터 대략적으로 분리됩니다. 테이블 표면의 노이즈가 보이고, 손의 그림자가 하나의 물체로 인식됩니다.
- 손과 표면의 명확한 분리.
- 그려진 콘텐츠만 감지.
- 환경에 대한 그려진 콘텐츠의 인식.
앱이 각 객체를 명확하게 인식할 수 있게 되면, 이를 원본 이미지와 매칭합니다. 알고리즘의 모든 동작은 카메라와 손이 프레임 안에서 계속 움직이는 동안 일어난다는 점을 기억해주세요.

알고리즘 초기 버전에서 많은 잘못된 비교가 발생한 예시입니다.

다른 버전의 알고리즘에서 나온 좋은 비교의 예시입니다.
세부 사항까지 들어가지 않더라도, 이 접근 방식은 사용자 경험을 개선하기 위한 제품의 많은 문제와 과제를 해결합니다. 얻어진 데이터를 활용할 수 있는 범위를 확장시켜, 제품을 새로운 수준으로 끌어올릴 수 있게 해줍니다. 이것은 머신러닝과 신경망의 데이터로 뒷받침되는 완전한 어시스턴트입니다.
SketchAR은 AppStore에서 거의 1년, Play Market에서 반년, 그리고 MS Hololens에서도 서비스되고 있습니다. 사용자와 언론으로부터 열렬한 리뷰를 받고 있음에도 불구하고, 아직까지 유사한 기능을 가진 경쟁 앱은 등장하지 않았습니다. 이는 문제의 복잡성과 우리 알고리즘의 독창성을 잘 보여줍니다.
업데이트를 계속 지켜봐 주시고, 더 많이 그리고, 기술을 사랑해주세요. 기술은 우리가 성장하는 데 도움을 주니까요… 그리고 머지않아 인류를 지배하게 될지도 모르니까요! ;)
모두를 위한 예술!



