Spaces:
Build error
Build error
| import os | |
| from PySide6.QtWidgets import (QWidget, QVBoxLayout, QLabel, QLineEdit, | |
| QScrollArea, QComboBox, QCheckBox, QPushButton, QMessageBox) | |
| from ui_components import CustomSlider, RadioButtonGroup | |
| # 尝试导入实际的功能模块 | |
| try: | |
| from tools.step020_asr import transcribe_all_audio_under_folder | |
| except ImportError: | |
| pass | |
| class ASRTab(QWidget): | |
| def __init__(self, parent=None): | |
| super().__init__(parent) | |
| self.layout = QVBoxLayout(self) | |
| # 创建一个滚动区域 | |
| self.scroll_area = QScrollArea() | |
| self.scroll_area.setWidgetResizable(True) | |
| self.scroll_widget = QWidget() | |
| self.scroll_layout = QVBoxLayout(self.scroll_widget) | |
| # 视频文件夹 | |
| self.video_folder = QLineEdit("videos") | |
| self.scroll_layout.addWidget(QLabel("视频文件夹")) | |
| self.scroll_layout.addWidget(self.video_folder) | |
| # ASR模型选择 | |
| self.asr_model = QComboBox() | |
| self.asr_model.addItems(['WhisperX', 'FunASR']) | |
| self.scroll_layout.addWidget(QLabel("ASR模型选择")) | |
| self.scroll_layout.addWidget(self.asr_model) | |
| # WhisperX模型大小 | |
| self.whisperx_size = RadioButtonGroup(['large', 'medium', 'small', 'base', 'tiny'], "WhisperX模型大小", 'large') | |
| self.scroll_layout.addWidget(self.whisperx_size) | |
| # 计算设备 | |
| self.device = RadioButtonGroup(['auto', 'cuda', 'cpu'], "计算设备", 'auto') | |
| self.scroll_layout.addWidget(self.device) | |
| # 批处理大小 | |
| self.batch_size = CustomSlider(1, 128, 1, "批处理大小 Batch Size", 32) | |
| self.scroll_layout.addWidget(self.batch_size) | |
| # 分离多个说话人 | |
| self.separate_speakers = QCheckBox("分离多个说话人") | |
| self.separate_speakers.setChecked(True) | |
| self.scroll_layout.addWidget(self.separate_speakers) | |
| # 最小说话人数 | |
| self.min_speakers = RadioButtonGroup([None, 1, 2, 3, 4, 5, 6, 7, 8, 9], "最小说话人数", None) | |
| self.scroll_layout.addWidget(self.min_speakers) | |
| # 最大说话人数 | |
| self.max_speakers = RadioButtonGroup([None, 1, 2, 3, 4, 5, 6, 7, 8, 9], "最大说话人数", None) | |
| self.scroll_layout.addWidget(self.max_speakers) | |
| # 执行按钮 | |
| self.run_button = QPushButton("开始识别") | |
| self.run_button.clicked.connect(self.run_asr) | |
| self.scroll_layout.addWidget(self.run_button) | |
| # 状态显示 | |
| self.status_label = QLabel("准备就绪") | |
| self.scroll_layout.addWidget(QLabel("语音识别状态:")) | |
| self.scroll_layout.addWidget(self.status_label) | |
| # 识别结果详情 | |
| self.result_detail = QLabel("识别结果将显示在这里") | |
| self.scroll_layout.addWidget(QLabel("识别结果详情:")) | |
| self.scroll_layout.addWidget(self.result_detail) | |
| # 设置滚动区域 | |
| self.scroll_area.setWidget(self.scroll_widget) | |
| self.layout.addWidget(self.scroll_area) | |
| self.setLayout(self.layout) | |
| def run_asr(self): | |
| # 这里应该调用原始的transcribe_all_audio_under_folder函数 | |
| # 临时实现,实际应用中需要替换为真实的调用 | |
| self.status_label.setText("识别中...") | |
| QMessageBox.information(self, "功能提示", "AI智能语音识别功能正在实现中...") | |
| # 实际应用中解除以下注释 | |
| try: | |
| status, result_json = transcribe_all_audio_under_folder( | |
| self.video_folder.text(), | |
| self.asr_model.currentText(), | |
| self.whisperx_size.value(), | |
| self.device.value(), | |
| self.batch_size.value(), | |
| self.separate_speakers.isChecked(), | |
| self.min_speakers.value(), | |
| self.max_speakers.value() | |
| ) | |
| self.status_label.setText(status) | |
| self.result_detail.setText(str(result_json)) | |
| except Exception as e: | |
| self.status_label.setText(f"识别失败: {str(e)}") | |