WindowPhone Update Config

优涵系列应用针对背景模糊与广告显示进行了优化更新,包括看小说、赏图与驾考软件。具体更新包括解决背景模糊问题和改善广告显示,以提升用户体验。如果在使用过程中遇到无法正常运行的情况,请尝试卸载旧版本并重新安装。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[WPMyNetNovel]1|优涵看小说,修改了背景模糊,广告显示.|455c68e9-5845-485f-bd00-22a4bbd167c5[/WPMyNetNovel]

[WPShangTu]1|优涵赏图,修改了背景模糊,广告显示.|455c68e9-5845-485f-bd00-22a4bbd167c5[/WPShangTu]

[YouHanJiaKao]1|优涵驾考,全新改版,如果不能正常使用,请卸载旧版本重新安装,|71b28580-0478-4c1c-a9ed-cbfe9876add7[/YouHanJiaKao]

[YouHanJiaKaoWP8]1|优涵驾考,全新改版,如果不能正常使用,请卸载旧版本重新安装,|71b28580-0478-4c1c-a9ed-cbfe9876add7[/YouHanJiaKaoWP8]

import numpy as np import librosa import librosa.display import matplotlib.pyplot as plt from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg import tkinter as tk from tkinter import filedialog, messagebox, ttk import threading import os from scipy.signal import hamming # THCHS30数据集配置 THCHS30_CONFIG = { "data_dir": "data", # 音频文件目录 "transcript_suffix": ".trn", # 文本标注后缀 "splits": ["train", "dev", "test"], # 数据集划分 "sample_rate": 16000, # 数据集采样率 "frame_length": 25ms, # 建议帧长(根据论文设置) "hop_length": 10ms # 建议帧移(根据论文设置) } class VoiceRecognizer: def __init__(self, dataset_config=THCHS30_CONFIG): self.config = dataset_config self.reset() def reset(self): """重置识别器状态""" self.audio_path = None self.transcript_path = None self.audio_data = None self.frames = None self.mfccs = None self.endpoint_indices = None self.recognized_text = self.lexicons = self.load_lexicons() # 预加载词典 def load_lexicons(self): """加载数据集词典(词级和音素级)""" lexicons = { word: , phone: } for lm_type in [word, phone]: lex_path = os.path.join(lm_type, lexicon.txt) if os.path.exists(lex_path): with open(lex_path, r) as f: lexicons[lm_type] = [line.strip().split() for line in f] return lexicons def load_thchs30_audio(self, split, index): """按数据集划分加载音频文件""" split_dir = os.path.join(self.config[data_dir], split) audio_files = [f for f in os.listdir(split_dir) if f.endswith(.wav)] if index >= len(audio_files): return False audio_name = audio_files[index] self.audio_path = os.path.join(split_dir, audio_name) self.transcript_path = f{self.audio_path}{self.config[transcript_suffix]} return self.load_audio(self.audio_path) def load_audio(self, file_path): """通用音频加载方法(支持WAV和数据集格式)""" try: self.audio_data, sr = librosa.load(file_path, sr=self.config[sample_rate]) if sr != self.config[sample_rate]: messagebox.showwarning(采样率不匹配, f文件采样率{sr}与数据集要求{self.config[sample_rate]}不一致) return True except Exception as e: messagebox.showerror(加载失败, f音频加载失败: {str(e)}) return False def preprocess(self): """完整预处理流程(预加重+分帧+加窗)""" if not self.audio_data.size: return False # 预加重 pre_emphasized = np.append(self.audio_data[0], self.audio_data[1:] - self.config[pre_emphasis] * self.audio_data[:-1]) # 分帧(根据配置自动计算采样点数) frame_len = int(self.config[frame_length] * self.config[sample_rate] / 1000) hop_len = int(self.config[hop_length] * self.config[sample_rate] / 1000) frames = self.frame_signal(pre_emphasized, frame_len, hop_len) # 加窗 window = hamming(frame_len) self.frames = frames * window return True def frame_signal(self, signal, frame_len, hop_len): """高效分帧算法""" num_frames = (len(signal) - frame_len) // hop_len + 1 frames = np.lib.stride_tricks.as_strided( signal, shape=(num_frames, frame_len), strides=(signal.strides[0]*hop_len, signal.strides[0]) ) return frames def extract_mfcc(self, n_mfcc=13): """提取MFCC特征(带差分和加速度)""" if not self.frames.size: return False # 基础MFCC mfcc = librosa.feature.mfcc( y=self.frames.T, sr=self.config[sample_rate], n_mfcc=n_mfcc, n_fft=frame_len, # 使用配置帧长作为FFT窗口 hop_length=hop_len ) # 计算一阶和二阶差分 d_mfcc = librosa.feature.delta(mfcc) dd_mfcc = librosa.feature.delta(mfcc, order=2) # 拼接特征向量(13+13+13=39维) self.mfccs = np.concatenate([mfcc, d_mfcc, dd_mfcc], axis=0).T return True class THCHS30GUI(VoiceRecognizer): def __init__(self, root): super().__init__() self.root = root self.root.title(THCHS30语音识别系统) self.current_split = train # 默认训练集 self.current_index = 0 self.create_widgets() self.load_split_data() def create_widgets(self): """创建THCHS30专用GUI组件""" # 数据集选择栏 split_frame = ttk.Frame(self.root) split_frame.pack(fill=X, pady=5) self.split_combobox = ttk.Combobox(split_frame, values=self.config[splits]) self.split_combobox.set(self.current_split) self.split_combobox.bind("<<ComboboxSelected>>", self.on_split_change) self.split_combobox.pack(side=LEFT, padx=5) self.prev_btn = ttk.Button(split_frame, text=上一个, command=self.prev_sample) self.prev_btn.pack(side=LEFT, padx=2) self.next_btn = ttk.Button(split_frame, text=下一个, command=self.next_sample) self.next_btn.pack(side=LEFT, padx=2) self.sample_info = ttk.Label(split_frame, text=) self.sample_info.pack(side=RIGHT, padx=10) # 原有波形图、MFCC、端点检测界面保持不变(继承自原GUI) # ... 此处省略重复的绘图组件代码 ... def load_split_data(self): """加载当前划分的音频文件列表""" split_dir = os.path.join(self.config[data_dir], self.current_split) self.audio_files = [f for f in os.listdir(split_dir) if f.endswith(.wav)] self.update_sample_info() def update_sample_info(self): """更新当前样本信息""" total = len(self.audio_files) self.sample_info.config(text=f样本 {self.current_index+1}/{total}) def prev_sample(self): """切换上一个样本""" if self.current_index > 0: self.current_index -= 1 self.load_thchs30_audio(self.current_split, self.current_index) self.update_plots() def next_sample(self): """切换下一个样本""" if self.current_index < len(self.audio_files)-1: self.current_index += 1 self.load_thchs30_audio(self.current_split, self.current_index) self.update_plots() def on_split_change(self, event): """划分切换事件处理""" self.current_split = self.split_combobox.get() self.current_index = 0 self.load_split_data() self.load_thchs30_audio(self.current_split, self.current_index) self.update_plots() if __name__ == __main__: root = tk.Tk() app = THCHS30GUI(root) root.mainloop() 这段代码能否实现要求
05-31
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值