본문 바로가기
운영체제 (LNX,WIN)

OCR은 로컬, 요약은 AI! Claude와 GPT를 활용한 온프레미스 자동화 전략

by 날으는물고기 2025. 7. 9.

OCR은 로컬, 요약은 AI! Claude와 GPT를 활용한 온프레미스 자동화 전략

728x90

윈도우11에 기본 탑재된 OCR 기능을 활용하여 MCP (Model Context Protocol) 기반 자동화를 구축하는 흐름입니다.

1. 윈도우11 기본 OCR 기능 개요

Windows 11은 Windows.Media.Ocr API를 통해 이미지 또는 화면의 텍스트를 추출할 수 있는 OCR 기능을 기본적으로 제공합니다. 이는 UWP(Universal Windows Platform) 또는 PowerShell, Python 등에서도 활용 가능합니다.

예시 기능

  • 스크린샷에서 텍스트 추출
  • 스캔 이미지에서 문서화
  • 실시간 텍스트 인식 (예: 웹캠 화면)

2. MCP 자동화 흐름 설계

MCP는 여러 AI 에이전트가 협업하여 문맥 기반 의사결정을 할 수 있는 모델 오케스트레이션 프로토콜입니다. OCR + MCP 자동화를 구축하는 방법은 다음과 같습니다.

🔁 전체 자동화 흐름

  1. Trigger Agent
    • 사용자의 키보드 단축키 입력, 작업 예약, 이벤트 감지 등으로 시작
  2. Capture Agent
    • Windows에서 화면을 캡처하거나 파일을 수집
  3. OCR Agent
    • Windows OCR API 또는 Tesseract OCR로 이미지의 텍스트를 추출
  4. Parser Agent
    • 추출된 텍스트를 구조화된 형태(예: JSON, 키-값 쌍)로 정제
  5. Action Agent
    • 추출된 정보 기반으로 알림 전송, 검색 실행, 파일 저장, 외부 시스템 호출 등 실행
  6. Memory/Context Agent
    • 이전 작업 맥락 저장, 사용자의 명령 의도 분석

3. 기술 구현 예시

(1) PowerShell + Windows OCR API 사용 예시

Add-Type -AssemblyName Windows.Media.Ocr
$ocrEngine = [Windows.Media.Ocr.OcrEngine]::TryCreateFromUserProfileLanguages()
# 이미지 로딩
$imagePath = "C:\image.png"
$stream = [Windows.Storage.Streams.FileRandomAccessStream]::OpenAsync($imagePath, 'Read').GetResults()
$decoder = [Windows.Graphics.Imaging.BitmapDecoder]::CreateAsync($stream).GetResults()
$bitmap = $decoder.GetSoftwareBitmapAsync().GetResults()
$result = $ocrEngine.RecognizeAsync($bitmap).GetResults()
Write-Output $result.Text

(2) Python + Tesseract + MCP 연동 예시

import pytesseract
from PIL import Image

text = pytesseract.image_to_string(Image.open("image.png"))
# MCP 전송용 payload 구성
payload = {
  "agent": "ocr-agent",
  "text": text,
  "context": {
    "source": "image.png",
    "task": "invoice-recognition"
  }
}
# HTTP로 MCP 메시지 전송
import requests
requests.post("http://mcp.local:8000/ocr", json=payload)

4. 보안 관점 체크리스트

윈도우11 OCR + MCP 자동화에서는 다음과 같은 보안 점검이 필요합니다.

항목 설명
민감정보 마스킹 OCR로 추출되는 텍스트 중 주민번호, 카드번호 등의 민감정보 자동 마스킹 필요
실행 권한 제어 OCR 에이전트와 스크린 캡처 기능은 관리자 권한 또는 사용자 허가 기반으로 제한해야 함
저장 경로 보호 추출된 텍스트 및 이미지 임시 저장 시 암호화 또는 보안 폴더 활용
에이전트 통신 보호 MCP 에이전트 간 통신은 HTTPS 또는 내부망 전용으로 구성
감사 로그 기록 어떤 이미지를 OCR했는지, 누구 요청인지 추적 가능한 로그 확보

5. 활용 사례

사례 설명
💼 업무 자동화 종이 영수증, 송장 등을 스캔하여 자동 인식 → ERP에 등록
🔍 문서 검색 스크린샷 또는 이미지 내 텍스트를 기반으로 문서 검색 실행
📋 보안 모니터링 화면 OCR → 키워드 감지 시 보안 경고 발생 (예: "비밀번호", "내부자료")
🧾 자동 기록화 온라인 회의 중 화면 공유 내용 OCR → 자동 회의록 구성

