취준 일기

Mac에서 엑셀 사진을 Python으로 엑셀로 변환해보자~

termuni 2025. 2. 4. 08:34

아르바이트 하는 곳에서 엑셀 사진을 주셨다. 그 사진에서 엑셀 내용을 추출해서 엑셀로 정리해서 달라고 하셨는데...

문제는 Microsoft Excel 웹사이트로 할 수 있다고 하지만, 글씨가 엄청나게 깨진다 ㅠㅠ

(초등학교 -> 최 응학괴 로 번역됨)

 

그래서, GPT한테 사진을 주고 추출하려고 했더니 그 결과도 정말 마음에 안 들게 나온다!

심지어 무료 버전 사용중이라, 하루에 사진 1장만 가능... ㅜㅜㅜㅜㅠㅠㅠㅠ 무료 버전 개객기들.. 딥시크 쓴다 진짜

 

아무튼, 너무 답답해서 아예 파이썬 활용해서 이걸 해결해보려고 한다!


이 방법을 GPT에게 물어보았다

Python을 활용하여 폴더 내 이미지(.jpg, .png)에서 엑셀로 데이터를 추출하려면, 다음과 같은 주요 라이브러리를 사용할 수 있어.

사용할 라이브러리

  1. pytesseract (Tesseract OCR)
    • 이미지에서 텍스트를 추출하는 데 사용됨.
    • pip install pytesseract
    • Tesseract-OCR 설치 필요 (설치 가이드)
  2. opencv (OpenCV)
    • 이미지 전처리 (예: 흑백 변환, 노이즈 제거, 대비 조절 등)
    • pip install opencv-python
  3. pandas
    • 추출한 데이터를 엑셀로 저장하기 위해 사용됨.
    • pip install pandas openpyxl
  4. os  glob
    • 폴더 내의 이미지 파일을 자동으로 탐색하는 데 사용됨.

코드 예제

아래 코드는 지정된 폴더 내 .jpg  .png 파일을 검색한 후 OCR을 수행하여 추출된 데이터를 output.xlsx로 저장하는 코드야.

import os
import cv2
import pytesseract
import pandas as pd
from glob import glob

# Tesseract-OCR 경로 설정 (Windows의 경우)
pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe"

# 이미지 전처리 함수
def preprocess_image(image_path):
    image = cv2.imread(image_path)  # 이미지 읽기
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)  # 흑백 변환
    _, thresh = cv2.threshold(gray, 150, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)  # 이진화
    return thresh

# OCR 처리 함수
def extract_text_from_image(image_path):
    processed_img = preprocess_image(image_path)  # 전처리된 이미지 가져오기
    text = pytesseract.image_to_string(processed_img, lang='eng')  # OCR 수행
    return text.strip()

# 폴더 내 이미지 파일 검색
def get_image_files(folder_path):
    return glob(os.path.join(folder_path, "*.jpg")) + glob(os.path.join(folder_path, "*.png"))

# 메인 실행 함수
def main(folder_path, output_excel):
    image_files = get_image_files(folder_path)
    data = []

    for img_path in image_files:
        extracted_text = extract_text_from_image(img_path)
        data.append({"Filename": os.path.basename(img_path), "Extracted Text": extracted_text})

    # DataFrame 생성 후 Excel로 저장
    df = pd.DataFrame(data)
    df.to_excel(output_excel, index=False)

    print(f"엑셀 파일 저장 완료: {output_excel}")

# 실행
folder_path = "./images"  # 이미지가 있는 폴더 경로 설정
output_excel = "output.xlsx"
main(folder_path, output_excel)

코드 설명

  1. get_image_files(folder_path): 지정한 폴더에서 .jpg  .png 파일 목록을 가져옴.
  2. preprocess_image(image_path): 이미지를 OCR 성능을 높이기 위해 흑백 및 이진화 처리.
  3. extract_text_from_image(image_path): 전처리한 이미지에서 pytesseract를 사용하여 텍스트 추출.
  4. main(folder_path, output_excel): 모든 이미지 파일에서 텍스트를 추출한 후, pandas를 이용해 엑셀 파일로 저장.

추가 개선 가능 사항

  • 한글 지원: pytesseract.image_to_string(processed_img, lang='kor') 추가 설치 필요. (tesseract-ocr-kor 언어팩 설치)
  • 이미지 전처리 강화: morphologyEx, adaptiveThreshold 등 OpenCV 필터링 기법 추가 가능.
  • 특정 영역 OCR: cv2.selectROI()를 사용하여 특정 부분만 OCR 처리.

이렇게 하면 폴더 내 이미지에서 텍스트를 추출하고 엑셀로 저장할 수 있어!


이렇게 답변이 나왔고, 이를 Mac 노트북에 구현하려고 한다!

 

우선 내 Mac 상황은 다음과 같다.

1. 맥북 에어 M1, 16GB

2. VSCode 다운로드 완료, Python 3.11.7 다운로드 되어있음

3. OpenCV, Pandas 등 다운로드 되어있지 않음

 

그로인해, 우선 opencv부터 다운로드 시작!

pip3 install opencv-python

 

그러고 나머지도 다운로드 해보았다.

pip install pytesseract
pip install pandas openpyxl

 


문제가 하나 발생했다. pytesseract는 추가로 다운로드가 필요하다고 한다.

 

그래서 homebrew를 써서 다운로드 하라는데, brew도 없다.

 

