반응형
이번에는 OCR을 파이썬으로 수행하는 방법에 대해서 알아보겠습니다.
재현성을 위해 코드는 코랩에서 실행하였습니다.
1. 파이썬을 활용한 OCR
- 이번 실습을 위해 사용할 라이브러리는 pytesseract입니다.
- 다양하고 보다 심도 있는 사용법을 위해서는 아래 github를 참조하시면 되겠습니다.
https://github.com/madmaze/pytesseract
- 이번에 활용할 데이터는 인터넷에 공개된 영수증 중 하나입니다. 모습은 아래와 같습니다.
- 먼저 다음과 같은 라이브러리들을 설치해줍니다.
!pip install pytesseract
!apt-get update
!apt-get install -y tesseract-ocr
- 설치가 완료되면 이제 이미지를 열어주고 OCR을 진행해주면 됩니다.
- OCR을 위해서는 보다 선명한 이미지가 더 유리하고, 이를 위해서 간단한 Image 전처리를 해주겠습니다.
from PIL import Image, ImageEnhance, ImageFilter
import pytesseract
import matplotlib.pyplot as plt
# 이미지 열기
img_path = "/content/drive/MyDrive/receipt.jpg"
img = Image.open(img_path)
# 1. 이미지 전처리: 그레이스케일 변환 및 대비 강화
img = img.convert("L") # 그레이스케일로 변환
img = ImageEnhance.Contrast(img).enhance(2) # 대비 강화
# 2. 이미지 필터링: 더 선명하게 하기 위해 샤프닝 필터 적용
img = img.filter(ImageFilter.SHARPEN)
# 전처리된 이미지 확인
plt.imshow(img, cmap="gray")
plt.axis("off")
plt.show()
해당 이미지를 Gray scale로 바꿔준 뒤 대비 강화를 해주니 조금 더 선명해 보입니다.
- 이제 OCR을 진행해줍니다.
# 3. OCR 실행
text = pytesseract.image_to_string(img, lang='eng')
print("추출된 텍스트:\n", text)
결과는 아래와 같습니다. 글자는 잘 추출된 것 같고 특수 기호 같은 것들은 이상하게 출력된 것을 알 수 있습니다.
- 이제 도출된 결과를 기반으로, 표로 깔끔하게 정리해보겠습니다. 정규표현식을 사용해서 문자와 공백으로 이루어진 Description 부분과 그 뒤에오는 숫자를 Price로 인식하게 하였습니다. 그리고 Description이라는 항목과 Price라는 항목으로 데이터의 열을 만든 뒤 이에 맞게 데이터를 정렬하여 넣어보겠습니다.
# 4. OCR 결과를 데이터 프레임으로 변환 (유연한 패턴 매칭 적용)
lines = text.splitlines()
data = []
pattern = re.compile(r"([A-Za-z\s]+)\s+(\d+\.\d+|\d+)") # 문자 + 공백 + 숫자의 패턴
for line in lines:
match = pattern.search(line)
if match:
description = match.group(1).strip()
price = float(match.group(2))
data.append([description, price])
# 데이터 프레임 생성
df = pd.DataFrame(data, columns=["Description", "Price"])
print("\n데이터 프레임:\n", df)
- 다음과 같이 괜찮은 결과를 얻어 낼 수 있습니다.
반응형
'업무자동화 with Python' 카테고리의 다른 글
[업무자동화 with Python] PDF Plumber로 PDF 표 추출하기 (실습) (1) | 2024.12.08 |
---|---|
[업무자동화 with Python] PDF문서내용 추출(PDFPlumber 활용) (4) (표 추출) (1) | 2024.10.22 |
[업무자동화 with Python] PDF문서내용 추출(PDFPlumber 활용) (3) (표 추출) (0) | 2024.10.21 |
[업무자동화 with Python] PDF문서내용 추출(PDFPlumber 활용) (2) (표 추출) (2) | 2024.10.20 |
[업무자동화 with Python] PDF문서내용 추출(PDFPlumber 활용) (1) (그림 추출) (3) | 2024.10.19 |
댓글