README.md 파일 수정
This commit is contained in:
178
README.md
178
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`을 활용하여 개별적으로 컨테이너를 빌드하고 실행해야 합니다.
|
||||
|
||||
**예시 (DeepSeek-OCR 서비스 실행):**
|
||||
|
||||
```bash
|
||||
git clone https://gitea.hmac.kr/kyy/deepseek_ocr.git
|
||||
cd deepseek_ocr
|
||||
# 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. 필요한 패키지를 설치합니다.
|
||||
```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. (선택 사항) 입/출력 디렉토리 준비
|
||||
|
||||
호스트 머신에 입력 파일을 저장하고 출력 결과를 받을 디렉토리를 만듭니다.
|
||||
|
||||
```bash
|
||||
mkdir -p ./data/input
|
||||
mkdir -p ./data/output
|
||||
# 입력 파일을 ./data/input 에 복사합니다.
|
||||
cp /path/to/your/file.pdf ./data/input/
|
||||
```
|
||||
|
||||
### 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`들도 실행할 수 있습니다.
|
||||
|
||||
Reference in New Issue
Block a user