그래서 다음 명령어로 다운로드 해주었다.

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

 

이후, brew --version 을 써서 확인을.. 어라? 없다..? ㅠㅠㅠㅠ

 

찾아보니, 경로가 추가 안 되어있을 수 있다고 한다.

 

그래서, 인터넷 찾아서 해보려고 했으나 그렇게 해도 잘 안 되는 문제가 발생, 다시 gpt에게 물어보았다. 

 

그래서 찾아보니, 경로를 탐색해서 나왔다.

ls /opt/homebrew/bin/brew
ls /usr/local/bin/brew

 

이때 ls /opt/homebrew/bin/brew 를 했더니 확인이 되었다. 

이후 경로를 추가하려고 했는데..

echo 'export PATH="/opt/homebrew/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc

 

이걸 통해서 추가해주려고 하였으나, 

zsh: permission denied: /Users/내이름/.zshrc 으로 거부당했다... 왜지?

GPT 도와줘~~

✅  만약 chmod 후에도 여전히 Permission Denied라면?

파일의 소유자가 root(관리자)로 설정되어 있을 수도 있습니다.
아래 명령어로 소유자를 본인 계정으로 변경하세요.

sudo chown $(whoami) ~/.zshrc

(비밀번호 입력이 필요할 수 있음)

 

그 후 다시 실행:

chmod u+w ~/.zshrc (쓰기 권한 추가 명령어)
echo 'export PATH="/opt/homebrew/bin:$PATH"' >> ~/.zshrc 
source ~/.zshrc

 

source까지 하고 나니, 정상적으로 brew --version 결과가 나왔다.... ㅠㅠㅠㅠ

Homebrew 4.4.19로 나왔다!


이후 GPT에서 알려주는 대로 설치 해보자!

1. Mac에서 Tesseract-OCR 경로 설정

Mac에서는 Tesseract-OCR을 기본적으로 /usr/local/bin/tesseract 경로에 설치합니다. 따라서, Windows용 경로 설정을 다음과 같이 변경하면 됩니다.

import pytesseract

# Mac의 경우 Tesseract-OCR 경로 설정
pytesseract.pytesseract.tesseract_cmd = "/usr/local/bin/tesseract"

2. pytesseract 사용을 위한 필수 설치 사항

네, pip install pytesseract만으로는 pytesseract를 사용할 수 없습니다. Tesseract-OCR 자체를 먼저 설치해야 합니다.
설치 방법은 운영체제별로 다르며, Mac에서는 brew를 사용하여 설치할 수 있습니다.


3. Mac에서 Tesseract-OCR 설치 방법

  1. Homebrew가 설치되어 있는지 확인
    터미널을 열고 다음 명령어를 입력하세요.만약 brew가 설치되어 있지 않다면, 다음 명령어로 Homebrew를 먼저 설치합니다.
  2. /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
  3. brew --version
  4. Tesseract-OCR 설치
    Homebrew를 이용해 Tesseract-OCR을 설치합니다.
  5. brew install tesseract
  6. Tesseract 버전 확인 (정상 설치 확인)정상적으로 설치되었다면 버전 정보가 출력됩니다.
  7. tesseract -v
  8. 파이썬 라이브러리 pytesseract 설치
  9. pip install pytesseract

4. 추가적으로 필요한 설정 (옵션)

Tesseract-OCR의 언어 데이터를 추가로 설치하려면 다음 명령어를 실행하면 됩니다.

brew install tesseract-lang

이후, 특정 언어를 OCR에서 사용하려면 다음과 같이 설정할 수 있습니다.

text = pytesseract.image_to_string(image, lang='eng')  # 영어 OCR
text_kor = pytesseract.image_to_string(image, lang='kor')  # 한글 OCR

5. 최종적으로 Mac에서 OCR 실행 코드 예시

import pytesseract
from PIL import Image

# Mac의 경우 Tesseract 경로 설정
pytesseract.pytesseract.tesseract_cmd = "/usr/local/bin/tesseract"

# 이미지 파일 불러오기
image = Image.open("example.png")

# OCR 실행
text = pytesseract.image_to_string(image, lang='eng')
print(text)

이로써 준비는 완료..! 라고 생각했지만, 확인해보니 import cv2에서 문제가...ㅠㅠㅠㅠㅠㅠ

 

확인해보니 권한 문제일 수 있다고 한다. 일단 다시 다운로드 하고, 권한을 재조정해주겠다.!!!

근데 다운로드 걸리는 시간... 억겁의 시간이다 거의 30분 이상은 걸리는 듯..

 

확인해보니 python3와 python 둘 다 깔려있어서 문제가 발생.. 일단, python에 opencv가 다운로드 된 것을 확인하였으니 이것으로 진행해보도록 하겠다.


실행시켜보니, 한글이 엄청 깨져서 나왔다.. 이를 해결하기 위해, 코드를 좀 변경하고, 한글 수정을 추가하는 등 갖가지 방법을 동원해보았다. 

 

허나 만족스럽지 않은 결과물만 나왔고, 결국에는 전체적으로 깨져서 나오는 문제가 발생.. 아예 새로운 코드도 가져와서 해보는 중이지만 잘 되지 않는다.

 

우선 pytesseract 등 다운로드, 환경 설정까지는 잘 해내었으니 이 경험을 잘 간직하는 것으로.. 결론을 내겠다...