머신러닝 기반의 글자 인식 개발 - swiftOCR

2018. 7. 31. 13:58Development/[iOS] Swift, ObjC

728x90

머신러닝 기반의 글자 인식 개발 - swiftOCR 소개


2018/07/31 - [공지사항] - [티스토리 초대장 배포] 2018년 8월 티스토리 초대장 6장 배포합니다.





우선 글을 포스팅하기에 앞서, 회사 업무간 필요한 QR Code 생성, 스캔에 대해 말씀을 드려야 겠군요.


회사에서 SDK 기능을 탑재한 샘플 앱을 애플 앱스토어에 런칭하기위해 기능을 개발하던 중,


텍스트를 폰에 넣는 것이 불편하여 ( 기존에는 이메일로 텍스트 문구를 보내고 그 이메일을 폰에서 열어서 복사하는 과정.. ) 


웹에서 텍스트를 QRCode 로 생성하여 폰에서 바로 QR Code를 스캔하면 텍스트를 복사할 수 있기에 


해당 기능을 구현을 하던 차,



요즘 핫하다는 카메라 번역 이 떠올랐습니다.


초창기에는 카메라로 사진을 촬영해서 해당 사진을 분석하는 방식으로 글자를 인식해서


번역해주는 방식이었으나 


최근에는 카메라만 들이대면 화면상에 바로 번역된 글자가 오버레이 되어서 나타나죠~


(대표적인것인 구글 번역기의 영한 번역 ) 




그래서 웹상의 글자를 QR Code로 번환해서 이를 카메라로 스캔할 것이 아닌 바로 글자를 인식해서 복사하면 더 스텝을 줄일 수 있게


되겠다는 생각에 ios 글자 인식 소스를 찾아보다가 




ios11 의 머신러닝 기반의 Vision 프레임워크 제공(https://developer.apple.com/documentation/vision)을 알게 되었습니다. 


해당 방식의 가장 기본적인 방식은



1. 글자가 들어간 이미지로 머신러닝을 동작시킨다 ( 이미지 속의 글자를 인식시키는 학습 )


2. 해당 학습 결과 파일을 Xcode 프로젝트에 첨부한다.


3. 사진을 촬영하여 이미지 파일 또는 이미지 객체를 분석한다.


4. 3번 분석 결과로 나온 글자를 보여준다


(이후 동작은 번역이 될 수도 있고, 저처럼 클립보드에 복사를 할 수 도 있고..)



과 같은 흐름이 가장 기초적인 순서입니다.


단.... 3번 과정에서 이미지 분석을 위해서는 "글자 인식" 까지는 ios 기본 로우레벨의 코딩으로 가능하지만 


분석되어 나온 글자를 String으로 뽑아내는 것은 써드파티 프레임워크가 필요합니다. 



이때! 


tesseract 를 사용하거나 오픈 소스 프레임워크를 사용하게 되는데, 


오픈 소스 예제를 찾아본 바 다음 소스들이 기본 학습에 도움이 되실 것 같아 소개를 드립니다.



[ Swift OCR ]

https://github.com/garnele007/SwiftOCR


tesseract와 비교했을때 인식률이 높다하며 ( 팩트 체크 필요 ), CPU 점유율이나 메모리 사용량, 글자 인식 속도도 월등하다고 합니다.



실제로도 프레임워크가 가벼워서 사용하기 편리했고,  


swiftOCRInstance.recognize(myImage) { recognizedString in
    print(recognizedString)
}


과 같은 방식으로 Image변수만 넘기면 콜백 함수로 해당 문자열을 받아올 수 있습니다.

728x90