본문 바로가기
Data science/Image data

[Tesseract & OpenCV]를 이용한 OCR-2-2 전처리(pre-processing)

by ggoboogi_house 2020. 8. 22.
반응형

Tesseract & OpenCV

  앞선 포스팅 내용에 이어서 OpenCV를 이용한 이미지 전처리에 대해 알아보겠습니다. 오늘은 이미지 전처리 중에서도 형태적(Morphological)인 변환에 대해서 알아보겠습니다. 형태적인 변환이라는 것은 커널함수를 이용하여 이미지를 특정 조건에 맞도록 변환하는 것입니다. 여기서의 변환은 특정 부분을 단순화하거나, 제거, 보정하는 것을 의미합니다. 보통 binary나 grayscale 이미지에 사용된다고 합니다.

 

4) Dilation(팽창)

  Dilation은 이미지의 각 부분에 커널을 적용하여 커널과 일치하는 부분에 하나라도 0이 있으면 해당 부분을 모두 채우는 방식입니다. 결과적으로 이미지 경계를 기준으로 팽창하는 효과가 발생되게 됩니다. 커널의 모양에 따라 적용 결과가 달라질 수 있습니다. Dilation cv2.dilate()함수를 사용합니다. 자세한 설명은 링크를 참조해주세요. 

  Dilation 결과 문자부분이 팽창된 것을 확인할 수 있습니다. 커널 사이즈를 크게하면 그 효과가 더 두드러지게 나타납니다.

 

5) Erosion(침식)

  Erosion은 Dilation과 반대의 효과를 보입니다. 이미지의 각 부분에 커널을 적용하여 커널과 일치하는 부분에 한개라도 0이 있으면 커널과 겹치는 부분을 모두 제거하는 방식입니다. 커널의 모양에 따라 적용 결과가 달라질 수 있습니다. Erosion은 cv2.erode()함수를 사용합니다. 자세한 설명은 링크를 참조해주세요. 

  Erosion 결과 글씨가 더 가늘어져 보이는 것을 확인할 수 있습니다.

 

6) Opening(Erosion->Dilation)

  Opening은 Erosion을 적용 후 Dilation을 적용한 것으로 잡티나 작게 튀어나온 것들을 제거하는 것에 적합니다. Opening은 cv2.morphologyEx()함수를 이용합니다. 함수의 파라미터는 아래와 같습니다.

  cv2.morphologyEx(src, op, kernel, anchor, iterations, borderType, borderValue)

src는 처리할 이미지(source image), op는 형태변환 타입 선택, kernel은 사용할 커널 형태, iterations는 erosion 과 dilation 적용 횟수 입니다. 파라미터에 대한 자세한 설명은 링크를 참조해주세요.

Opening은 위 함수의 파라미터중 "op" 위치에 "cv2.MORPH_OPEN" 옵션을 선택하면 됩니다.

  Opening 결과 이미지 구석구석에 작은 잡티들이 사라진 것을 확인할 수 있습니다.

 

7) Closing(Dilation->Erosion)

  Closing은 Dilation 적용 후 Erosion을 적용한 것으로 전체적인 윤곽을 도드라지게 하는 효과가 있습니다. Closing은 Opening과 마찬가지로 cv2.morphologyEx()함수를 이용합니다. 함수의 파라미터중 "op" 위치에 "cv2.MORPH_CLOSE" 옵션을 선택하면 됩니다.

  흠... 아래 이미지로는 윤곽이 도드라진것이 잘 나타나지는 않지만, 번호판 숫자 부분은 좀 깔끔해 진 것 같군요.

 

  이제 위의 4가지 결과를 비교해보도록 하겠습니다.

  위의 형태적변환(Morphological transformations)을 상황에 맞게 적절한 함수와 커널사이즈를 적용하여 활용하면 문자 인식률 향상에 유용할 수 있습니다. 

 

<Reference>

- https://nanonets.com/blog/ocr-with-tesseract/

- https://tesseract-ocr.github.io/tessdoc/ImproveQuality

- https://github.com/tesseract-ocr/tesseract/blob/master/doc/tesseract.1.asc#config-files-and-augmenting-with-user-data

- https://www.freelancer.com/u/ihormasan519/portfolio/Get-Text-from-image-pdf-invoice-4495209?w=f&ngsw-bypass=

- https://pxhere.com/en/photo/1607225

- https://opencv-python.readthedocs.io/en/latest/index.html

- https://github.com/gramman75/opencv/blob/master/index.rst

- https://opencv-python-tutroals.readthedocs.io/en/latest/

 

반응형