‘셀프’로 촬영하는 신분증 사진은 그만!

한 번에 척척 알아서 하는 플랫폼 될게요

넘쳐나는 플랫폼 사이에서 고객의 선택을 받으려면 ‘첫인상의 법칙’을 따라야 한다. 어떤 서비스를 이용하려고 하는데 자꾸 오류가 생긴다면, 고객은 바로 ‘뒤로 가기’ 하거나 삭제 버튼을 누를 테니까. 꼭 필요한 서비스인 데다 대체제가 없다면 모르지만, 플랫폼 산업에서 더 이상 유일무이한 것은 없으니.

 

플랫폼의 첫인상은 당연하게도 메인 화면이겠지만, 그보다 중요한 건 회원가입 과정이다. 제도권 금융사인 데일리펀딩은 회원가입 시 KYC(고객확인) 과정을 거치는데, 이때 좋은 첫인상을 남기려면 신분증 인식이 자동으로, 한 번에 척척 진행돼야 한다. 그동안 고객이 직접 신분증을 인식 영역에 맞추고 촬영 버튼을 눌러야 하는 번거로움이 있었다. 버튼을 누를 때 신분증이 영역에서 벗어나는 일도 자주 발생했다. 신분증이 아닌 이미지도 서버로 전송돼 불필요한 비용이 낭비되는 내부적인 이슈도 물론이었다.

 

신분증이 감지된 경우에만 서버로 전송하고, 신분증이 카메라 영역에 들어오면 고객이 버튼을 누를 필요 없이 자동으로 촬영하는 것. 그래서 고객 편의와 신뢰를 더욱 높이는 것. 이것이 바로 이번 KYC 기술 내재화 프로젝트의 목표였다.  

 

68개의 얼굴 부위를 감지하는 모델 도입  

신분증 촬영 빛반사 문제도 데일리가 보완할게요

‘신분증 자동 인식 및 촬영 기술’을 기획할 때 먼저 주민등록증, 운전면허증, 여권, 외국인등록증 등 신분증의 공통점에 주목했다. 처음에는 OCR(광학 문자 인식)만을 고려했으나, MIT님께서 ‘신분증에는 모두 얼굴 사진이 있다’고 힌트를 주셔서다. 그래서 신분증인지 아닌지 판단하기 위해 face-api.js라는 라이브러리를 기반으로 얼굴부터 감지하도록 구현했다. 이 face-api.js 안에는 여러 가지 모델이 있는데, 얼굴 자체를 인식하는 tiny_face_detector와 눈∙코∙입 등 얼굴의 특성(랜드마크)을 세세하게 추출하는 faceLandmark68TinyNet라는 모델을 둘 다 사용했다. 고객이 신분증 인증을 보통 스마트폰으로 진행할 테니, 모바일에서 가볍게 사용할 수 있는 경량 모델을 고른 것이다.  

 

신분증에서 얼굴이 인식됐는지 아닌지 그 여부도 좌표 박스로 시각화해서 감지 성능도 확인했다.

 

68개의 랜드마크를 감지하는 faceLandmark68TinyNet 모델
※ 출처: Journal of Real-Time Image Processing

 

금융 플랫폼에서 신분증을 인증할 때 빛반사가 되지 않도록 주의하라는 문구를 흔히 볼 수 있다. 포털 사이트에 잠시 검색만 해도 빛반사를 방지하는 방법을 물어보는 게시글이 쏟아진다. 신분증 인증을 위해 반드시 어두운 곳으로 이동해야 하거나 상자 안에 신분증을 두고 촬영하라는 꿀팁도 여기저기 흩어져 있다. 신분증 이미지에 포함된 문자를 디지털 텍스트로 변환하는 OCR을 진행해야 하는데, 카메라로 촬영한 이미지는 노이즈가 심해 신분증 OCR 인식률이 낮다는 게 원인이다.

 

그런데 언제까지 고객이 각종 꿀팁을 활용해 신분증을 인증해야 할까? 개발자인 나도 이런 경험을 피할 수 없었는데, 반복적인 불편함 끝에는 ‘이미지 전처리’라는 아이디어가 놓여 있었다. 강력하게 이미지 전처리를 하면 굳이 그림자를 만들거나 여러 번 재촬영할 필요가 없으리라 생각한 것이다. 물론 빛반사를 최소화해야 하는 건 맞지만, 우리가 보완해 줄 수는 있으니까.