OCR을 사용하여 OpenCV의 이미지에서 텍스트 추출

Salman Mehmood 2023년10월10일
OCR을 사용하여 OpenCV의 이미지에서 텍스트 추출

이 문서에서는 OCR이라고도 하는 광학 문자 인식을 시작하는 데 필요한 모든 것을 다룹니다. OpenCV에서 이미지에서 텍스트를 추출하고 이미지에서 추출된 텍스트를 시각화하는 방법을 배웁니다.

EasyOCR 라이브러리와 함께 OCR을 사용하여 OpenCV의 이미지에서 텍스트 추출

이 기사에서 우리가 해야 할 4가지 핵심 사항이 있습니다.

  • 종속성을 설치하고 가져와야 합니다.
  • 그런 다음 이미지나 비디오를 읽어야 합니다.
  • 다음으로 우리는 우리의 결과를 그릴 것입니다.
  • 마지막으로 OpenCV를 사용하여 여러 줄의 텍스트가 있는 이미지를 처리하고 시각화하는 방법을 살펴보겠습니다.

OCR이라고도 하는 광학 문자 인식은 이미지의 텍스트를 인식합니다. 꽉 손으로 쓰거나 인쇄된 텍스트를 기계가 읽을 수 있는 형식으로 변환합니다.

많은 산업에서 자동화 뱅킹에 OCR 기술을 사용합니다. OCR을 사용하여 필기 수표를 처리할 수 있습니다. OCR의 또 다른 중요한 응용 프로그램은 손으로 쓴 문서에서 정보를 추출하는 것입니다.

PyTorch 라이브러리로 구동되는 OCR을 사용하기 위해 EasyOCR 라이브러리를 사용할 것입니다. 이 라이브러리를 사용하면 이미지나 문서에 대한 광학 문자 인식을 쉽게 수행하고 수행할 수 있습니다.

설치를 시작하고 종속성을 가져오겠습니다. EasyOCR은 PyTorch에서 실행되기 때문에 설치해야 하는 첫 번째 종속성은 PyTorch입니다.

사용자가 실행 중인 운영 체제 유형과 GPU 사용 여부에 따라 다릅니다. 설치 방법은 약간 다를 수 있지만 사용자가 python.org에 접속하면 자동으로 사용자에게 가장 적합한 설치 방법을 선택하는 것이 좋습니다.

EasyOCR 패키지를 설치하려면 다음 명령을 실행하십시오.

pip install easyocr

이제 의존성을 사용할 준비가 되었습니다.

import easyocr
import cv2
import matplotlib.pyplot as plot
import numpy as np

이제 이미지를 읽어야 합니다. 우리는 그 이미지 경로를 담기 위한 변수를 포함할 것이고, 그 다음은 EasyOCR을 사용하여 광학 문자 인식을 수행하는 것입니다.

easyocr.Reader() 클래스를 정의하고 여기에 사용하려는 언어를 전달했습니다. GPU를 사용하지 않는 경우 gpu 매개변수를 False로 설정합니다.

다음 줄에서 reader.readtext() 메서드를 정의하고 이미지 경로를 전달했습니다.

IMG_P = "sign.png"
reader = easyocr.Reader(["en"])
RST = reader.readtext(IMG_P)
RST

이 코드를 실행하면 결과가 몇 가지 다른 것과 함께 반환됩니다.

opencv ocr 출력 1

이미지에서 텍스트가 있는 배열을 얻었고 시각화할 때 더 잘 볼 수 있습니다. 두 번째 부분은 식별된 텍스트이고 마지막 부분은 확신입니다.

결과를 시각화해 보겠습니다. 이렇게 하려면 서로 다른 좌표의 위치를 ​​식별하기 위해 몇 가지 주요 변수를 정의해야 합니다. 좌표를 얻고 정의하기 위해 왼쪽 위 모서리와 오른쪽 아래 모서리 값을 얻습니다.

OpenCV에 전달할 때 튜플을 인수로 예상하기 때문에 구성 요소 값을 가져 와서 튜플로 변환하기 위해 배열에서 인덱스를 정의합니다.

오른쪽 하단과 텍스트를 잡기 위해 비슷한 작업을 수행하지만 텍스트를 튜플로 변환할 필요는 없습니다.

T_LEFT = tuple(RST[0][0][0])
B_RIGHT = tuple(RST[0][0][2])
text = RST[0][1]
font = cv2.FONT_HERSHEY_SIMPLEX

이제 imread() 메서드를 사용하여 이미지를 읽고 다음 줄에서 구성 요소인 사각형을 오버레이한 다음 텍스트를 오버레이하여 사각형을 그립니다.

rectangle() 메서드는 첫 번째 매개변수를 이미지로 사용합니다. 우리가 전달한 다음 매개변수는 T_LEFT 좌표이고 다음 매개변수는 B_RIGHT 좌표입니다.

전달된 다음 매개변수는 튜플이며 밝은 녹색을 따릅니다. 직사각형 두께도 전달했습니다.

여러 매개변수를 사용하는 putText() 메서드를 사용하여 텍스트를 시각화했습니다. 첫 번째는 추출된 텍스트의 위치, 글꼴 스타일, 글꼴 크기를 설정하려는 이미지 좌표이고 다음은 색상, 굵기, 선 스타일로 구성됩니다.

import easyocr
import cv2
import matplotlib.pyplot as plot
import numpy as np

IMG_P = "surf.jpeg"
reader = easyocr.Reader(["en"])
RST = reader.readtext(IMG_P)
RST

T_LEFT = tuple(RST[0][0][0])
B_RIGHT = tuple(RST[0][0][2])
text = RST[0][1]
font = cv2.FONT_HERSHEY_SIMPLEX

IMG = cv2.imread("surf.jpeg")
IMG = cv2.rectangle(IMG, T_LEFT, B_RIGHT, (0, 255, 0), 3)
IMG = cv2.putText(IMG, text, T_LEFT, font, 0.5, (255, 255, 255), 2, cv2.LINE_AA)
plot.imshow(IMG)
plot.show()

텍스트 주위에 그려진 상자를 볼 수 있고 surf가 직사각형 안에 나타납니다.

opencv ocr 출력 2

여러 줄의 텍스트가 있는 이미지가 있는 경우 처리하는 방법을 살펴보겠습니다. 그것은 거의 동일합니다. 변경된 유일한 것은 결과를 인쇄할 때 여러 줄을 볼 수 있다는 것입니다.

따라서 각 탐지를 개별적으로 시각화하고 플로팅하기 위해 반복해야 합니다.

import easyocr
import cv2
import matplotlib.pyplot as plot
import numpy as np

IMG_P = "sign.png"

reader = easyocr.Reader(["en"])
RST = reader.readtext(IMG_P)
RST

font = cv2.FONT_HERSHEY_SIMPLEX

IMG = cv2.imread(IMG_P)
spacer = 100
for detection in RST:
    T_LEFT = tuple(detection[0][0])
    B_RIGHT = tuple(detection[0][2])
    TEXT = detection[1]
    IMG = cv2.rectangle(IMG, T_LEFT, B_RIGHT, (0, 255, 0), 3)
    IMG = cv2.putText(IMG, TEXT, (20, spacer), font, 0.5, (0, 255, 0), 2, cv2.LINE_AA)
    spacer += 15

plot.imshow(IMG)
plot.show()

출력:

opencv ocr 출력 3

Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn

관련 문장 - Python OpenCV