Commit
·
6014789
1
Parent(s):
68887f8
feat: ダウンロードボタンの動作修正と表示設定の反映
Browse files- 画像とJSONのダウンロードボタンを機能させるための実装を追加
- 表示設定(手・顔の表示チェック)を画像に反映する処理を追加
- GradioのFileコンポーネントを使用してダウンロード機能を実装
- ダウンロード失敗時のエラーハンドリングを追加
- issues/023_詳細モード矩形非表示修正.md +34 -0
- issues/024_JSONロード機能実装.md +39 -0
- issues/025_出力UI非表示改修.md +43 -0
- issues/026_ダウンロードファイル名改善.md +46 -0
- issues/027_画像背景表示実装.md +49 -0
- issues/028_ダウンロードボタン動作修正.md +51 -0
issues/023_詳細モード矩形非表示修正.md
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Issue 023: 詳細モード矩形非表示修正 🎨💫
|
| 2 |
+
|
| 3 |
+
## 📋 問題概要
|
| 4 |
+
|
| 5 |
+
詳細モードでは手や顔の矩形を表示せず、キーポイントを直接操作できるようにする必要があるが、現在矩形が表示されてしまっている。
|
| 6 |
+
|
| 7 |
+
## 🎯 解決目標
|
| 8 |
+
|
| 9 |
+
1. **詳細モードで矩形非表示**: 手と顔の矩形を描画しない
|
| 10 |
+
2. **キーポイント直接操作**: 個別のキーポイントを直接ドラッグ可能に
|
| 11 |
+
3. **モード切替時の再描画**: 簡易モード↔詳細モード切替時に即座に反映
|
| 12 |
+
|
| 13 |
+
## 🔧 実装内容
|
| 14 |
+
|
| 15 |
+
### static/pose_editor.js の修正
|
| 16 |
+
- `drawPose()` 関数で編集モードをチェック
|
| 17 |
+
- 詳細モードの場合は矩形描画をスキップ
|
| 18 |
+
- キーポイントのクリック判定を追加
|
| 19 |
+
|
| 20 |
+
## ✅ 完了条件
|
| 21 |
+
|
| 22 |
+
- [ ] 詳細モードで矩形が表示されない
|
| 23 |
+
- [ ] 詳細モードでキーポイントを直接ドラッグできる
|
| 24 |
+
- [ ] モード切替が即座に反映される
|
| 25 |
+
- [ ] refs/dwpose_modifier の実装と同等の動作
|
| 26 |
+
|
| 27 |
+
## 📝 参考資料
|
| 28 |
+
|
| 29 |
+
- refs/dwpose_modifier/static/pose_editor.js の詳細モード実装
|
| 30 |
+
- Issue #013: 詳細モード個別編集
|
| 31 |
+
|
| 32 |
+
## 🏷️ タグ
|
| 33 |
+
|
| 34 |
+
`bug` `ui` `canvas` `editing-mode`
|
issues/024_JSONロード機能実装.md
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Issue 024: JSONロード機能実装 📁💖
|
| 2 |
+
|
| 3 |
+
## 📋 問題概要
|
| 4 |
+
|
| 5 |
+
現在、JSONファイルをロードしてポーズデータを読み込む機能が実装されていない。エクスポートしたJSONを再度読み込んで編集を続行できるようにする必要がある。
|
| 6 |
+
|
| 7 |
+
## 🎯 解決目標
|
| 8 |
+
|
| 9 |
+
1. **JSONファイルアップロード**: Gradioコンポーネントの追加
|
| 10 |
+
2. **データ検証**: アップロードされたJSONの形式チェック
|
| 11 |
+
3. **ポーズデータ適用**: 読み込んだデータをCanvasに反映
|
| 12 |
+
4. **エラーハンドリング**: 不正なJSONに対する適切なエラー通知
|
| 13 |
+
|
| 14 |
+
## 🔧 実装内容
|
| 15 |
+
|
| 16 |
+
### app.py の修正
|
| 17 |
+
- JSONアップロード用のgr.Fileコンポーネント追加
|
| 18 |
+
- JSONパース&検証関数の実装
|
| 19 |
+
- pose_dataへの適用
|
| 20 |
+
|
| 21 |
+
### utils/ の追加機能
|
| 22 |
+
- JSONバリデーション関数
|
| 23 |
+
- DWPoseフォーマットチェック
|
| 24 |
+
|
| 25 |
+
## ✅ 完了条件
|
| 26 |
+
|
| 27 |
+
- [ ] JSONファイルアップロードUIが追加される
|
| 28 |
+
- [ ] エクスポートしたJSONを読み込める
|
| 29 |
+
- [ ] 不正なJSONに対してエラー通知が表示される
|
| 30 |
+
- [ ] 読み込み後、即座にCanvasに反映される
|
| 31 |
+
|
| 32 |
+
## 📝 参考資料
|
| 33 |
+
|
| 34 |
+
- refs/dwpose_modifier のJSONロード実装
|
| 35 |
+
- エクスポート形式との互換性確保
|
| 36 |
+
|
| 37 |
+
## 🏷️ タグ
|
| 38 |
+
|
| 39 |
+
`feature` `json` `import` `data-management`
|
issues/025_出力UI非表示改修.md
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Issue 025: 出力UI非表示改修 🎨✨
|
| 2 |
+
|
| 3 |
+
## 📋 問題概要
|
| 4 |
+
|
| 5 |
+
現在の出力部分に不要なUI要素が表示されている:
|
| 6 |
+
- ポーズデータJSON表示が不要(内部的に使用するなら非表示にすべき)
|
| 7 |
+
- 画像の表示も不要(ダウンロードのみで十分)
|
| 8 |
+
|
| 9 |
+
## 🎯 解決目標
|
| 10 |
+
|
| 11 |
+
1. **JSON表示を非表示に**: gr.JSON コンポーネントを visible=False に
|
| 12 |
+
2. **画像表示を非表示に**: gr.Image コンポーネントを削除またはvisible=False
|
| 13 |
+
3. **ダウンロードボタンのみ残す**: 画像とJSONのダウンロードボタンは維持
|
| 14 |
+
4. **UIのスッキリ化**: 不要な要素を削除してシンプルに
|
| 15 |
+
|
| 16 |
+
## 🔧 実装内容
|
| 17 |
+
|
| 18 |
+
### app.py の修正
|
| 19 |
+
```python
|
| 20 |
+
# 現在
|
| 21 |
+
output_json = gr.JSON(label="ポーズデータ (JSON)", elem_id="output_json")
|
| 22 |
+
output_image = gr.Image(label="ポーズ画像", type="pil", elem_id="output_image")
|
| 23 |
+
|
| 24 |
+
# 修正後
|
| 25 |
+
output_json = gr.JSON(visible=False) # 内部利用のみ
|
| 26 |
+
# output_image は削除
|
| 27 |
+
```
|
| 28 |
+
|
| 29 |
+
## ✅ 完了条件
|
| 30 |
+
|
| 31 |
+
- [ ] ポーズデータJSONが表示されない
|
| 32 |
+
- [ ] ポーズ画像のプレビューが表示されない
|
| 33 |
+
- [ ] ダウンロードボタンは正常に機能する
|
| 34 |
+
- [ ] UIがスッキリして使いやすい
|
| 35 |
+
|
| 36 |
+
## 📝 参考資料
|
| 37 |
+
|
| 38 |
+
- Gradio visibility設定
|
| 39 |
+
- 内部データとUIの分離
|
| 40 |
+
|
| 41 |
+
## 🏷️ タグ
|
| 42 |
+
|
| 43 |
+
`ui` `ux` `cleanup` `visibility`
|
issues/026_ダウンロードファイル名改善.md
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Issue 026: ダウンロードファイル名改善 📁💫
|
| 2 |
+
|
| 3 |
+
## 📋 問題概要
|
| 4 |
+
|
| 5 |
+
現在のダウンロード機能では、ファイル名が適切でない:
|
| 6 |
+
- 機能名が含まれていない
|
| 7 |
+
- 日時情報がない
|
| 8 |
+
- どのファイルが何なのか分かりづらい
|
| 9 |
+
|
| 10 |
+
## 🎯 解決目標
|
| 11 |
+
|
| 12 |
+
1. **わかりやすいファイル名**: 機能+日時のフォーマット
|
| 13 |
+
2. **画像ファイル名**: 例)`dwpose_edit_20250112_143052.png`
|
| 14 |
+
3. **JSONファイル名**: 例)`dwpose_data_20250112_143052.json`
|
| 15 |
+
4. **タイムスタンプ**: YYYYMMDD_HHMMSS形式
|
| 16 |
+
|
| 17 |
+
## 🔧 実装内容
|
| 18 |
+
|
| 19 |
+
### utils/export_utils.py の修正
|
| 20 |
+
```python
|
| 21 |
+
from datetime import datetime
|
| 22 |
+
|
| 23 |
+
def get_timestamp_filename(prefix, extension):
|
| 24 |
+
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
|
| 25 |
+
return f"{prefix}_{timestamp}.{extension}"
|
| 26 |
+
```
|
| 27 |
+
|
| 28 |
+
### Gradioでのファイル名指定
|
| 29 |
+
- gr.File コンポーネントでファイル名を指定
|
| 30 |
+
- ダウンロード時に適切なファイル名を設定
|
| 31 |
+
|
| 32 |
+
## ✅ 完了条件
|
| 33 |
+
|
| 34 |
+
- [ ] 画像ダウンロード時のファイル名が`dwpose_edit_YYYYMMDD_HHMMSS.png`
|
| 35 |
+
- [ ] JSONダウンロード時のファイル名が`dwpose_data_YYYYMMDD_HHMMSS.json`
|
| 36 |
+
- [ ] タイムスタンプが正しく生成される
|
| 37 |
+
- [ ] ファイル名から内容が推測できる
|
| 38 |
+
|
| 39 |
+
## 📝 参考資料
|
| 40 |
+
|
| 41 |
+
- Python datetime モジュール
|
| 42 |
+
- Gradio ファイルダウンロード機能
|
| 43 |
+
|
| 44 |
+
## 🏷️ タグ
|
| 45 |
+
|
| 46 |
+
`feature` `ux` `export` `filename`
|
issues/027_画像背景表示実装.md
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Issue 027: 画像背景表示実装 🖼️💖
|
| 2 |
+
|
| 3 |
+
## 📋 問題概要
|
| 4 |
+
|
| 5 |
+
画像をロードした後、Canvasに画像が背景として表示されない。refs/dwpose_modifierでは、アップロードした画像を暗くして背景に表示し、その上にポーズを描画している。
|
| 6 |
+
|
| 7 |
+
## 🎯 解決目標
|
| 8 |
+
|
| 9 |
+
1. **背景画像表示**: アップロードした画像をCanvas背景に表示
|
| 10 |
+
2. **暗く表示**: 画像を暗くしてポーズが見やすいように
|
| 11 |
+
3. **アスペクト比維持**: 長辺をCanvasサイズに合わせて表示
|
| 12 |
+
4. **正方形以外対応**: 縦長・横長画像にも対応
|
| 13 |
+
|
| 14 |
+
## 🔧 実装内容
|
| 15 |
+
|
| 16 |
+
### static/pose_editor.js の修正
|
| 17 |
+
```javascript
|
| 18 |
+
// 背景画像描画関数
|
| 19 |
+
function drawBackgroundImage(image) {
|
| 20 |
+
// 画像を暗くして描画
|
| 21 |
+
ctx.globalAlpha = 0.3; // 透明度設定
|
| 22 |
+
|
| 23 |
+
// アスペクト比を保持してCanvas内に収める
|
| 24 |
+
const scale = Math.min(canvas.width / image.width, canvas.height / image.height);
|
| 25 |
+
// ... 描画処理
|
| 26 |
+
}
|
| 27 |
+
```
|
| 28 |
+
|
| 29 |
+
### 画像データの受け渡し
|
| 30 |
+
- Gradio から JavaScript への画像データ転送
|
| 31 |
+
- Base64エンコーディングまたはURL経由
|
| 32 |
+
|
| 33 |
+
## ✅ 完了条件
|
| 34 |
+
|
| 35 |
+
- [ ] アップロードした画像がCanvas背景に表示される
|
| 36 |
+
- [ ] 画像が適切に暗く表示される
|
| 37 |
+
- [ ] アスペクト比が保持される
|
| 38 |
+
- [ ] 正方形でない画像も正しく表示される
|
| 39 |
+
- [ ] refs/dwpose_modifier と同等の表示
|
| 40 |
+
|
| 41 |
+
## 📝 参考資料
|
| 42 |
+
|
| 43 |
+
- refs/dwpose_modifier/static/pose_editor.js の背景画像実装
|
| 44 |
+
- HTML5 Canvas globalAlpha プロパティ
|
| 45 |
+
- 画像のアスペクト比計算
|
| 46 |
+
|
| 47 |
+
## 🏷️ タグ
|
| 48 |
+
|
| 49 |
+
`bug` `canvas` `image` `background`
|
issues/028_ダウンロードボタン動作修正.md
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Issue 028: ダウンロードボタン動作修正 🔧💫
|
| 2 |
+
|
| 3 |
+
## 📋 問題概要
|
| 4 |
+
|
| 5 |
+
現在、画像とJSONのダウンロードボタンが機能していない。また、画像ダウンロード時に表示設定(手・顔の表示チェック)が反映されない。
|
| 6 |
+
|
| 7 |
+
## 🎯 解決目標
|
| 8 |
+
|
| 9 |
+
1. **ダウンロード機能の実装**: ボタンクリックでファイルダウンロード
|
| 10 |
+
2. **表示設定の反映**: 手・顔の表示チェックを画像に反映
|
| 11 |
+
3. **Gradio File出力**: gr.File コンポーネントでダウンロード実装
|
| 12 |
+
4. **エラーハンドリング**: ダウンロード失敗時の通知
|
| 13 |
+
|
| 14 |
+
## 🔧 実装内容
|
| 15 |
+
|
| 16 |
+
### app.py の修正
|
| 17 |
+
```python
|
| 18 |
+
# ダウンロード用のgr.File追加
|
| 19 |
+
download_image_file = gr.File(visible=False)
|
| 20 |
+
download_json_file = gr.File(visible=False)
|
| 21 |
+
|
| 22 |
+
# ボタンクリックイベント
|
| 23 |
+
def download_image_handler(pose_data, draw_hand, draw_face):
|
| 24 |
+
# 表示設定を反映して画像生成
|
| 25 |
+
image = export_pose_as_image(pose_data, draw_hand, draw_face)
|
| 26 |
+
# ファイルとして保存
|
| 27 |
+
filename = get_timestamp_filename("dwpose_edit", "png")
|
| 28 |
+
return save_as_file(image, filename)
|
| 29 |
+
```
|
| 30 |
+
|
| 31 |
+
### utils/export_utils.py の修正
|
| 32 |
+
- 表示設定パラメータの追加
|
| 33 |
+
- ファイル保存機能の実装
|
| 34 |
+
|
| 35 |
+
## ✅ 完了条件
|
| 36 |
+
|
| 37 |
+
- [ ] 画像ダウンロードボタンが機能する
|
| 38 |
+
- [ ] JSONダウンロードボタンが機能する
|
| 39 |
+
- [ ] 手の表示チェックが画像に反映される
|
| 40 |
+
- [ ] 顔の表示チェックが画像に反映される
|
| 41 |
+
- [ ] 適切なファイル名でダウンロードされる
|
| 42 |
+
|
| 43 |
+
## 📝 参考資料
|
| 44 |
+
|
| 45 |
+
- Gradio gr.File コンポーネント
|
| 46 |
+
- 一時ファイル生成とダウンロード
|
| 47 |
+
- refs/dwpose_modifier のエクスポート実装
|
| 48 |
+
|
| 49 |
+
## 🏷️ タグ
|
| 50 |
+
|
| 51 |
+
`bug` `export` `download` `functionality`
|