이미지 To 텍스트 - 2.GUI 이미지to텍스트 프로그램
ㅁ 개요
O 프로젝트 소개
- 이번 글은 이전글(이미지 To 텍스트 - 1.텍스트 이미지to텍스트 프로그램)에 이은 3번째 글로 GUI버전을 만들기 위해 GUI 빈창을 띄워 보는 것 부터 시작해서, 단계적으로 살을 붙이고 이미지를 불러오면 이미지를 텍스트로 변환하는 프로그램을 만드는 방법을 알아보겠습니다.
O 완성된 프로그램 실행 화면
1. 2.py 실행 시 아래와 같이 이미지를 선택할 수 있는 빈창이 뜹니다.(2.py는 빈창만 띄우며, 다른 코드는 포함되어 있지 않습니다.)
1. 3.py 실행 시 아래와 같이 이미지를 선택할 수 있습니다.
이미지 선택 후 '열기'버튼을 누르면 아래와 같이 이미지 부분의 레이블에 이미지의 경로가 추가됩니다.
1. 4.py 실행하면 위와 같이 이미지 선택 후 '열기' 버튼 클릭 시 아래와 같이 이미지의 텍스트를 잘 뽑아낸 것을 볼 수 있습니다.
실제 사용한 이미지는 아래와 같습니다.
ㅁ 세부 내용
O 완성된 소스
소스파일 : 2.py
import pytesseract
from PIL import Image
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton, QLabel, QFileDialog, QTextEdit
class OCRApp(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle('이미지 텍스트 변환 프로그램')
self.setGeometry(100, 100, 800, 600)
layout = QVBoxLayout()
self.label = QLabel('이미지를 선택하세요', self)
layout.addWidget(self.label)
self.text_edit = QTextEdit(self)
layout.addWidget(self.text_edit)
self.open_btn = QPushButton('이미지 열기', self)
self.open_btn.clicked.connect(self.open_image)
layout.addWidget(self.open_btn)
self.setLayout(layout)
def open_image(self):
pass
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = OCRApp()
ex.show()
sys.exit(app.exec_())
소스파일 : 3.py
import pytesseract
from PIL import Image
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton, QLabel, QFileDialog, QTextEdit
class OCRApp(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle('이미지 텍스트 변환 프로그램')
self.setGeometry(100, 100, 800, 600)
layout = QVBoxLayout()
self.label = QLabel('이미지를 선택하세요', self)
layout.addWidget(self.label)
self.text_edit = QTextEdit(self)
layout.addWidget(self.text_edit)
self.open_btn = QPushButton('이미지 열기', self)
self.open_btn.clicked.connect(self.open_image)
layout.addWidget(self.open_btn)
self.setLayout(layout)
def open_image(self):
pass
options = QFileDialog.Options()
file_name, _ = QFileDialog.getOpenFileName(self, "이미지 파일 선택", "", "이미지 파일 (*.png *.jpg *.jpeg *.bmp *.tiff)", options=options)
print(file_name, "+++++++++++++++++ 2", _, "++++++++++++++++++++++++++++++ 1")
if file_name:
self.label.setText(f'선택된 파일: {file_name}')
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = OCRApp()
ex.show()
sys.exit(app.exec_())
소스파일 : 4.py
import pytesseract
from PIL import Image
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton, QLabel, QFileDialog, QTextEdit
class OCRApp(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle('이미지 텍스트 변환 프로그램')
self.setGeometry(100, 100, 800, 600)
layout = QVBoxLayout()
self.label = QLabel('이미지를 선택하세요', self)
layout.addWidget(self.label)
self.text_edit = QTextEdit(self)
layout.addWidget(self.text_edit)
self.open_btn = QPushButton('이미지 열기', self)
self.open_btn.clicked.connect(self.open_image)
layout.addWidget(self.open_btn)
self.setLayout(layout)
def open_image(self):
pass
options = QFileDialog.Options()
file_name, _ = QFileDialog.getOpenFileName(self, "이미지 파일 선택", "", "이미지 파일 (*.png *.jpg *.jpeg *.bmp *.tiff)", options=options)
print(file_name, "+++++++++++++++++ 2", _, "++++++++++++++++++++++++++++++ 1")
if file_name:
self.label.setText(f'선택된 파일: {file_name}')
self.extract_text(file_name)
def extract_text(self, image_path):
try:
image = Image.open(image_path)
text = pytesseract.image_to_string(image, lang='kor+eng') # 'kor+eng'를 사용하여 한글과 영어 인식
self.text_edit.setText(text)
except Exception as e:
self.text_edit.setText(f'오류 발생: {e}')
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = OCRApp()
ex.show()
sys.exit(app.exec_())
O 소스 실행 방법
O 주요 내용
아래 소스코드에 대한 간략하게 주요 내용만 설명하겠습니다.
소스 파일 : 2.py
텍스트로 환율 정보를 알려주는 코드 입니다.
line 32~36 : 빈창을 띄우는 코드입니다.
line 7~9 : 클래스의 초기화함수 부분으로 initUI() 메소드를 호출하고 있습니다.
line 12 : 창의 제목을 설정합니다.
line 13 : 창이 최초 뜰때 위치와 크기를 설정합니다.
line 15 : 레이아웃 객체를 생성합니다.
line 17,20,23 : 라벨, 텍스트에디트,버튼의 객체를 생성합니다.
line 18,21,25 : 레이아웃 객체에 라벨,텍스트에디트,버튼 위젯을 추가하여 전체 형태를 만듭니다.
line 24 : '이미지 열기' 버튼을 클릭하면 open_image()메소드가 호출되도록 연결합니다.
소스 파일 : 3.py
line 31 : '이미지 열기' 버튼 클릭시 이미지를 선택할 수 있도록 QFileDialog클래스로 options 객체를 생성해 줍니다.
line 32 : 이미지 파일 선택 창 화면을 구성하고, 이미지 파일의 '전체 경로+이름'을 가져오도록 getOpenFileName()메소드를 이용하여 '전체경로+이미지파일이름'을 file_name변수에 할당합니다.
line 34~35 : 이미지 파일을 선택 후 '열기' 버튼을 누르면 창의 상단에 레이블 부분에 이미지의 전체경로를 포함한 이름이 표시도록 set해줍니다.(setText)
소스 파일 : 4.py
line 38~47 : 이전 글에서 설명한 이미지에서 텍스트를 추출하는 코드입니다.(이전글 참조)
ㅁ 정리
O 우리가 배운 내용
오늘은 여기까지이며, 위의 내용이 유익하셨다면, 광고 한번씩만 클릭 부탁드립니다.
감사합니다.