PDF_SlideShow / README.md
tomo2chin2's picture
Upload 5 files
abe5a08 verified
---
title: PDF to Video Converter
emoji: 🎬
colorFrom: blue
colorTo: purple
sdk: gradio
sdk_version: 4.19.2
app_file: app.py
pinned: true
---
# 📄 PDF to Video Converter 🎬
PDFファイルをスライドショー動画に変換するAPIです。指定されたURLからPDFをダウンロードし、各ページを画像化して、1ページあたり指定秒数のスライドショー動画を生成します。
## 🌟 機能
### ✅ 主要機能
- **PDF URLからのダウンロード**: HTTPリクエストで指定されたURLからPDFを取得
- **PDF→画像変換**: pdf2imageを使用して各ページを高品質な画像に変換
- **スライドショー動画生成**: 各画像を指定秒数(デフォルト5秒)表示する動画を作成
- **Hugging Faceアップロード**: 生成した動画をデータセットリポジトリに自動保存
- **URL返却**: アップロードされた動画のアクセス可能なURLを返却
### 🎨 ユーザーインターフェース
- **Gradio UI**: 直感的なWebインターフェース
- **FastAPI**: RESTful APIエンドポイント
- **リアルタイム進捗表示**: 処理状況を確認可能
- **動画プレビュー**: 生成された動画をその場で確認
## 🔌 API仕様
### エンドポイント: `POST /api/pdf-to-video`
#### リクエスト
```json
{
"pdf_url": "https://example.com/sample.pdf",
"duration_per_page": 5,
"dpi": 150
}
```
**パラメータ:**
- `pdf_url` (string, 必須): PDFファイルのURL
- `duration_per_page` (integer, オプション): 1ページあたりの表示秒数(デフォルト: 5)
- `dpi` (integer, オプション): 画像解像度(デフォルト: 150)
#### レスポンス
```json
{
"status": "success",
"video_url": "https://huggingface.co/datasets/username/repo/resolve/main/videos/video_20250107_123456_abc123.mp4",
"message": "動画の生成とアップロードに成功しました",
"total_pages": 10,
"video_duration": 50.0
}
```
**フィールド:**
- `status` (string): 処理結果("success" または "error")
- `video_url` (string): 生成された動画のURL
- `message` (string): 処理結果メッセージ
- `total_pages` (integer): PDFの総ページ数
- `video_duration` (float): 動画の総再生時間(秒)
### エンドポイント: `GET /health`
ヘルスチェック用エンドポイント
#### レスポンス
```json
{
"status": "healthy",
"service": "PDF to Video API",
"hf_configured": true
}
```
## 🛠️ 技術スタック
- **Gradio 4.19.2**: WebUI/SDK
- **FastAPI**: REST APIフレームワーク
- **pdf2image**: PDF→画像変換
- **OpenCV (cv2)**: 動画生成エンジン
- **huggingface_hub**: データセットアップロード
- **Pillow**: 画像処理
- **requests**: HTTP通信
## ⚙️ 環境変数
以下の環境変数を設定する必要があります:
| 変数名 | 必須 | デフォルト値 | 説明 |
|--------|------|--------------|------|
| `HF_TOKEN` | ✅ | - | Hugging Face認証トークン |
| `HF_REPO_ID` | ❌ | `tomo2chin2/video-storage` | データセットリポジトリID |
### HF_TOKENの取得方法
1. [Hugging Face](https://huggingface.co/)にログイン
2. Settings → Access Tokens に移動
3. "New token" をクリック
4. Write権限を付与してトークンを生成
5. 生成されたトークンをコピー
6. Space設定の "Repository secrets" に追加
## 🚀 使用方法
### Web UIから使用
1. Space URLにアクセス
2. PDF URLを入力欄に貼り付け
3. 表示秒数とDPIを調整(任意)
4. 「🎬 動画生成」ボタンをクリック
5. 生成された動画URLをコピー
### APIから使用
#### curlの例
```bash
curl -X POST "https://your-space.hf.space/api/pdf-to-video" \
-H "Content-Type: application/json" \
-d '{
"pdf_url": "https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf",
"duration_per_page": 5,
"dpi": 150
}'
```
#### Pythonの例
```python
import requests
response = requests.post(
"https://your-space.hf.space/api/pdf-to-video",
json={
"pdf_url": "https://example.com/sample.pdf",
"duration_per_page": 5,
"dpi": 150
}
)
result = response.json()
print(f"動画URL: {result['video_url']}")
```
#### JavaScriptの例
```javascript
fetch('https://your-space.hf.space/api/pdf-to-video', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
pdf_url: 'https://example.com/sample.pdf',
duration_per_page: 5,
dpi: 150
})
})
.then(response => response.json())
.then(data => console.log('動画URL:', data.video_url));
```
## 📊 処理フロー
```
1. PDF URLダウンロード
2. PDF→画像変換(pdf2image)
3. 画像サイズ統一(Pillow)
4. 動画生成(OpenCV)
- 各ページを指定秒数表示
- 30fps
5. Hugging Faceアップロード
6. URL返却
```
## 🧪 テスト用サンプルPDF
以下のURLでテスト可能です:
- **W3C ダミーPDF**: `https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf`
- **小サイズPDF**: 処理時間が短く、動作確認に最適
## ⚠️ 制限事項
1. **PDFサイズ**: 大きなPDF(20ページ以上)は処理に時間がかかります
2. **タイムアウト**: Hugging Face Spacesのタイムアウト制限(〜60秒)に注意
3. **同時リクエスト**: 大量の同時リクエストには対応していません
4. **ファイル形式**: PDFのみ対応(画像ファイルは非対応)
## 🔧 トラブルシューティング
### エラー: "HuggingFace API が初期化されていません"
→ `HF_TOKEN` 環境変数が設定されているか確認してください
### エラー: "PDFのダウンロードに失敗しました"
→ PDF URLが正しいか、アクセス可能か確認してください
### エラー: "PDFの画像変換に失敗しました"
→ PDFが破損していないか確認してください
### 動画が生成されない
→ ログを確認し、どの段階でエラーが発生しているか特定してください
## 📁 ファイル構成
```
majin/v4_spinoff/HUG/
├── app.py # メインアプリケーション
├── requirements.txt # Python依存パッケージ
├── packages.txt # システムパッケージ
├── README.md # このファイル
└── 実装ステップ.md # 詳細な実装手順
```
## 🤝 貢献
プルリクエストやイシューの報告を歓迎します。
## 📜 ライセンス
MIT License
## 📞 連絡先
問題や質問がある場合は、Issueを作成してください。
---
**最終更新**: 2025-10-07