Windows 11의 기본 OCR 기능은 MCP 기반 자동화의 입력 소스로 매우 유용하게 활용될 수 있습니다. MCP를 통해 에이전트 간 역할을 분리하면 확장성 있고, 보안성 있는 자동화를 설계할 수 있으며, 특히 민감정보 감지와 모니터링 관점에서 OCR Agent + Alert Agent 조합을 강력하게 활용할 수 있습니다.

300x250

아래는 MCP 자동화를 OCR 기반으로 설계하는 데 필요한 핵심 구성 요소들입니다.

1. MCP 구성 예시 (YAML 형식)

MCP는 여러 Agent들이 상호작용하며 문맥 기반 작업을 수행하도록 정의된 오케스트레이션 구조입니다. 아래는 OCR 기반 자동화를 위한 MCP 구성 예시입니다.

mcp:
  agents:
    - id: trigger-agent
      role: "이벤트 감지 및 초기 메시지 생성"
      type: event_listener
      on_event: "hotkey_pressed"
      output_to: ocr-agent

    - id: ocr-agent
      role: "이미지에서 텍스트 추출"
      type: processor
      engine: tesseract
      input_type: image
      output_type: text
      output_to: parser-agent

    - id: parser-agent
      role: "텍스트 정규화 및 구조화"
      type: parser
      logic: "regex + keyword classification"
      output_to: action-agent

    - id: action-agent
      role: "추출된 정보 기반으로 실행"
      type: action
      actions:
        - if: "contains('invoice')"
          do: "upload_to_drive"
        - if: "contains('error')"
          do: "notify_security_team"

    - id: logger-agent
      role: "모든 흐름 기록"
      type: logger
      target: "ElasticSearch"
      listen_to_all: true

2. OCR Agent Dockerfile 예시 (ocr-agent)

아래는 Tesseract OCR을 사용하는 Python 기반 OCR Agent의 Dockerfile입니다.

FROM python:3.10-slim

# Tesseract 설치
RUN apt-get update && \
    apt-get install -y tesseract-ocr libtesseract-dev libleptonica-dev && \
    apt-get clean

# 언어 패키지 설치 (예: 한국어)
RUN apt-get install -y tesseract-ocr-kor

# 파이썬 패키지 설치
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# OCR 서비스 코드 복사
COPY ocr_agent/ /app
WORKDIR /app

# HTTP 서버 실행
CMD ["python", "ocr_service.py"]

requirements.txt 예시

flask
pytesseract
Pillow
requests

ocr_service.py 예시

from flask import Flask, request
import pytesseract
from PIL import Image
import io
import base64

app = Flask(__name__)

@app.route("/ocr", methods=["POST"])
def ocr():
    image_b64 = request.json.get("image")
    image_data = base64.b64decode(image_b64)
    image = Image.open(io.BytesIO(image_data))
    text = pytesseract.image_to_string(image, lang='kor+eng')
    return {"text": text}

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=8000)

3. Power Automate Desktop + Windows OCR 연동 자동화 설계

Windows OCR 기능은 Power Automate Desktop과 연동하여 화면 자동 캡처 + 텍스트 추출 + 처리 작업으로 구성할 수 있습니다.

💡 예시 시나리오

매일 10시에 특정 웹 시스템 화면을 캡처하여 텍스트 추출 → 조건에 따라 Slack 알림 또는 DB 저장

🔧 플로우 설계

  1. 시작 조건
    • 시간 기반 트리거 (예: 10:00 AM)
  2. 앱 열기 (선택)
    • 앱 실행 액션으로 브라우저/프로그램 실행
  3. 스크린샷 캡처
    • UI 요소 캡처 또는 화면 캡처
  4. OCR 적용
    • 액션: 이미지에서 텍스트 추출(OCR)
      • 이미지 경로 입력
      • 언어 설정 (한국어+영어)
  5. 조건 분기
    • 텍스트 포함 여부 검사
      • 예: "에러", "오류", "성공"
  6. 후속 액션
    • 슬랙 Webhook 호출 (HTTP 요청)
    • 텍스트 저장 (텍스트 파일 작성, 엑셀 쓰기, SQL 서버 저장 등)
도구 설명
Tesseract OCR 고성능 무료 OCR 엔진, 언어 다양
Power Automate Desktop GUI 기반 자동화 플랫폼, OCR 및 조건 분기 가능
MCP 다양한 Agent 조합을 통한 자동화 구조 설계 및 실행
Python OCR 서버 윈도우 OCR보다 유연한 구성 가능, 이미지 직접 수신/처리

