안녕하세요. 빅데이터센터 AI Lab 강민석입니다.
리멤버의 명함 촬영 인식은 유저가 명함을 등록하기 위한 촬영 순간에 명함을 인식하고 배경이 제거된 명함만을 사용자에게 보여주는 기술 입니다. 지금 이 시간에도 많은 사용자들이 명함을 촬영하고 있어 리멤버에서 더 정확하고 선명한 명함을 사용자에게 제공하고자 꾸준히 노력을 해왔습니다.
이번에 포스팅에서 소개할 명함 촬영 인식 AI 모델 ‘리오(RIO)’는 기존의 전통적인 컴퓨터 비전 기술인 Edge Detection, Hough Transform과 같은 기술에서 Deep Learning을 활용한 Instance Segmentation 기술로의 교체를 통해 사용자에게 더 다양한 환경에서 촬영할 수 있게 하고 선명하고 깨끗한 명함을 사용자에게 제공하고자 합니다.
이 AI 명함 촬영 인식 ‘리오’ 적용기 포스팅은 1부와 2부로 나누어 포스팅되어 있으며 이번 포스팅인 1부에서는 명함 촬영 인식 위한 Instance Segmentation & Computer Vision 적용 방법을 다루고 2부에서는 ML Model Converter와 안드로이드 앱 적용기에 대해 포스팅 되어있습니다.
AI 명함 촬영 인식 ‘리오(RIO)’ 적용기 1부 – 명함 촬영 인식 위한 Instance Segmentation & Computer Vision
AI 명함 촬영 인식 ‘리오(RIO)’ 적용기 2부 – ML Model Converter와 안드로이드 앱 적용기
2부의 ML Model Converter와 안드로이드 앱 적용기 또한 많은 관심 부탁드립니다. 🙂
명함 촬영의 다양한 환경 및 촬영 어려움
리멤버의 기존 명함 촬영 인식 방법에서 사용자들의 꾸준한 개선 요구가 있었습니다. 그 원인은 크게 3가지 정도라고 생각됩니다. 첫 번째로는 다양한 배경에서 명함 촬영, 두 번째로는 다양한 촬영 상황, 세 번째로는 촬영 시 제약 사항이 있습니다.
- 다양한 배경에서의 명함 촬영 : 많은 리멤버 앱 사용자들이 명함을 촬영할 당시에 명함을 테이블 위에 놓고 찍는 환경 찍습니다. 하지만 생각보다 많은 사용자가 차량 안, 손에 들고, 키보드 위에 놓고 명함 사진을 찍는 경우도 많다 보니 촬영에 어려움이 있었습니다.
- 다양한 촬영 상황 : 너무 어둡거나 밝은 조명에서 촬영하거나 그림자가 짙은 곳에서의 촬영, 사용자가 걷거나 움직이는 촬영 환경에서도 촬영에 어려움을 겪고 있었습니다.
- 촬영 시 제약사항 : 환경적인 요소를 제한하기 위한 근접한 명함, 배경과 대조되는 환경에서의 제약이 실제 사용자들의 재촬영 또는 촬영시간의 증가로 이어졌었습니다.
이러한 3가지 요소들을 해결하고자 AI 명함 촬영 인식 ‘리오(RIO)’는 리멤버의 명함촬영을 하는 사용자에게 더욱 더 쉽고 빠르게 깨끗한 명함 촬영을 제공하고자 개발되었습니다. 이후 아래의 글에서는 AI 명함 촬영 인식 모델을 설명하고자 합니다.
그림 1. 다양한 환경 및 촬영 상황 (왼쪽-키보드 위 명함, 가운데-어두운 환경의 명함, 오른쪽-멀리서 찍은 명함)
AI 명함 촬영 인식의 Task
AI 명함 촬영 인식 리오(RIO)를 개발 하기에 앞서 다양한 문제 해결방법에 대해 리서치를 진행하게 되었습니다. 명함 촬영 인식이라는 문제를 해결하기 위한 Task들로 Rotated Object Detection, Keypoint Detection, Instance Segmentation으로 추려졌습니다. 따라서 각 Task는 서로 장단점들이 존재하고 저희 명함에 적합한 Task는 Instance Segmentation이라 판단했습니다.
우선적으로 Rotated Object Detection은 다른 Task에 비해 쉬운 테스크를 갖고 있어 학습에 유리하고 명함의 방향까지 찾아 줄 수 있다는 장점이 있습니다. 하지만 명함 촬영 시에 카메라 특성 때문에 실제 사물이 이미지에 투영되는 2차원 이미지로 표현되는데 이는 명함이 직사각형으로 표현되지 않는 한계를 갖는 것을 의미하며 저희가 해결하고자 하는 문제를 해결할 수 없었습니다.
Keypoint Detection은 명함의 4개의 점을 바로 찾아 사용자에게 제공되므로 모델 결과물에 대한 후처리가 따로 필요 없다는 장점을 갖고 있습니다. 하지만 Keypoint Detection으로 찾는 4개의 점의 정확도와 리멤버 촬영시 원하는 정확도보다는 못 미치는 결과를 얻었습니다. 또한, 동그라미 및 다각형등의 다양한 명함 Shape를 표현하지 못하는 문제가 존재 했습니다.
Instance Segmentation의 경우 실제 사물이 이미지에 투영되는 특성에 상관없이 다양한 모양의 명함의 Shape을 찾아주고 위에 설명한 다른 Task들보다 정확하게 명함을 찾아주는 결과를 보여줬습니다. 하지만 Segmentation 결과 자체를 사용하지 않고 추가적인 후처리를 통해 사용자에게 제공해주어야 했습니다.
그림 2. Rotated Object Detection[1], Keypoint Detection[2], Instance Segmentation[3] 각 Task의 결과
AI 명함 촬영 인식 모델의 파이프 라인
이번에 새롭게 배포되는 AI 명함 촬영 인식 모델 ‘리오(RIO)’는 아래의 흐름으로 입력된 이미지를 처리하게 됩니다. 사용자에게 실시간으로 명함을 찾아 사용자 화면에 표현해주기 위해 명함의 위치를 RIO Detector가 이미지 위에 동그라미로 표현해주게 됩니다. 사용자가 촬영 버튼을 클릭하게 되면 촬영된 명함 이미지를 RIO Segmentor를 통해 명함의 영역을 찾아내고 사용자에게 명함 이미지만으로 보이게끔 배경을 잘라내고 명함의 형태를 변형하여 명함의 이미지를 보여주게 됩니다. 아래의 내용에서 기능을 하나씩 설명하겠습니다.
그림 3 AI 명함 촬영 인식 모델의 파이프 라인
RIO Detector(Object Detection)
그림 4. RIO Detector 적용된 리멤버 앱
RIO Detector는 사용자가 촬영한 이미지에서 명함의 위치 및 크기를 직사각형 형태로 찾는 작업입니다. 이는 사용자에게 명함의 위치를 인지하게 해주고 명함의 촬영이 준비 되었다는 의미를 갖습니다. 명함 촬영시에 가이드 역할을 합니다.
RIO Segmentor(Instance Segmentation)
.
그림 5. 이진화된 명함의 영역(세그멘테이션 결과) 그림 6. 원본 이미지와 세그멘테이션 매핑(예상) 결과
RIO Segmentor는 사용자가 촬영 버튼 클릭 시 동작하게 됩니다. 사용자가 촬영한 이미지에서 입력 이미지의(640×640) 모든 픽셀에 대해 명함 인지 아닌지를 판단하여 이진화된 명함의 영역을 찾게 됩니다. RIO Segmentor로 찾게 된 이진화된 명함의 영역(명함의 Segment)을 후처리를 통하여 정제된 명함 이미지로 변환하게 됩니다.
Post-Processing
RIO Segmentor로 찾아낸 이진화된 명함의 영역(명함의 Segment)을 통해 사용자에게 보여주는 명함 이미지로 변환하는 일련의 작업을 Post-Processing이라고 부르고, 내부적으로 외곽선 검출→최소 넓이 사각형 검출→최소 거리 꼭짓점 검출→투영 변환 순으로 진행하게 됩니다.
외곽선 검출 (Contour)
그림 6. 명함이미지의 외곽선 검출 예시
RIO Segmentor으로 찾게 된 이진화된 명함의 영역(Segment)의 가장 밖에 있는 외곽선을 찾는 작업입니다. OpenCV의 findContours()
를 활용하여 외곽선을 찾습니다.
최소 넓이 직사각형 검출 (Minimum Area Rectangle)
그림 7. minAreaRect() 결과 이미지 – 왼쪽 OpenCV Contour Feature 예시[4], 오른쪽 명함이미지 결과 예시
OpenCV 함수인 minAreaRect() 를 사용하여 명함의 영역(Segment)을 감싸는 Minimum Area Rectangle(최소 넓이 직사각형)을 찾습니다. 위 그림에서 빨간색의 사각형이 회전을 포함한 최소 넓이를 갖는 직사각형입니다. 연두색의 사각형이 일반적으로 사용되는 Bounding Box(Object Detection의 결과)를 나타내고 회전이 없는 최소 넓이를 갖는 직사각형입니다.
최소 거리 꼭짓점 검출 (Minimum Distance Point)
그림 8. 최소거리 포인트 검출 방법
최소거리 꼭짓점 검출은 외곽선과 최소 넓이 직사각형을 활용해 최종적인 명함의 4개의 꼭짓점을 찾는 작업입니다. 찾아낸 최소 넓이 직사각형의 4개의 꼭짓점(위 그림의 파란색 동그라미)과 외곽선을 이루는 점 간의 가장 가까운 4개의 꼭짓점(빨간색 동그라미)을 찾게 됩니다. 찾아낸 4개의 점(빨간색 동그라미)을 명함의 꼭짓점이라고 판단합니다.
투영 변환 (Projection Transform)
그림 9. 명함 이미지의 투영 변환 예시
투영 변환은 사용자가 촬영한 사진 속 명함을 2차원 평면으로 펴주는 작업으로 OpenCV 함수인 getPerspectiveTransform()
를 활용해 투영 변환 행렬을 구하고 warpPerspective()
를 통해 촬영된 이미지를 명함을 명함 사이즈라고 판단되는 정방향으로 회전된 최소 넓이 직사각형의 형태로 변형하여 사용자에게 정제된 명함 이미지로 보이게 됩니다.
AI 명함촬영인식 ‘리오(RIO)’ 적용기 1부를 맺으며
AI 명함촬영인식 ‘리오(RIO)’ 적용기 1부에서는 AI 명함촬영인식 ‘리오(RIO)’를 개발하게 된 이야기를 시작으로 명함촬영에서 해결하고자 하는 문제를 풀기 위한 다양한 방법들은 검토하고 리멤버 만의 명함촬영인식 방법으로 고안한 AI 명함촬영인식 ‘리오(RIO)’의 방법을 설명했습니다. AI 명함촬영인식 ‘리오(RIO)’ 적용기 2부 – ML Model Converter와 안드로이드 앱 적용기에서는 AI 명함촬영인식 ‘리오(RIO)’의 파이프 라인을 안드로이드에 적용하는 방법들과 다양한 시도들을 공유하고자 합니다.
리멤버 빅데이터 센터 AI Lab에서는 꾸준히 최신 연구를 활용하여 인재 추천 서비스, 광고 추천 서비스, 명함 인식 등 다양한 연구를 수행하고 계속해서 블로그에 글을 포스팅하려고 하고 있습니다. 지속적인 관심 부탁드립니다. 궁금하신 사항은 댓글을 통해 문의 부탁드리며 긴 글 읽어주셔서 감사합니다.
Reference
[1] Zhang, Luyang, et al. “Constraint Loss for Rotated Object Detection in Remote Sensing Images.” Remote Sensing 13.21 (2021): 4291.
[2] Xu, Yufei, et al. “ViTPose: Simple Vision Transformer Baselines for Human Pose Estimation.” arXiv preprint arXiv:2204.12484 (2022).
[3] Bolya, Daniel, et al. “Yolact: Real-time instance segmentation.” Proceedings of the IEEE/CVF international conference on computer vision. 2019.
[4] OpenCV: Contour Features Official Tutorials
강민석 센터장님.
안녕하세요.
리오 서비스를 활용해서 병원에서 생성되는 처방전을 pdf로 전환할 경우 이 pdf를 사용자가 카메라로 촬영하여 앱으로 송부하는 프로세스에 적용해보려고 하는데
혹시 이 부분 관련한 기술 제공이나 외부 전문기업 추천이 혹시 가능하실까 문의드리고자 연락드립니다