본문 바로가기
Android

처방전 약품명 OCR 과정

by ungyuun 2023. 5. 12.

지난 게시물에는 사진을 찍어 서버에 옮기는 작업을 했다. 하지만 해상도가 깨지고 회전하는 이미지 오류가 있었는데,

 

전에 서버에 이미지를 보내는 프로세스는 

1. 사진을 찍어 저장한다.

2. 사진을 회전시킨다.

3. 사진을 서버에 보낸다.

 

이러한 과정이었는데 이미 방향이 잘못된 사진을 보내면 서버쪽에서는 잘못된 사진을 받기때문에

 

1. 사진을 찍는다. 

2. 회전값을 계산하여 회전시킨다.

3. 사진을 저장시킨다.

4. 사진을 서버에 보낸다.

 

순으로 진행하였다.

 

 

전송하기 버튼을 누르면 post 요청으로 서버로 전달한다.

 

 

이미지 파일을 저장한 결과이다!

 

 

이제 여기서 약품명을 추출해야하는데 약봉투에 공통적으로 기입된 디자인이 있다.

아래 이미지인데, OpenCV의 Feature Match를 통해 좌표값을 얻어 약품명을 추출하려고 한다.

 

 

 

 

피쳐매칭을 진행하면 동일한 특징점을 찾아 좌표를 계산해주는데, 이를 이용해 약품명이 있는 좌표를 구해 이미지를

크롭했다.

 

 

크롭된 약품명이미지를 pytesseract를 이용해 OCR 한다.

 

 

OCR을 통해 얻어진 약품명이다. 

 

    이와같이 0709 0079 들이 붙는데, 이는 OCR 과정에서 mg를 잘못인식해서 나온 정보이다

    물론 OCR 옵션으로 (kor+eng) 를 주면 정상적으로 되겠지만, 오히려 한글이나 영어가 

    더 깨져 (kor) 옵션으로만 넣게 되었다. 

 

    잘못된 OCR 결과는 정규표현식으로 수정했다.

                                                 

ocr = pytesseract.image_to_string(Process.file_dir+'ocrimage/'+filename,lang="kor")
       
x = re.findall(r"^(?!.*약품명).*?(?=\n|$)",ocr, re.MULTILINE | re.DOTALL)
x = list(filter(lambda x: x != '', x))

  

 

정제되지 않은 정보를 리스트화 시켰다.

 

 

 

 

이제 다음에 할 과정이다.

1. OCR 결과를 DB에 넣기

2. OCR 약품 이름으로 네이버지식백과 API 통해 오타수정, 정보수집

3. 낱알검색 API를 사용해 추가 약 정보 수집하여 DB 넣기.

 

 

 

 

OpenCV Feature Matching을 사용할때 참고한 게시물이다.

 

https://bkshin.tistory.com/entry/OpenCV-28-%ED%8A%B9%EC%A7%95-%EB%A7%A4%EC%B9%ADFeature-Matching