아래는 MCP 구조에서 OCR Agent를 CLI(Command Line Interface) 방식으로 제어하는 예시 스크립트입니다. 이 스크립트는 OCR Agent에 이미지(Base64 또는 파일)를 전달하고, OCR 결과를 반환받아 출력하거나 저장하는 방식으로 동작합니다.

1. MCP CLI OCR 제어 스크립트 (mcp_ocr_client.py)

#!/usr/bin/env python3
import argparse
import base64
import json
import requests
from pathlib import Path

def encode_image(image_path):
    with open(image_path, "rb") as f:
        return base64.b64encode(f.read()).decode("utf-8")

def send_to_ocr_agent(image_path, ocr_url):
    b64_image = encode_image(image_path)
    payload = {
        "image": b64_image,
        "meta": {
            "source": str(image_path),
            "agent": "ocr-agent",
            "task": "mcp-cli-ocr"
        }
    }
    headers = {"Content-Type": "application/json"}
    response = requests.post(ocr_url, headers=headers, data=json.dumps(payload))
    if response.status_code == 200:
        return response.json().get("text", "")
    else:
        print(f"[!] Error from OCR Agent: {response.status_code} {response.text}")
        return ""

def main():
    parser = argparse.ArgumentParser(description="MCP OCR Agent CLI Controller")
    parser.add_argument("image", type=Path, help="OCR 대상 이미지 경로")
    parser.add_argument("--ocr-url", default="http://localhost:8000/ocr", help="OCR Agent 엔드포인트 URL")
    parser.add_argument("--output", type=Path, help="OCR 결과를 저장할 파일 경로")
    args = parser.parse_args()

    print(f"[*] 이미지 분석 중: {args.image}")
    text = send_to_ocr_agent(args.image, args.ocr_url)
    print(f"\n=== OCR 결과 ===\n{text}")

    if args.output:
        args.output.write_text(text, encoding='utf-8')
        print(f"[*] 결과가 저장되었습니다: {args.output}")

if __name__ == "__main__":
    main()

▶️ 사용 방법

  1. OCR Agent Docker 컨테이너 구동 중일 것
    (앞서 제시한 ocr_agent.py 사용)
  2. Python 스크립트 실행 예시
# 단순 결과 출력
python mcp_ocr_client.py ./sample_receipt.png

# 특정 엔드포인트로 전송
python mcp_ocr_client.py ./sample.png --ocr-url http://ocr-agent.local:8000/ocr

# 결과를 파일로 저장
python mcp_ocr_client.py ./error_screenshot.jpg --output ./ocr_result.txt

📄 OCR 결과 예시

=== OCR 결과 ===
에러 발생: 라이선스 정보가 만료되었습니다.
서비스를 이용하시려면 고객센터로 연락 주세요.

🔐 보안 및 활용 팁

항목 설명
🔒 인증 추가 requests.post()Authorization 헤더 추가 가능 (JWT 또는 API Key 방식)
📂 자동 저장 결과를 시간별 디렉토리 또는 DB에 저장하는 기능 추가 가능
🧠 후속 처리 OCR 결과를 기반으로 alert, 분류, 자동 응답 등 후속 작업 트리거 가능

아래는 4가지 자동화 예시와 구현 방법입니다. 각 예시는 MCP 기반 아키텍처와 연계되는 방식으로 설계되었으며, GPT 및 Claude AI, OCR Agent, PDF 파서, n8n, Slack 등을 포함합니다.

1. OCR Agent 응답에 대한 GPT 리포터 Agent 연동 예시

🔁 시나리오

  • OCR Agent가 추출한 텍스트 → GPT 리포터 Agent로 전송
  • GPT는 문서 요약/의미 해석 후 Slack 또는 DB로 전달

🧱 구성 예시

mcp:
  agents:
    - id: ocr-agent
      role: "이미지에서 텍스트 추출"
      output_to: gpt-reporter-agent

    - id: gpt-reporter-agent
      role: "텍스트 요약 및 인사이트 생성"
      engine: openai/gpt-4
      prompt_template: |
        아래 텍스트를 요약하고 핵심 알림이 있다면 강조해 주세요.
        ---
        {{text}}
      output_to: slack-agent

    - id: slack-agent
      role: "Slack 전송"
      webhook_url: "https://hooks.slack.com/services/XXXX/XXXX"

🧪 GPT 호출 예시 (Python)

import openai
openai.api_key = "your-api-key"

