Vision Pipeline は、画像とテキストが混在したドキュメントを処理するためのシステムの「高精度モード」機能です。LibreOffice による変換、ImageMagick による画像処理、および Vision モデルによる分析を通じて、完全なドキュメント内容の抽出を実現します。
| 特徴 | 高速モード | 高精度モード |
|---|---|---|
| 処理ツール | Apache Tika | Vision Pipeline |
| 画像処理 | ❌ スキップ | ✅ 完全な分析 |
| 処理速度 | 高速 | 低速 |
| コスト | 無料 | 約 $0.01/ページ |
| 適用シーン | テキストのみのドキュメント | 画像・テキスト混在ドキュメント |
ドキュメントのアップロード → LibreOffice 変換 → PDF を画像化 → Vision 分析 → ベクトルインデックス
API ドキュメント: http://localhost:8100/docs
# libreoffice-server/main.py
from fastapi import FastAPI, File, UploadFile
from pydantic import BaseModel
app = FastAPI(title="ドキュメント変換サービス")
@app.post("/convert")
async def convert(file: UploadFile = File(...)):
# 変換ロジック
return {"pdf_path": "...", "converted": True}
@app.get("/health")
async def health():
return {"status": "healthy"}
// server/src/pdf2image/pdf2image.service.ts
@Injectable()
export class Pdf2ImageService {
async convertToImages(pdfPath: string): Promise<string[]> {
// ImageMagick を使用して変換
const images = await this.imagemagick.convert(pdfPath, {
density: 300,
format: 'jpeg',
quality: 85
});
return images;
}
}
// server/src/vision/vision.service.ts
@Injectable()
export class VisionService {
async analyzeImage(imagePath: string, modelConfig: ModelConfig): Promise<VisionResult> {
// OpenAI/Gemini Vision API を呼び出し
const result = await this.callVisionAPI(imagePath, modelConfig);
return {
text: result.text,
confidence: result.confidence,
layout: result.layout
};
}
}
services:
libreoffice:
build:
context: ./libreoffice-server
ports:
- "8100:8100"
volumes:
- ./uploads:/uploads
- ./temp:/temp
server:
environment:
- LIBREOFFICE_URL=http://libreoffice:8100
- TEMP_DIR=/app/temp
depends_on:
- libreoffice
# LibreOffice サービス
LIBREOFFICE_URL=http://127.0.0.1:8100
# 一時ファイルディレクトリ
TEMP_DIR=./temp
# Vision API 設定
VISION_API_KEY=sk-xxx
VISION_MODEL=gpt-4-vision-preview
| ドキュメント形式 | ページ数 | 予想コスト | 処理時間 |
|---|---|---|---|
| 10ページ | $0.10 | 約 1分 | |
| Word | 50ページ | $0.50 | 約 5分 |
| PPT | 30ページ | $0.30 | 約 3分 |
# すべてのサービスを起動
docker-compose up -d
# 状態の確認
docker-compose ps
# LibreOffice のヘルスチェック
curl http://localhost:8100/health
# API ドキュメントの確認
open http://localhost:8100/docs
# 変換テスト
curl -X POST -F "file=@test.docx" http://localhost:8100/convert
# コンテナ状態の確認
docker-compose ps libreoffice
# ログを表示
docker-compose logs libreoffice
# サービスの再起動
docker-compose restart libreoffice
# リアルタイムログ
docker-compose logs -f server | grep "Vision\|高精度モード"
# LibreOffice ログ
docker-compose logs -f libreoffice
# 一括起動
docker-compose up -d
# ヘルスチェック
curl http://localhost:8100/health
# API ドキュメントを表示
open http://localhost:8100/docs
# 変換テスト
curl -X POST -F "file=@test.docx" http://localhost:8100/convert | jq
# ログを表示
docker-compose logs -f libreoffice server
| 特徴 | Flask | FastAPI | 優位点 |
|---|---|---|---|
| パフォーマンス | 中程度 | ⭐⭐⭐⭐⭐ 非同期 | 2〜3倍高速 |
| ドキュメント | 拡張が必要 | ⭐⭐⭐⭐⭐ 自動生成 | /docs で即座にアクセス可能 |
| 型安全性 | オプション | ⭐⭐⭐⭐⭐ 強制的 | エラーの削減 |
| 本番対応 | 設定が必要 | ⭐⭐⭐⭐⭐ 即利用可能 | 最小限の設定で運用可能 |
更新日: 2025-01-14 バージョン: v2.0 ステータス: 実装済み