안녕하십니까!!
개발자 블로그 탐독 일지를 기록 CODE 1기 김윤섭입니다. 제가 이번에 소개할 기업은 '드라마앤컴퍼니'라는 IT기업입니다.자사의 대표적인 어플인 '리멤버'에서 AI기술을 접목한 새로운 스캔 기법인 'RIO'라는 기술을 설명드리겠습니다. 먼저 '리멤버'라는 어플이 학생분들께서는 생소하실 텐데요. 이 어플은 사용자가 명함을 스캔하여 디지털 데이터로 저장하고 연락처를 관리할 수 있게끔 해주는 서비스 입니다. 때문에 학생분들보다는 직장인 분들이 많이들 사용하고 계실 것이라 생각합니다(사용자가 무려 500만명입니다 ㄷㄷ). 그럼 이제 본격적으로 'RIO'라는 기술이 왜 만들어졌고 어떻게 구현되는지 설명드리겠습니다.
기존의 리멤버 사용자들은 대체로 3가지 불편을 호소하였습니다. 첫번째로는 다양한 배경에서의 명함 촬영이 불가하다는 점입니다. 평평하고 단색의 배경이 아닌 차량 안이나 키보드 위 등에서 명함 사진을 찍으려 하다보니 정확한 스캔이 어려웠습니다. 두번째로는 다양한 상황에서 촬영이 불가하다는 점입니다. 어둡거나 그림자가 짙은 곳에서 촬영하는 경우나 움직이면서 촬영하는 경우 스캔이 어렵습니다. 마지막으로 촬영 시 여러 제약사항입니다. 스캔을 위해서는 명함을 근접촬영해야하고 초점을 맞추어야 합니다. 이러한 제약들은 사용자들이 재촬영 또는 촬영시간의 증가로 이어집니다.
위 그림은 AI 명함 촬영 인식모델(RIO)의 전반적인 시스템입니다. 사용자에게 실시간으로 명함을 찾아 사용자 화면에 표현해 주기 위해 명함의 위치를 RIO Detector가 이미지 위에 동그라미로 표현해주게 됩니다.
사용자가 촬영 버튼을 클릭하게 되면 촬영된 명함 이미지를 RIO Segmentor를 통해 명함의 영역을 찾아내고 사용자에게 명함 이미지만으로 보이게끔 배경을 잘라내고 명함의 형태를 변형하여 명함의 이미지를 보여주게 됩니다.
Rio detector는 사용자가 촬영한 이미지에서 명함의 위치 및 크기를 직사각형 형태로 찾는 작업입니다. 이는 사용자에게 명함의 위치를 인지하게 해주고 명함의 촬영이 준비되었다는 의미를 갖습니다. 명함 촬영시에 가이드 역할을 합니다.
RIO Segmentor는 사용자가 촬영 버튼 클릭 시 동작하게 됩니다. 사용자가 촬영한 이미지에서 입력 이미지의(640×640) 모든 픽셀에 대해 명함 인지 아닌지를 판단하여 이진화된 명함의 영역을 찾게 됩니다. RIO Segmentor로 찾게 된 이진화된 명함의 영역(명함의 Segment)을 후처리를 통하여 정제된 명함 이미지로 변환하게 됩니다. 첫번째 사진이 이진화된 명함의 영역이고 두번째 사진이 후처리를 한 결과입니다.
앞서 세그맨터를 통해 찾게 된 이진화된 명함의 영역을 통해 사용자에게 보여주는 명함 이미지로 변환하는 일련의 작업을 post processing이라 합니다.
post processing은 먼저 외곽선 검출, 최소 넓이 사각형 검출, 최소 거리 꼭짓점 검출, 투영 변환 순으로 진행됩니다. 위 사진은 가장 밖에 있는 외곽선을 찾는 작업입니다. OpenCV를 활용하여 외곽선을 찾습니다. Open cv는 오픈 소스 컴퓨터 비전 및 머신 러닝 소프트웨어 라이브러리입니다. 이미지 처리, 비디오 분석, 얼굴 인식, 객체 탐지 등 다양한 컴퓨터 비전 관련 작업을 수행하는 데 사용됩니다.
다음으로는 최소 넓이의 직사각형을 검출해야합니다. OpenCV를 사용하여 명함의 영역을 감싸는 최소 넓이 직사각형을 찾습니다. 영역을 모두 포함하는 최소 넓이의 직사각형을 검출하는 작업입니다. 빨간색의 사각형이 회전을 포함한 최소 넓이를 갖는 직사각형입니다. 연두색의 사각형이 일반적으로 사용되는 Bounding Box를 나타내고 회전이 없는 최소 넓이를 갖는 직사각형입니다. 왼쪽 그림은 보시면 번개모양의 도형을 예시로 든 것이고 두번째 그림이 앞서 보았던 명함 이미지의 결과입니다.
최소거리 꼭짓점 검출은 외곽선과 최소 넓이 직사각형을 활용해 최종적인 명함의 4개의 꼭짓점을 찾는 작업입니다. 찾아낸 최소 넓이 직사각형의 4개의 꼭짓점(위 그림의 파란색 동그라미)과 외곽선을 이루는 점 간의 가장 가까운 4개의 꼭짓점(빨간색 동그라미)을 찾게 됩니다. 찾아낸 4개의 점(빨간색 동그라미)을 명함의 꼭짓점이라고 판단합니다.
투영 변환은 사용자가 촬영한 사진 속 명함을 2차원 평면으로 펴주는 작업으로 OpenCV 함수를 활용해 투영 변환 행렬을 구하고 촬영된 이미지를 명함을 명함 사이즈라고 판단되는 정방향으로 회전된 최소 넓이 직사각형의 형태로 변형하여 사용자에게 정제된 명함 이미지로 보이게 됩니다.
본래 키보드 위에서 직사각형을 제대로 맞추지 않고 찍은 사진이 정제된 명함이미지로 보이게 되는 과정을 보여드렸습니다. 일련의 여러 과정을 통해 사용자들이 더욱 편리하게 명함 사진을 찍을 수 있게 되었습니다. 위 과정들에 사용되었던 Open CV 함수에 대한 지식을 쌓는다면 명함 사진뿐만 아니라 여러 이미지나 영상등을 분석할 수 있다고 생각합니다. 관심이 있는 학우 분들은 Open CV에 대해 공부해보시는 것을 강추드립니다!! 이상 CODE 1기 김윤섭이였습니다.
'Study > 개발자 블로그' 카테고리의 다른 글
[개발자 블로그 탐독] 배달의 민족 - MLOps를 활용한 AI서비스 (0) | 2023.12.06 |
---|---|
[개발자 블로그 탐독] 뷰티 필터를 개발하며 얻은 새로운 경험 (1) | 2023.12.05 |
카카오 AI추천 : 토픽 모델링과 MAB를 이용한 카카오 개인화 추천 (2) | 2023.12.05 |
[개발자 블로그 탐독] 배달의민족의 리뷰 관리 비법 (1) | 2023.12.04 |
직방이 사용자 행동 로그를 관리하는 방법. ZAMS (0) | 2023.11.28 |