def generate_summary(text):
    prompt = f"아래 텍스트를 요약:\n{text}"
    completion = openai.ChatCompletion.create(
        model="gpt-4",
        messages=[{"role": "user", "content": prompt}]
    )
    return completion['choices'][0]['message']['content']

2. OCR + PDF 텍스트 추출 통합용 CLI 툴

📦 설치 구성 요소

  • Tesseract
  • PyMuPDF (PDF 텍스트 추출)
  • Pillow
  • CLI 기반 입력 파서

🛠️ 코드 예시 (ocr_pdf_cli.py)

import fitz  # PyMuPDF
import pytesseract
from PIL import Image
import argparse
import os

def extract_from_pdf(pdf_path):
    doc = fitz.open(pdf_path)
    full_text = ""
    for page in doc:
        full_text += page.get_text()
    return full_text

def extract_from_image(image_path):
    return pytesseract.image_to_string(Image.open(image_path), lang='kor+eng')

def main():
    parser = argparse.ArgumentParser()
    parser.add_argument("file", help="OCR 대상 PDF 또는 이미지")
    args = parser.parse_args()

    ext = os.path.splitext(args.file)[-1].lower()
    if ext == ".pdf":
        text = extract_from_pdf(args.file)
    else:
        text = extract_from_image(args.file)

    print("\n--- 추출 결과 ---\n")
    print(text)

if __name__ == "__main__":
    main()

3. CLI 결과를 n8n Webhook으로 자동 전송 예시

