Skip to content

이미지에서 수학 공식을 LaTeX 코드로 변환하는 시스템. 한국어 텍스트와 수식이 혼합된 콘텐츠도 지원.

Notifications You must be signed in to change notification settings

cskwork/image-to-latex-agent

Repository files navigation

Image-to-LaTeX Agent

이미지에서 수학 공식을 LaTeX 코드로 변환하는 시스템. 한국어 텍스트와 수식이 혼합된 콘텐츠도 지원.

Features

  • 수식 인식 - 손글씨/인쇄된 수학 공식을 LaTeX로 변환
  • 혼합 콘텐츠 - 한국어 텍스트와 수식이 섞인 이미지 처리
  • 다중 엔진 - UniMERNet, DeepSeek 등 OCR 엔진 선택 가능
  • 실시간 미리보기 - MathJax로 변환 결과 즉시 확인
  • 캔버스 입력 - 마우스/터치로 직접 수식 그리기
  • 배치 처리 - 여러 이미지 동시 업로드 및 변환

Architecture

3-tier 구조로 프론트엔드, API 게이트웨이, OCR 서비스가 분리되어 확장성과 유지보수성 확보.

┌─────────────┐     ┌──────────────────┐     ┌────────────────────┐
│  React UI   │────▶│  Fastify API     │────▶│  Python OCR        │
│  (Vite)     │     │  (Port 3001)     │     │  Services          │
│             │     │                  │     │  ├─ UniMERNet:8000 │
│  - Canvas   │     │  - Converter     │     │  └─ DeepSeek:8001  │
│  - Upload   │     │    Registry      │     │                    │
│  - Preview  │     │  - File Manager  │     │                    │
└─────────────┘     └──────────────────┘     └────────────────────┘

Tech Stack

Layer Technologies Description
Frontend React 18, TypeScript, Vite, MathJax SPA UI, 캔버스 입력, LaTeX 렌더링
Backend Node.js, Fastify, TypeScript API 라우팅, 파일 관리, 엔진 오케스트레이션
OCR Services FastAPI, PyTorch, UniMERNet, EasyOCR 딥러닝 기반 수식/텍스트 인식

Quick Start

# 전체 서비스 시작 (권장)
./start.sh        # Linux/Mac
start.bat         # Windows

# 또는 개별 실행
cd services/unimernet_server && uvicorn app:app --host 0.0.0.0 --port 8000
cd apps/server && npm run dev

Project Structure

├── apps/
│   ├── server/            # API 게이트웨이 - 컨버터 레지스트리, 라우팅, 파일 관리
│   └── web/               # React SPA - 캔버스, 파일 업로드, LaTeX 미리보기
├── services/
│   ├── unimernet_server/  # UniMERNet - 순수 수식 이미지 → LaTeX 변환
│   └── deepseek_server/   # DeepSeek - Vision-LLM 기반 혼합 콘텐츠 처리
├── config/
│   └── converters.json    # OCR 엔진 URL, 기본값, 기능 플래그 설정
└── data/
    ├── uploads/           # 임시 업로드 (batchId별 분류)
    └── outputs/           # 생성된 .md/.html 결과물

API Endpoints

Method Endpoint Description
GET /api/latex/converters 등록된 OCR 엔진 목록과 상태(online/offline) 반환
POST /api/latex/convert/:converter? 단일/다중 수식 이미지를 LaTeX로 변환. converter 미지정시 기본 엔진 사용
POST /api/latex/convert-mixed/:converter? 한글+수식 혼합 이미지 처리. 영역 분리 후 각 엔진으로 라우팅
GET /api/latex/download/:converter/:batchId/:file 변환 결과물(.md, .html) 다운로드

Mixed Content Strategy

한글과 수식이 혼합된 이미지는 단일 모델로 처리 불가. 영역 분리 후 적합한 엔진으로 라우팅하는 파이프라인 적용.

  1. Detection - EasyOCR로 텍스트 영역(bounding box) 탐지
  2. Classification - 휴리스틱 분류: OCR 신뢰도 < 0.7 또는 수학 기호 포함 → 수식으로 판정
  3. Routing - 한글 영역 → EasyOCR, 수식 영역 → UniMERNet
  4. Merging - y좌표 기준 정렬하여 읽기 순서대로 결과 병합

Configuration

config/converters.json에서 OCR 엔진 등록. 서버 시작시 health check로 상태 확인.

{
  "converters": [
    {
      "id": "unimernet",
      "name": "UniMERNet",
      "url": "http://localhost:8000",
      "default": true,
      "capabilities": ["equation", "mixed"]
    },
    {
      "id": "deepseek-ocr",
      "name": "DeepSeek OCR",
      "url": "http://localhost:8001",
      "capabilities": ["equation", "mixed"]
    }
  ]
}
Field Description
id 엔진 고유 식별자 (API 경로에 사용)
name UI에 표시되는 엔진 이름
url Python 서비스 엔드포인트
default true인 엔진이 기본 선택됨
capabilities 지원 기능: equation(수식), mixed(혼합)

About

이미지에서 수학 공식을 LaTeX 코드로 변환하는 시스템. 한국어 텍스트와 수식이 혼합된 콘텐츠도 지원.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages