diff --git a/README.md b/README.md index 9e173ac..7555305 100644 --- a/README.md +++ b/README.md @@ -1,163 +1,53 @@ -# DeepSeek-OCR +# VLM-OCR: 통합 OCR 서비스 플랫폼 -## 소개 +## 1. 개요 -DeepSeek-OCR은 DeepSeek AI에서 개발한 OCR(광학 문자 인식)을 활용하여 컨텍스트 압축을 수행하는 혁신적인 시스템입니다. 이 시스템은 방대한 텍스트 정보를 처리하는 방식을 혁신적으로 바꾸는 것을 목표로 합니다. 텍스트가 많은 문서를 이미지로 취급하여 시각적 표현을 통해 정보를 압축함으로써, 기존 텍스트 인코딩 방식보다 훨씬 적은 토큰으로 텍스트를 표현할 수 있습니다. +VLM-OCR은 다양한 Vision Language Model (VLM) 기반의 OCR(광학 문자 인식) 모델을 마이크로서비스 아키텍처로 구성하여, 단일 API 게이트웨이를 통해 일관된 방식으로 사용할 수 있도록 설계된 플랫폼입니다. -## 주요 기능 +사용자는 복잡한 개별 모델 설정 없이, 원하는 모델을 간단히 지정하여 OCR 기능을 요청하고 결과를 받을 수 있습니다. -- **높은 압축률**: 10개의 텍스트 토큰을 단일 비전 토큰으로 압축할 수 있습니다. -- **높은 정확도**: 10배 압축률에서 97%의 OCR 정밀도를 달성합니다. -- **빠른 처리 속도**: 단일 A100-40G GPU에서 하루에 200,000페이지 이상을 처리할 수 있습니다. -- **구조화된 콘텐츠 처리**: 표, 수식, 다이어그램과 같은 구조화된 콘텐츠를 효과적으로 분석합니다. +## 2. 프로젝트 아키텍처 -## 프로젝트 구조 +본 프로젝트는 다음과 같은 두 가지 주요 구성 요소로 이루어져 있습니다. -``` -. -├── docker-compose.yml -├── Dockerfile.hf -├── Dockerfile.vllm -├── LICENSE -├── README.md -├── requirements.txt -└── DeepSeek-OCR-master - ├── DeepSeek-OCR-hf - │ └── run_dpsk_ocr.py - └── DeepSeek-OCR-vllm - ├── config.py - ├── deepseek_ocr.py - ├── run_dpsk_ocr_eval_batch.py - ├── run_dpsk_ocr_image.py - ├── run_dpsk_ocr_pdf.py - ├── deepencoder - │ ├── build_linear.py - │ ├── clip_sdpa.py - │ └── sam_vary_sdpa.py - └── process - ├── image_process.py - └── ngram_norepeat.py -``` +- **API Gateway (`api_gateway/`)**: -## 파일 설명 + - 모든 OCR 요청에 대한 단일 진입점(Single Entry Point) 역할을 합니다. + - 사용자로부터 요청을 받아, 지정된 모델 서비스로 작업을 전달합니다. + - 모델의 추론 시간을 측정하고, 응답을 표준화하여 사용자에게 반환합니다. -### 최상위 디렉토리 +- **Model Services (`model_services/`)**: + - 각각의 OCR 모델이 독립적인 Docker 컨테이너로 실행되는 마이크로서비스입니다. + - 현재 다음과 같은 모델들이 서비스로 구성되어 있습니다. -- `docker-compose.yml`: Docker 서비스를 정의하고 관리합니다 (`hf` 및 `vllm` 버전). -- `Dockerfile.hf`: Hugging Face 버전의 Docker 이미지를 빌드하기 위한 설정 파일입니다. -- `Dockerfile.vllm`: vLLM 버전의 Docker 이미지를 빌드하기 위한 설정 파일입니다. -- `requirements.txt`: 프로젝트에 필요한 Python 패키지 목록입니다. +### 사용 가능한 모델 -### `DeepSeek-OCR-master/DeepSeek-OCR-hf` +- `deepseek_ocr` +- `paddle_vl` +- `chandra` +- `dotc.ocr` (현재 게이트웨이 설정에는 포함되지 않음) -- `run_dpsk_ocr.py`: Hugging Face `transformers` 라이브러리를 사용하여 단일 이미지 또는 PDF 파일에 대해 OCR을 실행하는 스크립트입니다. 스크립트 내에서 직접 경로와 같은 변수를 수정해야 합니다. +## 3. 시작하기 -### `DeepSeek-OCR-master/DeepSeek-OCR-vllm` +### 사전 요구사항 -- `config.py`: vLLM 버전 스크립트의 모든 설정을 관리하는 파일입니다. 모델, 입/출력 경로, 프롬프트, 처리 옵션 등을 여기서 지정합니다. -- `deepseek_ocr.py`: vLLM 프레임워크와 호환되도록 DeepSeek-OCR 모델의 아키텍처를 정의하는 핵심 파일입니다. -- `run_dpsk_ocr_image.py`: `config.py` 설정에 따라 단일 이미지 파일에 대해 OCR을 수행합니다. -- `run_dpsk_ocr_pdf.py`: `config.py` 설정에 따라 단일 PDF 파일에 대해 OCR을 수행합니다. -- `run_dpsk_ocr_eval_batch.py`: `config.py`에 지정된 디렉토리 내의 모든 이미지에 대해 일괄적으로 OCR을 수행하고 결과를 저장하여 평가에 사용됩니다. -- `deepencoder/`: SAM, CLIP 등과 같은 비전 인코더 모델을 빌드하는 스크립트가 포함된 디렉토리입니다. -- `process/`: 이미지 전처리 및 n-gram 반복 방지 로직과 같은 유틸리티 스크립트가 포함된 디렉토리입니다. +- [Docker](https://www.docker.com/get-started) +- [Docker Compose](https://docs.docker.com/compose/install/) -## 설치 +### 전체 서비스 실행 -1. 저장소를 복제합니다. +각 모델 서비스 디렉토리와 API 게이트웨이 디렉토리에는 개별 `Dockerfile` 또는 `docker-compose.yml` 파일이 포함되어 있습니다. 프로젝트를 전체적으로 실행하려면 각 서비스의 `docker-compose.yml`을 활용하여 개별적으로 컨테이너를 빌드하고 실행해야 합니다. - ```bash - git clone https://gitea.hmac.kr/kyy/deepseek_ocr.git - cd deepseek_ocr - ``` - -2. 필요한 패키지를 설치합니다. - ```bash - pip install -r requirements.txt - ``` - -## 사용법 - -### Hugging Face 버전 - -1. `DeepSeek-OCR-master/DeepSeek-OCR-hf/run_dpsk_ocr.py` 파일을 열고 `image_file` 및 `output_path` 변수를 수정합니다. -2. 스크립트를 실행합니다: `python DeepSeek-OCR-master/DeepSeek-OCR-hf/run_dpsk_ocr.py` - -### vLLM 버전 - -1. `DeepSeek-OCR-master/DeepSeek-OCR-vllm/config.py` 파일을 열고 `INPUT_PATH`, `OUTPUT_PATH` 및 기타 설정을 수정합니다. -2. 실행할 스크립트를 선택하여 실행합니다. - - 이미지: `python DeepSeek-OCR-master/DeepSeek-OCR-vllm/run_dpsk_ocr_image.py` - - PDF: `python DeepSeek-OCR-master/DeepSeek-OCR-vllm/run_dpsk_ocr_pdf.py` - -## Docker 사용법 - -Docker를 사용하면 모든 종속성이 포함된 격리된 환경에서 스크립트를 쉽게 실행할 수 있습니다. - -### 1. (선택 사항) 입/출력 디렉토리 준비 - -호스트 머신에 입력 파일을 저장하고 출력 결과를 받을 디렉토리를 만듭니다. +**예시 (DeepSeek-OCR 서비스 실행):** ```bash -mkdir -p ./data/input -mkdir -p ./data/output -# 입력 파일을 ./data/input 에 복사합니다. -cp /path/to/your/file.pdf ./data/input/ +# 1. DeepSeek-OCR 서비스 디렉토리로 이동 +cd model_services/deepseek_ocr/ +# cd model_services/dotc.ocr/ +# cd model_services/paddle_vl + +# 2. Docker Compose를 사용하여 빌드 및 실행 +docker-compose up --build -d ``` -### 2. Docker Compose 설정 수정 - -`docker-compose.yml` 파일을 열고, 방금 만든 디렉토리를 컨테이너에 마운트하도록 `volumes` 섹션을 수정합니다. 이렇게 하면 컨테이너가 호스트의 파일에 접근할 수 있습니다. - -```yaml -services: - deepseek_ocr_vllm: - build: - context: . - dockerfile: Dockerfile.vllm - # ... (기타 설정) - volumes: - - ./DeepSeek-OCR-master/DeepSeek-OCR-vllm:/workspace - - ./data/input:/workspace/input # 입력 디렉토리 마운트 - - ./data/output:/workspace/output # 출력 디렉토리 마운트 - # ... (기타 설정) -``` - -### 3. Docker 컨테이너 빌드 및 시작 - -`docker-compose.yml`이 있는 프로젝트의 최상위 디렉토리에서 다음 명령을 실행합니다. - -```bash -# vLLM 서비스 빌드 및 시작 -docker-compose build -docker-compose up -d -``` - -Hugging Face 버전을 사용하려면 `docker-compose.yml`에서 `deepseek_ocr_hf` 서비스의 주석을 해제하면 됩니다. - -### 4. 컨테이너에서 스크립트 실행 - -1. 실행 중인 컨테이너에 접속합니다. - - ```bash - docker exec -it deepseek_ocr_vllm /bin/bash - ``` - -2. 컨테이너 내부에서 `config.py`를 수정하여 마운트된 디렉토리의 파일을 가리키도록 합니다. - - ```python - # /workspace/config.py - INPUT_PATH = '/workspace/input/file.pdf' # 마운트된 입력 파일 - OUTPUT_PATH = '/workspace/output/' # 마운트된 출력 디렉토리 - ``` - -3. 원하는 스크립트를 실행합니다. - ```bash - python run_dpsk_ocr_pdf.py - ``` - -결과는 호스트 머신의 `./data/output` 디렉토리에 저장됩니다. - -## 라이선스 - -이 프로젝트는 [LICENSE](LICENSE) 파일에 명시된 라이선스를 따릅니다. +위와 같은 방식으로 `api_gateway` 및 다른 `model_services`들도 실행할 수 있습니다.