PDF_SlideShow / README.md
tomo2chin2's picture
Upload 5 files
abe5a08 verified

A newer version of the Gradio SDK is available: 6.8.0

Upgrade
metadata
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

リクエスト

{
  "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)

レスポンス

{
  "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

ヘルスチェック用エンドポイント

レスポンス

{
  "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にログイン
  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の例

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の例

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の例

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