-
音乐 AI 评分系统
该项目,完全本地运行,无需联网依赖。 本项目使用 Hugging Face Transformers 的 CLAP(`laion/clap-htsat-fused`)对音频进行多维分析,目标是: - 对一批待打分歌曲生成可排序的综合评分与标签,筛选更适合做 AI MV 推广的曲目 - 对歌曲进行提示词反推,辅助音乐制作/复刻方向的定位 - 统一导出 Excel 报表,便于快速浏览、筛选与运营决策 功能概览 - AI综合好听评分(0~100):基于音频-文本相似度的加权评分 - 曲风识别:输出“最可能曲风”并给出曲风 Top3 候选 - 反推创作提示词:从提示词库中匹配最相近的一条,便于复刻创作 - AI MV 推广筛选(更偏运营/投放):输出声学特征、AI MV 推广适配评分、情绪/视觉风格/平台 Top3 与剪辑建议 - Python:建议 3.10+(项目当前在 3.13 环境下运行过) 报表字段说明(核心) - 歌曲名称:源文件名 - AI综合好听评分:0~100 的综合评分 - AI MV推广适配评分:0~100,偏向节奏清晰、能量稳定、易卡点的曲目 - 精细化识别曲风:Top1 曲风标签 - 曲风Top3:Top3 曲风候选(用于降低单标签误判) - 情绪氛围Top3:用于 MV 视觉/文案定位 - MV视觉风格Top3:用于 AI MV 画面风格选择 - 推荐平台Top3:用于投放与分发渠道参考 - 剪辑建议:基于节奏与能量的剪辑策略提示 - 主调/BPM/节奏强度/能量均值/能量波动/亮度均值/时长秒:用于更细粒度的制作与运营筛选 - AI同款音乐复刻创作提示词:反推提示词(从提示词库匹配而来) 部分代码: import os import sys import torch import librosa import numpy as np import pandas as pd from transformers import ClapModel, ClapProcessor # ===================== 0. 终端编码兼容(Windows 控制台 GBK/CP936) ===================== def configure_console_output(): """ 配置标准输出/错误输出的编码容错策略,避免 Windows 控制台(如 GBK/CP936) 在打印包含特殊符号/表情字符时触发 UnicodeEncodeError。 """ for stream in (sys.stdout, sys.stderr): try: if hasattr(stream, "reconfigure"): stream.reconfigure(errors="replace") except Exception: pass configure_console_output() # ===================== 1. 设备自动选择 ===================== device = "cuda" if torch.cuda.is_available() else "cpu" print("当前运行设备:", device) # ===================== 2. 加载本地CLAP模型(全程离线) ===================== model_name = "laion/clap-htsat-fused" processor = ClapProcessor.from_pretrained(model_name) model = ClapModel.from_pretrained(model_name).to(device) model.eval()- 0
- 0
-
吾今有世家存档修改器 Python版本
内容已失效,年代久远,后续没再继续玩了。 #!/usr/bin/env python3 # -*- coding: utf-8 -*- """ 吾今有世家游戏存档修改器 用于修改GameData.es3文件中的游戏数据 作者: SnowZ 版本: 2.3.1 日期: 2025 """ import json import tkinter as tk from tkinter import ttk, filedialog, messagebox, scrolledtext import os import shutil from datetime import datetime class SaveEditor: """ 游戏存档修改器主类 提供图形界面来修改ES3格式的存档文件 """ def __init__(self): """ 初始化修改器界面和数据 """ self.root = tk.Tk() self.root.title("吾今有世家 - 游戏存档修改器 v2.3.1") self.root.geometry("1200x800") self.root.resizable(True, True) # 存档数据 self.game_data = None self.save_file_path = "" # 创建界面 self.create_widgets() # 尝试自动加载当前目录的GameData.es3 default_save = os.path.join(os.getcwd(), "GameData.es3") if os.path.exists(default_save): self.load_save_file(default_save) def create_widgets(self): """ 创建主界面组件 """ # 创建菜单栏 self.create_menu() # 创建主框架 main_frame = ttk.Frame(self.root) main_frame.pack(fill=tk.BOTH, expand=True, padx=10, pady=5) # 创建选项卡控件 self.notebook = ttk.Notebook(main_frame) self.notebook.pack(fill=tk.BOTH, expand=True) # 创建各个功能选项卡 self.create_character_tab() # 人物信息 self.create_family_tab() # 家族信息 self.create_noble_tab() # 世家信息 self.create_fief_tab() # 封地信息 self.create_military_tab() # 军事信息 self.create_economy_tab() # 经济信息 self.create_raw_data_tab() # 原始数据 # 状态栏 self.status_var = tk.StringVar() self.status_var.set("就绪 - 请加载存档文件") status_bar = ttk.Label(main_frame, textvariable=self.status_var, relief=tk.SUNKEN) status_bar.pack(side=tk.BOTTOM, fill=tk.X, pady=(5, 0)) def create_menu(self): """ 创建菜单栏 """ menubar = tk.Menu(self.root) self.root.config(menu=menubar) # 文件菜单 file_menu = tk.Menu(menubar, tearoff=0) menubar.add_cascade(label="文件(F)", menu=file_menu) file_menu.add_command(label="打开存档(O)", command=self.open_save_file, accelerator="Ctrl+O") file_menu.add_command(label="保存存档(S)", command=self.save_file, accelerator="Ctrl+S") file_menu.add_command(label="另存为(A)", command=self.save_as_file, accelerator="Ctrl+Shift+S") file_menu.add_separator() file_menu.add_command(label="备份存档(B)", command=self.backup_save_file) file_menu.add_separator() file_menu.add_command(label="退出(X)", command=self.root.quit) # 工具菜单 tools_menu = tk.Menu(menubar, tearoff=0) menubar.add_cascade(label="工具(T)", menu=tools_menu) tools_menu.add_command(label="验证数据完整性", command=self.validate_data) tools_menu.add_command(label="重置所有修改", command=self.reset_all_changes) # 帮助菜单 help_menu = tk.Menu(menubar, tearoff=0) menubar.add_cascade(label="帮助(H)", menu=help_menu) help_menu.add_command(label="使用说明", command=self.show_help) help_menu.add_command(label="关于", command=self.show_about)…- 275
- 0
-
Python 实现 360 壁纸爬虫:随机延时防封,智能分类与自动重命名
本文将分享一款实用的 360 壁纸爬虫 Python 脚本。只需输入分类,爬虫便会自动执行,遇到下载失败的情况会贴心地进行重试,最多重试 3 次,确保尽可能完整地获取资源。当所有壁纸下载完毕后,程序还会自动关闭,无需人工干预。更值得一提的是,下载的图片会依据分辨率尺寸自动重命名,方便后续的归类与查找,为您的壁纸管理带来高效便捷的体验。 源代码: import requests import os import time import random import hashlib from urllib.parse import urlparse def download_wallpapers(category_id): # 配置请求头和存储路径 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36" } save_dir = os.path.join("downloads", f"category_{category_id}") os.makedirs(save_dir, exist_ok=True) start = 0 per_page = 50 # 每次请求的图片数量 retry_limit = 3 # 单个图片下载重试次数 total_downloaded = 0 while True: # 构造API请求URL api_url = f"http://wallpaper.apc.360.cn/index.php?c=WallPaper&a=getAppsByCategory&cid={category_id}&start={start}&count={per_page}" try: # 带重试机制的API请求 response = requests.get(api_url, headers=headers, timeout=15) response.raise_for_status() data = response.json() if not data.get('data'): print(f"没有更多数据,已下载 {total_downloaded} 张图片") break # 处理每张壁纸 for item in data['data']: img_url = item.get('url') resolution = item.get('resolution', 'unknown').replace('x', '_') if not img_url: continue # 生成唯一文件名 url_hash = hashlib.md5(img_url.encode()).hexdigest()[:10] file_ext = os.path.splitext(urlparse(img_url).path)[1] or '.jpg' filename = f"{resolution}_{url_hash}{file_ext}" file_path = os.path.join(save_dir, filename) if os.path.exists(file_path): continue # 带重试机制的图片下载 for attempt in range(retry_limit): try: img_resp = requests.get(img_url, headers=headers, timeout=20) img_resp.raise_for_status() with open(file_path, 'wb') as f: f.write(img_resp.content) total_downloaded += 1 print(f"成功下载:{filename}") break except Exception as e: if attempt == retry_limit - 1: print(f"下载失败(已重试{retry_limit}次):{img_url}") time.sleep(random.uniform(1, 3)) # 随机延迟防止封禁 time.sleep(random.uniform(0.5, 1.5)) # 更新分页参数 start += per_page # 批次间较长延迟 time.sleep(random.uniform(2, 5)) except requests.exceptions.RequestException as e: print(f"API请求失败: {str(e)}") break except Exception as e: print(f"发生未知错误: {str(e)}") break if __name__ == "__main__": try: cid =…- 29
- 0
-
EXCEL网址有效率检测 【手动检测】
不多说了,直接上代码,使用Python3。 有些时候收集的网址很多,等我们整理入库的时候可能已经失效了,在录入到网站里的时候我们会做一次有效检测,确保录入的时候是能访问的。 import openpyxl import requests from ping3 import ping # 打开Excel文件 wb = openpyxl.load_workbook('your_excel_file.xlsx') # 选择工作表 sheet = wb['sheet1'] # 指定列的网址数据范围 url_column = 'B' # 遍历每个单元格 for cell in sheet[url_column]: # 获取网址 url = cell.value # 检测网址有效性 try: response = requests.get(url) if response.status_code == 200: cell.offset(column=1).value = '有效' else: cell.offset(column=1).value = '无效' except: cell.offset(column=1).value = '无效' # 执行ping命令检测 ping_result = ping(url) if ping_result is not None: cell.offset(column=2).value = '有效' else: cell.offset(column=2).value = '无效' # 保存修改 wb.save('data.xlsx') # 在控制台显示运行状态 print(f"检测完成: {url}") # 关闭Excel文件 wb.close()- 21
- 0



