52 lines
2.2 KiB
Python
52 lines
2.2 KiB
Python
import os
|
|
from PIL import Image, ImageDraw
|
|
import pytesseract
|
|
import cv2
|
|
import numpy as np
|
|
|
|
# 현재 실행 중인 main.py의 경로를 기준으로 프로젝트 폴더 경로 가져오기
|
|
current_dir = os.path.dirname(os.path.abspath(__file__))
|
|
|
|
# Tesseract 실행 파일과 tessdata 폴더 경로 설정
|
|
tesseract_path = os.path.join(current_dir, 'src', 'Tesseract-OCR', 'tesseract.exe')
|
|
tessdata_path = os.path.join(current_dir, 'src', 'Tesseract-OCR', 'tessdata')
|
|
|
|
# Tesseract 경로 및 데이터 경로 설정
|
|
pytesseract.pytesseract.tesseract_cmd = tesseract_path
|
|
os.environ['TESSDATA_PREFIX'] = tessdata_path
|
|
|
|
# Tesseract 설정 (언어는 한글, 중국어, 영어 지원)
|
|
# tessdata_dir_config = '--oem 1 -l kor+chi_sim+eng+num' # tessdata_dir 옵션 제거
|
|
tessdata_dir_config = '--oem 1 -l chi_sim' # tessdata_dir 옵션 제거
|
|
|
|
def show_ocr_results_with_boxes(pil_img, conf_threshold=40):
|
|
# 텍스트 인식 및 바운딩 박스 가져오기
|
|
data = pytesseract.image_to_data(pil_img, config=tessdata_dir_config, output_type=pytesseract.Output.DICT)
|
|
|
|
# 텍스트 인식된 이미지에 박스를 그리기 위해 PIL 이미지 복사
|
|
img_with_boxes = pil_img.copy()
|
|
draw = ImageDraw.Draw(img_with_boxes)
|
|
|
|
recognized_text_count = 0
|
|
|
|
for i in range(len(data['text'])):
|
|
if int(data['conf'][i]) > conf_threshold: # OCR 신뢰도 필터링
|
|
(x, y, w, h) = (data['left'][i], data['top'][i], data['width'][i], data['height'][i])
|
|
recognized_text = data['text'][i]
|
|
|
|
# 텍스트 인식된 영역에 박스 그리기
|
|
draw.rectangle([(x, y), (x + w, y + h)], outline="red", width=2)
|
|
draw.text((x, y - 10), f"{recognized_text} ({data['conf'][i]})", fill="blue") # 인식된 텍스트와 신뢰도 표시
|
|
|
|
recognized_text_count += 1
|
|
|
|
# 결과 정보 출력
|
|
print(f"인식된 텍스트 개수: {recognized_text_count}")
|
|
img_with_boxes.show() # 박스가 그려진 이미지 표시
|
|
|
|
# 예제 사용
|
|
if __name__ == "__main__":
|
|
input_image = Image.open("1.jpg") # 이미지를 불러옵니다.
|
|
inpainted_image = show_ocr_results_with_boxes(input_image)
|
|
inpainted_image.show() # 결과 이미지를 표시하거나 저장
|