어.. 저도.. MCP 만들어봤어요.. 약속했으니까 ㅠ (PDF OCR 하기)

PDF 안의 이미지 글자를 읽는 Claude 비서 만들기 (OCR)

를 만들어 봤습니다.

저는 한자로 된 전문서적을
편하게 데이터화 하고 싶은 욕망이 있습니다.

그걸로 간이 RAG를 구축하면
전공지식 활용도가 엄청 올라가고
제 2의 뇌로 활용할 수 있을 것 같았거든요!

근데 한자책을 스캔해서 ocr 하자니까
기존 프로그램이 너무 비싼데
체험판 돌려보니 결과물도 그냥 그래서..

스레드에 푸념했다가
구글클라우드 vision API 라는 존재를 알게 되었지만

어 역시 실제로 활용하는 건
생각보다 어려웠고 포기하고 있었습니다.

그리고 이번에 지피터스에 와서
MCP 특강을 들으면서 그 존재를 알게 되었습니다.
이거라면.. 어쩌면 해볼만 할지도 모르겠다 싶어서
일단 테스트부터 해보자는 마음으로

MCP만들기에 도전해봤습니다.


이렇게 오래걸릴줄 모르고 ㅎㅎ

진행 방법

일단 Chat GPT 4o (별명 인고킹)에 물어봤습니다.

한국어 텍스트가있는 검은 색 화면
한국어 텍스트가있는 검은 색 화면

검색해보니 역시 비슷한게 이미 깃헙에 있었습니다.

다만, 이미지파일 OCR만 했고 PDF는 지원을 안했습니다.

그래서 제가 직접 해보기로 했어요. 이건 공부다 공부!

이미 2시반이기 때문에 저는 자야하므로 빠르게 끝내기로 결심했습니다.

근데 지피티가 Tesserect 라는 걸 슬쩍 말해줍니다.

API 비용 없이 일단 로컬로 테스트를 해볼 수 있는 방법이 있다???

Google Cloud Vision API의 스크린 샷

저는 비용 안드는 tesseract로 먼저 테스트해보기로 합니다.

1단계: Tesseract (로컬OCR엔진) 설치

2단계: Poppler 설치 (pdf → image 변환용)

3단계: Python 패키지 설치,

4단계: 파이선 코드 파일 만들기

from fastapi import FastAPI, File, UploadFile
from pdf2image import convert_from_bytes
from PIL import Image
import pytesseract
import tempfile

# ✨ Tesseract 경로 수동 지정 (이 부분 절대 빠뜨리지 말 것!)
pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe"

app = FastAPI()

@app.post("/describe-pdf")
async def describe_pdf(file: UploadFile = File(...)):
    pdf_bytes = await file.read()
    images = convert_from_bytes(pdf_bytes)

    if not images:
        return {"error": "PDF 변환 실패"}

    first_image = images[0]
    with tempfile.NamedTemporaryFile(delete=False, suffix=".png") as temp_img:
        first_image.save(temp_img.name)
        text = pytesseract.image_to_string(Image.open(temp_img.name))

    return {
        "tool_name": "pdf_ocr_reader",
        "description": "Extracted text from first page of PDF",
        "text": text.strip()
    }

5단계: 로컬 서버 실행

uvicorn mcp_pdf_ocr_server:app --reload

그 과정에서 뭐 이런 것도 알게 되고..

가지고 있는 PDF가 전부 무거운 파일 밖에 없어서,
한 장 짜리를 생성해서 테스트하기로 합니다.

한글이 들어간 PDF에 써달라고 요청하려면
지피티에게 한글폰트를 제공해야 한다는 것도 배웠습니다.

한국어 텍스트가있는 검은 색 화면

예제도 만들었으니, 일단 클로드에 연결하기 전에
Swagger 문서로 테스트해봤는데 역시 오류가 뜨고
그 후로 십수차례 연속 오류 수정... 왜 한 번에 안될까요?


억지 응원 끝에 결국은
[한자 영어 한글] 다중 언어 OCR 에 성공합니다.

근데 열심히 만든 로컬서버가
클로드에 붙지를 않습니다?

ngrok? 은 또 뭐야 ㅠㅠ

인고킹은 여태 만든 파이선 파일과 로컬서버가
MCP에 연동이 안되는 문제를 [서버가 로컬이어서]
라고 잘못 판단하고, 저한테 ngrok을 통한 온라인 중계를 권합니다.

시키니까 그냥 했어요.. 저는 무식하니까 ㅠ
근데 온라인으로 옮겨도 안돼잖아.....??

클로드는 계속 '저는 이런거 할 수 없어요.' 라고
우아한 멘트를 반복 출력했습니다.

그때 지피터스 특강에서 타이칸님이 알려주시던 장면이 생각났습니다.

여기서 실마리를 하나 잡았지만,
이후에도 한참동안 삽질을 했습니다.
너무 답답해서, 인고킹에게 클로드의 MCP공식가이드 링크를 주면서 다시 물어봤더니

..갑자기 존댓말을 하더라구요?

알고보니 처음부터 지금까지
애초에 클로드에 붙일 수 없는 방식으로
파이선을 만든거였더라구요

ngrok이고 뭐고 다 필요없었습니다.

Fast API 기반으로 만들었는데,
MCP 연동을 하려면
Fast MCP 기반으로 다시 짜야 한다는 걸 알게 됐습니다.


AI의 비겁한 변명..


그 이후로도 수십차례 오류수정의 결과,
드디어 망치가 나왔습니다.

한국어 앱의 스크린 샷

그리고 결국은 한국말로 OCR을 시켜서
원하는 결과를 추출하는데 성공합니다ㅠㅠ

그 이후로 대단원 소단원 문단 별로 구조화해서
입력한 PDF파일과 같은 이름의 CSV파일로 추출해달라고 하는데까지 시켜봤는데
7시가 되었네요 ^^
이제 그만해야지.. 두시간은 자야겠어요 ㅠ

결과와 배운 점

많은 시행착오 끝에 많은 것을 배웠습니다.

솔직히 제가 해본 건 그냥 테스트용이고
찾아보면 훌륭한 모델이 이미 있을 것 같지만 ㅎㅎ
그래도 이걸 직접 해보면서
개인적으로 많은 공부가 되었습니다.

AI는 역시 재밌네요..!!
지피터스 감사합니다.
브랜드 맵도 완성해야하는데 ㅎㅎ

도움 받은 글

개발자F님 댕댕이멍멍님 타이칸님*2

너무 감사합니다!! 오늘도 잘 부탁드립니다!!

11
12개의 답글

👉 이 게시글도 읽어보세요