Rename models_manager_v8.2.py to models_manager_v8.3.py
Browse files
models_manager_v8.2.py → models_manager_v8.3.py
RENAMED
|
@@ -631,18 +631,43 @@ class ModelsManager(tk.Tk):
|
|
| 631 |
|
| 632 |
ttk.Button(win, text="自动生成 dataset", command=auto_dataset).pack(anchor="w", padx=10, pady=4)
|
| 633 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 634 |
# ========================================================
|
| 635 |
-
# 🌟
|
| 636 |
# ========================================================
|
| 637 |
-
# 🌟 新增:动态渲染自定义字段
|
| 638 |
custom_vars = {}
|
| 639 |
locked_keys = ["title", "trigger", "dataset", "showcase"]
|
| 640 |
-
custom_keys = [k for k in meta.keys() if k not in locked_keys]
|
| 641 |
|
| 642 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 643 |
ext_frame = ttk.LabelFrame(win, text="自定义扩展字段")
|
| 644 |
ext_frame.pack(fill="x", padx=10, pady=5)
|
| 645 |
-
for k in
|
| 646 |
row = ttk.Frame(ext_frame)
|
| 647 |
row.pack(fill="x", pady=2)
|
| 648 |
ttk.Label(row, text=f"{k}:", width=12).pack(side="left")
|
|
@@ -1297,7 +1322,7 @@ class ModelsManager(tk.Tk):
|
|
| 1297 |
self._convert_png_to_jpg(local_dir)
|
| 1298 |
|
| 1299 |
# 4. 打包 Parquet 并更新 YAML
|
| 1300 |
-
temp_readme_path, valid_folders = self.
|
| 1301 |
|
| 1302 |
# 5. 上传
|
| 1303 |
self._upload_files_and_readme(api, local_dir, region_prefix, temp_readme_path, valid_folders)
|
|
@@ -1407,40 +1432,12 @@ class ModelsManager(tk.Tk):
|
|
| 1407 |
return
|
| 1408 |
self.log_dataset(f" 🎉 转换完成!共转换 {converted_count} 张图片。")
|
| 1409 |
|
| 1410 |
-
def
|
| 1411 |
-
import glob,
|
| 1412 |
from datasets import Dataset, Features, Image as HFImage, Value
|
| 1413 |
-
from huggingface_hub import DatasetCard
|
| 1414 |
-
from PIL import Image as PILImage
|
| 1415 |
-
|
| 1416 |
-
self.log_dataset("📦 [任务 4/5] 正在本地打包 Parquet 并更新 YAML 配置...")
|
| 1417 |
-
local_folder_name = os.path.basename(current_dir).replace(" ", "_").replace("-", "_")
|
| 1418 |
-
|
| 1419 |
-
self.log_dataset(f" ☁️ 正在读取云端 {DATASET_REPO_ID} 的现有配置...")
|
| 1420 |
-
try:
|
| 1421 |
-
# 注意这里用 DATASET_REPO_ID 替换了原脚本的 REPO_ID
|
| 1422 |
-
remote_readme_path = api.hf_hub_download(repo_id=DATASET_REPO_ID, filename="README.md", repo_type="dataset")
|
| 1423 |
-
with open(remote_readme_path, "r", encoding="utf-8") as f:
|
| 1424 |
-
content = f.read()
|
| 1425 |
-
card = DatasetCard(content)
|
| 1426 |
-
self.log_dataset(" ✅ 成功读取云端 README。")
|
| 1427 |
-
except Exception as e:
|
| 1428 |
-
self.log_dataset(f" ⚠️ 找不到云端 README,将新建: {e}")
|
| 1429 |
-
card = DatasetCard("")
|
| 1430 |
|
| 1431 |
-
|
| 1432 |
-
if "configs" not in yaml_data: yaml_data["configs"] = []
|
| 1433 |
|
| 1434 |
-
yaml_data["dataset_info"] = {
|
| 1435 |
-
"features": [
|
| 1436 |
-
{"name": "image", "dtype": "image"},
|
| 1437 |
-
{"name": "file_name", "dtype": "string"},
|
| 1438 |
-
{"name": "text", "dtype": "string"}
|
| 1439 |
-
]
|
| 1440 |
-
}
|
| 1441 |
-
|
| 1442 |
-
existing_config_names = [c.get("config_name") for c in yaml_data["configs"]]
|
| 1443 |
-
new_configs_added = False
|
| 1444 |
valid_folders = []
|
| 1445 |
|
| 1446 |
for sub_folder_name in os.listdir(current_dir):
|
|
@@ -1489,32 +1486,6 @@ class ModelsManager(tk.Tk):
|
|
| 1489 |
valid_folders.append(sub_folder_name)
|
| 1490 |
self.log_dataset(f" ✅ 生成 train.parquet ({len(data_rows)} 条数据)")
|
| 1491 |
|
| 1492 |
-
config_name = f"{local_folder_name}_{sub_folder_name}".lower()
|
| 1493 |
-
path_str = f"{region_prefix}/{local_folder_name}/{sub_folder_name}/train.parquet"
|
| 1494 |
-
|
| 1495 |
-
if config_name not in existing_config_names:
|
| 1496 |
-
yaml_data["configs"].append({
|
| 1497 |
-
"config_name": config_name,
|
| 1498 |
-
"data_files": [{"split": "train", "path": path_str}]
|
| 1499 |
-
})
|
| 1500 |
-
new_configs_added = True
|
| 1501 |
-
self.log_dataset(f" ➕ 已添加配置: {config_name}")
|
| 1502 |
-
|
| 1503 |
-
def get_priority(config):
|
| 1504 |
-
data_files = config.get("data_files", [])
|
| 1505 |
-
path = data_files[0].get("path", "") if data_files else ""
|
| 1506 |
-
priority_dict = {"CN": 1, "KR": 2, "JP": 3, "Fictional": 4, "WE": 5, "Heels": 6,}
|
| 1507 |
-
path_prefix = path.split('/')[0] if path else ""
|
| 1508 |
-
return priority_dict.get(path_prefix, 99)
|
| 1509 |
-
|
| 1510 |
-
yaml_data["configs"] = sorted(yaml_data["configs"], key=lambda c: (get_priority(c), c.get("config_name", "")))
|
| 1511 |
-
self.log_dataset(" 🔄 已根据 [CN > KR > JP > Fictional > WE > Heels] 的顺序重排 YAML。")
|
| 1512 |
-
|
| 1513 |
-
if new_configs_added:
|
| 1514 |
-
card.data = yaml_data
|
| 1515 |
-
with tempfile.NamedTemporaryFile(mode='w', encoding='utf-8', suffix='.md', delete=False) as temp_readme:
|
| 1516 |
-
temp_readme.write(str(card))
|
| 1517 |
-
return temp_readme.name, valid_folders
|
| 1518 |
return None, valid_folders
|
| 1519 |
|
| 1520 |
def _upload_files_and_readme(self, api, current_dir, region_prefix, temp_readme_path, valid_folders):
|
|
@@ -1538,22 +1509,6 @@ class ModelsManager(tk.Tk):
|
|
| 1538 |
self.log_dataset(f" 🎉 {sub_folder_name} 上传完成!")
|
| 1539 |
except Exception as e:
|
| 1540 |
self.log_dataset(f" ❌ {sub_folder_name} 上传失败: {e}")
|
| 1541 |
-
|
| 1542 |
-
if temp_readme_path:
|
| 1543 |
-
self.log_dataset("\n 📝 正在推送最新的 README.md...")
|
| 1544 |
-
try:
|
| 1545 |
-
api.upload_file(
|
| 1546 |
-
path_or_fileobj=temp_readme_path,
|
| 1547 |
-
path_in_repo="README.md",
|
| 1548 |
-
repo_id=DATASET_REPO_ID,
|
| 1549 |
-
repo_type="dataset",
|
| 1550 |
-
commit_message="Auto-update README YAML configs"
|
| 1551 |
-
)
|
| 1552 |
-
self.log_dataset(" 🎉 README.md 已成功更新到云端!")
|
| 1553 |
-
except Exception as e:
|
| 1554 |
-
self.log_dataset(f" ❌ README.md 上传失败: {e}")
|
| 1555 |
-
finally:
|
| 1556 |
-
os.remove(temp_readme_path)
|
| 1557 |
# ==========================================================
|
| 1558 |
# ==================== 区域 4: Showcase 管理 ================
|
| 1559 |
# ==========================================================
|
|
|
|
| 631 |
|
| 632 |
ttk.Button(win, text="自动生成 dataset", command=auto_dataset).pack(anchor="w", padx=10, pady=4)
|
| 633 |
|
| 634 |
+
# # 🌟 新增:动态渲染自定义字段
|
| 635 |
+
# custom_vars = {}
|
| 636 |
+
# locked_keys = ["title", "trigger", "dataset", "showcase"]
|
| 637 |
+
# custom_keys = [k for k in meta.keys() if k not in locked_keys]
|
| 638 |
+
|
| 639 |
+
# if custom_keys:
|
| 640 |
+
# ext_frame = ttk.LabelFrame(win, text="自定义扩展字段")
|
| 641 |
+
# ext_frame.pack(fill="x", padx=10, pady=5)
|
| 642 |
+
# for k in custom_keys:
|
| 643 |
+
# row = ttk.Frame(ext_frame)
|
| 644 |
+
# row.pack(fill="x", pady=2)
|
| 645 |
+
# ttk.Label(row, text=f"{k}:", width=12).pack(side="left")
|
| 646 |
+
# var = tk.StringVar(value=str(meta.get(k, "")))
|
| 647 |
+
# custom_vars[k] = var
|
| 648 |
+
# ttk.Entry(row, textvariable=var).pack(side="left", fill="x", expand=True, padx=5)
|
| 649 |
# ========================================================
|
| 650 |
+
# 🌟 动态渲染自定义字段(兼容空数据)
|
| 651 |
# ========================================================
|
|
|
|
| 652 |
custom_vars = {}
|
| 653 |
locked_keys = ["title", "trigger", "dataset", "showcase"]
|
|
|
|
| 654 |
|
| 655 |
+
# 1. 当前数据自身的 key
|
| 656 |
+
current_custom_keys = set([k for k in meta.keys() if k not in locked_keys])
|
| 657 |
+
|
| 658 |
+
# 2. 全局所有数据里出现过的 key
|
| 659 |
+
global_custom_keys = set()
|
| 660 |
+
for m in self.items.values():
|
| 661 |
+
if isinstance(m, dict):
|
| 662 |
+
global_custom_keys.update([k for k in m.keys() if k not in locked_keys])
|
| 663 |
+
|
| 664 |
+
# 3. 合并去重
|
| 665 |
+
all_custom_keys = list(current_custom_keys) + [k for k in global_custom_keys if k not in current_custom_keys]
|
| 666 |
+
|
| 667 |
+
if all_custom_keys:
|
| 668 |
ext_frame = ttk.LabelFrame(win, text="自定义扩展字段")
|
| 669 |
ext_frame.pack(fill="x", padx=10, pady=5)
|
| 670 |
+
for k in all_custom_keys:
|
| 671 |
row = ttk.Frame(ext_frame)
|
| 672 |
row.pack(fill="x", pady=2)
|
| 673 |
ttk.Label(row, text=f"{k}:", width=12).pack(side="left")
|
|
|
|
| 1322 |
self._convert_png_to_jpg(local_dir)
|
| 1323 |
|
| 1324 |
# 4. 打包 Parquet 并更新 YAML
|
| 1325 |
+
temp_readme_path, valid_folders = self._generate_parquet_and_update(api, local_dir, region_prefix)
|
| 1326 |
|
| 1327 |
# 5. 上传
|
| 1328 |
self._upload_files_and_readme(api, local_dir, region_prefix, temp_readme_path, valid_folders)
|
|
|
|
| 1432 |
return
|
| 1433 |
self.log_dataset(f" 🎉 转换完成!共转换 {converted_count} 张图片。")
|
| 1434 |
|
| 1435 |
+
def _generate_parquet_and_update(self, api, current_dir, region_prefix):
|
| 1436 |
+
import glob, pandas as pd
|
| 1437 |
from datasets import Dataset, Features, Image as HFImage, Value
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1438 |
|
| 1439 |
+
self.log_dataset("📦 [任务 4/5] 正在本地打包 Parquet (已启用极简聚合模式)...")
|
|
|
|
| 1440 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1441 |
valid_folders = []
|
| 1442 |
|
| 1443 |
for sub_folder_name in os.listdir(current_dir):
|
|
|
|
| 1486 |
valid_folders.append(sub_folder_name)
|
| 1487 |
self.log_dataset(f" ✅ 生成 train.parquet ({len(data_rows)} 条数据)")
|
| 1488 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1489 |
return None, valid_folders
|
| 1490 |
|
| 1491 |
def _upload_files_and_readme(self, api, current_dir, region_prefix, temp_readme_path, valid_folders):
|
|
|
|
| 1509 |
self.log_dataset(f" 🎉 {sub_folder_name} 上传完成!")
|
| 1510 |
except Exception as e:
|
| 1511 |
self.log_dataset(f" ❌ {sub_folder_name} 上传失败: {e}")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1512 |
# ==========================================================
|
| 1513 |
# ==================== 区域 4: Showcase 管理 ================
|
| 1514 |
# ==========================================================
|