파이썬 실습/이미지 To 텍스트

이미지 To 텍스트 - 2.GUI 이미지to텍스트 프로그램

파기차차 2024. 9. 8. 10:45
728x90
반응형
SMALL

ㅁ 개요

 

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 소스 실행 방법

 
 
 - 소스파일 다운로드 후 cmd 또는 파워쉘 등에서 아래와 같이 실행하시기 바랍니다.
 
 > python 2.py
 > python 3.py
 > python 4.py

 


 
 

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 우리가 배운 내용

 
 - 오늘은 GUI버전을 만들기 위해 GUI 빈창을 띄워 보는 것 부터 시작해서, 단계적으로 살을 붙이고 이미지를 불러오면 이미지를 텍스트로 변환하는 프로그램을 만드는 방법을 알아보았습니다.
 
 

 

오늘은 여기까지이며, 위의 내용이 유익하셨다면, 광고 한번씩만 클릭 부탁드립니다.

 

 

감사합니다.

728x90
반응형
LIST