├── .gitignore
├── LICENSE
├── README.md
├── conf
└── config.ini
├── docs
└── 构思.md
├── main.py
├── requirements.txt
├── ui
├── guiclass.py
├── mydialog.py
├── mygui.py
├── mywidget.py
├── pyuic
│ ├── ui_add_authorizationinfo.py
│ ├── ui_add_dataset.py
│ ├── ui_biaobei_pingce.py
│ ├── ui_dataset_view.py
│ ├── ui_del_info_wav.py
│ ├── ui_edit_info.py
│ ├── ui_output_dataset_speaker.py
│ ├── ui_pingce_jindutiao.py
│ ├── ui_select_dataset.py
│ ├── ui_select_file_long_wav.py
│ ├── ui_select_file_wav_srt.py
│ └── ui_select_workspace.py
└── uifiles
│ ├── add_authorizationinfo.ui
│ ├── add_dataset.ui
│ ├── add_voice.ui
│ ├── biaobei_pingce.ui
│ ├── dataset_view.ui
│ ├── del_info_wav.ui
│ ├── edit_info.ui
│ ├── output_dataset_speaker.ui
│ ├── pingce_jindutiao.ui
│ ├── select_dataset.ui
│ ├── select_file_long_wav.ui
│ ├── select_file_wav_srt.ui
│ └── select_workspace.ui
├── utils
├── add_path.py
├── global_obj.py
├── log.py
├── peewee_orm.py
├── qt_tools.py
├── request_tools.py
├── sqlitedb.py
├── tool_str.py
└── tools.py
└── 编译.bat
/.gitignore:
--------------------------------------------------------------------------------
1 | .idea
2 | temp
3 | venv
4 | logs
5 | workspace
6 | lib
7 | build
8 | dist
9 | imgs
10 | *.spec
11 | out
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2023 李子
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # sound_dataset_tools2
2 |
3 | ## 介绍
4 | 本工具主要用于快速制作语音数据集,可一键导出VITS等项目所需的训练数据集
5 |
6 | **注意:你正在查看项目的r1.0分支,本分支将停止更新新功能,仅做维护和留档,未来项目经过重构后会以r2.0分支为主**
7 |
8 | 特色:
9 |
10 | GUI界面!
11 |
12 | **中文文档**
13 |
14 | 支持 音频+字幕/纯音频自动切割 两种方式导入数据(未来会更多)
15 |
16 | 自动优化了音频的切割效果,(尽量)避免出现断音
17 |
18 | 可直接导出符合VITS等项目要求的数据集格式,声道数/采样率均可设置
19 |
20 | 引入语音评测功能,通过为数据打分可以快速从海量数据中筛选出优质数据集
21 |
22 | ## 软件架构
23 | 数据库:sqlite、peewee
24 |
25 | 界面:PySide6
26 |
27 | 音频处理:FFMPEG、pydub等
28 |
29 |
30 | ## 安装教程
31 |
32 | ### 运行编译好的exe文件
33 |
34 | 进入 github 的 [Release](https://github.com/kslz/sound_dataset_tools2/releases) 界面 或 gitee 的[发行版](https://gitee.com/kslizi/sound_dataset_tools2/releases/)界面 根据提示下载对应的压缩包双击即可启动程序
35 |
36 | ### 从源代码运行
37 |
38 | 1. 克隆本项目
39 |
40 | gitee:
41 |
42 | ```
43 | git clone https://gitee.com/kslizi/sound_dataset_tools2.git
44 | ```
45 |
46 | github:
47 |
48 | ```
49 | git clone https://github.com/kslz/sound_dataset_tools2.git
50 | ```
51 |
52 | 2. 安装[ffmpeg](https://www.gyan.dev/ffmpeg/builds/ffmpeg-git-essentials.7z)
53 |
54 | 你可以通过配置环境变量,也可以将下载得到的ffmpeg压缩包解压然后在exe根目录下新建lib文件夹,将解压得到的bin文件夹改名为ffmpeg,然后复制到lib目录下,最后的目录结构如图所示
55 |
56 | 
57 |
58 | 3. 安装其他库
59 |
60 | ```
61 | pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
62 | ```
63 |
64 |
65 |
66 | ## 使用说明
67 |
68 | ### 运行项目
69 |
70 | ```
71 | python main.py
72 | ```
73 |
74 | ### 选择工作区
75 |
76 | 
77 |
78 | 如果你当前的目录空间不足可以指定其他目录,导入的文件、数据库、生成的数据集都会存放在指定目录中
79 |
80 | ### 数据集选择界面
81 |
82 | 你可以在这里添加,修改,删除数据集。每个数据集之间互相独立。点击进入按钮,进入数据集。
83 |
84 | 
85 |
86 | ### 数据集概览界面
87 |
88 | 在此你可以对数据进行导入、导出、处理等操作
89 |
90 | 
91 |
92 | #### 导入数据
93 |
94 | 注意:所有导入数据的方式都经过了自动优化,关于自动优化的具体逻辑请见文末。
95 |
96 | ##### 从文件导入(音频+字幕)
97 |
98 | 点击按钮,在弹窗中选择预先处理好的音频和字幕文件,支持视频文件和几乎所有(ffmpeg支持的)格式的音频文件导入,同时请输入发音人。关于字幕的获取请参见文末。
99 |
100 | 
101 |
102 | 导入后的界面如图所示,你可以在左侧的下拉框中选择翻页,也可以点击试听音频段
103 |
104 | 
105 |
106 | 点击快速导出后会将当前音频导出至 `.\workspace\output\fastoutput\` 目录下
107 |
108 | ##### 从文件导入(长音频)
109 |
110 | 点击按钮,在弹窗中选择预先处理好的音频文件,支持视频文件和几乎所有(ffmpeg支持的)格式的音频文件导入,同时请输入合适的发音人、最短静音长度、静音阈值信息
111 |
112 | 最短静音长度:当静音长度达到这个数值时进行一次裁切
113 |
114 | 静音阈值:当音频响度低于这个数值时则视为静音,如果你的音频底噪很低,可以适当调低此值获得更好的结果,反之则提高。
115 |
116 | 
117 |
118 | 导入后的界面如图所示,需要注意的是因为只有短音频,所以裁切出的音频段没有标注文本,将在未来引入语音识别以进行自动标注。
119 |
120 | 
121 |
122 | #### 删除数据
123 |
124 | ##### 根据源音频删除数据
125 |
126 | 点击按钮后选择一个当前数据集中数据对应的音频,点击确定后音频本身和相关联的数据都会被删除
127 |
128 | 
129 |
130 | #### 导出数据
131 |
132 | ##### 导出数据集(单发音人)
133 |
134 | 点击按钮后选择参数,你也可以选择对应预设然后点击应用按钮应用预设,如果你不了解这些值的含义使用默认即可。
135 |
136 | 注:
137 |
138 | 归一化:即响度匹配,会按照所输入的值进行音频音量进行自动缩放
139 |
140 | 目前的导出逻辑中将跳过标注文本中包含英文或数字的数据,不过如果有标注文本为空,仍会进行导出
141 |
142 | 点击下一步即可进行数据集导出,窗口可能会卡一下,请耐心等待。
143 |
144 | 
145 |
146 | 
147 |
148 | 导出后的文件可在对应目录找到
149 |
150 | 
151 |
152 | #### 语音评测
153 |
154 | 语音评测功能可以通过商用评测接口为语句打分,以实现快速挑选优质数据的功能。
155 |
156 | 目前已接入标贝语音评测接口
157 |
158 | ##### 标贝语音评测
159 |
160 | ###### 添加授权信息
161 |
162 | 首先进入软件设置-授权管理页面,点击添加按钮,输入名称等字段,应用类型选择语音评测。
163 |
164 | 
165 |
166 | 标贝相关字段请进入 [标贝开放平台-语音评测页面](https://ai.data-baker.com/#/expand/evaluating) 开通服务后查看(目前为免费试用期,想白嫖的尽快)
167 |
168 | 
169 |
170 | 添加完毕后会自动进行校验,期间请关闭代理程序。
171 |
172 | ###### 进行数据评测
173 |
174 | 然后进入数据处理页面,点击标贝语音评测,选择相应授权信息后即可开始评测。
175 |
176 | 
177 |
178 | 
179 |
180 | ###### 根据评测结果导出
181 |
182 | 返回数据集概览页面,点击导出按钮,在评测相关的部分选择标贝评测,并填入对应分数要求
183 |
184 | 
185 |
186 | 注意:选择评测的话,未进行评测的数据将不会被导出,同时因为标贝评测只支持中文,所以选择后所有英文数据也都不会被导出。
187 |
188 | 点击下一步,确认后即可开始导出
189 |
190 | 
191 |
192 | 
193 |
194 | 另附:不选择评测时的导出结果
195 |
196 | 
197 |
198 | ## 开发计划
199 |
200 | ~~编译exe版本~~
201 |
202 | 通过ASR标注
203 |
204 | ~~应用语音评测~~
205 |
206 | 应用声纹识别
207 |
208 | 导出多发音人数据集
209 |
210 | ~~快速导出~~
211 |
212 | ......
213 |
214 |
215 |
216 | ## 常见问题
217 |
218 | 1. **如何获取字幕?**
219 |
220 | 使用剪映或videoSRT等工具获取SRT字幕文件,可以参考以下链接:
221 |
222 | [剪映导出字幕](https://jingyan.baidu.com/article/c35dbcb0881b6fc817fcbcd2.html)
223 |
224 | [video-srt-windows](https://github.com/wxbool/video-srt-windows)
225 |
226 | [videosrt-pro](https://www.yuque.com/viggo-t7cdi/videosrt-pro/cpwtwl#KKySG)
227 |
228 | 2. **自动优化的逻辑?**
229 |
230 | 优化逻辑是从起位置开始向前截取10ms 检查这10ms和start到start+10两段的响度比较,如果前面的响度小则把start向前挪,直到找到一个响度最小的位置,end也是类似的逻辑,这样能尽量避免音频被截断
231 |
232 | 另外剪映生成的字幕有时会讲一句话拆成多句,每句之间相隔33毫秒以内,遇到这种情况程序会将这些字幕合成一句。
233 |
234 | 3. **如何升级exe版本**
235 |
236 | 下载新的压缩包后将其中的exe文件替换到原来的旧版软件相同路径,覆盖原文件即可
237 |
238 | 3. **待补充...**
239 |
--------------------------------------------------------------------------------
/conf/config.ini:
--------------------------------------------------------------------------------
1 | [program_configs]
2 | default_workspace = .\workspace
3 |
4 |
--------------------------------------------------------------------------------
/docs/构思.md:
--------------------------------------------------------------------------------
1 | sound_dataset_tools2
2 |
3 | 语音数据集制作工具
4 |
5 |
6 |
7 | 目录结构
8 |
9 | ```text
10 | sound_dataset_tools2
11 | conf
12 | config.ini 常规配置文件
13 | utils
14 | tools.py 常规工具函数
15 | xunfei.py 讯飞相关工具函数
16 | biaobei.py 标贝相关工具函数
17 | sqlite.py 数据库相关
18 | ui
19 | uifiles 存放*.ui的目录
20 | ui_***.py 转换后的pyqt文件
21 | workspace 工作区
22 | db
23 | workspace.db存放工作区相关信息
24 | work1... 存放不同的工作项目
25 | 0_rawvoice 存放原始音频
26 | 0_srt 存放srt文件
27 | 1_
28 |
29 |
30 |
31 |
32 |
33 |
34 | ```
35 |
36 | ## 概念
37 |
38 | 工作区:一个文件夹,里面存放数据集,每个工作区对应一个sqlite文件
39 |
40 | 数据集:与其他数据及互相独立,里面存放源音频,字幕文件,
41 |
42 | ## 工作流程
43 |
44 | 1,进入页面要求输入工作区位置,默认填写为同目录下的位置
45 |
46 | 2,进入后展示现有数据集信息,有一个按钮可以新建数据集,有一个按钮可以进入数据集
47 |
48 | 3,新建数据集窗口可以填写数据集名称、简介
49 |
50 | 4,进入数据集窗口后展示数据集信息,历史导入的音频文件、有一个导入新音频的按钮,可以导入新音频文件和SRT文件
51 |
52 |
53 |
54 | 1,根据 srt 文件裁切语音文件
55 |
56 | 2,直接根据静音帧切割语音文件
57 |
58 |
59 |
60 | ## 程序流程
61 |
62 | 1. 运行main.py
63 | 2. 初始化程序 init_program()
64 | 1. 读取ini文件,放入全局变量中
65 | 3. guiclass.main()
66 | 1. 定义guilogger日志
67 | 2. 展示工作区选择窗口 SelectWorkspaceWindow
68 | 4. 工作区选择窗口
69 | 1. 确定
70 | 2. 退出:close_program()
71 | 5. 数据集窗口
72 | 1. 数据集概览tab
73 | 1. 展示表格
74 | 1. 展示列:文本/发音人/是否已切割/
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 | ## 数据库
83 |
84 | ### 表
85 |
86 | #### 工作区表
87 |
88 | workspace_tbl
89 |
90 | | 列名 | 类型 | 非null | 备注 |
91 | | ----------------------- | ------- | ------ | ------------ |
92 | | workspace_id | INTEGER | | id |
93 | | workspace_name | TEXT | | 工作区名 |
94 | | workspace_create_time | | | 创建时间 |
95 | | workspace_last_use_time | | | 上次使用时间 |
96 | | workspace_info | | | 工作区说明 |
97 |
98 | #### 数据集表
99 |
100 | dataset_tbl
101 |
102 | | 列名 | 类型 | 非null | 备注 |
103 | | --------------------- | ------- | ------ | ------------ |
104 | | dataset_id | INTEGER | | id |
105 | | dataset_name | TEXT | | 数据集名 |
106 | | dataset_create_time | | | 创建时间 |
107 | | dataset_last_use_time | | | 上次使用时间 |
108 | | dataset_info | | | 数据集说明 |
109 |
110 | #### 数据表
111 |
112 | info_tbl
113 |
114 | | 列名 | 类型 | 非null | 外键 | 备注 |
115 | | ------------------ | ------- | ------ | ---- | -------------------------- |
116 | | info_id | INTEGER | | | id |
117 | | dataset_id | INTEGER | | 外键 | 外键 |
118 | | info_text | | | | 音频段对应的文本 |
119 | | info_pinyin | | | | 文本的拼音 |
120 | | info_speaker | | | | 发音人 |
121 | | info_raw_file_path | | | | 原音频文件位置 |
122 | | info_start_time | | | | 音频段开始时间(毫秒 |
123 | | info_end_time | | | | 音频段结束时间(毫秒 |
124 | | info_acc_score | | | | 句子准确度得分 |
125 | | info_flu_score | | | | 句子流利度得分 |
126 | | info_int_score | | | | 句子完整度得分 |
127 | | info_all_score | | | | 总得分 |
128 | | info__file_path | | | | 文件被导出的位置 |
129 | | info_is_del | | | | 是否已删除 0未删除 1已删除 |
130 | | | | | | |
131 |
132 |
133 |
134 | ## 样例
135 |
136 | ```
137 | dump
138 | ├── dev
139 | │ ├── norm
140 | │ └── raw
141 | ├── phone_id_map.txt
142 | ├── speaker_id_map.txt
143 | ├── test
144 | │ ├── norm
145 | │ └── raw
146 | └── train
147 | ├── energy_stats.npy
148 | ├── norm
149 | ├── pitch_stats.npy
150 | ├── raw
151 | └── speech_stats.npy
152 | ```
153 |
154 |
155 |
156 | 以下是一个共享模块示例,该模块包含一个数据库连接对象:
157 |
158 | ```
159 | pythonCopy code# shared_module.py
160 | import sqlite3
161 |
162 | # Create a database connection object
163 | conn = sqlite3.connect("database.db")
164 |
165 | # Use the connection object
166 | def fetch_data(query):
167 | cursor = conn.cursor()
168 | cursor.execute(query)
169 | return cursor.fetchall()
170 | ```
171 |
172 | 以下是另一个模块,该模块导入了共享模块并使用了该模块中的数据库连接对象:
173 |
174 | ```
175 | pythonCopy code# another_module.py
176 | import shared_module
177 |
178 | # Use the shared database connection object
179 | data = shared_module.fetch_data("SELECT * FROM table")
180 | print(data)
181 | ```
182 |
183 | 在上面的代码中,`shared_module.py`模块定义了一个数据库连接对象,并定义了一个使用该连接对象的函数。`another_module.py`模块导入了`shared_module.py`模块,并使用了该模块中的数据库连接对象。由于对象是共享的,因此不需要在多个模块中创建多个数据库连接对象,这可以提高代码的可维护性。
--------------------------------------------------------------------------------
/main.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | """
3 | @Time : 2023/1/30/030 17:53
4 | @Author : 李子
5 | @Url : https://github.com/kslz
6 | """
7 | import utils.add_path
8 | import configparser
9 |
10 | from utils import global_obj
11 | from utils.tools import init_program
12 | import ui.guiclass
13 |
14 |
15 | def main():
16 | init_program()
17 | config = global_obj.get_value("config")
18 | config: configparser.ConfigParser
19 | ui.guiclass.main()
20 |
21 | pass
22 |
23 |
24 | if __name__ == '__main__':
25 | main()
26 |
--------------------------------------------------------------------------------
/requirements.txt:
--------------------------------------------------------------------------------
1 | peewee==3.15.4
2 | PySide6==6.4.2
3 | PySide6-Addons==6.4.2
4 | PySide6-Essentials==6.4.2
5 | shiboken6==6.4.2
6 | pysrt==1.1.2
7 | pydub==0.25.1
8 | pyaudio==0.2.13
9 | ffmpeg-python==0.2.0
10 | pypinyin==0.48.0
11 | requests==2.28.2
--------------------------------------------------------------------------------
/ui/guiclass.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | """
3 | @Time : 2023/1/30/030 18:08
4 | @Author : 李子
5 | @Url : https://github.com/kslz
6 | """
7 | from PySide6.QtWidgets import QApplication
8 |
9 | from ui.mygui import *
10 | from utils import global_obj
11 | from utils.log import creatlogger
12 |
13 |
14 | def main():
15 | global config
16 | config = global_obj.get_value("config")
17 | app = QApplication([])
18 | select_workspace_window = SelectWorkspaceWindow()
19 | select_dataset_window = SelectDatasetWindow()
20 |
21 | # 绑定【展示数据集选择页面】的信号和槽,并且提前查询数据库,将数据库信息填入表格中
22 | select_workspace_window.show_select_dataset_window.connect(select_dataset_window.add_dataset_data)
23 | select_workspace_window.show_select_dataset_window.connect(select_dataset_window.show)
24 |
25 | # 绑定添加数据集按钮信号和对应的槽
26 | select_dataset_window.ui.pushButton.clicked.connect(select_dataset_window.open_add_dataset_window)
27 |
28 |
29 |
30 |
31 |
32 | select_workspace_window.show()
33 | guilogger.debug("进入工作区选择窗口")
34 |
35 |
36 |
37 |
38 |
39 | app.exec()
40 |
41 |
42 | if __name__ == "__main__":
43 | main()
44 |
--------------------------------------------------------------------------------
/ui/mygui.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | """
3 | @Time : 2023/2/13/013 13:35
4 | @Author : 李子
5 | @Url : https://github.com/kslz
6 | """
7 |
8 | import peewee
9 | from PySide6 import QtGui
10 | from PySide6.QtWidgets import QMainWindow, QWidget, QTableWidgetItem, QHBoxLayout
11 |
12 | from ui.mydialog import *
13 | from ui.mywidget import *
14 | from ui.pyuic.ui_add_dataset import Ui_Dialog
15 | from ui.pyuic.ui_select_dataset import Ui_MainWindow
16 | from ui.pyuic.ui_select_workspace import Ui_Form
17 | from ui.pyuic.ui_dataset_view import Ui_DatasetMainWindow
18 | from utils.tools import *
19 |
20 | global config
21 |
22 |
23 | def getconfig():
24 | global config
25 | config = global_obj.get_value("config")
26 |
27 |
28 | class DatasetWindow(QMainWindow):
29 | reopen = Signal()
30 |
31 | # refresh_authorization_table = Signal(object)
32 |
33 | def __init__(self, dataset_id):
34 | super().__init__()
35 | # 使用ui文件导入定义界面类
36 | self.ui = Ui_DatasetMainWindow()
37 | # 初始化界面
38 | self.ui.setupUi(self)
39 | self.set_table_style()
40 | self.dataset_id = dataset_id
41 | self.page_number = 1
42 | self.page_size = 15
43 | self.refresh_table()
44 | self.refresh_authorization_table()
45 | # self.ui.tabWidget.setTabVisible(1, False)
46 | # self.ui.tabWidget.setTabVisible(2, False)
47 |
48 | # 连接信号
49 | self.ui.comboBox.currentIndexChanged.connect(self.change_page_number)
50 | self.ui.pushButton_add_wav_srt.clicked.connect(self.add_from_file_wav_srt)
51 | self.ui.pushButton_add_long_wav.clicked.connect(self.add_from_file_long_wav)
52 | self.ui.pushButton_add_biaobei.clicked.connect(lambda: self.open_add_authorization_dialog(DbStr.BiaoBei))
53 | self.ui.pushButton_add_xunfei.clicked.connect(lambda: self.open_add_authorization_dialog(DbStr.XunFei))
54 | self.ui.pushButton_output_speaker.clicked.connect(self.open_output_speaker_dialog)
55 | self.ui.pushButton_biaobei_pingce.clicked.connect(self.open_biaobei_pingce)
56 | self.ui.pushButton_del_by_raw_wav.clicked.connect(self.open_del_info_by_wav_dialog)
57 |
58 | def set_table_style(self):
59 |
60 | # 数据集表格
61 | self.ui.tableWidget.setColumnWidth(0, 100)
62 | self.ui.tableWidget.setColumnWidth(1, 500)
63 | self.ui.tableWidget.setColumnWidth(2, 125)
64 | self.ui.tableWidget.setColumnWidth(3, 130)
65 | self.ui.tableWidget.setColumnWidth(4, 270)
66 | self.ui.tableWidget.verticalHeader().setDefaultSectionSize(26) # 设置行高24
67 | header = self.ui.tableWidget.horizontalHeader()
68 | header.setDefaultAlignment(QtCore.Qt.AlignLeft) # 设置表头左对齐
69 | # 创建一个字体对象,并设置字号为12
70 | font = QtGui.QFont()
71 | font.setPointSize(12)
72 | font.setBold(True)
73 | # 将字体对象设置为表头的字体
74 | header.setFont(font)
75 |
76 | # 授权管理页两个表格
77 | self.ui.tableWidget_biaobei.setColumnWidth(0, 50)
78 | self.ui.tableWidget_biaobei.setColumnWidth(1, 150)
79 | self.ui.tableWidget_biaobei.setColumnWidth(2, 150)
80 | self.ui.tableWidget_biaobei.setColumnWidth(3, 200)
81 | self.ui.tableWidget_biaobei.setColumnWidth(4, 200)
82 | self.ui.tableWidget_biaobei.setColumnWidth(5, 200)
83 |
84 | self.ui.tableWidget_xunfei.setColumnWidth(0, 50)
85 | self.ui.tableWidget_xunfei.setColumnWidth(1, 150)
86 | self.ui.tableWidget_xunfei.setColumnWidth(2, 150)
87 | self.ui.tableWidget_xunfei.setColumnWidth(3, 200)
88 | self.ui.tableWidget_xunfei.setColumnWidth(4, 200)
89 | self.ui.tableWidget_xunfei.setColumnWidth(5, 200)
90 |
91 | def open_add_authorization_dialog(self, company):
92 | add_authorization_dialog = AddAuthentication(self, company)
93 | add_authorization_dialog.exec_()
94 | self.refresh_authorization_table()
95 |
96 | def open_output_speaker_dialog(self):
97 | output_speaker_dialog = OutPutSpeaker(self, self.dataset_id)
98 | output_speaker_dialog.exec_()
99 |
100 | def open_del_info_by_wav_dialog(self):
101 | del_info_by_wav = DelInfoByWav(self, self.dataset_id)
102 | del_info_by_wav.exec_()
103 |
104 | def refresh_authorization_table(self):
105 | self.ui.tableWidget_biaobei.setRowCount(0)
106 | biaobei_list = get_authorizationinfo(DbStr.BiaoBei)
107 | for line in biaobei_list:
108 | row = self.ui.tableWidget_biaobei.rowCount()
109 | self.ui.tableWidget_biaobei.insertRow(row)
110 | self.ui.tableWidget_biaobei.setItem(row, 0, QTableWidgetItem(str(line.authorizationinfo_id)))
111 | self.ui.tableWidget_biaobei.setItem(row, 1, QTableWidgetItem(line.authorizationinfo_name))
112 | self.ui.tableWidget_biaobei.setItem(row, 2, QTableWidgetItem(line.authorizationinfo_app))
113 | self.ui.tableWidget_biaobei.setItem(row, 3, QTableWidgetItem(line.authorizationinfo_APPID))
114 | self.ui.tableWidget_biaobei.setItem(row, 4, QTableWidgetItem(line.authorizationinfo_APISecret))
115 | self.ui.tableWidget_biaobei.setItem(row, 5, QTableWidgetItem(line.authorizationinfo_APIKey))
116 |
117 | self.ui.tableWidget_xunfei.setRowCount(0)
118 | xunfei_list = get_authorizationinfo(DbStr.XunFei)
119 | for line in xunfei_list:
120 | row = self.ui.tableWidget_xunfei.rowCount()
121 | self.ui.tableWidget_xunfei.insertRow(row)
122 | self.ui.tableWidget_xunfei.setItem(row, 0, QTableWidgetItem(line.authorizationinfo_id))
123 | self.ui.tableWidget_xunfei.setItem(row, 1, QTableWidgetItem(line.authorizationinfo_name))
124 | self.ui.tableWidget_xunfei.setItem(row, 2, QTableWidgetItem(line.authorizationinfo_app))
125 | self.ui.tableWidget_xunfei.setItem(row, 3, QTableWidgetItem(line.authorizationinfo_APPID))
126 | self.ui.tableWidget_xunfei.setItem(row, 4, QTableWidgetItem(line.authorizationinfo_APISecret))
127 | self.ui.tableWidget_xunfei.setItem(row, 5, QTableWidgetItem(line.authorizationinfo_APIKey))
128 |
129 | def change_page_number(self, index):
130 | new_page_num = self.ui.comboBox.itemData(index)
131 | self.refresh_table(new_page_num)
132 | self.page_number = new_page_num
133 |
134 | def refresh_table(self, page_number=0):
135 | # QcomboBox在被清空的时候也会发出currentIndexChanged信号,找这个问题花了一个小时
136 | # 警钟敲烂
137 | self.ui.comboBox.blockSignals(True)
138 | page_size = self.page_size
139 | if page_number == 0:
140 | page_number = self.page_number
141 | self.ui.tableWidget.setRowCount(0)
142 | self.ui.comboBox.clear()
143 | total_count, results = get_dataset_window_info(self.dataset_id, page_size, page_number)
144 | pagecount = 1
145 | while total_count > 0:
146 | start = page_size * (pagecount - 1) + 1
147 | if total_count >= page_size:
148 | end = start + page_size - 1
149 | else:
150 | end = start + total_count - 1
151 | self.ui.comboBox.addItem(f"第 {str(pagecount)} 页 {str(start)} ~ {str(end)}", pagecount)
152 | total_count -= page_size
153 | pagecount += 1
154 |
155 | self.btn_dict = {}
156 | for i, result in enumerate(results, start=1):
157 | index = i + (page_number - 1) * page_size
158 | info_id = result['info_id']
159 | info_text = result['info_text']
160 | info_start_time = result['info_start_time']
161 | info_end_time = result['info_end_time']
162 | info_file_path = result['info_raw_file_path']
163 | info_is_del = result['info_is_del']
164 | if result['info_shibie_speaker'] != None:
165 | speaker = result['info_shibie_speaker']
166 | else:
167 | speaker = result['info_speaker']
168 | # is_separate_file = result['is_separate_file']
169 | row = self.ui.tableWidget.rowCount()
170 | self.ui.tableWidget.insertRow(row)
171 | self.ui.tableWidget.setItem(row, 0, QTableWidgetItem(str(index)))
172 | self.ui.tableWidget.setItem(row, 1, QTableWidgetItem(info_text))
173 | self.ui.tableWidget.setItem(row, 2, QTableWidgetItem(speaker))
174 | # if is_separate_file == 0:
175 | # is_separate_file = "否"
176 | # if is_separate_file == 1:
177 | # is_separate_file = "是"
178 | # self.ui.tableWidget.setItem(row, 3, QTableWidgetItem(is_separate_file))
179 | # self.ui.tableWidget.setItem(row, 5, QTableWidgetItem(str(info_id) + "一些操作"))
180 |
181 | # btn_shiting = PlaySoundBTN('试听', info_id, self)
182 | btn_shiting = AudioButton(info_file_path, info_start_time, info_end_time, self)
183 | btn_shiting.setMinimumWidth(50)
184 | btn_fastoutput = FastOutputSoundBTN('快速导出', info_id, self)
185 | btn_fastoutput.setMinimumWidth(80)
186 | btn_bianji = BianJiBTN('编辑', info_id)
187 | btn_bianji.setMinimumWidth(50)
188 | btn_bianji.on_clicked.connect(self.edit_info)
189 | btn_shanchu = DeleteBTN('删除', info_id, self, info_is_del)
190 | btn_shanchu.setMinimumWidth(70)
191 | self.btn_dict[f"{row}_shiting"] = btn_shiting
192 | self.btn_dict[f"{row}_fastoutput"] = btn_fastoutput
193 | self.btn_dict[f"{row}_bianji"] = btn_bianji
194 | self.btn_dict[f"{row}_shanchu"] = btn_shanchu
195 | layout = QHBoxLayout()
196 | layout.addWidget(self.btn_dict[f"{row}_shiting"])
197 | layout.addWidget(self.btn_dict[f"{row}_fastoutput"])
198 | layout.addWidget(self.btn_dict[f"{row}_bianji"])
199 | layout.addWidget(self.btn_dict[f"{row}_shanchu"])
200 | self.btn_dict = {}
201 | layout.setContentsMargins(0, 0, 0, 0)
202 | layout.setSpacing(1)
203 | caozuo_widget = QWidget()
204 | caozuo_widget.setLayout(layout)
205 | self.ui.tableWidget.setCellWidget(row, 4, caozuo_widget)
206 |
207 | self.ui.comboBox.setCurrentIndex(page_number - 1)
208 | self.ui.comboBox.blockSignals(False)
209 |
210 | def open_biaobei_pingce(self):
211 | biaobei_pingce = BiaobeiPingce(self, self.dataset_id)
212 | biaobei_pingce.exec_()
213 |
214 | def closeEvent(self, event):
215 | self.reopen.emit()
216 | super().closeEvent(event)
217 |
218 | def add_from_file_wav_srt(self):
219 | add_wav_srt_window = SelectWavSrtFile(self, self.dataset_id)
220 | add_wav_srt_window.exec_()
221 |
222 | def add_from_file_long_wav(self):
223 | add_long_wav_window = SelectLongWavFile(self, self.dataset_id)
224 | add_long_wav_window.exec_()
225 |
226 | def edit_info(self, info_id):
227 | edit_info_window = EditInfo(self,info_id)
228 | edit_info_window.windowClosed.connect(self.refresh_table)
229 | edit_info_window.exec_()
230 | pass
231 |
232 |
233 | class AddDatasetWindow(QDialog):
234 | refresh_table = Signal()
235 |
236 | def __init__(self, parent, useby="add", dataset_id=None):
237 | super().__init__(parent)
238 | # 使用ui文件导入定义界面类
239 | self.ui = Ui_Dialog()
240 | # 初始化界面
241 | self.ui.setupUi(self)
242 | self.ui.buttonBox.rejected.connect(self.goback)
243 | self.useby = useby
244 | self.dataset_id = dataset_id
245 | if useby != "add":
246 | self.setWindowTitle("编辑数据集")
247 | self.ui.buttonBox.accepted.connect(self.edit_dataset)
248 | dataset = Dataset.get_by_id(self.dataset_id)
249 | self.ui.lineEdit.setText(dataset.dataset_name)
250 | self.ui.textEdit.setText(dataset.dataset_info)
251 | self.dataset_oldname = dataset.dataset_name
252 | else:
253 | self.ui.buttonBox.accepted.connect(self.add_dataset)
254 |
255 | def edit_dataset(self):
256 | dataset_name = self.ui.lineEdit.text()
257 | dataset_info = self.ui.textEdit.toPlainText()
258 | if dataset_name == "":
259 | guilogger.error("修改失败,数据集名称为空")
260 | self.show_error("修改失败,数据集名称为空")
261 | return
262 | try:
263 | dataset = Dataset.update(dataset_name=dataset_name, dataset_info=dataset_info).where(
264 | Dataset.dataset_id == self.dataset_id).execute()
265 | except peewee.IntegrityError as e:
266 | if "UNIQUE constraint failed" in str(e):
267 | guilogger.error("修改失败,数据集名称重复")
268 | self.show_error("修改失败,数据集名称重复")
269 | else:
270 | guilogger.error(e)
271 | else:
272 | guilogger.info(f"数据集 {dataset_name} 成功修改")
273 | self.refresh_table.emit()
274 | self.close()
275 |
276 | pass
277 |
278 | def add_dataset(self):
279 | dataset_name = self.ui.lineEdit.text()
280 | datset_info = self.ui.textEdit.toPlainText()
281 | # print(datset_info)
282 | if dataset_name == "":
283 | guilogger.error("添加失败,数据集名称为空")
284 | self.show_error("添加失败,数据集名称为空")
285 | return
286 |
287 | try:
288 | dataset = Dataset(dataset_name=dataset_name, dataset_info=datset_info)
289 | dataset.save()
290 | except peewee.IntegrityError as e:
291 | if "UNIQUE constraint failed" in str(e):
292 | guilogger.error("添加失败,数据集名称重复")
293 | self.show_error("添加失败,数据集名称重复")
294 | else:
295 | guilogger.error(e)
296 | else:
297 | guilogger.info(f"数据集 {dataset_name} 添加成功")
298 | self.refresh_table.emit()
299 | self.close()
300 |
301 | def show_error(self, text):
302 | self.ui.label_3.setText(text)
303 |
304 | def goback(self):
305 | self.close()
306 |
307 |
308 | class SelectDatasetWindow(QMainWindow):
309 | def __init__(self):
310 | super().__init__()
311 | # 使用ui文件导入定义界面类
312 | self.ui = Ui_MainWindow()
313 | # 初始化界面
314 | self.ui.setupUi(self)
315 | self.ui.tableWidget.setColumnWidth(0, 100)
316 | self.ui.tableWidget.setColumnWidth(1, 130)
317 | self.ui.tableWidget.setColumnWidth(2, 130)
318 | self.ui.tableWidget.setColumnWidth(3, 200)
319 | self.ui.tableWidget.setColumnWidth(4, 120)
320 | # self.ui.tableWidget.verticalHeader().setVisible(True)
321 |
322 | def add_dataset_data(self):
323 | """
324 | 刷新表格数据,从数据库中取出数据集信息填入表格
325 |
326 | :return:
327 | """
328 | # dataset1 = Dataset.create(dataset_name="test1")
329 | # dataset2 = Dataset.create(dataset_name="test2")
330 | self.ui.tableWidget.setRowCount(0)
331 | datasets = Dataset.select()
332 | for dataset in datasets:
333 | self.addData(dataset.dataset_id,
334 | dataset.dataset_name,
335 | dataset.dataset_create_time,
336 | dataset.dataset_last_use_time,
337 | dataset.dataset_info)
338 |
339 | def addData(self, dataset_id=None, dataset_name=None, dataset_createtime=None, dataset_lastusetime=None,
340 | dataset_info=None):
341 | row = self.ui.tableWidget.rowCount()
342 | self.ui.tableWidget.insertRow(row)
343 | self.ui.tableWidget.setItem(row, 0, QTableWidgetItem(str(dataset_name)))
344 | self.ui.tableWidget.setItem(row, 1, QTableWidgetItem(str(dataset_createtime)))
345 | self.ui.tableWidget.setItem(row, 2, QTableWidgetItem(str(dataset_lastusetime)))
346 | # self.ui.tableWidget.setItem(row, 3, QTableWidgetItem(str(dataset_info)))
347 | info_cell = QTableWidgetItem()
348 | info_cell.setText(dataset_info)
349 | info_cell.setToolTip(f"
{huanhang(dataset_info)}
")
350 | self.ui.tableWidget.setItem(row, 3, info_cell)
351 |
352 | btn_jr = QPushButton('进入', self)
353 | btn_jr.clicked.connect(lambda: self.openDatasetWindow(dataset_id))
354 | btn_bj = QPushButton('编辑', self)
355 | btn_bj.clicked.connect(lambda: self.edit_dataset(dataset_id))
356 | btn_sc = QPushButton('删除', self)
357 | btn_sc.clicked.connect(lambda: self.del_dataset(dataset_id, dataset_name))
358 | layout = QHBoxLayout()
359 | layout.addWidget(btn_jr)
360 | layout.addWidget(btn_bj)
361 | layout.addWidget(btn_sc)
362 | layout.setContentsMargins(1, 1, 1, 1)
363 | layout.setSpacing(1)
364 | caozuo_widget = QWidget()
365 | caozuo_widget.setLayout(layout)
366 | self.ui.tableWidget.setCellWidget(row, 4, caozuo_widget)
367 |
368 | def open_add_dataset_window(self, useby="add"):
369 | self.add_window = AddDatasetWindow(self)
370 | self.add_window.refresh_table.connect(self.add_dataset_data)
371 | # self.add_window.setModal(True)
372 | # self.add_window.show()
373 | self.add_window.exec_()
374 |
375 | def openDatasetWindow(self, dataset_id):
376 | self.hide()
377 | self.update_dataset_dataset_last_use_time(dataset_id)
378 | self.add_dataset_data()
379 | self.dataset_window = DatasetWindow(dataset_id)
380 | self.dataset_window.show()
381 | self.dataset_window.reopen.connect(self.show)
382 |
383 | pass
384 |
385 | def edit_dataset(self, dataset_id):
386 | self.edit_window = AddDatasetWindow(self, useby="edit", dataset_id=dataset_id)
387 | self.edit_window.refresh_table.connect(self.add_dataset_data)
388 | # self.add_window.setModal(True)
389 | # self.add_window.show()
390 | self.edit_window.exec_()
391 |
392 | def update_dataset_dataset_last_use_time(self, dataset_id):
393 | Dataset.update(dataset_last_use_time=datetime.now().replace(microsecond=0)).where(
394 | Dataset.dataset_id == dataset_id).execute()
395 | # User.update(age=20).where(User.username=="charlie").execute()
396 |
397 | def del_dataset(self, dataset_id, dataset_name):
398 | """
399 | 考虑做伪删除,但是感觉没必要
400 |
401 | """
402 | msg_box = QMessageBox() # 后悔药(不
403 | msg_box.setWindowTitle("提示")
404 | msg_box.setText(f"确认删除数据集 {dataset_name} 吗?\n{dataset_name} 将会永久失去!(真的很久!)")
405 | msg_box.setIcon(QMessageBox.Question)
406 |
407 | # 添加按钮
408 | yes_button = msg_box.addButton("确定", QMessageBox.AcceptRole)
409 | no_button = msg_box.addButton("取消", QMessageBox.RejectRole)
410 |
411 | # 显示消息框,等待用户响应
412 | msg_box.exec()
413 |
414 | # 获取用户的响应
415 | button_clicked = msg_box.clickedButton()
416 | if button_clicked == yes_button:
417 | try:
418 | # dataset = Dataset.delete().where(Dataset.dataset_id == dataset_id)
419 | # self.add_dataset_data()
420 | dataset = Dataset.get(Dataset.dataset_id == dataset_id)
421 | name = dataset.dataset_name
422 | dataset.delete_instance()
423 | del_file_by_dataset_id(dataset_id)
424 |
425 | except Exception as e:
426 | guilogger.error(f"删除数据集 id={dataset_id} 失败")
427 | guilogger.error(e)
428 | else:
429 | guilogger.info(f"数据集 {name} 成功删除")
430 | finally:
431 | self.add_dataset_data()
432 |
433 | else:
434 | pass
435 |
436 |
437 | class SelectWorkspaceWindow(QWidget):
438 | show_select_dataset_window = Signal()
439 |
440 | def __init__(self):
441 | super().__init__()
442 | # 使用ui文件导入定义界面类
443 | self.ui = Ui_Form()
444 | # 初始化界面
445 | self.ui.setupUi(self)
446 | getconfig()
447 | self.input_default_workspace()
448 |
449 | def input_default_workspace(self):
450 | default_workspace = config["program_configs"]["default_workspace"]
451 | # default_workspace = os.path.abspath(default_workspace)
452 | self.ui.lineEdit.setText(default_workspace)
453 |
454 | def close_program(self):
455 | self.close()
456 |
457 | def get_workspace(self):
458 | workspace_path = self.ui.lineEdit.text()
459 | global_obj.set_value("workspace_path", workspace_path)
460 | inti_workspace(workspace_path)
461 | config["program_configs"]["default_workspace"] = workspace_path
462 | update_ini_config(config)
463 | self.show_select_dataset_window.emit()
464 | self.close()
465 |
466 | # if os.path.exists(workspace_path):
467 | # print("路径存在")
468 | # else:
469 | # print("路径不存在")
470 |
471 | pass
472 |
--------------------------------------------------------------------------------
/ui/mywidget.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | """
3 | @Time : 2023/4/10/010 11:10
4 | @Author : 李子
5 | @Url : https://github.com/kslz
6 | """
7 | from PySide6 import QtCore
8 | from PySide6.QtCore import Signal, QThread
9 | from PySide6.QtWidgets import QPushButton
10 |
11 | from utils.tools import *
12 |
13 |
14 | class FastOutputSoundBTN(QPushButton):
15 | def __init__(self, text, info_id, parent):
16 | super().__init__(text, parent)
17 | self.info_id = info_id
18 | self.clicked.connect(self.fast_output_sound)
19 | # self.setText("快速导出")
20 | # info = Info.get_by_id(self.info_id)
21 | # wav_path = info.info_raw_file_path
22 | # start_time = info.info_start_time
23 | # end_time = info.info_end_time
24 |
25 | def fast_output_sound(self):
26 | info = Info.get_by_id(self.info_id)
27 | wav_path = info.info_raw_file_path
28 | start_time = info.info_start_time
29 | end_time = info.info_end_time
30 | output_name = str(self.info_id) + ".wav"
31 | fast_output_sound(wav_path, start_time, end_time, output_name)
32 |
33 | class DeleteBTN(QPushButton):
34 | def __init__(self, text, info_id, parent, info_is_del):
35 | super().__init__(text, parent)
36 | self.info_id = info_id
37 | self.info_is_del = info_is_del
38 | if self.info_is_del == False:
39 | self.setText("删除")
40 | else:
41 | self.setText("恢复")
42 |
43 | self.clicked.connect(self.change_is_del_sound)
44 |
45 | def change_is_del_sound(self):
46 | # 肯定是伪删除
47 | new_is_del = True if self.info_is_del == False else False
48 | Info.update(info_is_del=new_is_del).where(Info.info_id == self.info_id).execute()
49 | self.info_is_del = new_is_del
50 | if self.info_is_del == False:
51 | self.setText("删除")
52 | else:
53 | self.setText("恢复")
54 |
55 |
56 |
57 | class PlaySoundBTN(QPushButton):
58 | class PlaySoundThread(QtCore.QThread):
59 | update_signal = Signal(str, bool)
60 |
61 | # stop_thread_signal = Signal()
62 |
63 | def __init__(self, wav_path, start_time, end_time):
64 | super().__init__()
65 | # self.stop_flag = False
66 | # self.stop_thread_signal.connect(self.stop_thread)
67 | self.wav_path = wav_path
68 | self.start_time = start_time
69 | self.end_time = end_time
70 |
71 | def run(self):
72 | self.update_signal.emit("播放中", False)
73 | play_by_ffmpeg(self.wav_path, self.start_time, self.end_time)
74 | self.update_signal.emit("试听", True)
75 |
76 | # def stop_thread(self):
77 | # self.stop_flag = True
78 | # print("收到停止信号")
79 | # self.wait()
80 |
81 | def __init__(self, text, info_id, parent):
82 | super().__init__(text, parent)
83 | self.info_id = info_id
84 | self.clicked.connect(self.play_or_stop_sound)
85 | info = Info.get_by_id(self.info_id)
86 | wav_path = info.info_raw_file_path
87 | start_time = info.info_start_time
88 | end_time = info.info_end_time
89 | # self.thread1 = QThread(self) # 创建一个线程 不行 没用明白,先这样吧
90 | self.play_thread = self.PlaySoundThread(wav_path, start_time, end_time) # 实例化线程类
91 | # self.play_thread.moveToThread(self.thread1) # 将类移动到线程中运行
92 | # self.thread1.started.connect(self.play_thread.run)
93 | self.play_thread.update_signal.connect(lambda text, is_enabled: self.set_text(text, is_enabled))
94 |
95 | def play_or_stop_sound(self):
96 | # 多线程避免阻塞界面
97 | if self.text() == "试听":
98 | self.play_thread.start()
99 | else:
100 | # 终止播放失败
101 | # self.play_thread.stop_thread_signal.emit()
102 | # self.play_thread.exit()
103 | # self.set_text("试听", True)
104 | pass
105 |
106 | def set_text(self, text, is_enabled):
107 | self.setText(text)
108 | # self.setEnabled(is_enabled)
109 |
110 |
111 | class BianJiBTN(QPushButton):
112 | on_clicked = Signal(int)
113 |
114 | def __init__(self, text, info_id):
115 | super().__init__(text=text)
116 | self.info_id = info_id
117 | self.clicked.connect(self.button_clicked)
118 |
119 | def button_clicked(self):
120 | self.on_clicked.emit(self.info_id)
121 |
122 |
123 | class AudioButton(QPushButton):
124 | def __init__(self, wav_path, start_time, end_time, parent=None):
125 | super().__init__(parent)
126 | self.setText("试听")
127 | self.audio_thread = None
128 | self.wav_path = wav_path
129 | self.start_time = start_time
130 | self.end_time = end_time
131 |
132 | # 连接按钮点击事件的槽函数
133 | self.clicked.connect(self.on_button_clicked)
134 |
135 | def on_button_clicked(self):
136 | if self.audio_thread is not None and self.audio_thread.is_playing:
137 | # 如果音频正在播放,停止播放
138 | # print("停止播放")
139 | self.audio_thread.stop()
140 | self.audio_thread.wait()
141 | self.audio_thread = None
142 | self.setText("试听")
143 | else:
144 | # 如果音频没有在播放,开始播放
145 | self.audio_thread = AudioThread(self.wav_path, self.start_time, self.end_time)
146 | self.audio_thread.finished.connect(self.on_audio_finished)
147 | self.audio_thread.start()
148 | self.setText("停止")
149 |
150 | def on_audio_finished(self):
151 | self.audio_thread = None
152 | self.setText("试听")
153 |
154 |
155 | # 自定义的音频播放线程
156 | class AudioThread(QThread):
157 | finished = Signal() # 定义一个信号,用于通知播放完成
158 |
159 | def __init__(self, wav_path, start_time, end_time, parent=None):
160 | super().__init__(parent)
161 | self.is_playing = False
162 | self.wav_path = wav_path
163 | self.start_time = start_time
164 | self.end_time = end_time
165 |
166 | def run(self):
167 | self.is_playing = True
168 |
169 | # play_by_ffmpeg(self.wav_path, self.start_time, self.end_time)
170 | # 如果用函数形式调用,执行self.audio_thread.terminate()的时候声音就会卡几秒才停,直接写代码就可以秒停,原因未知
171 | wav_path = self.wav_path
172 | start_time = self.start_time
173 | end_time = self.end_time
174 |
175 | duration = (end_time - start_time) / 1000
176 | start_time = start_time / 1000
177 |
178 | # 从长音频文件中提取指定时间段的音频
179 | output = (
180 | ffmpeg
181 | .input(wav_path, ss=start_time, t=duration)
182 | # .filter("loudnorm", I="-23", dual_mono="true") # 归一化
183 | .output('pipe:', format='wav', ar=44100)
184 | .run(capture_stdout=True)
185 | )
186 |
187 | # 播放输出的音频
188 | self.process = subprocess.Popen(['ffplay', "-nodisp", "-autoexit", '-'], stdin=subprocess.PIPE)
189 | self.process.communicate(output[0])
190 |
191 | self.is_playing = False
192 | self.finished.emit() # 发送播放完成的信号
193 |
194 | def stop(self):
195 | if self.process and self.process.poll() is None: # 检查子进程是否在运行
196 | self.process.terminate() # 终止子进程
197 |
198 |
199 | class AudioNowButton(AudioButton):
200 | def __init__(self, wav_path, start_time, end_time, parent=None):
201 | super().__init__(wav_path, start_time, end_time, parent)
202 | self.clicked.disconnect(super().on_button_clicked)
203 |
204 | def on_button_clicked_new(self, start_time, end_time):
205 | self.start_time = int(start_time)
206 | self.end_time = int(end_time)
207 |
208 | self.on_button_clicked()
209 |
--------------------------------------------------------------------------------
/ui/pyuic/ui_add_authorizationinfo.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | ################################################################################
4 | ## Form generated from reading UI file 'add_authorizationinfo.ui'
5 | ##
6 | ## Created by: Qt User Interface Compiler version 6.4.2
7 | ##
8 | ## WARNING! All changes made in this file will be lost when recompiling UI file!
9 | ################################################################################
10 |
11 | from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale,
12 | QMetaObject, QObject, QPoint, QRect,
13 | QSize, QTime, QUrl, Qt)
14 | from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,
15 | QFont, QFontDatabase, QGradient, QIcon,
16 | QImage, QKeySequence, QLinearGradient, QPainter,
17 | QPalette, QPixmap, QRadialGradient, QTransform)
18 | from PySide6.QtWidgets import (QApplication, QComboBox, QDialog, QLabel,
19 | QLineEdit, QPushButton, QSizePolicy, QWidget)
20 |
21 | class Ui_AddAuthenticationDialog(object):
22 | def setupUi(self, AddAuthenticationDialog):
23 | if not AddAuthenticationDialog.objectName():
24 | AddAuthenticationDialog.setObjectName(u"AddAuthenticationDialog")
25 | AddAuthenticationDialog.resize(400, 500)
26 | font = QFont()
27 | font.setPointSize(12)
28 | AddAuthenticationDialog.setFont(font)
29 | self.label = QLabel(AddAuthenticationDialog)
30 | self.label.setObjectName(u"label")
31 | self.label.setGeometry(QRect(20, 20, 181, 21))
32 | self.lineEdit_name = QLineEdit(AddAuthenticationDialog)
33 | self.lineEdit_name.setObjectName(u"lineEdit_name")
34 | self.lineEdit_name.setGeometry(QRect(20, 50, 351, 21))
35 | self.label_2 = QLabel(AddAuthenticationDialog)
36 | self.label_2.setObjectName(u"label_2")
37 | self.label_2.setGeometry(QRect(20, 90, 191, 21))
38 | self.label_3 = QLabel(AddAuthenticationDialog)
39 | self.label_3.setObjectName(u"label_3")
40 | self.label_3.setGeometry(QRect(20, 160, 201, 21))
41 | self.label_4 = QLabel(AddAuthenticationDialog)
42 | self.label_4.setObjectName(u"label_4")
43 | self.label_4.setGeometry(QRect(20, 230, 141, 21))
44 | self.lineEdit_appid = QLineEdit(AddAuthenticationDialog)
45 | self.lineEdit_appid.setObjectName(u"lineEdit_appid")
46 | self.lineEdit_appid.setGeometry(QRect(20, 120, 351, 21))
47 | self.lineEdit_apisecret = QLineEdit(AddAuthenticationDialog)
48 | self.lineEdit_apisecret.setObjectName(u"lineEdit_apisecret")
49 | self.lineEdit_apisecret.setGeometry(QRect(20, 190, 351, 21))
50 | self.lineEdit_apikey = QLineEdit(AddAuthenticationDialog)
51 | self.lineEdit_apikey.setObjectName(u"lineEdit_apikey")
52 | self.lineEdit_apikey.setGeometry(QRect(20, 260, 351, 21))
53 | self.label_error = QLabel(AddAuthenticationDialog)
54 | self.label_error.setObjectName(u"label_error")
55 | self.label_error.setGeometry(QRect(20, 390, 351, 21))
56 | self.label_error.setStyleSheet(u"color: red;")
57 | self.pushButton_close = QPushButton(AddAuthenticationDialog)
58 | self.pushButton_close.setObjectName(u"pushButton_close")
59 | self.pushButton_close.setGeometry(QRect(264, 440, 111, 24))
60 | self.pushButton_commit = QPushButton(AddAuthenticationDialog)
61 | self.pushButton_commit.setObjectName(u"pushButton_commit")
62 | self.pushButton_commit.setGeometry(QRect(130, 440, 111, 24))
63 | self.comboBox_app = QComboBox(AddAuthenticationDialog)
64 | self.comboBox_app.setObjectName(u"comboBox_app")
65 | self.comboBox_app.setGeometry(QRect(20, 330, 111, 22))
66 | self.label_5 = QLabel(AddAuthenticationDialog)
67 | self.label_5.setObjectName(u"label_5")
68 | self.label_5.setGeometry(QRect(20, 300, 141, 21))
69 |
70 | self.retranslateUi(AddAuthenticationDialog)
71 |
72 | QMetaObject.connectSlotsByName(AddAuthenticationDialog)
73 | # setupUi
74 |
75 | def retranslateUi(self, AddAuthenticationDialog):
76 | AddAuthenticationDialog.setWindowTitle(QCoreApplication.translate("AddAuthenticationDialog", u"\u6dfb\u52a0\u6388\u6743\u4fe1\u606f", None))
77 | self.label.setText(QCoreApplication.translate("AddAuthenticationDialog", u"\u540d\u79f0", None))
78 | self.label_2.setText(QCoreApplication.translate("AddAuthenticationDialog", u"APPID", None))
79 | self.label_3.setText(QCoreApplication.translate("AddAuthenticationDialog", u"APISecret\uff08client_secret\uff09", None))
80 | self.label_4.setText(QCoreApplication.translate("AddAuthenticationDialog", u"APIKey\uff08client_id\uff09", None))
81 | self.label_error.setText("")
82 | self.pushButton_close.setText(QCoreApplication.translate("AddAuthenticationDialog", u"\u53d6\u6d88", None))
83 | self.pushButton_commit.setText(QCoreApplication.translate("AddAuthenticationDialog", u"\u63d0\u4ea4", None))
84 | self.label_5.setText(QCoreApplication.translate("AddAuthenticationDialog", u"\u5e94\u7528\u7c7b\u578b", None))
85 | # retranslateUi
86 |
87 |
--------------------------------------------------------------------------------
/ui/pyuic/ui_add_dataset.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | ################################################################################
4 | ## Form generated from reading UI file 'add_dataset.ui'
5 | ##
6 | ## Created by: Qt User Interface Compiler version 6.4.2
7 | ##
8 | ## WARNING! All changes made in this file will be lost when recompiling UI file!
9 | ################################################################################
10 |
11 | from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale,
12 | QMetaObject, QObject, QPoint, QRect,
13 | QSize, QTime, QUrl, Qt)
14 | from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,
15 | QFont, QFontDatabase, QGradient, QIcon,
16 | QImage, QKeySequence, QLinearGradient, QPainter,
17 | QPalette, QPixmap, QRadialGradient, QTransform)
18 | from PySide6.QtWidgets import (QAbstractButton, QApplication, QDialog, QDialogButtonBox,
19 | QLabel, QLineEdit, QSizePolicy, QTextEdit,
20 | QWidget)
21 |
22 | class Ui_Dialog(object):
23 | def setupUi(self, Dialog):
24 | if not Dialog.objectName():
25 | Dialog.setObjectName(u"Dialog")
26 | Dialog.resize(400, 300)
27 | Dialog.setMinimumSize(QSize(400, 300))
28 | Dialog.setMaximumSize(QSize(400, 300))
29 | self.buttonBox = QDialogButtonBox(Dialog)
30 | self.buttonBox.setObjectName(u"buttonBox")
31 | self.buttonBox.setGeometry(QRect(30, 240, 341, 51))
32 | self.buttonBox.setOrientation(Qt.Horizontal)
33 | self.buttonBox.setStandardButtons(QDialogButtonBox.Cancel|QDialogButtonBox.Ok)
34 | self.label = QLabel(Dialog)
35 | self.label.setObjectName(u"label")
36 | self.label.setGeometry(QRect(20, 20, 91, 16))
37 | font = QFont()
38 | font.setPointSize(12)
39 | self.label.setFont(font)
40 | self.label_2 = QLabel(Dialog)
41 | self.label_2.setObjectName(u"label_2")
42 | self.label_2.setGeometry(QRect(20, 50, 91, 16))
43 | self.label_2.setFont(font)
44 | self.lineEdit = QLineEdit(Dialog)
45 | self.lineEdit.setObjectName(u"lineEdit")
46 | self.lineEdit.setGeometry(QRect(120, 18, 251, 23))
47 | self.lineEdit.setFont(font)
48 | self.lineEdit.setStyleSheet(u"padding: 0px;")
49 | self.textEdit = QTextEdit(Dialog)
50 | self.textEdit.setObjectName(u"textEdit")
51 | self.textEdit.setGeometry(QRect(120, 50, 251, 181))
52 | self.textEdit.setFont(font)
53 | self.label_3 = QLabel(Dialog)
54 | self.label_3.setObjectName(u"label_3")
55 | self.label_3.setGeometry(QRect(20, 248, 191, 31))
56 | self.label_3.setFont(font)
57 | self.label_3.setStyleSheet(u"color:red")
58 |
59 | self.retranslateUi(Dialog)
60 | self.buttonBox.rejected.connect(Dialog.reject)
61 |
62 | QMetaObject.connectSlotsByName(Dialog)
63 | # setupUi
64 |
65 | def retranslateUi(self, Dialog):
66 | Dialog.setWindowTitle(QCoreApplication.translate("Dialog", u"\u6dfb\u52a0\u6570\u636e\u96c6", None))
67 | self.label.setText(QCoreApplication.translate("Dialog", u"\u6570\u636e\u96c6\u540d\u79f0\uff1a", None))
68 | self.label_2.setText(QCoreApplication.translate("Dialog", u"\u6570\u636e\u96c6\u7b80\u4ecb\uff1a", None))
69 | self.lineEdit.setText("")
70 | self.textEdit.setHtml(QCoreApplication.translate("Dialog", u"\n"
71 | "\n"
77 | "
", None))
78 | self.label_3.setText("")
79 | # retranslateUi
80 |
81 |
--------------------------------------------------------------------------------
/ui/pyuic/ui_biaobei_pingce.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | ################################################################################
4 | ## Form generated from reading UI file 'biaobei_pingce.ui'
5 | ##
6 | ## Created by: Qt User Interface Compiler version 6.4.2
7 | ##
8 | ## WARNING! All changes made in this file will be lost when recompiling UI file!
9 | ################################################################################
10 |
11 | from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale,
12 | QMetaObject, QObject, QPoint, QRect,
13 | QSize, QTime, QUrl, Qt)
14 | from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,
15 | QFont, QFontDatabase, QGradient, QIcon,
16 | QImage, QKeySequence, QLinearGradient, QPainter,
17 | QPalette, QPixmap, QRadialGradient, QTransform)
18 | from PySide6.QtWidgets import (QApplication, QCheckBox, QComboBox, QDialog,
19 | QLabel, QPushButton, QSizePolicy, QWidget)
20 |
21 | class Ui_BiaobeiPingceDialog(object):
22 | def setupUi(self, BiaobeiPingceDialog):
23 | if not BiaobeiPingceDialog.objectName():
24 | BiaobeiPingceDialog.setObjectName(u"BiaobeiPingceDialog")
25 | BiaobeiPingceDialog.resize(400, 300)
26 | font = QFont()
27 | font.setPointSize(12)
28 | BiaobeiPingceDialog.setFont(font)
29 | self.checkBox = QCheckBox(BiaobeiPingceDialog)
30 | self.checkBox.setObjectName(u"checkBox")
31 | self.checkBox.setGeometry(QRect(30, 30, 221, 20))
32 | self.checkBox_2 = QCheckBox(BiaobeiPingceDialog)
33 | self.checkBox_2.setObjectName(u"checkBox_2")
34 | self.checkBox_2.setGeometry(QRect(30, 60, 281, 20))
35 | self.checkBox_2.setCheckable(True)
36 | self.checkBox_2.setChecked(True)
37 | self.pushButton_quxiao = QPushButton(BiaobeiPingceDialog)
38 | self.pushButton_quxiao.setObjectName(u"pushButton_quxiao")
39 | self.pushButton_quxiao.setGeometry(QRect(310, 260, 75, 24))
40 | self.pushButton_queding = QPushButton(BiaobeiPingceDialog)
41 | self.pushButton_queding.setObjectName(u"pushButton_queding")
42 | self.pushButton_queding.setGeometry(QRect(220, 260, 75, 24))
43 | self.comboBox = QComboBox(BiaobeiPingceDialog)
44 | self.comboBox.setObjectName(u"comboBox")
45 | self.comboBox.setGeometry(QRect(160, 90, 131, 22))
46 | self.label = QLabel(BiaobeiPingceDialog)
47 | self.label.setObjectName(u"label")
48 | self.label.setGeometry(QRect(30, 90, 111, 16))
49 | self.label_error = QLabel(BiaobeiPingceDialog)
50 | self.label_error.setObjectName(u"label_error")
51 | self.label_error.setGeometry(QRect(30, 230, 351, 16))
52 | self.label_error.setStyleSheet(u"color:red")
53 |
54 | self.retranslateUi(BiaobeiPingceDialog)
55 |
56 | QMetaObject.connectSlotsByName(BiaobeiPingceDialog)
57 | # setupUi
58 |
59 | def retranslateUi(self, BiaobeiPingceDialog):
60 | BiaobeiPingceDialog.setWindowTitle(QCoreApplication.translate("BiaobeiPingceDialog", u"\u6807\u8d1d\u8bed\u97f3\u8bc4\u6d4b", None))
61 | self.checkBox.setText(QCoreApplication.translate("BiaobeiPingceDialog", u"\u53ea\u5bf9\u672a\u6253\u5206\u7684\u6570\u636e\u8fdb\u884c\u8bc4\u6d4b", None))
62 | self.checkBox_2.setText(QCoreApplication.translate("BiaobeiPingceDialog", u"\u53ea\u5bf9\u652f\u6301\u7684\u6570\u636e\u8fdb\u884c\u8bc4\u6d4b\uff08\u7eaf\u4e2d\u6587\uff09", None))
63 | self.pushButton_quxiao.setText(QCoreApplication.translate("BiaobeiPingceDialog", u"\u53d6\u6d88", None))
64 | self.pushButton_queding.setText(QCoreApplication.translate("BiaobeiPingceDialog", u"\u786e\u5b9a", None))
65 | self.label.setText(QCoreApplication.translate("BiaobeiPingceDialog", u"\u9009\u62e9\u6388\u6743\u4fe1\u606f\uff1a", None))
66 | self.label_error.setText("")
67 | # retranslateUi
68 |
69 |
--------------------------------------------------------------------------------
/ui/pyuic/ui_dataset_view.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | ################################################################################
4 | ## Form generated from reading UI file 'dataset_view.ui'
5 | ##
6 | ## Created by: Qt User Interface Compiler version 6.4.2
7 | ##
8 | ## WARNING! All changes made in this file will be lost when recompiling UI file!
9 | ################################################################################
10 |
11 | from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale,
12 | QMetaObject, QObject, QPoint, QRect,
13 | QSize, QTime, QUrl, Qt)
14 | from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,
15 | QFont, QFontDatabase, QGradient, QIcon,
16 | QImage, QKeySequence, QLinearGradient, QPainter,
17 | QPalette, QPixmap, QRadialGradient, QTransform)
18 | from PySide6.QtWidgets import (QAbstractItemView, QApplication, QComboBox, QGroupBox,
19 | QHeaderView, QLabel, QMainWindow, QMenuBar,
20 | QPushButton, QSizePolicy, QStatusBar, QTabWidget,
21 | QTableWidget, QTableWidgetItem, QVBoxLayout, QWidget)
22 |
23 | class Ui_DatasetMainWindow(object):
24 | def setupUi(self, DatasetMainWindow):
25 | if not DatasetMainWindow.objectName():
26 | DatasetMainWindow.setObjectName(u"DatasetMainWindow")
27 | DatasetMainWindow.resize(1200, 800)
28 | DatasetMainWindow.setMinimumSize(QSize(1200, 800))
29 | DatasetMainWindow.setMaximumSize(QSize(1200, 800))
30 | self.centralwidget = QWidget(DatasetMainWindow)
31 | self.centralwidget.setObjectName(u"centralwidget")
32 | self.tabWidget = QTabWidget(self.centralwidget)
33 | self.tabWidget.setObjectName(u"tabWidget")
34 | self.tabWidget.setGeometry(QRect(10, 10, 1181, 681))
35 | font = QFont()
36 | font.setPointSize(12)
37 | self.tabWidget.setFont(font)
38 | self.tab = QWidget()
39 | self.tab.setObjectName(u"tab")
40 | self.verticalLayout_2 = QVBoxLayout(self.tab)
41 | self.verticalLayout_2.setObjectName(u"verticalLayout_2")
42 | self.widget_2 = QWidget(self.tab)
43 | self.widget_2.setObjectName(u"widget_2")
44 | self.tableWidget = QTableWidget(self.widget_2)
45 | if (self.tableWidget.columnCount() < 5):
46 | self.tableWidget.setColumnCount(5)
47 | __qtablewidgetitem = QTableWidgetItem()
48 | self.tableWidget.setHorizontalHeaderItem(0, __qtablewidgetitem)
49 | __qtablewidgetitem1 = QTableWidgetItem()
50 | self.tableWidget.setHorizontalHeaderItem(1, __qtablewidgetitem1)
51 | __qtablewidgetitem2 = QTableWidgetItem()
52 | self.tableWidget.setHorizontalHeaderItem(2, __qtablewidgetitem2)
53 | __qtablewidgetitem3 = QTableWidgetItem()
54 | self.tableWidget.setHorizontalHeaderItem(3, __qtablewidgetitem3)
55 | __qtablewidgetitem4 = QTableWidgetItem()
56 | self.tableWidget.setHorizontalHeaderItem(4, __qtablewidgetitem4)
57 | if (self.tableWidget.rowCount() < 10):
58 | self.tableWidget.setRowCount(10)
59 | __qtablewidgetitem5 = QTableWidgetItem()
60 | self.tableWidget.setVerticalHeaderItem(0, __qtablewidgetitem5)
61 | __qtablewidgetitem6 = QTableWidgetItem()
62 | self.tableWidget.setVerticalHeaderItem(1, __qtablewidgetitem6)
63 | __qtablewidgetitem7 = QTableWidgetItem()
64 | self.tableWidget.setVerticalHeaderItem(2, __qtablewidgetitem7)
65 | __qtablewidgetitem8 = QTableWidgetItem()
66 | self.tableWidget.setVerticalHeaderItem(3, __qtablewidgetitem8)
67 | __qtablewidgetitem9 = QTableWidgetItem()
68 | self.tableWidget.setVerticalHeaderItem(4, __qtablewidgetitem9)
69 | __qtablewidgetitem10 = QTableWidgetItem()
70 | self.tableWidget.setVerticalHeaderItem(5, __qtablewidgetitem10)
71 | __qtablewidgetitem11 = QTableWidgetItem()
72 | self.tableWidget.setVerticalHeaderItem(6, __qtablewidgetitem11)
73 | __qtablewidgetitem12 = QTableWidgetItem()
74 | self.tableWidget.setVerticalHeaderItem(7, __qtablewidgetitem12)
75 | __qtablewidgetitem13 = QTableWidgetItem()
76 | self.tableWidget.setVerticalHeaderItem(8, __qtablewidgetitem13)
77 | __qtablewidgetitem14 = QTableWidgetItem()
78 | self.tableWidget.setVerticalHeaderItem(9, __qtablewidgetitem14)
79 | self.tableWidget.setObjectName(u"tableWidget")
80 | self.tableWidget.setGeometry(QRect(10, 10, 1141, 421))
81 | self.tableWidget.setFont(font)
82 | self.tableWidget.setEditTriggers(QAbstractItemView.NoEditTriggers)
83 | self.tableWidget.verticalHeader().setVisible(False)
84 | self.tableWidget.verticalHeader().setMinimumSectionSize(20)
85 | self.comboBox = QComboBox(self.widget_2)
86 | self.comboBox.setObjectName(u"comboBox")
87 | self.comboBox.setGeometry(QRect(10, 440, 201, 31))
88 | font1 = QFont()
89 | font1.setPointSize(10)
90 | self.comboBox.setFont(font1)
91 | self.pushButton_add_wav_srt = QPushButton(self.widget_2)
92 | self.pushButton_add_wav_srt.setObjectName(u"pushButton_add_wav_srt")
93 | self.pushButton_add_wav_srt.setGeometry(QRect(230, 440, 231, 31))
94 | self.pushButton_output_speaker = QPushButton(self.widget_2)
95 | self.pushButton_output_speaker.setObjectName(u"pushButton_output_speaker")
96 | self.pushButton_output_speaker.setGeometry(QRect(920, 440, 231, 31))
97 | self.pushButton_add_long_wav = QPushButton(self.widget_2)
98 | self.pushButton_add_long_wav.setObjectName(u"pushButton_add_long_wav")
99 | self.pushButton_add_long_wav.setGeometry(QRect(230, 490, 231, 31))
100 | self.pushButton_del_by_raw_wav = QPushButton(self.widget_2)
101 | self.pushButton_del_by_raw_wav.setObjectName(u"pushButton_del_by_raw_wav")
102 | self.pushButton_del_by_raw_wav.setGeometry(QRect(580, 440, 231, 31))
103 |
104 | self.verticalLayout_2.addWidget(self.widget_2)
105 |
106 | self.tabWidget.addTab(self.tab, "")
107 | self.tab_2 = QWidget()
108 | self.tab_2.setObjectName(u"tab_2")
109 | self.verticalLayout = QVBoxLayout(self.tab_2)
110 | self.verticalLayout.setObjectName(u"verticalLayout")
111 | self.widget = QWidget(self.tab_2)
112 | self.widget.setObjectName(u"widget")
113 | self.pushButton_biaobei_pingce = QPushButton(self.widget)
114 | self.pushButton_biaobei_pingce.setObjectName(u"pushButton_biaobei_pingce")
115 | self.pushButton_biaobei_pingce.setGeometry(QRect(20, 20, 211, 51))
116 |
117 | self.verticalLayout.addWidget(self.widget)
118 |
119 | self.tabWidget.addTab(self.tab_2, "")
120 | self.tab_3 = QWidget()
121 | self.tab_3.setObjectName(u"tab_3")
122 | self.label = QLabel(self.tab_3)
123 | self.label.setObjectName(u"label")
124 | self.label.setGeometry(QRect(20, 10, 271, 21))
125 | self.label.setFont(font)
126 | self.tabWidget_2 = QTabWidget(self.tab_3)
127 | self.tabWidget_2.setObjectName(u"tabWidget_2")
128 | self.tabWidget_2.setGeometry(QRect(20, 50, 1141, 601))
129 | self.tab_4 = QWidget()
130 | self.tab_4.setObjectName(u"tab_4")
131 | self.groupBox = QGroupBox(self.tab_4)
132 | self.groupBox.setObjectName(u"groupBox")
133 | self.groupBox.setGeometry(QRect(10, 10, 1111, 271))
134 | self.tableWidget_biaobei = QTableWidget(self.groupBox)
135 | if (self.tableWidget_biaobei.columnCount() < 6):
136 | self.tableWidget_biaobei.setColumnCount(6)
137 | __qtablewidgetitem15 = QTableWidgetItem()
138 | self.tableWidget_biaobei.setHorizontalHeaderItem(0, __qtablewidgetitem15)
139 | __qtablewidgetitem16 = QTableWidgetItem()
140 | self.tableWidget_biaobei.setHorizontalHeaderItem(1, __qtablewidgetitem16)
141 | __qtablewidgetitem17 = QTableWidgetItem()
142 | self.tableWidget_biaobei.setHorizontalHeaderItem(2, __qtablewidgetitem17)
143 | __qtablewidgetitem18 = QTableWidgetItem()
144 | self.tableWidget_biaobei.setHorizontalHeaderItem(3, __qtablewidgetitem18)
145 | __qtablewidgetitem19 = QTableWidgetItem()
146 | self.tableWidget_biaobei.setHorizontalHeaderItem(4, __qtablewidgetitem19)
147 | __qtablewidgetitem20 = QTableWidgetItem()
148 | self.tableWidget_biaobei.setHorizontalHeaderItem(5, __qtablewidgetitem20)
149 | self.tableWidget_biaobei.setObjectName(u"tableWidget_biaobei")
150 | self.tableWidget_biaobei.setGeometry(QRect(20, 20, 961, 231))
151 | self.tableWidget_biaobei.setEditTriggers(QAbstractItemView.NoEditTriggers)
152 | self.tableWidget_biaobei.verticalHeader().setVisible(False)
153 | self.pushButton_add_biaobei = QPushButton(self.groupBox)
154 | self.pushButton_add_biaobei.setObjectName(u"pushButton_add_biaobei")
155 | self.pushButton_add_biaobei.setGeometry(QRect(990, 20, 111, 41))
156 | self.groupBox_2 = QGroupBox(self.tab_4)
157 | self.groupBox_2.setObjectName(u"groupBox_2")
158 | self.groupBox_2.setGeometry(QRect(10, 290, 1111, 271))
159 | self.pushButton_add_xunfei = QPushButton(self.groupBox_2)
160 | self.pushButton_add_xunfei.setObjectName(u"pushButton_add_xunfei")
161 | self.pushButton_add_xunfei.setGeometry(QRect(990, 20, 111, 41))
162 | self.tableWidget_xunfei = QTableWidget(self.groupBox_2)
163 | if (self.tableWidget_xunfei.columnCount() < 6):
164 | self.tableWidget_xunfei.setColumnCount(6)
165 | __qtablewidgetitem21 = QTableWidgetItem()
166 | self.tableWidget_xunfei.setHorizontalHeaderItem(0, __qtablewidgetitem21)
167 | __qtablewidgetitem22 = QTableWidgetItem()
168 | self.tableWidget_xunfei.setHorizontalHeaderItem(1, __qtablewidgetitem22)
169 | __qtablewidgetitem23 = QTableWidgetItem()
170 | self.tableWidget_xunfei.setHorizontalHeaderItem(2, __qtablewidgetitem23)
171 | __qtablewidgetitem24 = QTableWidgetItem()
172 | self.tableWidget_xunfei.setHorizontalHeaderItem(3, __qtablewidgetitem24)
173 | __qtablewidgetitem25 = QTableWidgetItem()
174 | self.tableWidget_xunfei.setHorizontalHeaderItem(4, __qtablewidgetitem25)
175 | __qtablewidgetitem26 = QTableWidgetItem()
176 | self.tableWidget_xunfei.setHorizontalHeaderItem(5, __qtablewidgetitem26)
177 | self.tableWidget_xunfei.setObjectName(u"tableWidget_xunfei")
178 | self.tableWidget_xunfei.setGeometry(QRect(20, 20, 961, 231))
179 | self.tableWidget_xunfei.setEditTriggers(QAbstractItemView.NoEditTriggers)
180 | self.tableWidget_xunfei.verticalHeader().setVisible(False)
181 | self.tabWidget_2.addTab(self.tab_4, "")
182 | self.tab_5 = QWidget()
183 | self.tab_5.setObjectName(u"tab_5")
184 | self.tabWidget_2.addTab(self.tab_5, "")
185 | self.tabWidget.addTab(self.tab_3, "")
186 | DatasetMainWindow.setCentralWidget(self.centralwidget)
187 | self.menubar = QMenuBar(DatasetMainWindow)
188 | self.menubar.setObjectName(u"menubar")
189 | self.menubar.setGeometry(QRect(0, 0, 1200, 22))
190 | DatasetMainWindow.setMenuBar(self.menubar)
191 | self.statusbar = QStatusBar(DatasetMainWindow)
192 | self.statusbar.setObjectName(u"statusbar")
193 | DatasetMainWindow.setStatusBar(self.statusbar)
194 |
195 | self.retranslateUi(DatasetMainWindow)
196 |
197 | self.tabWidget.setCurrentIndex(0)
198 | self.tabWidget_2.setCurrentIndex(0)
199 |
200 |
201 | QMetaObject.connectSlotsByName(DatasetMainWindow)
202 | # setupUi
203 |
204 | def retranslateUi(self, DatasetMainWindow):
205 | DatasetMainWindow.setWindowTitle(QCoreApplication.translate("DatasetMainWindow", u"\u6570\u636e\u96c6", None))
206 | ___qtablewidgetitem = self.tableWidget.horizontalHeaderItem(0)
207 | ___qtablewidgetitem.setText(QCoreApplication.translate("DatasetMainWindow", u"\u5e8f\u53f7", None));
208 | ___qtablewidgetitem1 = self.tableWidget.horizontalHeaderItem(1)
209 | ___qtablewidgetitem1.setText(QCoreApplication.translate("DatasetMainWindow", u"\u6807\u6ce8\u6587\u672c", None));
210 | ___qtablewidgetitem2 = self.tableWidget.horizontalHeaderItem(2)
211 | ___qtablewidgetitem2.setText(QCoreApplication.translate("DatasetMainWindow", u"\u53d1\u97f3\u4eba", None));
212 | ___qtablewidgetitem3 = self.tableWidget.horizontalHeaderItem(3)
213 | ___qtablewidgetitem3.setText(QCoreApplication.translate("DatasetMainWindow", u"\u6807\u7b7e", None));
214 | ___qtablewidgetitem4 = self.tableWidget.horizontalHeaderItem(4)
215 | ___qtablewidgetitem4.setText(QCoreApplication.translate("DatasetMainWindow", u"\u64cd\u4f5c", None));
216 | ___qtablewidgetitem5 = self.tableWidget.verticalHeaderItem(0)
217 | ___qtablewidgetitem5.setText(QCoreApplication.translate("DatasetMainWindow", u"\u65b0\u5efa\u884c", None));
218 | ___qtablewidgetitem6 = self.tableWidget.verticalHeaderItem(1)
219 | ___qtablewidgetitem6.setText(QCoreApplication.translate("DatasetMainWindow", u"\u65b0\u5efa\u884c", None));
220 | ___qtablewidgetitem7 = self.tableWidget.verticalHeaderItem(2)
221 | ___qtablewidgetitem7.setText(QCoreApplication.translate("DatasetMainWindow", u"\u65b0\u5efa\u884c", None));
222 | ___qtablewidgetitem8 = self.tableWidget.verticalHeaderItem(3)
223 | ___qtablewidgetitem8.setText(QCoreApplication.translate("DatasetMainWindow", u"\u65b0\u5efa\u884c", None));
224 | ___qtablewidgetitem9 = self.tableWidget.verticalHeaderItem(4)
225 | ___qtablewidgetitem9.setText(QCoreApplication.translate("DatasetMainWindow", u"\u65b0\u5efa\u884c", None));
226 | ___qtablewidgetitem10 = self.tableWidget.verticalHeaderItem(5)
227 | ___qtablewidgetitem10.setText(QCoreApplication.translate("DatasetMainWindow", u"\u65b0\u5efa\u884c", None));
228 | ___qtablewidgetitem11 = self.tableWidget.verticalHeaderItem(6)
229 | ___qtablewidgetitem11.setText(QCoreApplication.translate("DatasetMainWindow", u"\u65b0\u5efa\u884c", None));
230 | ___qtablewidgetitem12 = self.tableWidget.verticalHeaderItem(7)
231 | ___qtablewidgetitem12.setText(QCoreApplication.translate("DatasetMainWindow", u"\u65b0\u5efa\u884c", None));
232 | ___qtablewidgetitem13 = self.tableWidget.verticalHeaderItem(8)
233 | ___qtablewidgetitem13.setText(QCoreApplication.translate("DatasetMainWindow", u"\u65b0\u5efa\u884c", None));
234 | ___qtablewidgetitem14 = self.tableWidget.verticalHeaderItem(9)
235 | ___qtablewidgetitem14.setText(QCoreApplication.translate("DatasetMainWindow", u"\u65b0\u5efa\u884c", None));
236 | self.pushButton_add_wav_srt.setText(QCoreApplication.translate("DatasetMainWindow", u"\u4ece\u6587\u4ef6\u5bfc\u5165\uff08\u97f3\u9891+\u5b57\u5e55\uff09", None))
237 | self.pushButton_output_speaker.setText(QCoreApplication.translate("DatasetMainWindow", u"\u5bfc\u51fa\u6570\u636e\u96c6\uff08\u5355\u53d1\u97f3\u4eba\uff09", None))
238 | self.pushButton_add_long_wav.setText(QCoreApplication.translate("DatasetMainWindow", u"\u4ece\u6587\u4ef6\u5bfc\u5165\uff08\u957f\u97f3\u9891\uff09", None))
239 | self.pushButton_del_by_raw_wav.setText(QCoreApplication.translate("DatasetMainWindow", u"\u6839\u636e\u6e90\u97f3\u9891\u5220\u9664\u6570\u636e", None))
240 | self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), QCoreApplication.translate("DatasetMainWindow", u"\u6570\u636e\u96c6\u6982\u89c8", None))
241 | self.pushButton_biaobei_pingce.setText(QCoreApplication.translate("DatasetMainWindow", u"\u6807\u8d1d\u8bed\u97f3\u8bc4\u6d4b", None))
242 | self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), QCoreApplication.translate("DatasetMainWindow", u"\u6570\u636e\u5904\u7406", None))
243 | self.label.setText(QCoreApplication.translate("DatasetMainWindow", u"\u6ce8\u610f\uff1a\u672c\u9875\u8bbe\u7f6e\u5728\u672c\u5de5\u4f5c\u533a\u4e0b\u901a\u7528", None))
244 | self.groupBox.setTitle(QCoreApplication.translate("DatasetMainWindow", u"\u6807\u8d1d", None))
245 | ___qtablewidgetitem15 = self.tableWidget_biaobei.horizontalHeaderItem(0)
246 | ___qtablewidgetitem15.setText(QCoreApplication.translate("DatasetMainWindow", u"id", None));
247 | ___qtablewidgetitem16 = self.tableWidget_biaobei.horizontalHeaderItem(1)
248 | ___qtablewidgetitem16.setText(QCoreApplication.translate("DatasetMainWindow", u"\u540d\u79f0", None));
249 | ___qtablewidgetitem17 = self.tableWidget_biaobei.horizontalHeaderItem(2)
250 | ___qtablewidgetitem17.setText(QCoreApplication.translate("DatasetMainWindow", u"APP\u7c7b\u578b", None));
251 | ___qtablewidgetitem18 = self.tableWidget_biaobei.horizontalHeaderItem(3)
252 | ___qtablewidgetitem18.setText(QCoreApplication.translate("DatasetMainWindow", u"APPID", None));
253 | ___qtablewidgetitem19 = self.tableWidget_biaobei.horizontalHeaderItem(4)
254 | ___qtablewidgetitem19.setText(QCoreApplication.translate("DatasetMainWindow", u"APISecret\uff08client_secret\uff09", None));
255 | ___qtablewidgetitem20 = self.tableWidget_biaobei.horizontalHeaderItem(5)
256 | ___qtablewidgetitem20.setText(QCoreApplication.translate("DatasetMainWindow", u"APIKey\uff08client_id\uff09", None));
257 | self.pushButton_add_biaobei.setText(QCoreApplication.translate("DatasetMainWindow", u"\u6dfb\u52a0", None))
258 | self.groupBox_2.setTitle(QCoreApplication.translate("DatasetMainWindow", u"\u8baf\u98de", None))
259 | self.pushButton_add_xunfei.setText(QCoreApplication.translate("DatasetMainWindow", u"\u6dfb\u52a0", None))
260 | ___qtablewidgetitem21 = self.tableWidget_xunfei.horizontalHeaderItem(0)
261 | ___qtablewidgetitem21.setText(QCoreApplication.translate("DatasetMainWindow", u"id", None));
262 | ___qtablewidgetitem22 = self.tableWidget_xunfei.horizontalHeaderItem(1)
263 | ___qtablewidgetitem22.setText(QCoreApplication.translate("DatasetMainWindow", u"\u540d\u79f0", None));
264 | ___qtablewidgetitem23 = self.tableWidget_xunfei.horizontalHeaderItem(2)
265 | ___qtablewidgetitem23.setText(QCoreApplication.translate("DatasetMainWindow", u"APP\u7c7b\u578b", None));
266 | ___qtablewidgetitem24 = self.tableWidget_xunfei.horizontalHeaderItem(3)
267 | ___qtablewidgetitem24.setText(QCoreApplication.translate("DatasetMainWindow", u"APPID", None));
268 | ___qtablewidgetitem25 = self.tableWidget_xunfei.horizontalHeaderItem(4)
269 | ___qtablewidgetitem25.setText(QCoreApplication.translate("DatasetMainWindow", u"APISecret\uff08client_secret\uff09", None));
270 | ___qtablewidgetitem26 = self.tableWidget_xunfei.horizontalHeaderItem(5)
271 | ___qtablewidgetitem26.setText(QCoreApplication.translate("DatasetMainWindow", u"APIKey\uff08client_id\uff09", None));
272 | self.tabWidget_2.setTabText(self.tabWidget_2.indexOf(self.tab_4), QCoreApplication.translate("DatasetMainWindow", u"\u6388\u6743\u7ba1\u7406", None))
273 | self.tabWidget_2.setTabText(self.tabWidget_2.indexOf(self.tab_5), QCoreApplication.translate("DatasetMainWindow", u"\u5168\u5c40\u8bbe\u7f6e", None))
274 | self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_3), QCoreApplication.translate("DatasetMainWindow", u"\u8f6f\u4ef6\u8bbe\u7f6e", None))
275 | # retranslateUi
276 |
277 |
--------------------------------------------------------------------------------
/ui/pyuic/ui_del_info_wav.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | ################################################################################
4 | ## Form generated from reading UI file 'del_info_wav.ui'
5 | ##
6 | ## Created by: Qt User Interface Compiler version 6.4.2
7 | ##
8 | ## WARNING! All changes made in this file will be lost when recompiling UI file!
9 | ################################################################################
10 |
11 | from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale,
12 | QMetaObject, QObject, QPoint, QRect,
13 | QSize, QTime, QUrl, Qt)
14 | from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,
15 | QFont, QFontDatabase, QGradient, QIcon,
16 | QImage, QKeySequence, QLinearGradient, QPainter,
17 | QPalette, QPixmap, QRadialGradient, QTransform)
18 | from PySide6.QtWidgets import (QApplication, QComboBox, QDialog, QLabel,
19 | QPushButton, QSizePolicy, QWidget)
20 |
21 | class Ui_del_info_wav_Dialog(object):
22 | def setupUi(self, del_info_wav_Dialog):
23 | if not del_info_wav_Dialog.objectName():
24 | del_info_wav_Dialog.setObjectName(u"del_info_wav_Dialog")
25 | del_info_wav_Dialog.resize(600, 250)
26 | del_info_wav_Dialog.setMinimumSize(QSize(600, 250))
27 | del_info_wav_Dialog.setMaximumSize(QSize(600, 250))
28 | font = QFont()
29 | font.setPointSize(12)
30 | del_info_wav_Dialog.setFont(font)
31 | self.label = QLabel(del_info_wav_Dialog)
32 | self.label.setObjectName(u"label")
33 | self.label.setGeometry(QRect(20, 21, 561, 20))
34 | self.label_2 = QLabel(del_info_wav_Dialog)
35 | self.label_2.setObjectName(u"label_2")
36 | self.label_2.setGeometry(QRect(30, 70, 81, 16))
37 | self.pushButton_back = QPushButton(del_info_wav_Dialog)
38 | self.pushButton_back.setObjectName(u"pushButton_back")
39 | self.pushButton_back.setGeometry(QRect(500, 200, 81, 24))
40 | self.pushButton_submit = QPushButton(del_info_wav_Dialog)
41 | self.pushButton_submit.setObjectName(u"pushButton_submit")
42 | self.pushButton_submit.setGeometry(QRect(390, 200, 81, 24))
43 | self.error_lable = QLabel(del_info_wav_Dialog)
44 | self.error_lable.setObjectName(u"error_lable")
45 | self.error_lable.setGeometry(QRect(30, 170, 541, 16))
46 | self.error_lable.setFont(font)
47 | self.error_lable.setStyleSheet(u"color: red;")
48 | self.comboBox_files = QComboBox(del_info_wav_Dialog)
49 | self.comboBox_files.setObjectName(u"comboBox_files")
50 | self.comboBox_files.setGeometry(QRect(130, 70, 381, 22))
51 |
52 | self.retranslateUi(del_info_wav_Dialog)
53 |
54 | QMetaObject.connectSlotsByName(del_info_wav_Dialog)
55 | # setupUi
56 |
57 | def retranslateUi(self, del_info_wav_Dialog):
58 | del_info_wav_Dialog.setWindowTitle(QCoreApplication.translate("del_info_wav_Dialog", u"\u5220\u9664\u6570\u636e", None))
59 | self.label.setText(QCoreApplication.translate("del_info_wav_Dialog", u"\u9009\u62e9\u4e00\u4e2a\u4e4b\u524d\u5bfc\u5165\u7684\u97f3\u9891\u6587\u4ef6\uff0c\u5220\u9664\u4e0e\u6b64\u6587\u4ef6\u5173\u8054\u7684\u6570\u636e", None))
60 | self.label_2.setText(QCoreApplication.translate("del_info_wav_Dialog", u"\u97f3\u9891\u6587\u4ef6\uff1a", None))
61 | self.pushButton_back.setText(QCoreApplication.translate("del_info_wav_Dialog", u"\u53d6\u6d88", None))
62 | self.pushButton_submit.setText(QCoreApplication.translate("del_info_wav_Dialog", u"\u786e\u5b9a", None))
63 | self.error_lable.setText("")
64 | # retranslateUi
65 |
66 |
--------------------------------------------------------------------------------
/ui/pyuic/ui_edit_info.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | ################################################################################
4 | ## Form generated from reading UI file 'edit_info.ui'
5 | ##
6 | ## Created by: Qt User Interface Compiler version 6.4.2
7 | ##
8 | ## WARNING! All changes made in this file will be lost when recompiling UI file!
9 | ################################################################################
10 |
11 | from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale,
12 | QMetaObject, QObject, QPoint, QRect,
13 | QSize, QTime, QUrl, Qt)
14 | from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,
15 | QFont, QFontDatabase, QGradient, QIcon,
16 | QImage, QKeySequence, QLinearGradient, QPainter,
17 | QPalette, QPixmap, QRadialGradient, QTransform)
18 | from PySide6.QtWidgets import (QApplication, QDialog, QLabel, QLineEdit,
19 | QPushButton, QSizePolicy, QWidget)
20 |
21 | class Ui_EditInfoDialog(object):
22 | def setupUi(self, EditInfoDialog):
23 | if not EditInfoDialog.objectName():
24 | EditInfoDialog.setObjectName(u"EditInfoDialog")
25 | EditInfoDialog.resize(400, 300)
26 | font = QFont()
27 | font.setPointSize(12)
28 | EditInfoDialog.setFont(font)
29 | self.label = QLabel(EditInfoDialog)
30 | self.label.setObjectName(u"label")
31 | self.label.setGeometry(QRect(20, 20, 111, 20))
32 | self.label_info_id = QLabel(EditInfoDialog)
33 | self.label_info_id.setObjectName(u"label_info_id")
34 | self.label_info_id.setGeometry(QRect(150, 20, 111, 20))
35 | self.label_3 = QLabel(EditInfoDialog)
36 | self.label_3.setObjectName(u"label_3")
37 | self.label_3.setGeometry(QRect(20, 50, 111, 20))
38 | self.lineEdit_info_text = QLineEdit(EditInfoDialog)
39 | self.lineEdit_info_text.setObjectName(u"lineEdit_info_text")
40 | self.lineEdit_info_text.setGeometry(QRect(150, 50, 231, 21))
41 | self.label_4 = QLabel(EditInfoDialog)
42 | self.label_4.setObjectName(u"label_4")
43 | self.label_4.setGeometry(QRect(20, 80, 111, 20))
44 | self.pushButton_2 = QPushButton(EditInfoDialog)
45 | self.pushButton_2.setObjectName(u"pushButton_2")
46 | self.pushButton_2.setGeometry(QRect(320, 260, 75, 24))
47 | self.pushButton_3 = QPushButton(EditInfoDialog)
48 | self.pushButton_3.setObjectName(u"pushButton_3")
49 | self.pushButton_3.setGeometry(QRect(230, 260, 75, 24))
50 | self.label_info_speaker = QLabel(EditInfoDialog)
51 | self.label_info_speaker.setObjectName(u"label_info_speaker")
52 | self.label_info_speaker.setGeometry(QRect(150, 80, 231, 20))
53 | self.label_5 = QLabel(EditInfoDialog)
54 | self.label_5.setObjectName(u"label_5")
55 | self.label_5.setGeometry(QRect(20, 110, 121, 20))
56 | self.label_6 = QLabel(EditInfoDialog)
57 | self.label_6.setObjectName(u"label_6")
58 | self.label_6.setGeometry(QRect(20, 140, 121, 20))
59 | self.lineEdit_info_starttime = QLineEdit(EditInfoDialog)
60 | self.lineEdit_info_starttime.setObjectName(u"lineEdit_info_starttime")
61 | self.lineEdit_info_starttime.setGeometry(QRect(150, 110, 231, 21))
62 | self.lineEdit_info_endtime = QLineEdit(EditInfoDialog)
63 | self.lineEdit_info_endtime.setObjectName(u"lineEdit_info_endtime")
64 | self.lineEdit_info_endtime.setGeometry(QRect(150, 140, 231, 21))
65 |
66 | self.retranslateUi(EditInfoDialog)
67 |
68 | QMetaObject.connectSlotsByName(EditInfoDialog)
69 | # setupUi
70 |
71 | def retranslateUi(self, EditInfoDialog):
72 | EditInfoDialog.setWindowTitle(QCoreApplication.translate("EditInfoDialog", u"\u6570\u636e\u7f16\u8f91", None))
73 | self.label.setText(QCoreApplication.translate("EditInfoDialog", u"\u6570\u636eid:", None))
74 | self.label_info_id.setText(QCoreApplication.translate("EditInfoDialog", u"\u6570\u636eid", None))
75 | self.label_3.setText(QCoreApplication.translate("EditInfoDialog", u"\u6807\u6ce8\u6587\u672c\uff1a", None))
76 | self.lineEdit_info_text.setText("")
77 | self.label_4.setText(QCoreApplication.translate("EditInfoDialog", u"\u53d1\u97f3\u4eba\uff1a", None))
78 | self.pushButton_2.setText(QCoreApplication.translate("EditInfoDialog", u"\u53d6\u6d88", None))
79 | self.pushButton_3.setText(QCoreApplication.translate("EditInfoDialog", u"\u786e\u5b9a", None))
80 | self.label_info_speaker.setText(QCoreApplication.translate("EditInfoDialog", u"\u6570\u636eid", None))
81 | self.label_5.setText(QCoreApplication.translate("EditInfoDialog", u"\u5f00\u59cb\u65f6\u95f4(ms)\uff1a", None))
82 | self.label_6.setText(QCoreApplication.translate("EditInfoDialog", u"\u7ed3\u675f\u65f6\u95f4(ms)\uff1a", None))
83 | self.lineEdit_info_starttime.setText("")
84 | self.lineEdit_info_endtime.setText("")
85 | # retranslateUi
86 |
87 |
--------------------------------------------------------------------------------
/ui/pyuic/ui_output_dataset_speaker.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | ################################################################################
4 | ## Form generated from reading UI file 'output_dataset_speaker.ui'
5 | ##
6 | ## Created by: Qt User Interface Compiler version 6.4.2
7 | ##
8 | ## WARNING! All changes made in this file will be lost when recompiling UI file!
9 | ################################################################################
10 |
11 | from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale,
12 | QMetaObject, QObject, QPoint, QRect,
13 | QSize, QTime, QUrl, Qt)
14 | from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,
15 | QFont, QFontDatabase, QGradient, QIcon,
16 | QImage, QKeySequence, QLinearGradient, QPainter,
17 | QPalette, QPixmap, QRadialGradient, QTransform)
18 | from PySide6.QtWidgets import (QApplication, QCheckBox, QComboBox, QDialog,
19 | QGroupBox, QHBoxLayout, QLabel, QLineEdit,
20 | QPushButton, QSizePolicy, QStackedWidget, QVBoxLayout,
21 | QWidget)
22 |
23 | class Ui_OutPutSpeakerDialog(object):
24 | def setupUi(self, OutPutSpeakerDialog):
25 | if not OutPutSpeakerDialog.objectName():
26 | OutPutSpeakerDialog.setObjectName(u"OutPutSpeakerDialog")
27 | OutPutSpeakerDialog.resize(540, 581)
28 | font = QFont()
29 | font.setPointSize(12)
30 | OutPutSpeakerDialog.setFont(font)
31 | self.stackedWidget = QStackedWidget(OutPutSpeakerDialog)
32 | self.stackedWidget.setObjectName(u"stackedWidget")
33 | self.stackedWidget.setGeometry(QRect(20, 10, 511, 371))
34 | self.page = QWidget()
35 | self.page.setObjectName(u"page")
36 | self.label_2 = QLabel(self.page)
37 | self.label_2.setObjectName(u"label_2")
38 | self.label_2.setGeometry(QRect(20, 131, 131, 16))
39 | self.lineEdit_sample_rate = QLineEdit(self.page)
40 | self.lineEdit_sample_rate.setObjectName(u"lineEdit_sample_rate")
41 | self.lineEdit_sample_rate.setGeometry(QRect(290, 170, 191, 21))
42 | self.comboBox_geshi = QComboBox(self.page)
43 | self.comboBox_geshi.setObjectName(u"comboBox_geshi")
44 | self.comboBox_geshi.setGeometry(QRect(290, 90, 191, 22))
45 | self.label_3 = QLabel(self.page)
46 | self.label_3.setObjectName(u"label_3")
47 | self.label_3.setGeometry(QRect(20, 171, 131, 16))
48 | self.label = QLabel(self.page)
49 | self.label.setObjectName(u"label")
50 | self.label.setGeometry(QRect(20, 90, 221, 20))
51 | self.lineEdit_qianzhui = QLineEdit(self.page)
52 | self.lineEdit_qianzhui.setObjectName(u"lineEdit_qianzhui")
53 | self.lineEdit_qianzhui.setGeometry(QRect(290, 130, 191, 21))
54 | self.label_9 = QLabel(self.page)
55 | self.label_9.setObjectName(u"label_9")
56 | self.label_9.setGeometry(QRect(20, 250, 131, 16))
57 | self.comboBox_speaker = QComboBox(self.page)
58 | self.comboBox_speaker.setObjectName(u"comboBox_speaker")
59 | self.comboBox_speaker.setGeometry(QRect(290, 250, 191, 22))
60 | self.groupBox_2 = QGroupBox(self.page)
61 | self.groupBox_2.setObjectName(u"groupBox_2")
62 | self.groupBox_2.setGeometry(QRect(10, 10, 491, 71))
63 | self.pushButton_read_preinstall = QPushButton(self.groupBox_2)
64 | self.pushButton_read_preinstall.setObjectName(u"pushButton_read_preinstall")
65 | self.pushButton_read_preinstall.setGeometry(QRect(280, 30, 111, 24))
66 | self.pushButton_read_preinstall.setFont(font)
67 | self.comboBox_preinstall = QComboBox(self.groupBox_2)
68 | self.comboBox_preinstall.setObjectName(u"comboBox_preinstall")
69 | self.comboBox_preinstall.setGeometry(QRect(10, 30, 211, 22))
70 | self.label_4 = QLabel(self.page)
71 | self.label_4.setObjectName(u"label_4")
72 | self.label_4.setGeometry(QRect(20, 211, 131, 16))
73 | self.comboBox_channel = QComboBox(self.page)
74 | self.comboBox_channel.addItem("")
75 | self.comboBox_channel.addItem("")
76 | self.comboBox_channel.setObjectName(u"comboBox_channel")
77 | self.comboBox_channel.setGeometry(QRect(290, 210, 191, 22))
78 | self.checkBox_auto_skip = QCheckBox(self.page)
79 | self.checkBox_auto_skip.setObjectName(u"checkBox_auto_skip")
80 | self.checkBox_auto_skip.setGeometry(QRect(290, 290, 111, 20))
81 | self.checkBox_auto_skip.setChecked(True)
82 | self.label_5 = QLabel(self.page)
83 | self.label_5.setObjectName(u"label_5")
84 | self.label_5.setGeometry(QRect(20, 290, 201, 16))
85 | self.label_guiyihua = QLabel(self.page)
86 | self.label_guiyihua.setObjectName(u"label_guiyihua")
87 | self.label_guiyihua.setGeometry(QRect(20, 330, 261, 41))
88 | self.label_guiyihua.setAlignment(Qt.AlignLeading|Qt.AlignLeft|Qt.AlignTop)
89 | self.lineEdit_guiyihua = QLineEdit(self.page)
90 | self.lineEdit_guiyihua.setObjectName(u"lineEdit_guiyihua")
91 | self.lineEdit_guiyihua.setGeometry(QRect(290, 330, 191, 21))
92 | self.stackedWidget.addWidget(self.page)
93 | self.page_2 = QWidget()
94 | self.page_2.setObjectName(u"page_2")
95 | self.groupBox = QGroupBox(self.page_2)
96 | self.groupBox.setObjectName(u"groupBox")
97 | self.groupBox.setGeometry(QRect(0, 30, 501, 231))
98 | self.label_cengji = QLabel(self.groupBox)
99 | self.label_cengji.setObjectName(u"label_cengji")
100 | self.label_cengji.setGeometry(QRect(10, 50, 231, 141))
101 | self.label_cengji.setAlignment(Qt.AlignLeading|Qt.AlignLeft|Qt.AlignTop)
102 | self.label_geshi = QLabel(self.groupBox)
103 | self.label_geshi.setObjectName(u"label_geshi")
104 | self.label_geshi.setGeometry(QRect(260, 50, 231, 141))
105 | self.label_geshi.setAlignment(Qt.AlignLeading|Qt.AlignLeft|Qt.AlignTop)
106 | self.label_6 = QLabel(self.groupBox)
107 | self.label_6.setObjectName(u"label_6")
108 | self.label_6.setGeometry(QRect(10, 26, 151, 16))
109 | font1 = QFont()
110 | font1.setPointSize(12)
111 | font1.setBold(True)
112 | self.label_6.setFont(font1)
113 | self.label_7 = QLabel(self.groupBox)
114 | self.label_7.setObjectName(u"label_7")
115 | self.label_7.setGeometry(QRect(260, 26, 151, 16))
116 | self.label_7.setFont(font1)
117 | self.label_8 = QLabel(self.groupBox)
118 | self.label_8.setObjectName(u"label_8")
119 | self.label_8.setGeometry(QRect(10, 200, 141, 20))
120 | self.label_file_num = QLabel(self.groupBox)
121 | self.label_file_num.setObjectName(u"label_file_num")
122 | self.label_file_num.setGeometry(QRect(160, 200, 151, 20))
123 | self.stackedWidget.addWidget(self.page_2)
124 | self.pushButton_next = QPushButton(OutPutSpeakerDialog)
125 | self.pushButton_next.setObjectName(u"pushButton_next")
126 | self.pushButton_next.setGeometry(QRect(430, 540, 75, 24))
127 | self.pushButton_back = QPushButton(OutPutSpeakerDialog)
128 | self.pushButton_back.setObjectName(u"pushButton_back")
129 | self.pushButton_back.setGeometry(QRect(320, 540, 75, 24))
130 | self.label_error = QLabel(OutPutSpeakerDialog)
131 | self.label_error.setObjectName(u"label_error")
132 | self.label_error.setGeometry(QRect(40, 520, 271, 16))
133 | self.label_error.setFont(font)
134 | self.label_error.setStyleSheet(u"color:red")
135 | self.groupBox_3 = QGroupBox(OutPutSpeakerDialog)
136 | self.groupBox_3.setObjectName(u"groupBox_3")
137 | self.groupBox_3.setGeometry(QRect(30, 390, 491, 131))
138 | self.comboBox_pingce = QComboBox(self.groupBox_3)
139 | self.comboBox_pingce.setObjectName(u"comboBox_pingce")
140 | self.comboBox_pingce.setGeometry(QRect(10, 30, 211, 22))
141 | self.horizontalLayoutWidget = QWidget(self.groupBox_3)
142 | self.horizontalLayoutWidget.setObjectName(u"horizontalLayoutWidget")
143 | self.horizontalLayoutWidget.setGeometry(QRect(240, 20, 241, 101))
144 | self.horizontalLayout = QHBoxLayout(self.horizontalLayoutWidget)
145 | self.horizontalLayout.setObjectName(u"horizontalLayout")
146 | self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
147 | self.verticalLayout_left = QVBoxLayout()
148 | self.verticalLayout_left.setObjectName(u"verticalLayout_left")
149 |
150 | self.horizontalLayout.addLayout(self.verticalLayout_left)
151 |
152 | self.verticalLayout_right = QVBoxLayout()
153 | self.verticalLayout_right.setObjectName(u"verticalLayout_right")
154 |
155 | self.horizontalLayout.addLayout(self.verticalLayout_right)
156 |
157 | self.label_10 = QLabel(self.groupBox_3)
158 | self.label_10.setObjectName(u"label_10")
159 | self.label_10.setGeometry(QRect(10, 60, 211, 61))
160 | self.label_10.setWordWrap(True)
161 |
162 | self.retranslateUi(OutPutSpeakerDialog)
163 |
164 | self.stackedWidget.setCurrentIndex(0)
165 |
166 |
167 | QMetaObject.connectSlotsByName(OutPutSpeakerDialog)
168 | # setupUi
169 |
170 | def retranslateUi(self, OutPutSpeakerDialog):
171 | OutPutSpeakerDialog.setWindowTitle(QCoreApplication.translate("OutPutSpeakerDialog", u"\u5bfc\u51fa\u6570\u636e\u96c6", None))
172 | self.label_2.setText(QCoreApplication.translate("OutPutSpeakerDialog", u"\u6dfb\u52a0\u97f3\u9891\u6587\u4ef6\u524d\u7f00", None))
173 | self.lineEdit_sample_rate.setText("")
174 | self.label_3.setText(QCoreApplication.translate("OutPutSpeakerDialog", u"\u97f3\u9891\u6587\u4ef6\u91c7\u6837\u7387", None))
175 | self.label.setText(QCoreApplication.translate("OutPutSpeakerDialog", u"\u8f93\u51fa\u6587\u4ef6\u5c42\u7ea7\u548c\u6807\u6ce8\u6587\u4ef6\u683c\u5f0f", None))
176 | self.lineEdit_qianzhui.setText("")
177 | self.label_9.setText(QCoreApplication.translate("OutPutSpeakerDialog", u"\u53d1\u97f3\u4eba", None))
178 | self.groupBox_2.setTitle(QCoreApplication.translate("OutPutSpeakerDialog", u"\u9884\u8bbe", None))
179 | self.pushButton_read_preinstall.setText(QCoreApplication.translate("OutPutSpeakerDialog", u"\u8bfb\u53d6\u6240\u9009\u9884\u8bbe", None))
180 | self.label_4.setText(QCoreApplication.translate("OutPutSpeakerDialog", u"\u58f0\u9053\u6570", None))
181 | self.comboBox_channel.setItemText(0, QCoreApplication.translate("OutPutSpeakerDialog", u"1", None))
182 | self.comboBox_channel.setItemText(1, QCoreApplication.translate("OutPutSpeakerDialog", u"2", None))
183 |
184 | self.checkBox_auto_skip.setText(QCoreApplication.translate("OutPutSpeakerDialog", u"\u662f", None))
185 | self.label_5.setText(QCoreApplication.translate("OutPutSpeakerDialog", u"\u81ea\u52a8\u8df3\u8fc7\u542b\u6709\u975e\u4e2d\u6587\u7684\u6570\u636e", None))
186 | self.label_guiyihua.setText(QCoreApplication.translate("OutPutSpeakerDialog", u"\u5f52\u4e00\u5316\uff08\u7559\u7a7a\u4e3a\u4e0d\u8fdb\u884c\u5f52\u4e00\u5316\uff09\n"
187 | "\u8303\u56f4\u4e3a-70~-5", None))
188 | self.lineEdit_guiyihua.setText(QCoreApplication.translate("OutPutSpeakerDialog", u"-23", None))
189 | self.groupBox.setTitle(QCoreApplication.translate("OutPutSpeakerDialog", u"\u9884\u89c8", None))
190 | self.label_cengji.setText(QCoreApplication.translate("OutPutSpeakerDialog", u"sounds\n"
191 | " - 1.wav\n"
192 | " - 2.wav\n"
193 | " ......\n"
194 | "labels.txt", None))
195 | self.label_geshi.setText(QCoreApplication.translate("OutPutSpeakerDialog", u"1.wav|\u4f60\u597d\u4e16\u754c\n"
196 | "2.wav|\u4e16\u754c\u4f60\u597d\n"
197 | "......", None))
198 | self.label_6.setText(QCoreApplication.translate("OutPutSpeakerDialog", u"\u6587\u4ef6\u5c42\u7ea7\uff1a", None))
199 | self.label_7.setText(QCoreApplication.translate("OutPutSpeakerDialog", u"\u6807\u6ce8\u6587\u4ef6\u5185\u5bb9\uff1a", None))
200 | self.label_8.setText(QCoreApplication.translate("OutPutSpeakerDialog", u"\u9884\u8ba1\u5bfc\u51fa\u6587\u4ef6\u6570\u91cf\uff1a", None))
201 | self.label_file_num.setText("")
202 | self.pushButton_next.setText(QCoreApplication.translate("OutPutSpeakerDialog", u"\u4e0b\u4e00\u6b65", None))
203 | self.pushButton_back.setText(QCoreApplication.translate("OutPutSpeakerDialog", u"\u4e0a\u4e00\u6b65", None))
204 | self.label_error.setText("")
205 | self.groupBox_3.setTitle(QCoreApplication.translate("OutPutSpeakerDialog", u"\u8bc4\u6d4b\u76f8\u5173", None))
206 | self.comboBox_pingce.setPlaceholderText("")
207 | self.label_10.setText(QCoreApplication.translate("OutPutSpeakerDialog", u"\u9009\u62e9\u8bc4\u6d4b\u4f9d\u636e\u540e\u53ef\u4ee5\u8fc7\u6ee4\u5bfc\u51fa\u7684\u6570\u636e\uff0c\u53ea\u4f1a\u5bfc\u51fa\u6307\u5b9a\u5206\u6570\u8d85\u8fc7\u9650\u5b9a\u503c\u7684\u6570\u636e\u3002", None))
208 | # retranslateUi
209 |
210 |
--------------------------------------------------------------------------------
/ui/pyuic/ui_pingce_jindutiao.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | ################################################################################
4 | ## Form generated from reading UI file 'pingce_jindutiao.ui'
5 | ##
6 | ## Created by: Qt User Interface Compiler version 6.4.2
7 | ##
8 | ## WARNING! All changes made in this file will be lost when recompiling UI file!
9 | ################################################################################
10 |
11 | from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale,
12 | QMetaObject, QObject, QPoint, QRect,
13 | QSize, QTime, QUrl, Qt)
14 | from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,
15 | QFont, QFontDatabase, QGradient, QIcon,
16 | QImage, QKeySequence, QLinearGradient, QPainter,
17 | QPalette, QPixmap, QRadialGradient, QTransform)
18 | from PySide6.QtWidgets import (QApplication, QDialog, QProgressBar, QPushButton,
19 | QSizePolicy, QWidget)
20 |
21 | class Ui_PingcejinduDialog(object):
22 | def setupUi(self, PingcejinduDialog):
23 | if not PingcejinduDialog.objectName():
24 | PingcejinduDialog.setObjectName(u"PingcejinduDialog")
25 | PingcejinduDialog.resize(351, 111)
26 | self.progressBar = QProgressBar(PingcejinduDialog)
27 | self.progressBar.setObjectName(u"progressBar")
28 | self.progressBar.setGeometry(QRect(20, 20, 311, 23))
29 | font = QFont()
30 | font.setPointSize(12)
31 | self.progressBar.setFont(font)
32 | self.progressBar.setMinimum(0)
33 | self.progressBar.setMaximum(0)
34 | self.progressBar.setValue(0)
35 | self.progressBar.setTextDirection(QProgressBar.TopToBottom)
36 | self.pushButton_stop = QPushButton(PingcejinduDialog)
37 | self.pushButton_stop.setObjectName(u"pushButton_stop")
38 | self.pushButton_stop.setGeometry(QRect(20, 60, 75, 24))
39 | self.pushButton_stop.setFont(font)
40 |
41 | self.retranslateUi(PingcejinduDialog)
42 |
43 | QMetaObject.connectSlotsByName(PingcejinduDialog)
44 | # setupUi
45 |
46 | def retranslateUi(self, PingcejinduDialog):
47 | PingcejinduDialog.setWindowTitle(QCoreApplication.translate("PingcejinduDialog", u"\u8bed\u97f3\u8bc4\u6d4b", None))
48 | self.progressBar.setFormat(QCoreApplication.translate("PingcejinduDialog", u"%v/%m", None))
49 | self.pushButton_stop.setText(QCoreApplication.translate("PingcejinduDialog", u"\u505c\u6b62", None))
50 | # retranslateUi
51 |
52 |
--------------------------------------------------------------------------------
/ui/pyuic/ui_select_dataset.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | ################################################################################
4 | ## Form generated from reading UI file 'select_dataset.ui'
5 | ##
6 | ## Created by: Qt User Interface Compiler version 6.4.2
7 | ##
8 | ## WARNING! All changes made in this file will be lost when recompiling UI file!
9 | ################################################################################
10 |
11 | from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale,
12 | QMetaObject, QObject, QPoint, QRect,
13 | QSize, QTime, QUrl, Qt)
14 | from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,
15 | QFont, QFontDatabase, QGradient, QIcon,
16 | QImage, QKeySequence, QLinearGradient, QPainter,
17 | QPalette, QPixmap, QRadialGradient, QTransform)
18 | from PySide6.QtWidgets import (QAbstractItemView, QApplication, QHeaderView, QMainWindow,
19 | QMenuBar, QPushButton, QSizePolicy, QStatusBar,
20 | QTableWidget, QTableWidgetItem, QWidget)
21 |
22 | class Ui_MainWindow(object):
23 | def setupUi(self, MainWindow):
24 | if not MainWindow.objectName():
25 | MainWindow.setObjectName(u"MainWindow")
26 | MainWindow.resize(800, 600)
27 | MainWindow.setMinimumSize(QSize(800, 600))
28 | MainWindow.setMaximumSize(QSize(800, 600))
29 | self.centralwidget = QWidget(MainWindow)
30 | self.centralwidget.setObjectName(u"centralwidget")
31 | self.tableWidget = QTableWidget(self.centralwidget)
32 | if (self.tableWidget.columnCount() < 5):
33 | self.tableWidget.setColumnCount(5)
34 | __qtablewidgetitem = QTableWidgetItem()
35 | self.tableWidget.setHorizontalHeaderItem(0, __qtablewidgetitem)
36 | __qtablewidgetitem1 = QTableWidgetItem()
37 | self.tableWidget.setHorizontalHeaderItem(1, __qtablewidgetitem1)
38 | __qtablewidgetitem2 = QTableWidgetItem()
39 | self.tableWidget.setHorizontalHeaderItem(2, __qtablewidgetitem2)
40 | __qtablewidgetitem3 = QTableWidgetItem()
41 | self.tableWidget.setHorizontalHeaderItem(3, __qtablewidgetitem3)
42 | __qtablewidgetitem4 = QTableWidgetItem()
43 | self.tableWidget.setHorizontalHeaderItem(4, __qtablewidgetitem4)
44 | self.tableWidget.setObjectName(u"tableWidget")
45 | self.tableWidget.setGeometry(QRect(50, 50, 701, 441))
46 | self.tableWidget.setEditTriggers(QAbstractItemView.NoEditTriggers)
47 | self.pushButton = QPushButton(self.centralwidget)
48 | self.pushButton.setObjectName(u"pushButton")
49 | self.pushButton.setGeometry(QRect(50, 510, 101, 31))
50 | font = QFont()
51 | font.setPointSize(11)
52 | self.pushButton.setFont(font)
53 | MainWindow.setCentralWidget(self.centralwidget)
54 | self.menubar = QMenuBar(MainWindow)
55 | self.menubar.setObjectName(u"menubar")
56 | self.menubar.setGeometry(QRect(0, 0, 800, 22))
57 | MainWindow.setMenuBar(self.menubar)
58 | self.statusbar = QStatusBar(MainWindow)
59 | self.statusbar.setObjectName(u"statusbar")
60 | MainWindow.setStatusBar(self.statusbar)
61 |
62 | self.retranslateUi(MainWindow)
63 |
64 | QMetaObject.connectSlotsByName(MainWindow)
65 | # setupUi
66 |
67 | def retranslateUi(self, MainWindow):
68 | MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"\u9009\u62e9\u6570\u636e\u96c6", None))
69 | ___qtablewidgetitem = self.tableWidget.horizontalHeaderItem(0)
70 | ___qtablewidgetitem.setText(QCoreApplication.translate("MainWindow", u"\u6570\u636e\u96c6\u540d", None));
71 | ___qtablewidgetitem1 = self.tableWidget.horizontalHeaderItem(1)
72 | ___qtablewidgetitem1.setText(QCoreApplication.translate("MainWindow", u"\u521b\u5efa\u65f6\u95f4", None));
73 | ___qtablewidgetitem2 = self.tableWidget.horizontalHeaderItem(2)
74 | ___qtablewidgetitem2.setText(QCoreApplication.translate("MainWindow", u"\u4e0a\u6b21\u4f7f\u7528\u65f6\u95f4", None));
75 | ___qtablewidgetitem3 = self.tableWidget.horizontalHeaderItem(3)
76 | ___qtablewidgetitem3.setText(QCoreApplication.translate("MainWindow", u"\u5907\u6ce8", None));
77 | ___qtablewidgetitem4 = self.tableWidget.horizontalHeaderItem(4)
78 | ___qtablewidgetitem4.setText(QCoreApplication.translate("MainWindow", u"\u64cd\u4f5c", None));
79 | self.pushButton.setText(QCoreApplication.translate("MainWindow", u"\u6dfb\u52a0\u6570\u636e\u96c6", None))
80 | # retranslateUi
81 |
82 |
--------------------------------------------------------------------------------
/ui/pyuic/ui_select_file_long_wav.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | ################################################################################
4 | ## Form generated from reading UI file 'select_file_long_wav.ui'
5 | ##
6 | ## Created by: Qt User Interface Compiler version 6.4.2
7 | ##
8 | ## WARNING! All changes made in this file will be lost when recompiling UI file!
9 | ################################################################################
10 |
11 | from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale,
12 | QMetaObject, QObject, QPoint, QRect,
13 | QSize, QTime, QUrl, Qt)
14 | from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,
15 | QFont, QFontDatabase, QGradient, QIcon,
16 | QImage, QKeySequence, QLinearGradient, QPainter,
17 | QPalette, QPixmap, QRadialGradient, QTransform)
18 | from PySide6.QtWidgets import (QApplication, QDialog, QLabel, QLineEdit,
19 | QPushButton, QSizePolicy, QWidget)
20 |
21 | class Ui_select_file_long_wav_Dialog(object):
22 | def setupUi(self, select_file_long_wav_Dialog):
23 | if not select_file_long_wav_Dialog.objectName():
24 | select_file_long_wav_Dialog.setObjectName(u"select_file_long_wav_Dialog")
25 | select_file_long_wav_Dialog.resize(600, 250)
26 | select_file_long_wav_Dialog.setMinimumSize(QSize(600, 250))
27 | select_file_long_wav_Dialog.setMaximumSize(QSize(600, 250))
28 | font = QFont()
29 | font.setPointSize(12)
30 | select_file_long_wav_Dialog.setFont(font)
31 | self.lineEdit_wav = QLineEdit(select_file_long_wav_Dialog)
32 | self.lineEdit_wav.setObjectName(u"lineEdit_wav")
33 | self.lineEdit_wav.setGeometry(QRect(110, 70, 371, 21))
34 | self.label = QLabel(select_file_long_wav_Dialog)
35 | self.label.setObjectName(u"label")
36 | self.label.setGeometry(QRect(20, 21, 341, 20))
37 | self.label_2 = QLabel(select_file_long_wav_Dialog)
38 | self.label_2.setObjectName(u"label_2")
39 | self.label_2.setGeometry(QRect(30, 70, 81, 16))
40 | self.pushButton_select_wav = QPushButton(select_file_long_wav_Dialog)
41 | self.pushButton_select_wav.setObjectName(u"pushButton_select_wav")
42 | self.pushButton_select_wav.setGeometry(QRect(500, 69, 81, 23))
43 | self.pushButton_back = QPushButton(select_file_long_wav_Dialog)
44 | self.pushButton_back.setObjectName(u"pushButton_back")
45 | self.pushButton_back.setGeometry(QRect(500, 200, 81, 24))
46 | self.pushButton_submit = QPushButton(select_file_long_wav_Dialog)
47 | self.pushButton_submit.setObjectName(u"pushButton_submit")
48 | self.pushButton_submit.setGeometry(QRect(390, 200, 81, 24))
49 | self.error_lable = QLabel(select_file_long_wav_Dialog)
50 | self.error_lable.setObjectName(u"error_lable")
51 | self.error_lable.setGeometry(QRect(30, 170, 541, 16))
52 | self.error_lable.setFont(font)
53 | self.error_lable.setStyleSheet(u"color: red;")
54 | self.lineEdit_spk = QLineEdit(select_file_long_wav_Dialog)
55 | self.lineEdit_spk.setObjectName(u"lineEdit_spk")
56 | self.lineEdit_spk.setGeometry(QRect(110, 100, 371, 21))
57 | self.label_4 = QLabel(select_file_long_wav_Dialog)
58 | self.label_4.setObjectName(u"label_4")
59 | self.label_4.setGeometry(QRect(30, 100, 81, 16))
60 | self.label_5 = QLabel(select_file_long_wav_Dialog)
61 | self.label_5.setObjectName(u"label_5")
62 | self.label_5.setGeometry(QRect(30, 130, 141, 16))
63 | self.lineEdit_min_silence_len = QLineEdit(select_file_long_wav_Dialog)
64 | self.lineEdit_min_silence_len.setObjectName(u"lineEdit_min_silence_len")
65 | self.lineEdit_min_silence_len.setGeometry(QRect(170, 130, 101, 21))
66 | self.lineEdit_non_silence_thresh = QLineEdit(select_file_long_wav_Dialog)
67 | self.lineEdit_non_silence_thresh.setObjectName(u"lineEdit_non_silence_thresh")
68 | self.lineEdit_non_silence_thresh.setGeometry(QRect(430, 130, 101, 21))
69 | self.label_6 = QLabel(select_file_long_wav_Dialog)
70 | self.label_6.setObjectName(u"label_6")
71 | self.label_6.setGeometry(QRect(290, 130, 131, 16))
72 |
73 | self.retranslateUi(select_file_long_wav_Dialog)
74 |
75 | QMetaObject.connectSlotsByName(select_file_long_wav_Dialog)
76 | # setupUi
77 |
78 | def retranslateUi(self, select_file_long_wav_Dialog):
79 | select_file_long_wav_Dialog.setWindowTitle(QCoreApplication.translate("select_file_long_wav_Dialog", u"\u5bfc\u5165\u6587\u4ef6", None))
80 | self.lineEdit_wav.setText("")
81 | self.label.setText(QCoreApplication.translate("select_file_long_wav_Dialog", u"\u8bf7\u9009\u62e9\u4e00\u4e2a\u97f3\u9891\u6587\u4ef6\u548c\u5b83\u5bf9\u5e94\u7684SRT\u5b57\u5e55\u6587\u4ef6", None))
82 | self.label_2.setText(QCoreApplication.translate("select_file_long_wav_Dialog", u"\u97f3\u9891\u6587\u4ef6\uff1a", None))
83 | self.pushButton_select_wav.setText(QCoreApplication.translate("select_file_long_wav_Dialog", u"\u9009\u62e9\u6587\u4ef6", None))
84 | self.pushButton_back.setText(QCoreApplication.translate("select_file_long_wav_Dialog", u"\u53d6\u6d88", None))
85 | self.pushButton_submit.setText(QCoreApplication.translate("select_file_long_wav_Dialog", u"\u786e\u5b9a", None))
86 | self.error_lable.setText("")
87 | self.lineEdit_spk.setText("")
88 | self.label_4.setText(QCoreApplication.translate("select_file_long_wav_Dialog", u"\u53d1\u97f3\u4eba\uff1a", None))
89 | self.label_5.setText(QCoreApplication.translate("select_file_long_wav_Dialog", u"\u6700\u77ed\u9759\u97f3\u957f\u5ea6(ms)\uff1a", None))
90 | self.lineEdit_min_silence_len.setText("")
91 | self.lineEdit_non_silence_thresh.setText("")
92 | self.label_6.setText(QCoreApplication.translate("select_file_long_wav_Dialog", u"\u9759\u97f3\u9608\u503c(dBFS)\uff1a", None))
93 | # retranslateUi
94 |
95 |
--------------------------------------------------------------------------------
/ui/pyuic/ui_select_file_wav_srt.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | ################################################################################
4 | ## Form generated from reading UI file 'select_file_wav_srt.ui'
5 | ##
6 | ## Created by: Qt User Interface Compiler version 6.4.2
7 | ##
8 | ## WARNING! All changes made in this file will be lost when recompiling UI file!
9 | ################################################################################
10 |
11 | from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale,
12 | QMetaObject, QObject, QPoint, QRect,
13 | QSize, QTime, QUrl, Qt)
14 | from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,
15 | QFont, QFontDatabase, QGradient, QIcon,
16 | QImage, QKeySequence, QLinearGradient, QPainter,
17 | QPalette, QPixmap, QRadialGradient, QTransform)
18 | from PySide6.QtWidgets import (QApplication, QCheckBox, QDialog, QLabel,
19 | QLineEdit, QPushButton, QSizePolicy, QWidget)
20 |
21 | class Ui_select_file_wav_srt_Dialog(object):
22 | def setupUi(self, select_file_wav_srt_Dialog):
23 | if not select_file_wav_srt_Dialog.objectName():
24 | select_file_wav_srt_Dialog.setObjectName(u"select_file_wav_srt_Dialog")
25 | select_file_wav_srt_Dialog.resize(600, 300)
26 | select_file_wav_srt_Dialog.setMinimumSize(QSize(600, 300))
27 | select_file_wav_srt_Dialog.setMaximumSize(QSize(600, 300))
28 | font = QFont()
29 | font.setPointSize(12)
30 | select_file_wav_srt_Dialog.setFont(font)
31 | self.lineEdit_wav = QLineEdit(select_file_wav_srt_Dialog)
32 | self.lineEdit_wav.setObjectName(u"lineEdit_wav")
33 | self.lineEdit_wav.setGeometry(QRect(110, 70, 371, 21))
34 | self.label = QLabel(select_file_wav_srt_Dialog)
35 | self.label.setObjectName(u"label")
36 | self.label.setGeometry(QRect(20, 21, 341, 20))
37 | self.label_2 = QLabel(select_file_wav_srt_Dialog)
38 | self.label_2.setObjectName(u"label_2")
39 | self.label_2.setGeometry(QRect(30, 70, 81, 16))
40 | self.lineEdit_srt = QLineEdit(select_file_wav_srt_Dialog)
41 | self.lineEdit_srt.setObjectName(u"lineEdit_srt")
42 | self.lineEdit_srt.setGeometry(QRect(110, 100, 371, 21))
43 | self.label_3 = QLabel(select_file_wav_srt_Dialog)
44 | self.label_3.setObjectName(u"label_3")
45 | self.label_3.setGeometry(QRect(30, 100, 81, 16))
46 | self.pushButton_select_wav = QPushButton(select_file_wav_srt_Dialog)
47 | self.pushButton_select_wav.setObjectName(u"pushButton_select_wav")
48 | self.pushButton_select_wav.setGeometry(QRect(500, 69, 81, 23))
49 | self.pushButton_select_srt = QPushButton(select_file_wav_srt_Dialog)
50 | self.pushButton_select_srt.setObjectName(u"pushButton_select_srt")
51 | self.pushButton_select_srt.setGeometry(QRect(500, 99, 81, 23))
52 | self.pushButton_back = QPushButton(select_file_wav_srt_Dialog)
53 | self.pushButton_back.setObjectName(u"pushButton_back")
54 | self.pushButton_back.setGeometry(QRect(500, 210, 81, 24))
55 | self.pushButton_submit = QPushButton(select_file_wav_srt_Dialog)
56 | self.pushButton_submit.setObjectName(u"pushButton_submit")
57 | self.pushButton_submit.setGeometry(QRect(390, 210, 81, 24))
58 | self.error_lable = QLabel(select_file_wav_srt_Dialog)
59 | self.error_lable.setObjectName(u"error_lable")
60 | self.error_lable.setGeometry(QRect(30, 190, 541, 16))
61 | self.error_lable.setFont(font)
62 | self.error_lable.setStyleSheet(u"color: red;")
63 | self.lineEdit_spk = QLineEdit(select_file_wav_srt_Dialog)
64 | self.lineEdit_spk.setObjectName(u"lineEdit_spk")
65 | self.lineEdit_spk.setGeometry(QRect(110, 130, 371, 21))
66 | self.label_4 = QLabel(select_file_wav_srt_Dialog)
67 | self.label_4.setObjectName(u"label_4")
68 | self.label_4.setGeometry(QRect(30, 130, 81, 16))
69 | self.checkBox_ismerge = QCheckBox(select_file_wav_srt_Dialog)
70 | self.checkBox_ismerge.setObjectName(u"checkBox_ismerge")
71 | self.checkBox_ismerge.setGeometry(QRect(30, 160, 421, 20))
72 |
73 | self.retranslateUi(select_file_wav_srt_Dialog)
74 |
75 | QMetaObject.connectSlotsByName(select_file_wav_srt_Dialog)
76 | # setupUi
77 |
78 | def retranslateUi(self, select_file_wav_srt_Dialog):
79 | select_file_wav_srt_Dialog.setWindowTitle(QCoreApplication.translate("select_file_wav_srt_Dialog", u"\u5bfc\u5165\u6587\u4ef6", None))
80 | self.lineEdit_wav.setText("")
81 | self.label.setText(QCoreApplication.translate("select_file_wav_srt_Dialog", u"\u8bf7\u9009\u62e9\u4e00\u4e2a\u97f3\u9891\u6587\u4ef6\u548c\u5b83\u5bf9\u5e94\u7684SRT\u5b57\u5e55\u6587\u4ef6", None))
82 | self.label_2.setText(QCoreApplication.translate("select_file_wav_srt_Dialog", u"\u97f3\u9891\u6587\u4ef6\uff1a", None))
83 | self.lineEdit_srt.setText("")
84 | self.label_3.setText(QCoreApplication.translate("select_file_wav_srt_Dialog", u"\u5b57\u5e55\u6587\u4ef6\uff1a", None))
85 | self.pushButton_select_wav.setText(QCoreApplication.translate("select_file_wav_srt_Dialog", u"\u9009\u62e9\u6587\u4ef6", None))
86 | self.pushButton_select_srt.setText(QCoreApplication.translate("select_file_wav_srt_Dialog", u"\u9009\u62e9\u6587\u4ef6", None))
87 | self.pushButton_back.setText(QCoreApplication.translate("select_file_wav_srt_Dialog", u"\u53d6\u6d88", None))
88 | self.pushButton_submit.setText(QCoreApplication.translate("select_file_wav_srt_Dialog", u"\u786e\u5b9a", None))
89 | self.error_lable.setText("")
90 | self.lineEdit_spk.setText("")
91 | self.label_4.setText(QCoreApplication.translate("select_file_wav_srt_Dialog", u"\u53d1\u97f3\u4eba\uff1a", None))
92 | self.checkBox_ismerge.setText(QCoreApplication.translate("select_file_wav_srt_Dialog", u"\u81ea\u52a8\u5c06\u76f8\u79bb\u8fc7\u8fd1\u7684\u5b57\u5e55\u5408\u4e3a\u4e00\u4e2a\uff08\u526a\u6620\u5b57\u5e55\u5efa\u8bae\u52fe\u9009\uff09", None))
93 | # retranslateUi
94 |
95 |
--------------------------------------------------------------------------------
/ui/pyuic/ui_select_workspace.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | ################################################################################
4 | ## Form generated from reading UI file 'select_workspace.ui'
5 | ##
6 | ## Created by: Qt User Interface Compiler version 6.4.2
7 | ##
8 | ## WARNING! All changes made in this file will be lost when recompiling UI file!
9 | ################################################################################
10 |
11 | from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale,
12 | QMetaObject, QObject, QPoint, QRect,
13 | QSize, QTime, QUrl, Qt)
14 | from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,
15 | QFont, QFontDatabase, QGradient, QIcon,
16 | QImage, QKeySequence, QLinearGradient, QPainter,
17 | QPalette, QPixmap, QRadialGradient, QTransform)
18 | from PySide6.QtWidgets import (QApplication, QLabel, QLineEdit, QPushButton,
19 | QSizePolicy, QWidget)
20 |
21 | class Ui_Form(object):
22 | def setupUi(self, Form):
23 | if not Form.objectName():
24 | Form.setObjectName(u"Form")
25 | Form.resize(400, 200)
26 | Form.setMinimumSize(QSize(400, 200))
27 | Form.setMaximumSize(QSize(400, 200))
28 | self.pushButton = QPushButton(Form)
29 | self.pushButton.setObjectName(u"pushButton")
30 | self.pushButton.setGeometry(QRect(280, 150, 100, 30))
31 | self.pushButton_2 = QPushButton(Form)
32 | self.pushButton_2.setObjectName(u"pushButton_2")
33 | self.pushButton_2.setGeometry(QRect(160, 150, 100, 30))
34 | self.lineEdit = QLineEdit(Form)
35 | self.lineEdit.setObjectName(u"lineEdit")
36 | self.lineEdit.setGeometry(QRect(80, 60, 291, 21))
37 | font = QFont()
38 | font.setPointSize(10)
39 | self.lineEdit.setFont(font)
40 | self.label = QLabel(Form)
41 | self.label.setObjectName(u"label")
42 | self.label.setGeometry(QRect(30, 60, 53, 21))
43 | self.label.setFont(font)
44 |
45 | self.retranslateUi(Form)
46 | self.pushButton.clicked.connect(Form.close_program)
47 | self.pushButton_2.clicked.connect(Form.get_workspace)
48 |
49 | QMetaObject.connectSlotsByName(Form)
50 | # setupUi
51 |
52 | def retranslateUi(self, Form):
53 | Form.setWindowTitle(QCoreApplication.translate("Form", u"\u9009\u62e9\u5de5\u4f5c\u533a", None))
54 | self.pushButton.setText(QCoreApplication.translate("Form", u"\u9000\u51fa", None))
55 | self.pushButton_2.setText(QCoreApplication.translate("Form", u"\u786e\u5b9a", None))
56 | self.lineEdit.setPlaceholderText(QCoreApplication.translate("Form", u"\u8bf7\u5728\u8fd9\u91cc\u8f93\u5165\u5de5\u4f5c\u533a\u8def\u5f84\uff0c\u652f\u6301\u76f8\u5bf9\u8def\u5f84", None))
57 | self.label.setText(QCoreApplication.translate("Form", u"\u5de5\u4f5c\u533a\uff1a", None))
58 | # retranslateUi
59 |
60 |
--------------------------------------------------------------------------------
/ui/uifiles/add_authorizationinfo.ui:
--------------------------------------------------------------------------------
1 |
2 |
3 | AddAuthenticationDialog
4 |
5 |
6 |
7 | 0
8 | 0
9 | 400
10 | 500
11 |
12 |
13 |
14 |
15 | 12
16 |
17 |
18 |
19 | 添加授权信息
20 |
21 |
22 |
23 |
24 | 20
25 | 20
26 | 181
27 | 21
28 |
29 |
30 |
31 | 名称
32 |
33 |
34 |
35 |
36 |
37 | 20
38 | 50
39 | 351
40 | 21
41 |
42 |
43 |
44 |
45 |
46 |
47 | 20
48 | 90
49 | 191
50 | 21
51 |
52 |
53 |
54 | APPID
55 |
56 |
57 |
58 |
59 |
60 | 20
61 | 160
62 | 201
63 | 21
64 |
65 |
66 |
67 | APISecret(client_secret)
68 |
69 |
70 |
71 |
72 |
73 | 20
74 | 230
75 | 141
76 | 21
77 |
78 |
79 |
80 | APIKey(client_id)
81 |
82 |
83 |
84 |
85 |
86 | 20
87 | 120
88 | 351
89 | 21
90 |
91 |
92 |
93 |
94 |
95 |
96 | 20
97 | 190
98 | 351
99 | 21
100 |
101 |
102 |
103 |
104 |
105 |
106 | 20
107 | 260
108 | 351
109 | 21
110 |
111 |
112 |
113 |
114 |
115 |
116 | 20
117 | 390
118 | 351
119 | 21
120 |
121 |
122 |
123 | color: red;
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 | 264
133 | 440
134 | 111
135 | 24
136 |
137 |
138 |
139 | 取消
140 |
141 |
142 |
143 |
144 |
145 | 130
146 | 440
147 | 111
148 | 24
149 |
150 |
151 |
152 | 提交
153 |
154 |
155 |
156 |
157 |
158 | 20
159 | 330
160 | 111
161 | 22
162 |
163 |
164 |
165 |
166 |
167 |
168 | 20
169 | 300
170 | 141
171 | 21
172 |
173 |
174 |
175 | 应用类型
176 |
177 |
178 |
179 |
180 |
181 |
182 |
--------------------------------------------------------------------------------
/ui/uifiles/add_dataset.ui:
--------------------------------------------------------------------------------
1 |
2 |
3 | Dialog
4 |
5 |
6 |
7 | 0
8 | 0
9 | 400
10 | 300
11 |
12 |
13 |
14 |
15 | 400
16 | 300
17 |
18 |
19 |
20 |
21 | 400
22 | 300
23 |
24 |
25 |
26 | 添加数据集
27 |
28 |
29 |
30 |
31 | 30
32 | 240
33 | 341
34 | 51
35 |
36 |
37 |
38 | Qt::Horizontal
39 |
40 |
41 | QDialogButtonBox::Cancel|QDialogButtonBox::Ok
42 |
43 |
44 |
45 |
46 |
47 | 20
48 | 20
49 | 91
50 | 16
51 |
52 |
53 |
54 |
55 | 12
56 |
57 |
58 |
59 | 数据集名称:
60 |
61 |
62 |
63 |
64 |
65 | 20
66 | 50
67 | 91
68 | 16
69 |
70 |
71 |
72 |
73 | 12
74 |
75 |
76 |
77 | 数据集简介:
78 |
79 |
80 |
81 |
82 |
83 | 120
84 | 18
85 | 251
86 | 23
87 |
88 |
89 |
90 |
91 | 12
92 |
93 |
94 |
95 | padding: 0px;
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 | 120
105 | 50
106 | 251
107 | 181
108 |
109 |
110 |
111 |
112 | 12
113 |
114 |
115 |
116 | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
117 | <html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css">
118 | p, li { white-space: pre-wrap; }
119 | hr { height: 1px; border-width: 0; }
120 | li.unchecked::marker { content: "\2610"; }
121 | li.checked::marker { content: "\2612"; }
122 | </style></head><body style=" font-family:'Microsoft YaHei UI'; font-size:12pt; font-weight:400; font-style:normal;">
123 | <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html>
124 |
125 |
126 |
127 |
128 |
129 | 20
130 | 248
131 | 191
132 | 31
133 |
134 |
135 |
136 |
137 | 12
138 |
139 |
140 |
141 | color:red
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 | buttonBox
152 | rejected()
153 | Dialog
154 | reject()
155 |
156 |
157 | 316
158 | 260
159 |
160 |
161 | 286
162 | 274
163 |
164 |
165 |
166 |
167 |
168 |
--------------------------------------------------------------------------------
/ui/uifiles/add_voice.ui:
--------------------------------------------------------------------------------
1 |
2 |
3 | MainWindow
4 |
5 |
6 |
7 | 0
8 | 0
9 | 800
10 | 600
11 |
12 |
13 |
14 | 为数据集添加音频
15 |
16 |
17 |
18 |
19 |
20 | 20
21 | 40
22 | 761
23 | 501
24 |
25 |
26 |
27 | 0
28 |
29 |
30 |
31 | 音频+字幕
32 |
33 |
34 |
35 |
36 | 只有音频
37 |
38 |
39 |
40 |
41 | 110
42 | 60
43 | 53
44 | 16
45 |
46 |
47 |
48 | todo...
49 |
50 |
51 |
52 |
53 |
54 | 其他
55 |
56 |
57 |
58 |
59 | 80
60 | 60
61 | 53
62 | 16
63 |
64 |
65 |
66 | todo...
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 | 20
75 | 10
76 | 371
77 | 20
78 |
79 |
80 |
81 |
82 | 12
83 |
84 |
85 |
86 | 选择不同的添加音频方式
87 |
88 |
89 |
90 |
100 |
101 |
102 |
103 |
104 |
105 |
--------------------------------------------------------------------------------
/ui/uifiles/biaobei_pingce.ui:
--------------------------------------------------------------------------------
1 |
2 |
3 | BiaobeiPingceDialog
4 |
5 |
6 |
7 | 0
8 | 0
9 | 400
10 | 300
11 |
12 |
13 |
14 |
15 | 12
16 |
17 |
18 |
19 | 标贝语音评测
20 |
21 |
22 |
23 |
24 | 30
25 | 30
26 | 221
27 | 20
28 |
29 |
30 |
31 | 只对未打分的数据进行评测
32 |
33 |
34 |
35 |
36 |
37 | 30
38 | 60
39 | 281
40 | 20
41 |
42 |
43 |
44 | 只对支持的数据进行评测(纯中文)
45 |
46 |
47 | true
48 |
49 |
50 | true
51 |
52 |
53 |
54 |
55 |
56 | 310
57 | 260
58 | 75
59 | 24
60 |
61 |
62 |
63 | 取消
64 |
65 |
66 |
67 |
68 |
69 | 220
70 | 260
71 | 75
72 | 24
73 |
74 |
75 |
76 | 确定
77 |
78 |
79 |
80 |
81 |
82 | 160
83 | 90
84 | 131
85 | 22
86 |
87 |
88 |
89 |
90 |
91 |
92 | 30
93 | 90
94 | 111
95 | 16
96 |
97 |
98 |
99 | 选择授权信息:
100 |
101 |
102 |
103 |
104 |
105 | 30
106 | 230
107 | 351
108 | 16
109 |
110 |
111 |
112 | color:red
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
--------------------------------------------------------------------------------
/ui/uifiles/dataset_view.ui:
--------------------------------------------------------------------------------
1 |
2 |
3 | DatasetMainWindow
4 |
5 |
6 |
7 | 0
8 | 0
9 | 1200
10 | 800
11 |
12 |
13 |
14 |
15 | 1200
16 | 800
17 |
18 |
19 |
20 |
21 | 1200
22 | 800
23 |
24 |
25 |
26 | 数据集
27 |
28 |
29 |
30 |
31 |
32 | 10
33 | 10
34 | 1181
35 | 681
36 |
37 |
38 |
39 |
40 | 12
41 |
42 |
43 |
44 | 0
45 |
46 |
47 |
48 | 数据集概览
49 |
50 |
51 | -
52 |
53 |
54 |
55 |
56 | 10
57 | 10
58 | 1141
59 | 421
60 |
61 |
62 |
63 |
64 | 12
65 |
66 |
67 |
68 | QAbstractItemView::NoEditTriggers
69 |
70 |
71 | false
72 |
73 |
74 | 20
75 |
76 |
77 |
78 | 新建行
79 |
80 |
81 |
82 |
83 | 新建行
84 |
85 |
86 |
87 |
88 | 新建行
89 |
90 |
91 |
92 |
93 | 新建行
94 |
95 |
96 |
97 |
98 | 新建行
99 |
100 |
101 |
102 |
103 | 新建行
104 |
105 |
106 |
107 |
108 | 新建行
109 |
110 |
111 |
112 |
113 | 新建行
114 |
115 |
116 |
117 |
118 | 新建行
119 |
120 |
121 |
122 |
123 | 新建行
124 |
125 |
126 |
127 |
128 | 序号
129 |
130 |
131 |
132 |
133 | 标注文本
134 |
135 |
136 |
137 |
138 | 发音人
139 |
140 |
141 |
142 |
143 | 标签
144 |
145 |
146 |
147 |
148 | 操作
149 |
150 |
151 |
152 |
153 |
154 |
155 | 10
156 | 440
157 | 201
158 | 31
159 |
160 |
161 |
162 |
163 | 10
164 |
165 |
166 |
167 |
168 |
169 |
170 | 230
171 | 440
172 | 231
173 | 31
174 |
175 |
176 |
177 | 从文件导入(音频+字幕)
178 |
179 |
180 |
181 |
182 |
183 | 920
184 | 440
185 | 231
186 | 31
187 |
188 |
189 |
190 | 导出数据集(单发音人)
191 |
192 |
193 |
194 |
195 |
196 | 230
197 | 490
198 | 231
199 | 31
200 |
201 |
202 |
203 | 从文件导入(长音频)
204 |
205 |
206 |
207 |
208 |
209 | 580
210 | 440
211 | 231
212 | 31
213 |
214 |
215 |
216 | 根据源音频删除数据
217 |
218 |
219 |
220 |
221 |
222 |
223 |
224 |
225 | 数据处理
226 |
227 |
228 | -
229 |
230 |
231 |
232 |
233 | 20
234 | 20
235 | 211
236 | 51
237 |
238 |
239 |
240 | 标贝语音评测
241 |
242 |
243 |
244 |
245 |
246 |
247 |
248 |
249 | 软件设置
250 |
251 |
252 |
253 |
254 | 20
255 | 10
256 | 271
257 | 21
258 |
259 |
260 |
261 |
262 | 12
263 |
264 |
265 |
266 | 注意:本页设置在本工作区下通用
267 |
268 |
269 |
270 |
271 |
272 | 20
273 | 50
274 | 1141
275 | 601
276 |
277 |
278 |
279 | 0
280 |
281 |
282 |
283 | 授权管理
284 |
285 |
286 |
287 |
288 | 10
289 | 10
290 | 1111
291 | 271
292 |
293 |
294 |
295 | 标贝
296 |
297 |
298 |
299 |
300 | 20
301 | 20
302 | 961
303 | 231
304 |
305 |
306 |
307 | QAbstractItemView::NoEditTriggers
308 |
309 |
310 | false
311 |
312 |
313 |
314 | id
315 |
316 |
317 |
318 |
319 | 名称
320 |
321 |
322 |
323 |
324 | APP类型
325 |
326 |
327 |
328 |
329 | APPID
330 |
331 |
332 |
333 |
334 | APISecret(client_secret)
335 |
336 |
337 |
338 |
339 | APIKey(client_id)
340 |
341 |
342 |
343 |
344 |
345 |
346 | 990
347 | 20
348 | 111
349 | 41
350 |
351 |
352 |
353 | 添加
354 |
355 |
356 |
357 |
358 |
359 |
360 | 10
361 | 290
362 | 1111
363 | 271
364 |
365 |
366 |
367 | 讯飞
368 |
369 |
370 |
371 |
372 | 990
373 | 20
374 | 111
375 | 41
376 |
377 |
378 |
379 | 添加
380 |
381 |
382 |
383 |
384 |
385 | 20
386 | 20
387 | 961
388 | 231
389 |
390 |
391 |
392 | QAbstractItemView::NoEditTriggers
393 |
394 |
395 | false
396 |
397 |
398 |
399 | id
400 |
401 |
402 |
403 |
404 | 名称
405 |
406 |
407 |
408 |
409 | APP类型
410 |
411 |
412 |
413 |
414 | APPID
415 |
416 |
417 |
418 |
419 | APISecret(client_secret)
420 |
421 |
422 |
423 |
424 | APIKey(client_id)
425 |
426 |
427 |
428 |
429 |
430 |
431 |
432 | 全局设置
433 |
434 |
435 |
436 |
437 |
438 |
439 |
449 |
450 |
451 |
452 |
453 |
454 |
--------------------------------------------------------------------------------
/ui/uifiles/del_info_wav.ui:
--------------------------------------------------------------------------------
1 |
2 |
3 | del_info_wav_Dialog
4 |
5 |
6 |
7 | 0
8 | 0
9 | 600
10 | 250
11 |
12 |
13 |
14 |
15 | 600
16 | 250
17 |
18 |
19 |
20 |
21 | 600
22 | 250
23 |
24 |
25 |
26 |
27 | 12
28 |
29 |
30 |
31 | 删除数据
32 |
33 |
34 |
35 |
36 | 20
37 | 21
38 | 561
39 | 20
40 |
41 |
42 |
43 | 选择一个之前导入的音频文件,删除与此文件关联的数据
44 |
45 |
46 |
47 |
48 |
49 | 30
50 | 70
51 | 81
52 | 16
53 |
54 |
55 |
56 | 音频文件:
57 |
58 |
59 |
60 |
61 |
62 | 500
63 | 200
64 | 81
65 | 24
66 |
67 |
68 |
69 | 取消
70 |
71 |
72 |
73 |
74 |
75 | 390
76 | 200
77 | 81
78 | 24
79 |
80 |
81 |
82 | 确定
83 |
84 |
85 |
86 |
87 |
88 | 30
89 | 170
90 | 541
91 | 16
92 |
93 |
94 |
95 |
96 | 12
97 |
98 |
99 |
100 | color: red;
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | 130
110 | 70
111 | 381
112 | 22
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
--------------------------------------------------------------------------------
/ui/uifiles/edit_info.ui:
--------------------------------------------------------------------------------
1 |
2 |
3 | EditInfoDialog
4 |
5 |
6 |
7 | 0
8 | 0
9 | 400
10 | 300
11 |
12 |
13 |
14 |
15 | 12
16 |
17 |
18 |
19 | 数据编辑
20 |
21 |
22 |
23 |
24 | 20
25 | 20
26 | 111
27 | 20
28 |
29 |
30 |
31 | 数据id:
32 |
33 |
34 |
35 |
36 |
37 | 150
38 | 20
39 | 111
40 | 20
41 |
42 |
43 |
44 | 数据id
45 |
46 |
47 |
48 |
49 |
50 | 20
51 | 50
52 | 111
53 | 20
54 |
55 |
56 |
57 | 标注文本:
58 |
59 |
60 |
61 |
62 |
63 | 150
64 | 50
65 | 231
66 | 21
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 | 20
77 | 80
78 | 111
79 | 20
80 |
81 |
82 |
83 | 发音人:
84 |
85 |
86 |
87 |
88 |
89 | 320
90 | 260
91 | 75
92 | 24
93 |
94 |
95 |
96 | 取消
97 |
98 |
99 |
100 |
101 |
102 | 230
103 | 260
104 | 75
105 | 24
106 |
107 |
108 |
109 | 确定
110 |
111 |
112 |
113 |
114 |
115 | 150
116 | 80
117 | 231
118 | 20
119 |
120 |
121 |
122 | 数据id
123 |
124 |
125 |
126 |
127 |
128 | 20
129 | 110
130 | 121
131 | 20
132 |
133 |
134 |
135 | 开始时间(ms):
136 |
137 |
138 |
139 |
140 |
141 | 20
142 | 140
143 | 121
144 | 20
145 |
146 |
147 |
148 | 结束时间(ms):
149 |
150 |
151 |
152 |
153 |
154 | 150
155 | 110
156 | 231
157 | 21
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 | 150
168 | 140
169 | 231
170 | 21
171 |
172 |
173 |
174 |
175 |
176 |
177 |
178 |
179 |
180 |
181 |
--------------------------------------------------------------------------------
/ui/uifiles/output_dataset_speaker.ui:
--------------------------------------------------------------------------------
1 |
2 |
3 | OutPutSpeakerDialog
4 |
5 |
6 |
7 | 0
8 | 0
9 | 540
10 | 581
11 |
12 |
13 |
14 |
15 | 12
16 |
17 |
18 |
19 | 导出数据集
20 |
21 |
22 |
23 |
24 | 20
25 | 10
26 | 511
27 | 371
28 |
29 |
30 |
31 | 0
32 |
33 |
34 |
35 |
36 |
37 | 20
38 | 131
39 | 131
40 | 16
41 |
42 |
43 |
44 | 添加音频文件前缀
45 |
46 |
47 |
48 |
49 |
50 | 290
51 | 170
52 | 191
53 | 21
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 | 290
64 | 90
65 | 191
66 | 22
67 |
68 |
69 |
70 |
71 |
72 |
73 | 20
74 | 171
75 | 131
76 | 16
77 |
78 |
79 |
80 | 音频文件采样率
81 |
82 |
83 |
84 |
85 |
86 | 20
87 | 90
88 | 221
89 | 20
90 |
91 |
92 |
93 | 输出文件层级和标注文件格式
94 |
95 |
96 |
97 |
98 |
99 | 290
100 | 130
101 | 191
102 | 21
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 | 20
113 | 250
114 | 131
115 | 16
116 |
117 |
118 |
119 | 发音人
120 |
121 |
122 |
123 |
124 |
125 | 290
126 | 250
127 | 191
128 | 22
129 |
130 |
131 |
132 |
133 |
134 |
135 | 10
136 | 10
137 | 491
138 | 71
139 |
140 |
141 |
142 | 预设
143 |
144 |
145 |
146 |
147 | 280
148 | 30
149 | 111
150 | 24
151 |
152 |
153 |
154 |
155 | 12
156 |
157 |
158 |
159 | 读取所选预设
160 |
161 |
162 |
163 |
164 |
165 | 10
166 | 30
167 | 211
168 | 22
169 |
170 |
171 |
172 |
173 |
174 |
175 |
176 | 20
177 | 211
178 | 131
179 | 16
180 |
181 |
182 |
183 | 声道数
184 |
185 |
186 |
187 |
188 |
189 | 290
190 | 210
191 | 191
192 | 22
193 |
194 |
195 | -
196 |
197 | 1
198 |
199 |
200 | -
201 |
202 | 2
203 |
204 |
205 |
206 |
207 |
208 |
209 | 290
210 | 290
211 | 111
212 | 20
213 |
214 |
215 |
216 | 是
217 |
218 |
219 | true
220 |
221 |
222 |
223 |
224 |
225 | 20
226 | 290
227 | 201
228 | 16
229 |
230 |
231 |
232 | 自动跳过含有非中文的数据
233 |
234 |
235 |
236 |
237 |
238 | 20
239 | 330
240 | 261
241 | 41
242 |
243 |
244 |
245 | 归一化(留空为不进行归一化)
246 | 范围为-70~-5
247 |
248 |
249 | Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop
250 |
251 |
252 |
253 |
254 |
255 | 290
256 | 330
257 | 191
258 | 21
259 |
260 |
261 |
262 | -23
263 |
264 |
265 |
266 |
267 |
268 |
269 |
270 | 0
271 | 30
272 | 501
273 | 231
274 |
275 |
276 |
277 | 预览
278 |
279 |
280 |
281 |
282 | 10
283 | 50
284 | 231
285 | 141
286 |
287 |
288 |
289 | sounds
290 | - 1.wav
291 | - 2.wav
292 | ......
293 | labels.txt
294 |
295 |
296 | Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop
297 |
298 |
299 |
300 |
301 |
302 | 260
303 | 50
304 | 231
305 | 141
306 |
307 |
308 |
309 | 1.wav|你好世界
310 | 2.wav|世界你好
311 | ......
312 |
313 |
314 | Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop
315 |
316 |
317 |
318 |
319 |
320 | 10
321 | 26
322 | 151
323 | 16
324 |
325 |
326 |
327 |
328 | 12
329 | true
330 |
331 |
332 |
333 | 文件层级:
334 |
335 |
336 |
337 |
338 |
339 | 260
340 | 26
341 | 151
342 | 16
343 |
344 |
345 |
346 |
347 | 12
348 | true
349 |
350 |
351 |
352 | 标注文件内容:
353 |
354 |
355 |
356 |
357 |
358 | 10
359 | 200
360 | 141
361 | 20
362 |
363 |
364 |
365 | 预计导出文件数量:
366 |
367 |
368 |
369 |
370 |
371 | 160
372 | 200
373 | 151
374 | 20
375 |
376 |
377 |
378 |
379 |
380 |
381 |
382 |
383 |
384 |
385 |
386 |
387 | 430
388 | 540
389 | 75
390 | 24
391 |
392 |
393 |
394 | 下一步
395 |
396 |
397 |
398 |
399 |
400 | 320
401 | 540
402 | 75
403 | 24
404 |
405 |
406 |
407 | 上一步
408 |
409 |
410 |
411 |
412 |
413 | 40
414 | 520
415 | 271
416 | 16
417 |
418 |
419 |
420 |
421 | 12
422 |
423 |
424 |
425 | color:red
426 |
427 |
428 |
429 |
430 |
431 |
432 |
433 |
434 | 30
435 | 390
436 | 491
437 | 131
438 |
439 |
440 |
441 | 评测相关
442 |
443 |
444 |
445 |
446 | 10
447 | 30
448 | 211
449 | 22
450 |
451 |
452 |
453 |
454 |
455 |
456 |
457 |
458 |
459 | 240
460 | 20
461 | 241
462 | 101
463 |
464 |
465 |
466 | -
467 |
468 |
469 | -
470 |
471 |
472 |
473 |
474 |
475 |
476 |
477 | 10
478 | 60
479 | 211
480 | 61
481 |
482 |
483 |
484 | 选择评测依据后可以过滤导出的数据,只会导出指定分数超过限定值的数据。
485 |
486 |
487 | true
488 |
489 |
490 |
491 |
492 |
493 |
494 |
495 |
--------------------------------------------------------------------------------
/ui/uifiles/pingce_jindutiao.ui:
--------------------------------------------------------------------------------
1 |
2 |
3 | PingcejinduDialog
4 |
5 |
6 |
7 | 0
8 | 0
9 | 351
10 | 111
11 |
12 |
13 |
14 | 语音评测
15 |
16 |
17 |
18 |
19 | 20
20 | 20
21 | 311
22 | 23
23 |
24 |
25 |
26 |
27 | 12
28 |
29 |
30 |
31 | 0
32 |
33 |
34 | 0
35 |
36 |
37 | 0
38 |
39 |
40 | QProgressBar::TopToBottom
41 |
42 |
43 | %v/%m
44 |
45 |
46 |
47 |
48 |
49 | 20
50 | 60
51 | 75
52 | 24
53 |
54 |
55 |
56 |
57 | 12
58 |
59 |
60 |
61 | 停止
62 |
63 |
64 |
65 |
66 |
67 |
68 |
--------------------------------------------------------------------------------
/ui/uifiles/select_dataset.ui:
--------------------------------------------------------------------------------
1 |
2 |
3 | MainWindow
4 |
5 |
6 |
7 | 0
8 | 0
9 | 800
10 | 600
11 |
12 |
13 |
14 |
15 | 800
16 | 600
17 |
18 |
19 |
20 |
21 | 800
22 | 600
23 |
24 |
25 |
26 | 选择数据集
27 |
28 |
29 |
30 |
31 |
32 | 50
33 | 50
34 | 701
35 | 441
36 |
37 |
38 |
39 | QAbstractItemView::NoEditTriggers
40 |
41 |
42 |
43 | 数据集名
44 |
45 |
46 |
47 |
48 | 创建时间
49 |
50 |
51 |
52 |
53 | 上次使用时间
54 |
55 |
56 |
57 |
58 | 备注
59 |
60 |
61 |
62 |
63 | 操作
64 |
65 |
66 |
67 |
68 |
69 |
70 | 50
71 | 510
72 | 101
73 | 31
74 |
75 |
76 |
77 |
78 | 11
79 |
80 |
81 |
82 | 添加数据集
83 |
84 |
85 |
86 |
96 |
97 |
98 |
99 |
100 |
101 |
--------------------------------------------------------------------------------
/ui/uifiles/select_file_long_wav.ui:
--------------------------------------------------------------------------------
1 |
2 |
3 | select_file_long_wav_Dialog
4 |
5 |
6 |
7 | 0
8 | 0
9 | 600
10 | 250
11 |
12 |
13 |
14 |
15 | 600
16 | 250
17 |
18 |
19 |
20 |
21 | 600
22 | 250
23 |
24 |
25 |
26 |
27 | 12
28 |
29 |
30 |
31 | 导入文件
32 |
33 |
34 |
35 |
36 | 110
37 | 70
38 | 371
39 | 21
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 | 20
50 | 21
51 | 341
52 | 20
53 |
54 |
55 |
56 | 请选择一个音频文件和它对应的SRT字幕文件
57 |
58 |
59 |
60 |
61 |
62 | 30
63 | 70
64 | 81
65 | 16
66 |
67 |
68 |
69 | 音频文件:
70 |
71 |
72 |
73 |
74 |
75 | 500
76 | 69
77 | 81
78 | 23
79 |
80 |
81 |
82 | 选择文件
83 |
84 |
85 |
86 |
87 |
88 | 500
89 | 200
90 | 81
91 | 24
92 |
93 |
94 |
95 | 取消
96 |
97 |
98 |
99 |
100 |
101 | 390
102 | 200
103 | 81
104 | 24
105 |
106 |
107 |
108 | 确定
109 |
110 |
111 |
112 |
113 |
114 | 30
115 | 170
116 | 541
117 | 16
118 |
119 |
120 |
121 |
122 | 12
123 |
124 |
125 |
126 | color: red;
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 | 110
136 | 100
137 | 371
138 | 21
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 | 30
149 | 100
150 | 81
151 | 16
152 |
153 |
154 |
155 | 发音人:
156 |
157 |
158 |
159 |
160 |
161 | 30
162 | 130
163 | 141
164 | 16
165 |
166 |
167 |
168 | 最短静音长度(ms):
169 |
170 |
171 |
172 |
173 |
174 | 170
175 | 130
176 | 101
177 | 21
178 |
179 |
180 |
181 |
182 |
183 |
184 |
185 |
186 |
187 | 430
188 | 130
189 | 101
190 | 21
191 |
192 |
193 |
194 |
195 |
196 |
197 |
198 |
199 |
200 | 290
201 | 130
202 | 131
203 | 16
204 |
205 |
206 |
207 | 静音阈值(dBFS):
208 |
209 |
210 |
211 |
212 |
213 |
214 |
--------------------------------------------------------------------------------
/ui/uifiles/select_file_wav_srt.ui:
--------------------------------------------------------------------------------
1 |
2 |
3 | select_file_wav_srt_Dialog
4 |
5 |
6 |
7 | 0
8 | 0
9 | 600
10 | 300
11 |
12 |
13 |
14 |
15 | 600
16 | 300
17 |
18 |
19 |
20 |
21 | 600
22 | 300
23 |
24 |
25 |
26 |
27 | 12
28 |
29 |
30 |
31 | 导入文件
32 |
33 |
34 |
35 |
36 | 110
37 | 70
38 | 371
39 | 21
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 | 20
50 | 21
51 | 341
52 | 20
53 |
54 |
55 |
56 | 请选择一个音频文件和它对应的SRT字幕文件
57 |
58 |
59 |
60 |
61 |
62 | 30
63 | 70
64 | 81
65 | 16
66 |
67 |
68 |
69 | 音频文件:
70 |
71 |
72 |
73 |
74 |
75 | 110
76 | 100
77 | 371
78 | 21
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 | 30
89 | 100
90 | 81
91 | 16
92 |
93 |
94 |
95 | 字幕文件:
96 |
97 |
98 |
99 |
100 |
101 | 500
102 | 69
103 | 81
104 | 23
105 |
106 |
107 |
108 | 选择文件
109 |
110 |
111 |
112 |
113 |
114 | 500
115 | 99
116 | 81
117 | 23
118 |
119 |
120 |
121 | 选择文件
122 |
123 |
124 |
125 |
126 |
127 | 500
128 | 210
129 | 81
130 | 24
131 |
132 |
133 |
134 | 取消
135 |
136 |
137 |
138 |
139 |
140 | 390
141 | 210
142 | 81
143 | 24
144 |
145 |
146 |
147 | 确定
148 |
149 |
150 |
151 |
152 |
153 | 30
154 | 190
155 | 541
156 | 16
157 |
158 |
159 |
160 |
161 | 12
162 |
163 |
164 |
165 | color: red;
166 |
167 |
168 |
169 |
170 |
171 |
172 |
173 |
174 | 110
175 | 130
176 | 371
177 | 21
178 |
179 |
180 |
181 |
182 |
183 |
184 |
185 |
186 |
187 | 30
188 | 130
189 | 81
190 | 16
191 |
192 |
193 |
194 | 发音人:
195 |
196 |
197 |
198 |
199 |
200 | 30
201 | 160
202 | 421
203 | 20
204 |
205 |
206 |
207 | 自动将相离过近的字幕合为一个(剪映字幕建议勾选)
208 |
209 |
210 |
211 |
212 |
213 |
214 |
--------------------------------------------------------------------------------
/ui/uifiles/select_workspace.ui:
--------------------------------------------------------------------------------
1 |
2 |
3 | Form
4 |
5 |
6 |
7 | 0
8 | 0
9 | 400
10 | 200
11 |
12 |
13 |
14 |
15 | 400
16 | 200
17 |
18 |
19 |
20 |
21 | 400
22 | 200
23 |
24 |
25 |
26 | 选择工作区
27 |
28 |
29 |
30 |
31 | 280
32 | 150
33 | 100
34 | 30
35 |
36 |
37 |
38 | 退出
39 |
40 |
41 |
42 |
43 |
44 | 160
45 | 150
46 | 100
47 | 30
48 |
49 |
50 |
51 | 确定
52 |
53 |
54 |
55 |
56 |
57 | 80
58 | 60
59 | 291
60 | 21
61 |
62 |
63 |
64 |
65 | 10
66 |
67 |
68 |
69 | 请在这里输入工作区路径,支持相对路径
70 |
71 |
72 |
73 |
74 |
75 | 30
76 | 60
77 | 53
78 | 21
79 |
80 |
81 |
82 |
83 | 10
84 |
85 |
86 |
87 | 工作区:
88 |
89 |
90 |
91 |
92 |
93 |
94 | pushButton
95 | clicked()
96 | Form
97 | close_program()
98 |
99 |
100 | 323
101 | 164
102 |
103 |
104 | 253
105 | 100
106 |
107 |
108 |
109 |
110 | pushButton_2
111 | clicked()
112 | Form
113 | get_workspace()
114 |
115 |
116 | 220
117 | 161
118 |
119 |
120 | 137
121 | 129
122 |
123 |
124 |
125 |
126 |
127 | close_program()
128 | get_workspace()
129 |
130 |
131 |
--------------------------------------------------------------------------------
/utils/add_path.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | """
3 | @Time : 2023/3/6/006 9:42
4 | @Author : 李子
5 | @Url : https://github.com/kslz
6 | """
7 | import os
8 |
9 | if os.path.isfile(os.path.join("./lib/ffmpeg/", "ffmpeg.exe")):
10 | ffmpeg_path = "./lib/ffmpeg/"
11 | else:
12 | ffmpeg_path = ""
13 | os.environ["PATH"] += os.pathsep + os.path.dirname(ffmpeg_path)
--------------------------------------------------------------------------------
/utils/global_obj.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | """
3 | 神奇的全局变量
4 | @Time : 2023/2/1/001 17:07
5 | @Author : 李子
6 | @Url : https://github.com/kslz
7 | """
8 |
9 |
10 | def _init():
11 | global _global_dict
12 | _global_dict = {}
13 |
14 |
15 | def set_value(key, value):
16 | """ 定义一个全局变量 """
17 | _global_dict[key] = value
18 |
19 |
20 | def get_value(key, defValue=None):
21 | """ 获取一个全局变量,不存在则返回默认值 """
22 | try:
23 | return _global_dict[key]
24 | except KeyError:
25 | return defValue
26 |
27 | _init()
28 |
--------------------------------------------------------------------------------
/utils/log.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | """
3 | @Time : 2023/2/1/001 14:17
4 | @Author : 李子
5 | @Url : https://github.com/kslz
6 | """
7 |
8 | import logging
9 | import os
10 |
11 |
12 | def creatlogger(logname):
13 | # 1、创建一个logger
14 | logger = logging.getLogger(logname) # 创建 logger
15 | logger.setLevel(logging.DEBUG) # 写入内容的严重级别
16 |
17 | # Handler方法有很多下面主要介绍两种:StreamHandler 和 FileHandler
18 | # 2、创建一个handler,用于写入日志文件
19 | os.makedirs('logs', exist_ok=True)
20 | fh = logging.FileHandler('logs/program.log', encoding="utf-8") # 将日志写入到logs/program.log文件
21 | fh.setLevel(logging.DEBUG) # 并且需要指定写入的内容严重级别
22 | # 再创建一个handler,用于输出到控制台
23 | ch = logging.StreamHandler() # 将日志写入控制台
24 | ch.setLevel(logging.DEBUG) # 并且需要指定写入的内容严重级别
25 |
26 | # 3、定义handler的输出格式(formatter)
27 | formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
28 |
29 | # 4、给handler添加formatter
30 | fh.setFormatter(formatter)
31 | ch.setFormatter(formatter)
32 |
33 | # 5、给logger添加handler
34 | logger.addHandler(fh)
35 | logger.addHandler(ch)
36 |
37 | return logger
38 |
39 |
40 | guilogger = creatlogger("guilogger")
41 | requsetlogger = creatlogger("requsetlogger")
42 |
43 | if __name__ == '__main__':
44 | logger = creatlogger("testlog")
45 | # 6、进行日志输出
46 | logger.info("这是一条INFO级别的信息。")
47 | logger.debug('debug message')
48 | logger.info('info message')
49 | logger.warning('warn message')
50 | logger.error('error message')
51 | logger.critical('critical message')
52 |
--------------------------------------------------------------------------------
/utils/peewee_orm.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | """
3 | @Time : 2023/2/10/010 17:25
4 | @Author : 李子
5 | @Url : https://github.com/kslz
6 | """
7 | from datetime import datetime
8 | from typing import Optional
9 |
10 | import peewee
11 | from peewee import *
12 |
13 | from utils.tool_str import *
14 |
15 | db = SqliteDatabase(None)
16 |
17 |
18 | class DbStr():
19 | BiaoBei = "标贝"
20 | XunFei = "讯飞"
21 | ShengWen = "声纹识别"
22 | PingCe = "语音评测"
23 |
24 |
25 | class BaseModel(Model):
26 | class Meta:
27 | database = db
28 |
29 |
30 | class Workspace(BaseModel):
31 | workspace_id = PrimaryKeyField()
32 | workspace_name = CharField(null=False)
33 | workspace_create_time = DateTimeField(default=datetime.now)
34 | workspace_last_use_time = DateTimeField(default=datetime.now)
35 | workspace_info = CharField(null=True, help_text='工作区介绍,不要超过255字')
36 |
37 | class Meta:
38 | table_name = 'workspace_tbl'
39 |
40 |
41 | class Dataset(BaseModel):
42 | dataset_id = PrimaryKeyField()
43 | dataset_name = CharField(null=False, unique=True)
44 | dataset_create_time = DateTimeField(default=datetime.now().replace(microsecond=0))
45 | dataset_last_use_time = DateTimeField(default=datetime.now().replace(microsecond=0))
46 | dataset_info = TextField(null=True, help_text='数据集介绍')
47 |
48 | class Meta:
49 | table_name = 'dataset_tbl'
50 |
51 |
52 | class Info(BaseModel):
53 | info_id = PrimaryKeyField()
54 | dataset_id = ForeignKeyField(Dataset, "dataset_id", "infos", on_delete='CASCADE')
55 | info_text = CharField(null=True, )
56 | info_pinyin = CharField(null=True, )
57 | info_speaker = CharField(null=True, )
58 | info_shibie_speaker = CharField(null=True, )
59 | info_shibie_score = FloatField(null=True, )
60 | info_raw_file_path = TextField(null=True, )
61 | info_start_time = IntegerField(null=True, )
62 | info_end_time = IntegerField(null=True, )
63 | info_file_path = TextField(null=True, )
64 | info_mfa = TextField(null=True, )
65 | info_is_del = BooleanField(default=False)
66 |
67 | class Meta:
68 | table_name = 'info_tbl'
69 |
70 |
71 | # class SpkInfo(BaseModel):
72 | # spkinfo_id = PrimaryKeyField()
73 | # info_id = ForeignKeyField(Info, "info_id", "spkinfos", on_delete='CASCADE')
74 | # spkinfo_name = CharField()
75 | # spkinfo_score = FloatField()
76 | #
77 | # class Meta:
78 | # table_name = 'spkinfo_tbl'
79 |
80 |
81 | class AuthorizationInfo(BaseModel):
82 | authorizationinfo_id = PrimaryKeyField()
83 | authorizationinfo_name = CharField(null=False)
84 | authorizationinfo_APPID = CharField(null=False)
85 | authorizationinfo_APISecret = CharField(null=False)
86 | authorizationinfo_APIKey = CharField(null=False)
87 | authorizationinfo_company = CharField(null=False)
88 | authorizationinfo_app = CharField(null=False)
89 | authorizationinfo_token = TextField(null=True)
90 |
91 | class Meta:
92 | table_name = 'authorizationinfo_tbl'
93 |
94 |
95 | class BiaoBeiPingCeInfo(BaseModel):
96 | biaobeipingce_id = PrimaryKeyField()
97 | info_id = ForeignKeyField(Info, "info_id", on_delete='CASCADE', unique=True)
98 | biaobeipingce_acc_score = IntegerField(null=True, ) # 句子准确度得分
99 | biaobeipingce_flu_score = IntegerField(null=True, ) # 句子流利度得分
100 | biaobeipingce_int_score = IntegerField(null=True, ) # 句子完整度得分
101 | biaobeipingce_all_score = IntegerField(null=True, ) # 总得分
102 | biaobeipingce_all_text = TextField(null=True) # 完整返回数据
103 |
104 | class Meta:
105 | table_name = 'biaobeipingce_tbl'
106 |
107 |
108 | def get_authorizationinfo_by_id(authorizationinfo_id):
109 | query = AuthorizationInfo.select().where(AuthorizationInfo.authorizationinfo_id == authorizationinfo_id)
110 | results = query.execute()
111 | return results
112 |
113 |
114 | def get_pingce_info2(dataset_id):
115 | query = (BiaoBeiPingCeInfo
116 | .select(Info.info_id, BiaoBeiPingCeInfo.biaobeipingce_all_score)
117 | .join(Info)
118 | .where(Info.dataset_id == dataset_id))
119 |
120 | results = query.execute()
121 | for result in results:
122 | info_id = result.info_id
123 | biaobeipingce_all_score = result.biaobeipingce_all_score
124 | print(f"Info ID: {info_id}, Score: {biaobeipingce_all_score}")
125 |
126 |
127 | def get_pingce_info(dataset_id, is_skip_done):
128 | query = (Info
129 | .select(Info, BiaoBeiPingCeInfo.biaobeipingce_all_score)
130 | .join(BiaoBeiPingCeInfo, JOIN.LEFT_OUTER)
131 | .where(
132 | Info.dataset_id == dataset_id,
133 | Info.info_is_del == 0,
134 | )
135 | )
136 | # for result in results:
137 | # info_id = result.info_id
138 | # biaobeipingce_all_score = result.biaobeipingceinfo.biaobeipingce_all_score if hasattr(result,
139 | # 'biaobeipingceinfo') else None
140 | # print(f"Info ID: {info_id}, Score: {biaobeipingce_all_score}")
141 | # 注意:在左外连接中,如果右表中没有与左表关联的数据,则在查询结果中对应的列会显示为 NULL。这在原生 SQL 查询中是可以直接访问和处理的。
142 | # 然而,在使用 Peewee ORM 进行查询时,它会尝试将查询结果映射到模型对象上,但如果某个字段在查询结果中为 NULL,Peewee 默认情况下不会为模型对象创建对应的属性。因此,在代码中直接访问不存在的属性时会引发 AttributeError。
143 | # 为了解决这个问题,我们可以使用 hasattr() 函数进行存在性检查,如之前提供的代码示例所示。这样,即使某些记录在右表中没有对应的数据,我们可以避免引发异常并正确处理这种情况。
144 |
145 | if is_skip_done:
146 | query = query.where(BiaoBeiPingCeInfo.biaobeipingce_all_score.is_null())
147 |
148 | results = query.execute()
149 |
150 | return results
151 |
152 | pass
153 |
154 |
155 | def get_authorizationinfo(company: Optional[str] = None, app: Optional[str] = None):
156 | query = AuthorizationInfo.select()
157 |
158 | if company is not None:
159 | query = query.where(AuthorizationInfo.authorizationinfo_company == company)
160 |
161 | if app is not None:
162 | query = query.where(AuthorizationInfo.authorizationinfo_app == app)
163 |
164 | results = query.execute()
165 |
166 | return list(results)
167 |
168 |
169 | def get_dataset_window_info(dataset_id=1, page_size=15, page_number=1):
170 | subquery = (
171 | Info
172 | .select(
173 | Info.info_id,
174 | fn.row_number().over(order_by=[Info.info_id]).alias('row_number')
175 | )
176 | .where(
177 | # (Info.info_is_del == 0) &
178 | (Info.dataset_id == dataset_id)
179 | )
180 | .order_by(Info.info_id)
181 | .alias('subquery')
182 | )
183 |
184 | query = (Info
185 | .select(
186 | subquery.c.row_number.alias('index'),
187 | Info.info_id,
188 | Info.info_text,
189 | Info.info_speaker,
190 | Info.info_shibie_speaker,
191 | Info.info_start_time,
192 | Info.info_end_time,
193 | Info.info_raw_file_path,
194 | Info.info_is_del,
195 | )
196 | .join(subquery, on=(Info.info_id == subquery.c.info_id))
197 | .where(
198 | # (Info.info_is_del == 0) &
199 | (Info.dataset_id == dataset_id)
200 | )
201 | .order_by(
202 | Info.info_id.asc()
203 | ))
204 | total_count = query.count()
205 | query = query.paginate(page_number, page_size)
206 | # todo 待优化 目前搜索范围外的数据时会出现空白页
207 |
208 | # 执行查询
209 | # 我发现这里的查询好像会查询很多次数据库,不过也还好吧,应该不会有人存几百万条数据进去
210 | results = list(query.dicts())
211 | return total_count, results
212 |
213 |
214 | # def get_dataset_window_info(dataset_id=1, page_size=15, page_number=1):
215 | # # 下面的查询是chatGPT写的
216 | # # 都说先进的科技乍一看和魔法无异,想来这就是了
217 | # # 整复杂了 重来
218 | # query = (Info
219 | # .select(
220 | # Info.info_id.alias('index'),
221 | # Info.info_id,
222 | # Info.info_text,
223 | # fn.COALESCE(
224 | # SpkInfo.spkinfo_name,
225 | # Info.info_speaker).alias('speaker'),
226 | # # SQL('(CASE WHEN info_file_path = "" OR info_file_path IS NULL THEN 0 ELSE 1 END)').alias('is_separate_file')
227 | # )
228 | # .join(
229 | # SpkInfo,
230 | # JOIN.LEFT_OUTER,
231 | # on=(Info.info_id == SpkInfo.info_id)
232 | # )
233 | # .where(
234 | # (Info.info_is_del == 0) &
235 | # (Info.dataset_id == dataset_id)
236 | # )
237 | # .group_by(
238 | # Info.info_id
239 | # )
240 | # .order_by(
241 | # Info.info_id.asc()
242 | # ))
243 | #
244 | # total_count = query.count()
245 | # # print(total_count)
246 | #
247 | # # 分页
248 | # query = query.paginate(page_number, page_size)
249 | # # todo 待优化 目前搜索范围外的数据时会出现空白页
250 | #
251 | # # 执行查询
252 | # # 我发现这里的查询好像会查询很多次数据库,不过也还好吧,应该不会有人存几百万条数据进去
253 | # results = list(query.dicts())
254 | # return total_count, results
255 |
256 |
257 | def get_speakers(dataset_id):
258 | """
259 | 获取所有speaker值
260 |
261 | """
262 | query = (Info
263 | .select(Info.info_speaker, Info.info_shibie_speaker)
264 | .where(
265 | (Info.info_is_del == 0) &
266 | (Info.dataset_id == dataset_id)
267 | ))
268 | result_list = []
269 | for row in query.dicts():
270 | if row["info_shibie_speaker"] is not None:
271 | row_result = (row["info_shibie_speaker"], "shibie_spk")
272 | else:
273 | row_result = (row["info_speaker"], "spk")
274 | if result_list.count(row_result) == 0:
275 | result_list.append(row_result)
276 | return result_list
277 |
278 |
279 | def get_file_raw_path_by_dataset_id(dataset_id):
280 | query = Info.select(Info.info_raw_file_path).distinct().where(Info.dataset_id == dataset_id)
281 | return list(query)
282 |
283 |
284 | def get_output_info(dataset_id, spk_info, pingce_dict):
285 | query = (Info
286 | .select(
287 | Info.info_id,
288 | Info.info_text,
289 | Info.info_raw_file_path,
290 | Info.info_start_time,
291 | Info.info_end_time,
292 | )
293 | # .join(Dataset, on=(Dataset.dataset_id == Info.dataset_id))
294 | .where(
295 | (Info.info_is_del == 0) &
296 | (Info.dataset_id == dataset_id)
297 | )
298 | .order_by(
299 | Info.info_id.asc()
300 | ))
301 | if spk_info[1] == "shibie_spk":
302 | query = query.where(Info.info_shibie_speaker == spk_info[0])
303 | else:
304 | query = query.where(Info.info_speaker == spk_info[0])
305 |
306 | if len(pingce_dict) != 0:
307 | # print(pingce_dict)
308 | if pingce_dict["pingce"] == ToolStr.biaobei:
309 | query = query.join(BiaoBeiPingCeInfo, on=(Info.info_id == BiaoBeiPingCeInfo.info_id))\
310 | .where(
311 | BiaoBeiPingCeInfo.biaobeipingce_acc_score >= pingce_dict["acc"],
312 | BiaoBeiPingCeInfo.biaobeipingce_flu_score >= pingce_dict["flu"],
313 | BiaoBeiPingCeInfo.biaobeipingce_int_score >= pingce_dict["int"],
314 | BiaoBeiPingCeInfo.biaobeipingce_all_score >= pingce_dict["all"]
315 | )
316 |
317 | result = list(query.dicts())
318 | # print(result)
319 | return result
320 |
321 |
322 | def update_info(text, start_time, end_time, info_id):
323 | updated_row = Info.update(info_text=text, info_start_time=start_time, info_end_time=end_time) \
324 | .where(Info.info_id == info_id).execute()
325 | print(updated_row)
326 |
327 |
328 | def create_or_update_biaobeipingceinfo(info_id, acc_score, flu_score, int_score, all_score, all_text):
329 | try:
330 | BiaoBeiPingCeInfo.create(info_id=info_id,
331 | biaobeipingce_acc_score=acc_score,
332 | biaobeipingce_flu_score=flu_score,
333 | biaobeipingce_int_score=int_score,
334 | biaobeipingce_all_score=all_score,
335 | biaobeipingce_all_text=all_text)
336 | except peewee.IntegrityError:
337 | BiaoBeiPingCeInfo.update(biaobeipingce_acc_score=acc_score,
338 | biaobeipingce_flu_score=flu_score,
339 | biaobeipingce_int_score=int_score,
340 | biaobeipingce_all_score=all_score,
341 | biaobeipingce_all_text=all_text).where(BiaoBeiPingCeInfo.info_id == info_id).execute()
342 |
343 | pass
344 |
345 |
346 | def insert_info_many(data_list, batch_size=1000):
347 | for i in range(0, len(data_list), batch_size):
348 | with db.atomic():
349 | Info.insert_many(data_list[i:i + batch_size]).execute()
350 |
351 |
352 | def del_info_by_raw_file_path(file_path):
353 | query = Info.delete().where(Info.info_raw_file_path == file_path)
354 | query.execute()
355 |
356 |
357 | class Course(BaseModel):
358 | id = PrimaryKeyField()
359 | title = CharField(null=False)
360 | period = IntegerField()
361 | description = CharField()
362 |
363 | class Meta:
364 | order_by = ('title',)
365 | db_table = 'course'
366 |
367 |
368 | class Teacher(BaseModel):
369 | id = PrimaryKeyField()
370 | name = CharField(null=False)
371 | gender = BooleanField()
372 | address = CharField()
373 | course_id = ForeignKeyField(Course, to_field='id', related_name="course")
374 |
375 | class Meta:
376 | order_by = ('name',)
377 | db_table = 'teacher'
378 |
379 |
380 | def add_fake_data():
381 | Info.create(dataset_id=1, info_text="你好世界", info_speaker="说话人1", )
382 | Info.create(dataset_id=1, info_text="你好世界2", info_speaker="说话人1", )
383 | Info.create(dataset_id=1, info_text="你好世界3", info_speaker="说话人2", )
384 | Info.create(dataset_id=1, info_text="你好世界4", info_speaker="说话人2", )
385 | Info.create(dataset_id=1, info_text="你好世界5", info_speaker="说话人2", )
386 | Info.create(dataset_id=1, info_text="你好世界6", info_speaker="说话人2", )
387 | Info.create(dataset_id=1, info_text="你好世界7", info_speaker="说话人2", )
388 | Info.create(dataset_id=2, info_text="你好世界8", )
389 | Info.create(dataset_id=1, info_text="你好世界9", )
390 | Info.create(dataset_id=1, info_text="你好世界10", info_speaker="说话人1", )
391 | Info.create(dataset_id=1, info_text="你好世界11", info_speaker="说话人1", )
392 | Info.create(dataset_id=1, info_text="你好世界12", info_speaker="说话人1", )
393 | Info.create(dataset_id=1, info_text="你好世界13", info_speaker="说话人1", )
394 | Info.create(dataset_id=1, info_text="你好世界14", )
395 | Info.create(dataset_id=1, info_text="你好世界15", )
396 | Info.create(dataset_id=1, info_text="你好世界16", info_speaker="说话人1", )
397 | Info.create(dataset_id=1, info_text="你好世界17", )
398 | Info.create(dataset_id=1, info_text="你好世界18", info_speaker="说话人1", )
399 | Info.create(dataset_id=1, info_text="你好世界19", )
400 | Info.create(dataset_id=1, info_text="你好世界20", info_speaker="说话人1", )
401 | # SpkInfo.create(info_id=2, spkinfo_name="说话人a", spkinfo_score=0.89)
402 | # SpkInfo.create(info_id=2, spkinfo_name="说话人b", spkinfo_score=0.81)
403 | # SpkInfo.create(info_id=2, spkinfo_name="说话人c", spkinfo_score=0.19)
404 | # SpkInfo.create(info_id=3, spkinfo_name="说话人a", spkinfo_score=0.89)
405 |
406 |
407 | if __name__ == "__main__":
408 | db.init("../workspace/db/workspace.db")
409 | try:
410 | BiaoBeiPingCeInfo.create(info_id=312, biaobeipingce_all_score=90)
411 | except peewee.IntegrityError:
412 | BiaoBeiPingCeInfo.update(biaobeipingce_all_score=80).where(BiaoBeiPingCeInfo.info_id == 312).execute()
413 |
414 | # add_fake_data()
415 | # get_dataset_window_info()
416 | # init_peewee_db()
417 | # db1 = get_peewee_db()
418 | #
419 | # db1.connect()
420 | # create_all_tables(db1)
421 | # db.create_tables([Workspace, Dataset, Info])
422 | # dataset1 = Dataset.create(dataset_name="test2")
423 | # info1 = Info.create(info_text="你好世界", dataset_id=dataset1)
424 |
425 | pass
426 |
--------------------------------------------------------------------------------
/utils/qt_tools.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | """
3 | @Time : 2023/6/27/027 9:11
4 | @Author : 李子
5 | @Url : https://github.com/kslz
6 | """
7 | from PySide6.QtCore import QMutex, Signal, QObject, QMutexLocker, QRunnable, QThreadPool, Qt
8 | from PySide6.QtWidgets import QWidget, QLabel, QSpinBox, QHBoxLayout
9 |
10 |
11 | class ProgressUpdater(QObject):
12 | """
13 | 进度更新器,用于接收任务完成信号并更新进度条
14 | """
15 | progressUpdated = Signal(int)
16 |
17 | def __init__(self, progress_bar):
18 | super().__init__()
19 | self.progress_bar = progress_bar
20 | self.mutex = QMutex()
21 |
22 | def updateProgress(self):
23 | with QMutexLocker(self.mutex):
24 | # 更新进度条
25 | self.progress_bar.setValue(self.progress_bar.value() + 1)
26 |
27 |
28 | class SignalTool(QObject):
29 | """
30 | 这个类唯一的作用是用来帮发不出信号的物件发出信号
31 | """
32 | started = Signal()
33 | finished = Signal()
34 | change_count = Signal(int)
35 |
36 |
37 | class CustomThreadPool(QThreadPool):
38 | noTasksRunning = Signal()
39 |
40 | def __init__(self, parent=None):
41 | super().__init__(parent)
42 | self.activeTasks = 0
43 | self.mutex = QMutex()
44 |
45 | def start(self, arg__1, priority=0):
46 | self.changeActiveTasks(1)
47 | super().start(arg__1, priority)
48 | self.changeActiveTasks(-1)
49 | self.taskFinished()
50 |
51 | def changeActiveTasks(self, change):
52 | with QMutexLocker(self.mutex):
53 | self.activeTasks += change
54 |
55 | def taskFinished(self):
56 | with QMutexLocker(self.mutex):
57 | if self.activeTasks == 0:
58 | self.noTasksRunning.emit()
59 |
60 |
61 | class ScoreWdiget(QWidget):
62 | def __init__(self, name, k, v, parent):
63 | super().__init__(parent)
64 |
65 | self.k = k
66 |
67 | # 创建标签和旋钮框
68 | self.label = QLabel(name)
69 | self.spinbox = QSpinBox()
70 |
71 | font = self.label.font()
72 | font.setPointSize(12)
73 | self.label.setFont(font)
74 | self.spinbox.setFont(font)
75 |
76 | # 设置旋钮框的范围和初始值
77 | self.spinbox.setMinimum(0)
78 | self.spinbox.setMaximum(100)
79 | self.spinbox.setValue(v)
80 |
81 | # 创建水平布局
82 | self.layout = QHBoxLayout(self)
83 | self.layout.setContentsMargins(0, 0, 0, 0) # 这个布局的边框我找了2个小时才找出来,警钟长鸣
84 |
85 | # 将标签和旋钮框添加到布局中
86 | self.layout.addWidget(self.label)
87 | self.layout.addWidget(self.spinbox)
88 |
89 | # 设置标签靠左,旋钮框靠右
90 | self.layout.setAlignment(self.label, Qt.AlignLeft)
91 | self.layout.setAlignment(self.spinbox, Qt.AlignRight)
92 |
93 | def change_text(self, name, k, v):
94 | self.label.setText(name)
95 | self.k = k
96 | self.spinbox.setValue(v)
97 |
98 | def get_score(self, score_dict: dict):
99 | score_dict[self.k] = self.spinbox.value()
100 |
--------------------------------------------------------------------------------
/utils/request_tools.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | """
3 | @Time : 2023/2/24/024 13:38
4 | @Author : 李子
5 | @Url : https://github.com/kslz
6 | """
7 | import json
8 |
9 | import ffmpeg
10 | import requests
11 | import base64
12 |
13 | from utils.log import requsetlogger
14 |
15 |
16 | def get_biaobei_token(client_id, client_secret):
17 | url = 'https://openapi.data-baker.com/oauth/2.0/token'
18 |
19 | payload = {
20 | 'grant_type': 'client_credentials',
21 | 'client_secret': client_secret,
22 | 'client_id': client_id
23 | }
24 |
25 | response = requests.post(url, data=payload)
26 |
27 | if response.ok:
28 | response_json = response.json()
29 | access_token = response_json.get('access_token')
30 | return access_token
31 | else:
32 | return False
33 |
34 |
35 | def pingce_biaobei(file_path, text, access_token, start_time, end_time):
36 | """
37 | 通过标贝接口进行音频评测,并将返回的json文件保存到本地,需自行填入鉴权信息
38 | 注意:只支持采样率16k、位长16bit、单声道的pcm音频。
39 | 标贝语音评测只支持3秒以上的音频,建议使用wav2pcm2()函数进行转换
40 | 文档:https://www.data-baker.com/specs/file/eva_api_restful
41 |
42 | :param file_path: 音频文件路径
43 | :param text: 音频对应文本
44 | :param access_token: 鉴权信息(请参考文档获取)
45 | :parap start_time: 开始时间(毫秒)
46 | :parap end_time: 结束时间(毫秒)
47 | """
48 |
49 | duration = (end_time - start_time) / 1000
50 | start_time = start_time / 1000
51 |
52 | # 从长音频文件中提取指定时间段的音频
53 | output = (
54 | ffmpeg
55 | .input(file_path, ss=start_time, t=duration)
56 | .output('pipe:', format='s16le', acodec='pcm_s16le', ac=1, ar=16000)
57 | .run(capture_stdout=True, quiet=True)
58 | )
59 | output = output[0]
60 |
61 | if duration < 3.1:
62 | # 因为标贝要求音频不能短于3s 所以如果不足3.1s就会生成静音段将音频补到3.1s
63 | # 这段写了一个小时,我现在已经完全了解一切
64 | silence_duration = 3.1 - duration
65 |
66 | silence = (
67 | ffmpeg
68 | .input('anullsrc', f='lavfi', t=silence_duration)
69 | .output('pipe:', format='s16le', acodec='pcm_s16le', ac=1, ar=16000)
70 | .run(capture_stdout=True, quiet=True)
71 | )
72 |
73 | output = output + silence[0]
74 |
75 | base64_data = base64.b64encode(output).decode("utf-8")
76 |
77 | headers = {
78 | 'Content-Type': 'application/json',
79 | 'Host': 'openapi.data-baker.com'
80 | }
81 |
82 | json_data = {
83 | 'access_token': access_token,
84 | 'format': 'pcm',
85 | 'txt': text,
86 | 'lan': 'cn',
87 | 'audio': base64_data,
88 | }
89 |
90 | response = requests.post('https://openapi.data-baker.com/cap/getCapScore', headers=headers, json=json_data)
91 |
92 | response_json = response.json()
93 | if response_json["err_no"] == 90000:
94 | return response_json
95 | requsetlogger.error(f"标贝评测请求失败,错误码: {response_json['err_no']} 错误信息: {response_json['err_msg']}")
96 | return False
97 |
98 | # response_json = response.content.decode("utf-8")
99 | # print(response_json)
100 |
101 |
102 | def test_biaobei_pingce(access_token):
103 | text = "你好世界,"
104 | silence = (
105 | ffmpeg
106 | .input('anullsrc', f='lavfi', t=3.1)
107 | .output('pipe:', format='s16le', acodec='pcm_s16le', ac=1, ar=16000)
108 | .run(capture_stdout=True, quiet=True)
109 | )
110 | # with open("test.wav", "wb") as f:
111 | # f.write(silence[0])
112 | base64_data = base64.b64encode(silence[0]).decode("utf-8")
113 |
114 | headers = {
115 | 'Content-Type': 'application/json',
116 | 'Host': 'openapi.data-baker.com'
117 | }
118 |
119 | json_data = {
120 | 'access_token': access_token,
121 | 'format': 'pcm',
122 | 'txt': text,
123 | 'lan': 'cn',
124 | 'audio': base64_data,
125 | }
126 |
127 | response = requests.post('https://openapi.data-baker.com/cap/getCapScore', headers=headers, json=json_data)
128 |
129 | response_json = response.json()
130 | if response_json["err_no"] == 50001 or response_json["err_no"] == 50002:
131 | return False
132 | return True
133 |
--------------------------------------------------------------------------------
/utils/sqlitedb.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | """
3 | @Time : 2023/2/9/009 17:15
4 | @Author : 李子
5 | @Url : https://github.com/kslz
6 | """
7 | import sqlite3
8 |
9 | from utils.log import creatlogger
10 |
11 |
12 | class MyDB():
13 | def __init__(self, path="db/data.db"):
14 | self.con = sqlite3.connect(path)
15 | self.cur = self.con.cursor()
16 | self.sqlitelogger = creatlogger("sqlitelogger")
17 | self.sqlitelogger.debug("数据库连接已启动")
18 |
19 | def init_database(self):
20 | self.create_workspace_tbl()
21 | pass
22 |
23 | def create_workspace_tbl(self):
24 | self.cur.execute('''CREATE TABLE "workspace_tbl" (
25 | "workspace_name" TEXT,
26 | "workspace_create_time" TEXT,
27 | "workspace_last_use_time" TEXT,
28 | "workspace_info" TEXT
29 | );''')
30 | self.sqlitelogger.debug("新建工作区表")
31 | self.con.commit()
32 |
33 | def create_dataset_tbl(self):
34 | self.cur.execute('''CREATE TABLE "dataset_tbl" (
35 | "dataset_id" INTEGER NOT NULL,
36 | "dataset_name" TEXT,
37 | "dataset_create_time" TEXT,
38 | "dataset_last_use_time" TEXT,
39 | "dataset_info" TEXT,
40 | PRIMARY KEY ("dataset_id")
41 | );''')
42 | self.sqlitelogger.debug("新建数据集表")
43 | self.con.commit()
44 |
--------------------------------------------------------------------------------
/utils/tool_str.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | """
3 | @Time : 2023/8/6 0:56
4 | @Author : 李子
5 | @Url : https://github.com/kslz
6 | """
7 |
8 | class GeshiStr():
9 | aishell3 = "AISHELL-3"
10 | default = "默认"
11 | vits = "VITS"
12 | sovits = "sovits"
13 |
14 |
15 | class ToolStr():
16 | biaobei = "标贝"
--------------------------------------------------------------------------------
/编译.bat:
--------------------------------------------------------------------------------
1 | pyinstaller main.py -F -n sound_dataset_tools2
2 |
3 |
4 | pip install nuitka
5 | pip install ordered-set
6 | pip install zstandard
7 |
8 |
9 | nuitka --standalone main.py --enable-plugin=pyside6 --onefile --output-dir=out
--------------------------------------------------------------------------------