윈도우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 자동화를 구축하는 방법은 다음과 같습니다.
🔁 전체 자동화 흐름
- Trigger Agent
- 사용자의 키보드 단축키 입력, 작업 예약, 이벤트 감지 등으로 시작
- Capture Agent
- Windows에서 화면을 캡처하거나 파일을 수집
- OCR Agent
- Windows OCR API 또는 Tesseract OCR로 이미지의 텍스트를 추출
- Parser Agent
- 추출된 텍스트를 구조화된 형태(예: JSON, 키-값 쌍)로 정제
- Action Agent
- 추출된 정보 기반으로 알림 전송, 검색 실행, 파일 저장, 외부 시스템 호출 등 실행
- 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 조합을 강력하게 활용할 수 있습니다.
아래는 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 저장
🔧 플로우 설계
- 시작 조건
- 시간 기반 트리거 (예: 10:00 AM)
- 앱 열기 (선택)
앱 실행
액션으로 브라우저/프로그램 실행
- 스크린샷 캡처
UI 요소 캡처
또는화면 캡처
- OCR 적용
- 액션:
이미지에서 텍스트 추출(OCR)
- 이미지 경로 입력
- 언어 설정 (한국어+영어)
- 액션:
- 조건 분기
텍스트 포함 여부
검사- 예: "에러", "오류", "성공"
- 후속 액션
- 슬랙 Webhook 호출 (
HTTP 요청
) - 텍스트 저장 (
텍스트 파일 작성
,엑셀 쓰기
,SQL 서버 저장
등)
- 슬랙 Webhook 호출 (
도구 | 설명 |
---|---|
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()
▶️ 사용 방법
- OCR Agent Docker 컨테이너 구동 중일 것
(앞서 제시한ocr_agent.py
사용) - 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 전송
🧭 흐름 구성
- Claude Agent: 폴더 모니터링 + 파일 이름/시간 문맥 인식
- OCR Agent: 이미지 텍스트 추출
- Slack Agent: 결과 전송
- 선택사항: 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 권장 |
댓글