🔗 사용 조건

  • n8n에 Webhook 노드 생성 (예: https://n8n.local/webhook/ocr-ingest)
  • Webhook 노드는 Slack 알림 또는 Google Sheets에 연결 가능

📤 Python 코드로 Webhook 전송

import requests

def send_to_n8n_webhook(ocr_text):
    webhook_url = "https://n8n.local/webhook/ocr-ingest"
    payload = {
        "source": "ocr-cli",
        "text": ocr_text,
    }
    res = requests.post(webhook_url, json=payload)
    print(f"[+] Webhook 응답: {res.status_code}")

# OCR 결과 얻은 후 호출
# send_to_n8n_webhook(text)

4. Claude AI 기반 MCP 자동화: 이미지 폴더 감시 → OCR → Slack 전송

🧭 흐름 구성

  1. Claude Agent: 폴더 모니터링 + 파일 이름/시간 문맥 인식
  2. OCR Agent: 이미지 텍스트 추출
  3. Slack Agent: 결과 전송
  4. 선택사항: GPT Agent로 사전 요약 후 Claude Agent에 전달

🧱 예시 MCP 구성 (YAML)

mcp:
  agents:
    - id: watcher-agent
      type: file_watcher
      watch_dir: "/mnt/images"
      on_new_file:
        send_to: ocr-agent

    - id: ocr-agent
      type: processor
      engine: tesseract
      output_to: claude-agent

    - id: claude-agent
      type: llm
      engine: anthropic/claude-3-opus
      prompt_template: |
        아래 OCR 텍스트의 요지를 정리하고 알림 메시지를 생성해 주세요.
        ---
        {{text}}
      output_to: slack-agent

    - id: slack-agent
      type: notifier
      channel: "#ocr-reports"
      webhook_url: "https://hooks.slack.com/services/..."

📁 폴더 감시 스크립트 예시 (watch_folder.py)

import time, os
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
import requests, base64

class Handler(FileSystemEventHandler):
    def on_created(self, event):
        if not event.is_directory:
            print(f"[+] 새 파일 발견: {event.src_path}")
            b64 = base64.b64encode(open(event.src_path, 'rb').read()).decode()
            requests.post("http://localhost:8000/ocr", json={"image": b64})

observer = Observer()
observer.schedule(Handler(), path="/mnt/images", recursive=False)
observer.start()
print("[*] 폴더 감시 중...")
try:
    while True: time.sleep(1)
except KeyboardInterrupt:
    observer.stop()
observer.join()

🧠 자동화 시나리오 통합

기능 기술 구성
OCR Agent 제어 CLI 또는 API (Tesseract 기반)
GPT/Claude Agent 요약, 경고 생성
PDF + 이미지 통합 PyMuPDF + Pillow + Tesseract
MCP 전체 자동화 watcher → ocr → reporter → notifier
외부 연동 n8n Webhook, Slack, DB 등

아래는 Claude Agent와 GPT Agent를 OCR 기반 문서 요약/알림 자동화 시나리오에 적용했을 때의 성능, 특성, 활용 적합도 비교표입니다.

🤖 Claude vs GPT: Agent 기반 자동화 성능 비교

항목 Claude Agent (Anthropic) GPT Agent (OpenAI)
🔍 모델명 Claude 3 (Opus/Haiku/Sonnet) GPT-4, GPT-3.5
🧠 문맥 이해력 매우 우수 (대용량 문서 처리에 강함) 우수 (GPT-4 기준 높은 정확도)
📄 긴 텍스트 요약 ✔ 최대 200K+ 토큰까지 수용 가능 ✔ GPT-4 Turbo 기준 128K
🗂️ 문서 요약 적합도 매우 높음 (계약서, OCR, 회의록 등) 높음 (메모, 이메일, 이슈 요약 등)
🎯 명확한 핵심 도출 ✔ 장문에서도 핵심 정보 추출에 강점 ✔ 질문-응답 형식에 최적화됨
💬 말투/톤 설정 유연성 다소 제한적 (중립적/정중 톤 중심) 매우 유연 (친근/공식/캐주얼 조정 가능)
🔗 시스템 연계 적합성 Claude API는 응답 시간 안정성 ↑ GPT는 대규모 연계에 적합 (n8n 등 다양 지원)
응답 속도 Claude 3 Sonnet ≈ GPT-4 Turbo 수준 GPT-3.5 > Claude 3 Haiku > GPT-4 순
💸 요금 효율성 Opus는 비싸지만 Haiku는 저렴 GPT-3.5는 매우 저렴, Turbo도 효율적
🧪 n8n 연동성 웹훅 기반 커스텀 처리 필요 (직접 설정) OpenAI 노드 공식 지원 (간편)
🔐 보안·프라이버시 기업 특화(Anthropic 내역 저장 최소화 정책) OpenAI API 사용 시 프롬프트/로그 저장 주의 필요

🧪 예시 결과 비교 (OCR 추출 텍스트 요약 요청)

입력 텍스트 (OCR 결과)

2025년 6월 20일 고객 불만 접수 내용
- 결제 오류로 인해 중복 청구 발생
- 고객 서비스센터 통화 연결 지연
- 환불 요청 중 시스템 에러 발생
Claude 응답 예시 GPT 응답 예시
"고객이 중복 결제와 환불 오류 문제로 불만을 제기했습니다. 통화 연결 지연도 보고되었습니다. 조치가 필요합니다." "문제 요약: 중복 청구, 통화 지연, 시스템 오류로 인한 환불 불가 발생. 신속한 고객 응대 및 시스템 점검 권장."

해석

Claude는 간결하고 중립적, GPT는 포맷 중심 구조화가 우수

  • GPT는 Slack 메시지 템플릿 자동화에 유리
  • Claude는 요약의 간결성 및 자연스러운 문장 처리에 유리

🔍 사용 시 고려 포인트

사용 조건 추천 Agent
긴 문서 요약 / 계약서 해석 / OCR 결과 분석 ✅ Claude Opus / Sonnet
슬랙 알림 생성 / 대화체 응답 / 에이전트 연동 자동화 ✅ GPT-4 Turbo 또는 GPT-3.5
비용 효율 최우선 자동화 ✅ Claude Haiku 또는 GPT-3.5
한국어 중심 업무 자동화 ✅ Claude 한국어 표현 자연스러움 우수 (GPT도 개선 중)
이미 구축된 OpenAI 기반 시스템 ✅ GPT 연동 쉬움 (n8n, Slack, Zapier 등)

🧭 요약

구분 Claude GPT
자연어 요약 능력 🟢 우수 🟢 우수
구조화 응답 (JSON 등) 🔵 보통 🟢 우수
Slack 메시지 형식화 🔵 보통 🟢 우수
대용량 문서 대응 🟢 강력 🟢 강력 (Turbo)
응답 포맷 제어 🔵 제한적 🟢 유연함
가격 효율 Haiku: 🟢, Opus: 🔴 GPT-3.5: 🟢, GPT-4: 🔵
연동 지원성 직접 HTTP 구성 OpenAI 공식 노드 있음 (n8n 등)

🧩 결론

시나리오 추천
OCR → 문서 요약 → 슬랙 알림 Claude (자연스러운 요약) → GPT (알림 포맷) 병행 가능
GPT를 Slack 연동용 알림 Agent로 사용 GPT-3.5 또는 GPT-4
Claude를 문맥 추론 및 장문 해석 Agent로 사용 Claude 3 Sonnet/Opus 권장
728x90
그리드형(광고전용)

댓글