ocr은 Optical Character Recognition. 한국어로 풀자면 광학식 문자 판독이다
현재 진행하는 프로젝트에서는 인바디의 결과를 입력 받아야하는데 결과지를 일일이 입력하는 방식보다 편하게 값을 받고싶었다.
먼저 회원번호나 QR스캔을 이용하려했는데 이와 관련되서 inbody 공식 홈페이지에서 찾아봤지만 해당되는 자료가 없었기에 결과지를 사진or 캡쳐 형식으로 입력받을 수 있도록 구현하고있다.
ocr 검색했을 때 가장 먼저나온 오픈소스가 tesseract였다. 고른 이유 역시 완전한 오픈소스 이기 때문이다.
이를 통해서 여러가지 (한글 학습된 모델 이용 및 이미지 전처리과정) 방법으로 테스트를 해본 결과, 아직 혼자 힘으로 해보기엔 너무 부족한 결과를 받아들이고 다른 방법을 찾아보았다.
(상심이 커 테스트 과정 중 남겨놓은 자료는 폐기했다.)
여러가지 vision api들이 있었지만 kakao의 오픈 api의 경우 과금 시스템이 없다고하여 진행했다.
아래는 실제 본인의 사진을 이용해서 kakao ocr api를 사용해본 결과이다.
혼자 해본 결과에 비하면 매우 만족할만한 결과를 얻었다.
위에서처럼 글자 인식률은 만족할만한 결과지만 원하는건 측정된 값(~~kg)이다.
문자가 정확히 인식된다면 좋겠지만
위와 같이 안될 경우를 대비해 못 찾을 경우 비슷한 문자열들로 검색한다.
여기선 json파일로 배열을 만들어 활용하였다.
테스트 이미지에서는 원하는 값은(~~kg, ~~%) 찾은 문자열(체중,체지방률) 옆에 있기에
비슷한 Y위치, X값은 더 큰 위치에 있는 텍스트 박스를 모았다.
open cv를 활용해서 측정값이라 추정되는 박스의 왼쪽부분에 막대가 있는지 판별
막대가 없을 경우(모바일 or 검출 실패) 찾은 문자열(체중)의 박스와 가장 가까운 박스 선정
왼쪽 사진은 kakao vision의 결과물이고 오른쪽은 체중, 골격근량, 체지방률을 검색한 결과이다.
error code
~~라는 글자를 찾지못함 : 글자 자체를 vision을 통해 인식하지 못함.
~~로 추정되는 측정값을 ~~ : 측정값이라 추정되는 값을 인식하지 못함.
여쭤볼게 있어 댓글 남깁니다! 학교에서 공부하며 ocr 프로젝트를 진행하는데 카카오비전을 사용해서 진행중입니다. 측정값 옆에 막대가 있는지 확인할 수 있는 방법과 같이 원하는 측정값 좌표를 찾아내신 구현 부분이 궁금한데 혹시 방법이나 참고할만한 자료가 있으면 알려주시면 정말 감사드리겠습니다. ksoul406@naver.com 메일주소도 남깁니다.