239 lines
6.4 KiB
Markdown
239 lines
6.4 KiB
Markdown
# 🧪 iopaint 호환성 API 테스트 가이드
|
|
|
|
이 디렉토리는 인페인팅 서버의 API 엔드포인트들이 **iopaint와 호환되는지** 테스트하기 위한 도구들을 포함합니다.
|
|
|
|
## 🎯 목표
|
|
|
|
**클라이언트 코드 수정 없이 기존 iopaint와 연동**할 수 있도록 입출력 형식을 완벽하게 호환시킵니다.
|
|
|
|
## 📁 디렉토리 구조
|
|
|
|
```
|
|
tests/
|
|
├── images/ # 테스트용 샘플 이미지들
|
|
├── results/ # 테스트 결과 이미지들
|
|
├── scripts/ # 테스트 스크립트들
|
|
└── README.md # 이 파일
|
|
```
|
|
|
|
## 🖼️ 테스트 이미지
|
|
|
|
### 생성된 테스트 이미지들
|
|
|
|
- **기본 테스트 이미지**
|
|
- `test_image_256.png` / `test_mask_256.png` (256x256)
|
|
- `test_image_512.png` / `test_mask_512.png` (512x512)
|
|
- `test_image_1024.png` / `large_mask_1024.png` (1024x1024)
|
|
|
|
- **복잡한 테스트 이미지**
|
|
- `complex_image_512.png` / `complex_mask_512.png` (512x512)
|
|
- 체크무늬 패턴과 여러 도형들이 포함된 복잡한 이미지
|
|
|
|
### 테스트 이미지 생성
|
|
|
|
```bash
|
|
cd tests/scripts
|
|
python generate_test_images.py
|
|
```
|
|
|
|
## 🚀 iopaint 호환성 API 테스트
|
|
|
|
### 전체 테스트 실행
|
|
|
|
```bash
|
|
cd tests/scripts
|
|
python test_api.py
|
|
```
|
|
|
|
### 단일 테스트 실행
|
|
|
|
```bash
|
|
# 헬스 체크만
|
|
python test_api.py --single health
|
|
|
|
# 서버 설정 정보만
|
|
python test_api.py --single config
|
|
|
|
# 인페인팅 테스트만
|
|
python test_api.py --single inpaint
|
|
|
|
# 배경 제거 테스트만
|
|
python test_api.py --single rembg
|
|
|
|
# 플러그인 테스트만
|
|
python test_api.py --single plugin
|
|
```
|
|
|
|
### 다른 서버 URL로 테스트
|
|
|
|
```bash
|
|
python test_api.py --url http://192.168.1.100:8008
|
|
```
|
|
|
|
## 📊 iopaint 호환성 테스트 항목
|
|
|
|
### 1. 헬스 체크 (`/health`)
|
|
- 서버 상태 확인
|
|
- 가동 시간 확인
|
|
|
|
### 2. 서버 설정 정보 (`/api/v1/server-config`)
|
|
- 시스템 정보 (Jetson Xavier / x86_64)
|
|
- 사용 가능한 모델 목록
|
|
- 최대 파일 크기 제한
|
|
|
|
### 3. 샘플러 목록 (`/api/v1/samplers`)
|
|
- Stable Diffusion 샘플러 목록 확인
|
|
|
|
### 4. 인페인팅 API (`/api/v1/inpaint`)
|
|
- **iopaint 호환**: base64 인코딩된 이미지/마스크
|
|
- Simple LAMA 모델을 사용한 인페인팅
|
|
- 다양한 크기의 이미지 테스트
|
|
- 프롬프트, 시드, 설정값 테스트
|
|
|
|
### 5. 배경 제거 API (`/api/v1/remove_bg`)
|
|
- **iopaint 호환**: base64 인코딩된 이미지
|
|
- REMBG 모델을 사용한 배경 제거
|
|
- 결과 이미지와 마스크 반환
|
|
|
|
### 6. 플러그인 API (`/api/v1/run_plugin_gen_image`)
|
|
- **iopaint 호환**: base64 인코딩된 이미지
|
|
- 플러그인을 통한 이미지 생성
|
|
- REMBG 플러그인 테스트
|
|
|
|
## 🔧 테스트 전 준비사항
|
|
|
|
### 1. 서버 실행
|
|
```bash
|
|
# 개발 모드로 실행
|
|
python main.py --dev
|
|
|
|
# 또는 프로덕션 모드로 실행
|
|
python main.py --host 0.0.0.0 --port 8008 --workers 1
|
|
```
|
|
|
|
### 2. 의존성 설치
|
|
```bash
|
|
pip install -r requirements.txt
|
|
```
|
|
|
|
### 3. 테스트 이미지 생성
|
|
```bash
|
|
cd tests/scripts
|
|
python generate_test_images.py
|
|
```
|
|
|
|
## 📈 iopaint 호환성 테스트 결과
|
|
|
|
### 성공적인 테스트 결과
|
|
```
|
|
🧪 iopaint 호환성 API 테스트 시작
|
|
============================================================
|
|
🏥 헬스 체크 테스트...
|
|
✅ 서버 상태: healthy
|
|
📊 가동 시간: 15.23초
|
|
|
|
⚙️ 서버 설정 정보 테스트...
|
|
✅ 서버 설정 조회 성공
|
|
🖥️ 시스템: Jetson Xavier
|
|
🎮 디바이스: cuda
|
|
📁 최대 파일 크기: 25MB
|
|
🎯 사용 가능한 모델: 3개
|
|
|
|
🎨 인페인팅 테스트 (test_image_512.png + test_mask_512.png)...
|
|
✅ 인페인팅 성공!
|
|
⏱️ 처리 시간: 2.45초
|
|
🎲 사용된 시드: 42
|
|
💾 결과 이미지 저장: inpaint_result_test_image_512.png
|
|
|
|
============================================================
|
|
📊 iopaint 호환성 테스트 결과 요약
|
|
============================================================
|
|
헬스 체크 ✅ PASS
|
|
서버 설정 정보 ✅ PASS
|
|
샘플러 목록 ✅ PASS
|
|
인페인팅 (256x256) ✅ PASS
|
|
인페인팅 (512x512) ✅ PASS
|
|
배경 제거 ✅ PASS
|
|
플러그인 이미지 생성 ✅ PASS
|
|
============================================================
|
|
전체: 7개, 성공: 7개, 실패: 0개
|
|
🎉 모든 iopaint 호환성 테스트가 성공했습니다!
|
|
클라이언트 코드 수정 없이 기존 iopaint와 연동 가능합니다!
|
|
```
|
|
|
|
### 실패한 테스트 결과
|
|
```
|
|
❌ 인페인팅 실패: 500
|
|
📝 에러 메시지: 워커 매니저가 초기화되지 않았습니다
|
|
```
|
|
|
|
## 🎯 iopaint 호환성 핵심 포인트
|
|
|
|
### 1. 입출력 형식
|
|
- **이미지**: base64로 인코딩된 문자열
|
|
- **마스크**: base64로 인코딩된 문자열
|
|
- **응답**: JSON 형태의 base64 이미지
|
|
|
|
### 2. API 엔드포인트
|
|
- `/api/v1/inpaint` - 인페인팅
|
|
- `/api/v1/remove_bg` - 배경 제거
|
|
- `/api/v1/run_plugin_gen_image` - 플러그인 이미지 생성
|
|
|
|
### 3. 요청 파라미터
|
|
- `image`: base64 인코딩된 원본 이미지
|
|
- `mask`: base64 인코딩된 마스크 (인페인팅용)
|
|
- `model_name`: 사용할 모델명
|
|
- 기타 Stable Diffusion 관련 파라미터들
|
|
|
|
## 🐛 문제 해결
|
|
|
|
### 1. 연결 실패
|
|
- 서버가 실행 중인지 확인
|
|
- 포트 번호가 올바른지 확인
|
|
- 방화벽 설정 확인
|
|
|
|
### 2. 이미지 처리 실패
|
|
- GPU 메모리 부족 확인
|
|
- 모델 파일이 올바른 위치에 있는지 확인
|
|
- 로그 파일에서 상세 에러 확인
|
|
|
|
### 3. 타임아웃 에러
|
|
- `timeout` 값을 늘려서 재시도
|
|
- 서버 성능 확인
|
|
- 네트워크 상태 확인
|
|
|
|
## 📝 로그 확인
|
|
|
|
### 서버 로그
|
|
```bash
|
|
tail -f logs/main_server.log
|
|
```
|
|
|
|
### 모니터링 로그
|
|
```bash
|
|
tail -f logs/monitoring.log
|
|
```
|
|
|
|
## 🔄 지속적 iopaint 호환성 테스트
|
|
|
|
### 자동 테스트 스크립트
|
|
```bash
|
|
#!/bin/bash
|
|
while true; do
|
|
echo "🔄 iopaint 호환성 테스트 실행 중... $(date)"
|
|
python test_api.py
|
|
echo "⏳ 60초 대기 중..."
|
|
sleep 60
|
|
done
|
|
```
|
|
|
|
이 스크립트를 사용하여 서버의 iopaint 호환성을 지속적으로 모니터링할 수 있습니다.
|
|
|
|
## 🎉 성공 시 확인사항
|
|
|
|
모든 테스트가 성공하면:
|
|
1. ✅ **iopaint 클라이언트와 완벽 호환**
|
|
2. ✅ **클라이언트 코드 수정 불필요**
|
|
3. ✅ **기존 iopaint 워크플로우 그대로 사용 가능**
|
|
4. ✅ **Jetson Xavier에서 최적화된 성능**
|