提交 7f9bda0c 编写于 作者: xuchaoxin1375's avatar xuchaoxin1375

- fix some bugs.

- certain adjustments to the project code.
上级 e4e1fb4d
......@@ -2,4 +2,5 @@
*.npy
*.nyc
*.csv
*.fts
\ No newline at end of file
*.fts
*.h5
\ No newline at end of file
......@@ -82,7 +82,7 @@
- 我猜测可能时机器太久没有关机了(平时我都是休眠),导致系统出现了一些错误
- 机器发生错误是很有可能的,就比如学校图书馆的刷脸系统,验证通过平时屏幕显示绿色,然而最近通过显示的也是红色
- 机器发生错误是很有可能的,就比如学校图书馆的刷脸系统,`验证成功`平时的话屏幕显示绿色提醒,然而最近`验证成功`显示的也是红色
- 而在早期的windows7上,有时候从休眠中回复直接会失败
- 然后我重启机器,发现任务栏多出了个搜索框,系统更新了没有重启可能也造成了一些影响
......@@ -831,6 +831,43 @@ print("Accuracy:", clf.score(X_test, y_test))
在使用MLPRegressor时,需要根据具体的数据集和任务需求,选择合适的参数来构建模型。同时,还可以通过交叉验证等技术来评估模型的性能和调整参数,以获得更好的预测结果。需要注意的是,MLPRegressor算法对于数据集的特征缩放和标准化非常敏感,因此在使用MLPRegressor时需要对数据进行预处理。
#### BaggingClassifier
A Bagging classifier.
A Bagging classifier is an ensemble meta-estimator that fits base classifiers each on random subsets of the original dataset and then aggregate their individual predictions (either by voting or by averaging) to form a final prediction. Such a meta-estimator can typically be used as a way to reduce the variance of a black-box estimator (e.g., a decision tree), by introducing randomization into its construction procedure and then making an ensemble out of it.
This algorithm encompasses several works from the literature. When random subsets of the dataset are drawn as random subsets of the samples, then this algorithm is known as Pasting [[1\]](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.BaggingClassifier.html#rb1846455d0e5-1). If samples are drawn with replacement, then the method is known as Bagging [[2\]](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.BaggingClassifier.html#rb1846455d0e5-2). When random subsets of the dataset are drawn as random subsets of the features, then the method is known as Random Subspaces [[3\]](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.BaggingClassifier.html#rb1846455d0e5-3). Finally, when base estimators are built on subsets of both samples and features, then the method is known as Random Patches [[4\]](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.BaggingClassifier.html#rb1846455d0e5-4).
Bagging分类器是一种元估计器集成方法,它在原始数据集的随机子集上分别拟合基分类器,然后聚合它们的个体预测结果(通过投票或平均)以形成最终预测。这种元估计器通常可以用作一种降低黑盒估计器(例如决策树)方差的方法,通过将随机化引入其构建过程,然后将其组合起来。
此算法包括文献中的几项工作。当随机抽取数据集的子集作为样本的随机子集时,此算法称为Pasting [1]。如果使用放回抽样,则该方法称为Bagging [2]。当随机抽取数据集的子集作为特征的随机子集时,该方法称为随机子空间方法[3]。最后,当基估计器基于样本和特征的子集构建时,该方法称为Random Patches [4]。
In ensemble algorithms, bagging methods form a class of algorithms which build several instances of a black-box estimator on random subsets of the original training set and then aggregate their individual predictions to form a final prediction. These methods are used as a way to reduce the variance of a base estimator (e.g., a decision tree), by introducing randomization into its construction procedure and then making an ensemble out of it. In many cases, bagging methods constitute a very simple way to improve with respect to a single model, without making it necessary to adapt the underlying base algorithm. As they provide a way to reduce overfitting, bagging methods work best with strong and complex models (e.g., fully developed decision trees), in contrast with boosting methods which usually work best with weak models (e.g., shallow decision trees).
Bagging methods come in many flavours but mostly differ from each other by the way they draw random subsets of the training set:
> - When random subsets of the dataset are drawn as random subsets of the samples, then this algorithm is known as Pasting [[B1999\]](https://scikit-learn.org/stable/modules/ensemble.html#b1999).
> - When samples are drawn with replacement, then the method is known as Bagging [[B1996\]](https://scikit-learn.org/stable/modules/ensemble.html#b1996).
> - When random subsets of the dataset are drawn as random subsets of the features, then the method is known as Random Subspaces [[H1998\]](https://scikit-learn.org/stable/modules/ensemble.html#h1998).
> - Finally, when base estimators are built on subsets of both samples and features, then the method is known as Random Patches [[LG2012\]](https://scikit-learn.org/stable/modules/ensemble.html#lg2012).
In scikit-learn, bagging methods are offered as a unified [`BaggingClassifier`](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.BaggingClassifier.html#sklearn.ensemble.BaggingClassifier) meta-estimator (resp. [`BaggingRegressor`](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.BaggingRegressor.html#sklearn.ensemble.BaggingRegressor)), taking as input a user-specified estimator along with parameters specifying the strategy to draw random subsets. In particular, `max_samples` and `max_features` control the size of the subsets (in terms of samples and features), while `bootstrap` and `bootstrap_features` control whether samples and features are drawn with or without replacement. When using a subset of the available samples the generalization accuracy can be estimated with the out-of-bag samples by setting `oob_score=True`. As an example, the snippet below illustrates how to instantiate a bagging ensemble of `KNeighborsClassifier` estimators, each built on random subsets of 50% of the samples and 50% of the features.
在集成算法中,bagging方法是一类算法,它在原始训练集的随机子集上构建多个黑盒估计器实例,然后聚合它们的个体预测结果以形成最终预测。这些方法通过将随机化引入其构建过程,并将其组合起来,以降低基本估计器(例如决策树)的方差。在许多情况下,bagging方法是一种非常简单的改进单个模型的方法,而无需调整底层基础算法。由于它们提供了一种减少过拟合的方法,因此bagging方法适用于强大而复杂的模型(例如完全发展的决策树),而提升方法通常适用于弱模型(例如浅层决策树)。
Bagging方法有许多变种,但它们主要通过绘制训练集的随机子集的方式而不同:
当随机抽取数据集的子集作为样本的随机子集时,此算法称为Pasting [B1999]。
如果使用放回抽样,则该方法称为Bagging [B1996]。
当随机抽取数据集的子集作为特征的随机子集时,该方法称为随机子空间方法[ H1998]。
最后,当基估计器基于样本和特征的子集构建时,该方法称为Random Patches [LG2012]。
在scikit-learn中,Bagging方法提供了一个统一的BaggingClassifier元估计器(resp. BaggingRegressor),以用户指定的估计器为输入,并指定绘制随机子集的策略的参数。特别地,max_samples和max_features控制子集的大小(以样本和特征为单位),而bootstrap和bootstrap_features控制是否使用有放回或无放回的方式来抽取样本和特征。当使用可用样本的子集时,可以通过设置oob_score=True来估计外部样本的泛化精度。例如,下面的代码段说明如何实例化一个KNeighborsClassifier估计器的bagging集合,每个估计器都是在50%的样本和50%的特征的随机子集上构建的。
#### BaggingRegressor
BaggingRegressor是一种基于袋装法(Bagging)的回归模型,常用于机器学习中。
......@@ -995,11 +1032,13 @@ SVR(Support Vector Regression)是一种基于支持向量机(SVM)的回
- 使用大纲阅读一个大文件是好办法
- 对于没有封装在函数或者类中的代码,可以设置`fold level`折叠至level 2来快速把握代码结构
## 部分实验结果
# 部分实验结果
### 跨库识别
## 跨库识别
#### angry&sad
####
### angry&sad@emodb-ravdess
- `train_emodb_AS.csv+test_ravdess_AS.csv`
......@@ -1053,6 +1092,62 @@ SVR(Support Vector Regression)是一种基于支持向量机(SVM)的回
test_score=0.770935960591133
```
### ravdess-emodb
```bash
(d:\condaPythonEnvs\tf2.10) PS D:\repos\CCSER\SER> py "d:\repos\CCSER\SER\recognizer\basic.py"
@{model}
partition='train'
D:\repos\CCSER\SER\meta_files\train_ravdess_AS.csv @🎈{meta_file}
[I] Loading audio file paths and its corresponding labels...
meta_file存在D:\repos\CCSER\SER\meta_files\train_ravdess_AS.csv文件!
检查特征文件D:\repos\CCSER\SER\features\ravdess_mfcc_AS_1216.npy是否存在...
self.e_config=['angry', 'sad']
self.f_config=['mfcc']
npy文件不存在,尝试创建...
{} @{self.feature_transforms}🎈
True @{save_obj}
Extracting features for partition:: 100%|███████████████████████████████████████████████████████████| 1216/1216 [00:19<00:00, 63.43it/s]
fts参数key合法
🎈🎈🎈特征提取
(1216, 40) @{feature.shape}
[Info] Adding train samples
partition='test'
D:\repos\CCSER\SER\meta_files\test_emodb_AS.csv @🎈{meta_file}
[I] Loading audio file paths and its corresponding labels...
meta_file存在D:\repos\CCSER\SER\meta_files\test_emodb_AS.csv文件!
检查特征文件D:\repos\CCSER\SER\features\emodb_mfcc_AS_38.npy是否存在...
self.e_config=['angry', 'sad']
self.f_config=['mfcc']
特征矩阵文件(.npy)已经存在,直接导入:loading...
(38, 40) @{feature.shape}
[Info] Adding test samples
[I] Data loaded
self.ae=<audio.extractor.AudioExtractor object at 0x0000028D91CE85E0>
self.ae.pca=None🎈
Evaluating <SVC>: 0%| | 0/5 [00:00<?, ?it/s]@{model}
[I] SVC with 0.7105263157894737 test accuracy
Evaluating <RandomForestClassifier>: 20%|████████████▊ | 1/5 [00:05<00:23, 5.80s/it]@{model}
Evaluating <BaggingClassifier>: 100%|█████████████████████████████████████████████████████████████████████| 5/5 [00:14<00:00, 2.99s/it]
[🎈] Best model : RandomForestClassifier with 97.368% test accuracy
train_score=0.9868421052631579verbose=0 precision recall f1-score support
angry 1.00 0.92 0.96 24
sad 0.88 1.00 0.93 14
accuracy 0.95 38
macro avg 0.94 0.96 0.94 38
weighted avg 0.95 0.95 0.95 38 RandomForestClassifier
test_score=0.9473684210526315
(1216, 40) (1216,) 🎈
n_splits=5
cv_score=0.9508196721311475
(d:\condaPythonEnvs\tf2.10) PS D:\repos\CCSER\SER>
```
#### angry&happy&sad
......
......@@ -118,7 +118,7 @@ def get_algos_elements_list(ava_algorithms=ava_algorithms):
algo.title(),
"algorithm",
key=f"{algo}",
default=(i == 1),
default=(i == 0),
enable_events=True,
)
)
......@@ -360,7 +360,7 @@ def get_file_choose_layout():
# ],
# [
sg.B(
"recognize it",
"Recognize it",
key="recognize it",
tooltip=lang["recognize_the_audio_emotion"],
),
......@@ -482,8 +482,7 @@ def get_logging_viewer_layout():
def get_analyzer_layout():
analyzer_layout = (
[
analyzer_log_printer_layout = [
[bt.h2("Anything printed will display here!")],
[
sg.Multiline(
......@@ -499,9 +498,17 @@ def get_analyzer_layout():
)
],
]
+ dv.layout
+ q.query_layout
)
# analyzer_layout = (
# analyzer_log_printer
# + dv.layout
# + q.query_layout
# )
analyzer_layout = [
*analyzer_log_printer_layout,
*dv.layout,
*q.query_layout,
]
return analyzer_layout
......@@ -663,12 +670,12 @@ def get_algo_layout():
def get_e_config_layout():
emotion_config_checboxes_layout = [
[
sg.Checkbox("angry", key="angry", default=True, enable_events=True),
sg.Checkbox("happy", key="happy", enable_events=True),
sg.Checkbox("angry", key="angry", default=False, enable_events=True),
sg.Checkbox("happy", key="happy", default=True, enable_events=True),
sg.Checkbox("neutral", key="neutral", default=True, enable_events=True),
sg.Checkbox("ps", key="ps", enable_events=True),
sg.Checkbox("sad", key="sad", default=True, enable_events=True),
sg.Checkbox("others", key="others", default=True, enable_events=True),
sg.Checkbox("others", key="others", default=False, enable_events=True),
]
]
......@@ -692,34 +699,6 @@ def get_e_config_layout():
return e_config_layout
tooltip_pca_components = """
PCA components
Number of components to keep. if n_components is not set all components are kept:
n_components == min(n_samples, n_features)
If n_components == 'mle' and svd_solver == 'full', Minka’s MLE is used to guess the dimension. Use of n_components == 'mle' will interpret svd_solver == 'auto' as svd_solver == 'full'.
If 0 < n_components < 1 and svd_solver == 'full', select the number of components such that the amount of variance that needs to be explained is greater than the percentage specified by n_components.
If svd_solver == 'arpack', the number of components must be strictly less than the minimum of n_features and n_samples.
Hence, the None case results in:
n_components == min(n_samples, n_features) - 1
"""
tooltip_pca_svd_solver = """
If auto :
The solver is selected by a default policy based on X.shape and n_components: if the input data is larger than 500x500 and the number of components to extract is lower than 80% of the smallest dimension of the data, then the more efficient ‘randomized’ method is enabled. Otherwise the exact full SVD is computed and optionally truncated afterwards.
If full :
run exact full SVD calling the standard LAPACK solver via scipy.linalg.svd and select the components by postprocessing
If arpack :
run SVD truncated to n_components calling ARPACK solver via scipy.sparse.linalg.svds. It requires strictly 0 < n_components < min(X.shape)
If randomized :
run randomized SVD by the method of Halko et al.
"""
def get_f_config_layout():
......@@ -760,16 +739,17 @@ def get_f_transform_layout():
),
],
[
sg.T('n_components:',tooltip="input the number of components to keep."),
sg.Input(
key=pca_components_key,
default_text="35",
tooltip=tooltip_pca_components,
default_text="None",
tooltip=bt.pca_components_tooltip,
enable_events=True,
),
sg.Combo(
values=ava_svd_solver,
default_value="auto",
tooltip=tooltip_pca_svd_solver,
tooltip=bt.pca_svd_solver_tooltip,
enable_events=True,
key=pca_svd_solver_key,
),
......@@ -791,7 +771,7 @@ def get_f_transform_layout():
],
)
f_transform_layout = [
[bt.h2(lang["feature_transfomr_config"])],
[bt.h2(lang["feature_transform_config"])],
[f_transform_frame_layout],
]
return f_transform_layout
......
......@@ -33,6 +33,52 @@ logo = """
"""
pca_components_tooltip = """
PCA components
Number of components to keep. if n_components is not set all
components are kept:
n_components == min(n_samples, n_features)
If n_components == 'mle' and svd_solver == 'full', Minka’s MLE
is used to guess the dimension. Use of n_components == 'mle' will
interpret svd_solver == 'auto' as svd_solver == 'full'.
If 0 < n_components < 1 and svd_solver == 'full', select
the number of components such that the amount of variance that
needs to be explained is greater than the percentage specified
by n_components.
If svd_solver == 'arpack', the number of components must
be strictly less than the minimum of n_features and n_samples.
Hence, the None case results in:
n_components == min(n_samples, n_features) - 1
"""
pca_svd_solver_tooltip = """
If auto :
The solver is selected by a default policy based on X.shape and
n_components:
if the input data is larger than 500x500 and the number of components
to extract is lower than 80% of the smallest dimension of the data,
then the more efficient ‘randomized’ method is enabled. Otherwise
the exact full SVD is computed and optionally truncated afterwards.
If full :
run exact full SVD calling the standard LAPACK solver via scipy.
linalg.svd and select the components by postprocessing
If arpack :
run SVD truncated to n_components calling ARPACK solver via
scipy.sparse.linalg.svds. It requires strictly
0 < n_components < min(X.shape)
If randomized :
run randomized SVD by the method of Halko et al.
"""
db_introduction = """
## SpeechDatabases
......
......@@ -14,7 +14,7 @@ emotion_counts = df["emotion"].value_counts()
# 创建窗口布局
layout = [
[sg.Text("情感成分分析图表")],
[sg.Text("Emotional Component Analysis")],
[sg.Canvas(key="-CANVAS-")],
[sg.Button("generate pie graph")],
]
......
##!/usr/bin/env python
from matplotlib.ticker import NullFormatter # useful for `logit` scale
##
# from matplotlib.ticker import NullFormatter # useful for `logit` scale
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import PySimpleGUI as sg
import matplotlib
matplotlib.use('TkAgg')
matplotlib.use("TkAgg")
"""
Demonstrates one way of embedding Matplotlib figures into a PySimpleGUI window.
......@@ -23,82 +25,41 @@ Basic steps are:
# ------------------------------- PASTE YOUR MATPLOTLIB CODE HERE -------------------------------
#
# # Goal is to have your plot contained in the variable "fig"
#
# # Fixing random state for reproducibility
# np.random.seed(19680801)
#
# # make up some data in the interval ]0, 1[
# y = np.random.normal(loc=0.5, scale=0.4, size=1000)
# y = y[(y > 0) & (y < 1)]
# y.sort()
# x = np.arange(len(y))
#
# # plot with various axes scales
# plt.figure(1)
#
# # linear
# plt.subplot(221)
# plt.plot(x, y)
# plt.yscale('linear')
# plt.title('linear')
# plt.grid(True)
#
# # log
# plt.subplot(222)
# plt.plot(x, y)
# plt.yscale('log')
# plt.title('log')
# plt.grid(True)
#
# # symmetric log
# plt.subplot(223)
# plt.plot(x, y - y.mean())
# plt.yscale('symlog', linthreshy=0.01)
# plt.title('symlog')
# plt.grid(True)
#
# # logit
# plt.subplot(224)
# plt.plot(x, y)
# plt.yscale('logit')
# plt.title('logit')
# plt.grid(True)
# plt.gca().yaxis.set_minor_formatter(NullFormatter())
# plt.subplots_adjust(top=0.92, bottom=0.08, left=0.10, right=0.95, hspace=0.25,
# wspace=0.35)
# fig = plt.gcf()
#
fig = matplotlib.figure.Figure(figsize=(5, 4), dpi=100)
t = np.arange(0, 3, .01)
t = np.arange(0, 3, 0.01)
fig.add_subplot(111).plot(t, 2 * np.sin(2 * np.pi * t))
# ------------------------------- END OF YOUR MATPLOTLIB CODE -------------------------------
# ------------------------------- Beginning of Matplotlib helper code -----------------------
def draw_figure(canvas, figure):
figure_canvas_agg = FigureCanvasTkAgg(figure, canvas)
figure_canvas_agg.draw()
figure_canvas_agg.get_tk_widget().pack(side='top', fill='both', expand=1)
figure_canvas_agg.get_tk_widget().pack(side="top", fill="both", expand=1)
return figure_canvas_agg
# ------------------------------- Beginning of GUI CODE -------------------------------
# define the window layout
layout = [[sg.Text('Plot test')],
[sg.Canvas(key='-CANVAS-')],
[sg.Button('Ok')]]
layout = [[sg.Text("Plot test")], [sg.Canvas(key="-CANVAS-")], [sg.Button("Ok")]]
# create the form and show it without the plot
window = sg.Window('Demo Application - Embedding Matplotlib In PySimpleGUI', layout, finalize=True, element_justification='center', font='Helvetica 18')
window = sg.Window(
"Demo Application - Embedding Matplotlib In PySimpleGUI",
layout,
finalize=True,
element_justification="center",
font="Helvetica 18",
)
# add the plot to the window
fig_canvas_agg = draw_figure(window['-CANVAS-'].TKCanvas, fig)
fig_canvas_agg = draw_figure(window["-CANVAS-"].TKCanvas, fig)
# display the window
event, values = window.read()
window.close()
......@@ -106,7 +106,10 @@ def get_audios_regex(
else:
path = path.absolute()
# 对路径进行正则过滤
#todo 对括号的识别有问题(得益于模块化,可以直接在这个模块内启动图形界面进行调试)
if filter_regex:
if verbose:
print('filter_regex:> ', filter_regex)
s = re.search(filter_regex, str(path), re.IGNORECASE)
if s:
filtered_audios.append(path)
......@@ -226,7 +229,7 @@ audio_viewer_layout = [
],
[
sg.B(filter_audios_key, tooltip="click to manual refresh the files listbox"),
sg.Button(ufg.close),
# sg.Button(ufg.close),
],
[sg.Text(f"{len_default_folder_file_list} files", key="num_files_text")],
[
......
......@@ -32,7 +32,7 @@ class TableShow():
# background_color="lightblue",
auto_size_columns=True,
justification="center",
num_rows=min(25, len(self.data_rows)),
num_rows=min(15, len(self.data_rows)),#每次最多显示15条数据
expand_x=True,
expand_y=True,
)
......@@ -43,7 +43,7 @@ class TableShow():
]
def run(self):
window = sg.Window("result table", self.layout,resizable=True,size=(500,400))
window = sg.Window("result table", self.layout,resizable=True,size=(500,500))
# 事件循环
while True:
event, values = window.read()
......
......@@ -2,7 +2,7 @@
"welcome_message": "Welcome to My App!",
"choose_emotion_config": "Please select an emotional combination for testing: recommended combinations are AS, HNS, AHNS, AHNPS. \nNote that there is a difference between 'surprise' and 'pleasantSurprise' in the SAVEE dataset, \nso the AHNPS combination is not recommended for use on SAVEE.",
"choose_feature_config": "Please choose one or more features",
"feature_transfomr_config":"feature transfomer config",
"feature_transform_config":"feature transformer config",
"choose_algorithm": "Choose an algorithm for testing",
"choose_audio": "Please select an audio sample file to recognize its emotion.",
"recognize_the_audio_emotion": "Recognize the emotion of the selected audio file.",
......@@ -11,5 +11,6 @@
"welcome_title": "𝒲ℯ𝓁𝒸ℴ𝓂ℯ 𝓉ℴ ℯ𝓍𝓅ℯ𝓇𝒾ℯ𝓃𝒸ℯ 𝒞𝒞𝒮ℰℛ 𝒞𝓁𝒾ℯ𝓃𝓉!",
"result_training":"result of model training:",
"train_result_title":"Train Result",
"result_frame":"Emotion Of Select File(Predict Result)"
"result_frame":"Emotion Of Select File(Predict Result)",
"recognize_it":"Recognize it"
}
\ No newline at end of file
......@@ -134,7 +134,8 @@ class UserAuthenticatorGUI:
key="confirm_password", password_char="*", enable_events=True
),
],
[sg.Submit(button_text="Register"), sg.Cancel(button_text="Cancel")],
# sg.Submit默认绑定了enter快捷键,为了避免误操作,需要谨慎使用
[sg.Submit(button_text="Register",bind_return_key=False), sg.Cancel(button_text="Cancel")],
]
# 定义登录Tab页布局
......@@ -152,7 +153,7 @@ class UserAuthenticatorGUI:
key=passowrd_login_key, password_char="*", enable_events=True
),
],
[sg.Submit(button_text="Login"), sg.Cancel(button_text="Cancel")],
[sg.Submit(button_text="Login",bind_return_key=False), sg.Cancel(button_text="Cancel")],
]
return register_layout, login_layout
......
##
import os
from collections import defaultdict
import sys
import ipdb
from joblib import load
from collections import defaultdict
from pathlib import Path
import ipdb
import numpy as np
import pandas as pd
import tqdm
from joblib import load
from audio.create_meta import create_csv_by_metaname
from config.EF import AHNPS, HNS, AHNPS_dict, HNS_dict, e_config_def, f_config_def
import config.MetaPath as mp
from config.MetaPath import (
create_tag_name,
features_dir,
get_first_letters,
train_emodb_csv,
validate_partition,
ava_dbs,
ava_fts_params
)
from audio.core import extract_feature_of_audio
from audio.create_meta import create_csv_by_metaname
from config.EF import (AHNPS, HNS, AHNPS_dict, HNS_dict, e_config_def,
f_config_def)
from config.MetaPath import (ava_dbs, ava_fts_params, create_tag_name, emodb,
features_dir, get_first_letters, meta_dir,
project_dir, train_emodb_csv, validate_partition)
# from pathlib import Path
Series = pd.Series
......@@ -100,6 +98,11 @@ class AudioExtractor:
self.test_features = []
# 使用字典打包
self.pca = None
def pathlike_to_list(self, meta_paths):
if isinstance(meta_paths, str) or isinstance(meta_paths,Path):
# print(f"cast the '{meta_paths}' to [str]")
meta_paths = [meta_paths]
return meta_paths
def get_partition_features(self, partition) -> np.ndarray:
"""将包含若干个二维ndarray的列表vstack成1个二维ndarray
......@@ -134,14 +137,19 @@ class AudioExtractor:
def load_metadata(self, meta_files):
"""
从meta_files(文件)中读取语料库各条语音的信息;
从给定meta_files(文件)路径中读取语料库各条语音的信息;
如果需要读取的meta_files不存在,那么尝试解析meta_files(如果meta_files参数是一个符合可解析规范的字符串)
这种情况下会调用create_meta模块中的create_csv_by_metaname函数进行meta文件构造
Read metadata from a file & Extract and loads features of audio files
Read metadata from a file & Extract meta if according meta_files and loads features of audio files
Parameters
----------
meta_files : list[str]|str
需要读取的meta文件
Return
-
从meta中读取的信息:包括各语音文件的路径和情感标签
"""
# empty dataframe
......@@ -157,12 +165,13 @@ class AudioExtractor:
# print("meta_files:", meta_files)
# print("type(meta_files)", type(meta_files))
if isinstance(meta_files, str):
meta_files = [meta_files]
meta_files = self.pathlike_to_list(meta_files)
for meta_file in meta_files:
if not os.path.exists(meta_file):
# create_csv_by_meta_name
print(f"{meta_file} does not exist,creating...😂")
create_csv_by_metaname(meta_file, shuffle=self.shuffle)
else:
print(f"meta_file存在{meta_file}文件!")
......@@ -326,7 +335,7 @@ class AudioExtractor:
# 尝试计算语料库的名字和情感配置名字
db = self.fields_parse(meta_path)
# 特征保存的目录检查(不存在则创建之)
if not os.path.isdir(self.features_dir):
os.mkdir(self.features_dir)
......@@ -378,6 +387,10 @@ class AudioExtractor:
return features, audio_paths, emotions
def get_features_file_path(self, partition, db, n_samples,ext=""):
fts=self.feature_transforms
if fts is None:
self.feature_transforms = {}
features_file_name = create_tag_name(
db=db,
partition=partition, # 建议保存特征文件时,这个字段置空即可
......@@ -474,8 +487,6 @@ class AudioExtractor:
# 考虑特征预处理
from sklearn.preprocessing import StandardScaler
# X为特征矩阵,y为标签
fts = self.feature_transforms
......@@ -508,16 +519,20 @@ class AudioExtractor:
n_components = pca_params_dict.get("n_components")
if n_components == "None":
# pca_params_dict["n_components"] = None
n_components=None
elif n_components=='mle':
if n_components=='mle':
pass
else:
elif isinstance(n_components, int):
pass
elif n_components and n_components.isdigit():
# if n_components.isdigit():
# int()函数自带类型错误检测,有非法输入会自动抛出错误,所以这里直接使用,而不去手动检测输入的合法性
# pca_params_dict['n_components'] = int(n_components)
n_components=int(n_components)
# elif n_components == "None":
else:
# pca_params_dict["n_components"] = None
n_components=None
# 将检验&处理后的n_components写入到pca字典中
pca_params_dict['n_components']=n_components
......@@ -573,21 +588,23 @@ class AudioExtractor:
return features
def extract_update(self, partition="", meta_paths="", verbose=1):
"""特征提取和self属性更新维护
"""
根据meta_paths进行特征提取任务
提取完特征后对相关self属性更新维护
多次调用将执行增量提取,根据partition的取值,将每次的提取结果增量更新self的相应属性集
Parameters
----------
partition : str
"train"|"test"
meta_files : list[str]|str
_description_
meta_paths : list[str]|str
需要提取特征的meta文件路径
"""
if not meta_paths:
raise ValueError("meta_files cannot be empty")
# return meta_files
if isinstance(meta_paths, str):
# print(f"cast the '{meta_paths}' to [str]")
meta_paths = [meta_paths]
meta_paths = self.pathlike_to_list(meta_paths)
# 执行特征提取
for meta_file in meta_paths:
......@@ -614,6 +631,7 @@ class AudioExtractor:
features=features,
)
def load_data_preprocessing(self, meta_files=None, partition="", shuffle=False):
"""将特征提取和属性设置以及打乱和平衡操作打包处理
AE对象在如数据集后可选的数据处理操作(balance&shuffle)
......@@ -883,21 +901,22 @@ def load_data_from_meta(
balance=False,
feature_transforms=None,
) -> dict:
"""导入语音数据,并返回numpy打包train/test dataset相关属性的ndarray类型
如果只想提取train/test dataset中的一方,那么另一方就传None(或者不传对应参数)
"""
根据meta文件,提取/导入语音数据(numpy特征),并返回numpy打包train/test dataset相关属性的ndarray类型
如果只想提取train/test dataset中的一方,那么另一方就传None(或者不传对应参数)即,前两个参数中允许其中一个为None
Parameters
----------
train_desc_files : list
train_meta_files
需要提取特征的语音文件列表信息,作为训练集
test_desc_files : list
test_meta_files
f_config : dict, optional
需要提取的特征, by default None
e_config : list, optional
需要使用的情感类别字符串构成的列表, by default ['sad', 'neutral', 'happy']
需要提取特征的语音文件列表信息,作为测试集
f_config : list[str], optional
需要提取的特征组合, by default None
e_config : list[str], optional
需要使用的情感组合,类别字符串构成的列表, by default ['sad', 'neutral', 'happy']
classification_task : bool, optional
是否采用分类(否则使用回归模型), by default True
是否采用分类模型(否则使用回归模型), by default True
shuffle : bool, optional
是否打乱顺序, by default True
balance : bool, optional
......@@ -948,15 +967,27 @@ def load_data_from_meta(
}
if __name__ == "__main__":
ftd = dict(std_scaler=False, pca_params=dict(n_components=39))
ae = AudioExtractor(
e_config=e_config_def,
f_config=f_config_def, shuffle=True, feature_transforms_dict=ftd
def load_data_from_meta_demo():
meta_dict=dict(
train_meta_files=meta_dir/'train_emodb_HNS.csv',
test_meta_files=meta_dir/'test_emodb_HNS.csv',
)
print(ae)
ae._extract_feature_in_meta(meta_path=train_emodb_csv)
res=load_data_from_meta(**meta_dict,f_config=f_config_def)
return res
if __name__ == "__main__":
load_data_from_meta_demo()
# ftd = dict(std_scaler=False, pca_params=dict(n_components=3))
# ae = AudioExtractor(
# e_config=e_config_def,
# f_config=f_config_def, shuffle=True, feature_transforms_dict=ftd
# )
# print(ae)
# ae._extract_feature_in_meta(meta_path=train_emodb_csv)
# data = load_data_from_meta(
# # train_meta_files=train_emodb_csv,
# test_meta_files=test_emodb_csv,
......@@ -964,3 +995,4 @@ if __name__ == "__main__":
# # balance=False,
# balance=True,
# )
......@@ -59,24 +59,32 @@ def showMelFreqGraph(audio_path=audio_file):
y, sr = librosa.load(audio_path)
# 计算Mel频谱
S = librosa.feature.melspectrogram(y, sr=sr, n_mels=128)
S = librosa.feature.melspectrogram(y=y, sr=sr, n_mels=128)
#另一种等效写法:(使用S参数)
# D=np.abs(librosa.stft(y))**2
# S=librosa.feature.melspectrogram(S=D, sr=sr, n_mels=128)
# 将Mel频谱转换为分贝表示
S_db = librosa.power_to_db(S, ref=np.max)
# 绘制Mel频谱图
# 绘制Mel频谱(系数)图
fig,ax=plt.subplots()
# plt.figure(figsize=(10, 4))
librosa.display.specshow(S_db, x_axis='time', y_axis='mel', sr=sr, fmax=8000)
plt.colorbar(format='%+2.0f dB')
img=librosa.display.specshow(S_db, x_axis='time', y_axis='mel', sr=sr, fmax=8000,ax=ax)
fig.colorbar(img,ax=ax,format='%+2.0f dB')
ax.set(title='Mel-frequencey spectrogram')
# plt.title('Mel频谱图')
# plt.xlabel('时间')
# plt.ylabel('频率(Mel刻度)')
# plt.show()
plt.show()
def showMFCCGraph(audio_path=audio_file):
pass
if __name__=="__main__":
pass
# showWaveForm()
showFreqGraph()
# showMelFreqForm()
\ No newline at end of file
# showFreqGraph()
showMelFreqGraph()
##
\ No newline at end of file
因为 它太大了无法显示 source diff 。你可以改为 查看blob
<mxfile host="65bd71144e">
<diagram id="HXC7sox-5qx39bjeLZwr" name="Page-1">
<mxGraphModel dx="2035" dy="971" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
<root>
<mxCell id="0"/>
<mxCell id="1" parent="0"/>
<mxCell id="103" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;gradientColor=none;opacity=50;" vertex="1" parent="1">
<mxGeometry x="490" y="1180" width="392.5" height="180" as="geometry"/>
</mxCell>
<mxCell id="83" value="" style="edgeStyle=none;html=1;endArrow=classic;endFill=1;" edge="1" parent="1" source="77" target="64">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="77" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;gradientColor=none;opacity=50;" vertex="1" parent="1">
<mxGeometry x="-6.25" y="1180" width="392.5" height="180" as="geometry"/>
</mxCell>
<mxCell id="5" value="" style="edgeStyle=none;html=1;" parent="1" source="3" target="4" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="3" value="语音情感信号采集" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="190" y="80" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="7" value="" style="edgeStyle=none;html=1;" parent="1" source="4" target="6" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="4" value="分类加工为语音语料库" style="whiteSpace=wrap;html=1;rounded=0;" parent="1" vertex="1">
<mxGeometry x="390" y="80" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="10" value="" style="edgeStyle=none;html=1;" parent="1" source="6" target="9" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="6" value="数据预处理和特征提取" style="whiteSpace=wrap;html=1;rounded=0;" parent="1" vertex="1">
<mxGeometry x="590" y="80" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="12" value="" style="edgeStyle=none;html=1;" parent="1" source="9" target="11" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="9" value="特征优选" style="whiteSpace=wrap;html=1;rounded=0;" parent="1" vertex="1">
<mxGeometry x="590" y="220" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="14" value="" style="edgeStyle=none;html=1;" parent="1" source="11" target="13" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="11" value="训练情感分类模型" style="whiteSpace=wrap;html=1;rounded=0;" parent="1" vertex="1">
<mxGeometry x="390" y="220" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="18" value="" style="edgeStyle=none;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="1" source="50" target="17" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="55" value="是" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="18" vertex="1" connectable="0">
<mxGeometry x="-0.2969" y="-1" relative="1" as="geometry">
<mxPoint as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="51" style="edgeStyle=none;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="13" target="50" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="13" value="执行跨库实验对模型评估" style="whiteSpace=wrap;html=1;rounded=0;" parent="1" vertex="1">
<mxGeometry x="190" y="220" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="17" value="应用分类模型完成情感分类任务" style="whiteSpace=wrap;html=1;rounded=0;" parent="1" vertex="1">
<mxGeometry x="190" y="440" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="21" value="" style="edgeStyle=none;html=1;" parent="1" source="19" target="20" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="19" value="参数" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="230" y="510" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="23" value="" style="edgeStyle=none;html=1;" parent="1" source="20" target="22" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="20" value="交叉验证" style="whiteSpace=wrap;html=1;rounded=0;" parent="1" vertex="1">
<mxGeometry x="230" y="650" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="34" value="" style="edgeStyle=none;html=1;" parent="1" source="22" target="32" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="22" value="最优超参数" style="whiteSpace=wrap;html=1;rounded=0;" parent="1" vertex="1">
<mxGeometry x="230" y="790" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="36" value="" style="edgeStyle=elbowEdgeStyle;html=1;rounded=0;endSize=8;startSize=8;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="24" target="35" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="700" y="610"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="24" value="数据集" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="540" y="510" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="31" value="" style="edgeStyle=none;html=1;" parent="1" source="25" target="20" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="33" value="" style="edgeStyle=none;html=1;" parent="1" source="25" target="32" edge="1">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="25" value="训练数据" style="whiteSpace=wrap;html=1;rounded=0;" parent="1" vertex="1">
<mxGeometry x="380" y="650" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="30" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;endArrow=classic;html=1;curved=0;rounded=0;endSize=8;startSize=8;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="24" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="400" y="690" as="sourcePoint"/>
<mxPoint x="440" y="650" as="targetPoint"/>
<Array as="points">
<mxPoint x="440" y="630"/>
<mxPoint x="520" y="640"/>
<mxPoint x="480" y="590"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="32" value="重新训练" style="whiteSpace=wrap;html=1;rounded=0;" parent="1" vertex="1">
<mxGeometry x="380" y="790" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="35" value="测试数据" style="whiteSpace=elbowEdgeStyle;html=1;rounded=0;" parent="1" vertex="1">
<mxGeometry x="640" y="650" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="37" value="做最后的评估计算" style="edgeStyle=elbowEdgeStyle;&#10;whiteSpace=wrap;html=1;rounded=0;" parent="1" vertex="1">
<mxGeometry x="550" y="890" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="40" value="" style="edgeStyle=segmentEdgeStyle;endArrow=classic;html=1;curved=0;rounded=0;endSize=8;startSize=8;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="32" target="37" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="510" y="930" as="sourcePoint"/>
<mxPoint x="560" y="880" as="targetPoint"/>
<Array as="points">
<mxPoint x="440" y="920"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="43" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;endArrow=classic;html=1;curved=0;rounded=0;endSize=8;startSize=8;jumpStyle=sharp;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="35" target="37" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="510" y="810" as="sourcePoint"/>
<mxPoint x="560" y="760" as="targetPoint"/>
<Array as="points">
<mxPoint x="700" y="810"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="46" style="edgeStyle=none;html=1;entryX=0;entryY=1;entryDx=0;entryDy=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="50" target="6" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="250" y="220" as="sourcePoint"/>
<mxPoint x="590" y="140" as="targetPoint"/>
<Array as="points">
<mxPoint x="140" y="350"/>
<mxPoint x="140" y="180"/>
<mxPoint x="590" y="180"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="54" value="否" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="46" vertex="1" connectable="0">
<mxGeometry x="-0.8777" relative="1" as="geometry">
<mxPoint as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="50" value="性能是否满足要求" style="rhombus;whiteSpace=wrap;html=1;rounded=0;" parent="1" vertex="1">
<mxGeometry x="195" y="300" width="110" height="100" as="geometry"/>
</mxCell>
<mxCell id="58" value="" style="edgeStyle=none;html=1;" edge="1" parent="1" source="56" target="57">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="59" value="" style="edgeStyle=none;html=1;" edge="1" parent="1" source="56" target="57">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="116" style="edgeStyle=none;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;fontFamily=Helvetica;fontSize=12;fontColor=default;endArrow=classic;endFill=1;entryX=0.588;entryY=0.03;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="56" target="117">
<mxGeometry relative="1" as="geometry">
<mxPoint x="80" y="1100" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="119" style="edgeStyle=none;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;fontFamily=Helvetica;fontSize=12;fontColor=default;endArrow=classic;endFill=1;" edge="1" parent="1" target="118">
<mxGeometry relative="1" as="geometry">
<mxPoint x="190" y="1070" as="sourcePoint"/>
</mxGeometry>
</mxCell>
<mxCell id="121" value="" style="edgeStyle=none;html=1;fontFamily=Helvetica;fontSize=12;fontColor=default;endArrow=classic;endFill=1;" edge="1" parent="1" source="56" target="120">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="123" style="edgeStyle=none;html=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;fontFamily=Helvetica;fontSize=12;fontColor=default;endArrow=classic;endFill=1;" edge="1" parent="1" source="56">
<mxGeometry relative="1" as="geometry">
<mxPoint x="190" y="1470" as="targetPoint"/>
<Array as="points">
<mxPoint x="-80" y="1040"/>
<mxPoint x="-80" y="1470"/>
<mxPoint x="60" y="1470"/>
<mxPoint x="130" y="1470"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="56" value="启动系统" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
<mxGeometry x="130" y="1010" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="78" style="edgeStyle=none;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="57" target="77">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="57" value="配置语料库组合" style="whiteSpace=wrap;html=1;rounded=0;" vertex="1" parent="1">
<mxGeometry x="130" y="1100" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="82" value="" style="html=1;endArrow=none;endFill=0;" edge="1" parent="1" source="61" target="81">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="61" value="配置情感组合" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="30" y="1240" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="80" value="" style="edgeStyle=none;html=1;" edge="1" parent="1" source="62" target="79">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="62" value="配置特征组合" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="230" y="1200" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="85" value="" style="edgeStyle=none;html=1;endArrow=classic;endFill=1;" edge="1" parent="1" source="64" target="84">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="126" style="edgeStyle=none;html=1;fontFamily=Helvetica;fontSize=12;fontColor=default;endArrow=classic;endFill=1;" edge="1" parent="1" source="64" target="92">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="64" value="训练模型" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="1">
<mxGeometry x="130" y="1400" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="79" value="配置预处理和降维参数" style="whiteSpace=wrap;html=1;rounded=0;fillStyle=auto;dashed=1;" vertex="1" parent="1">
<mxGeometry x="230" y="1280" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="81" value="" style="rounded=0;whiteSpace=wrap;html=1;fillStyle=hatch;fillOpacity=0;" vertex="1" parent="1">
<mxGeometry x="210" y="1190" width="160" height="160" as="geometry"/>
</mxCell>
<mxCell id="87" value="" style="edgeStyle=none;html=1;endArrow=classic;endFill=1;" edge="1" parent="1" source="84" target="86">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="130" style="edgeStyle=none;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;fontFamily=Helvetica;fontSize=12;fontColor=default;endArrow=classic;endFill=1;" edge="1" parent="1" source="84" target="125">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="84" value="选择语音文件" style="whiteSpace=wrap;html=1;rounded=0;" vertex="1" parent="1">
<mxGeometry x="130" y="1490" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="86" value="语音文件可视化" style="whiteSpace=wrap;html=1;rounded=0;" vertex="1" parent="1">
<mxGeometry x="-6.25" y="1490" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="91" value="" style="edgeStyle=none;html=1;endArrow=classic;endFill=1;" edge="1" parent="1" source="88" target="90">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="88" value="识别单个语音文件情感" style="whiteSpace=wrap;html=1;rounded=0;" vertex="1" parent="1">
<mxGeometry x="130" y="1780" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="90" value="查看预测结果和置信度" style="whiteSpace=wrap;html=1;rounded=0;" vertex="1" parent="1">
<mxGeometry x="130" y="1870" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="127" style="edgeStyle=none;html=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;fontFamily=Helvetica;fontSize=12;fontColor=default;endArrow=classic;endFill=1;" edge="1" parent="1" source="92" target="103">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="686" y="1430"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="92" value="查看模型训练结果" style="whiteSpace=wrap;html=1;rounded=0;" vertex="1" parent="1">
<mxGeometry x="440" y="1400" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="94" value="训练集和测试集上的得分" style="whiteSpace=wrap;html=1;rounded=0;" vertex="1" parent="1">
<mxGeometry x="490" y="1230" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="101" value="混淆矩阵" style="whiteSpace=wrap;html=1;rounded=0;" vertex="1" parent="1">
<mxGeometry x="762.5" y="1230" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="106" value="模型交叉验证评估报告" style="rounded=0;whiteSpace=wrap;html=1;fillStyle=auto;gradientColor=none;" vertex="1" parent="1">
<mxGeometry x="626.25" y="1230" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="110" value="" style="edgeStyle=none;html=1;fontFamily=Helvetica;fontSize=12;fontColor=default;endArrow=classic;endFill=1;" edge="1" parent="1" source="107" target="109">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="107" value="批量识别" style="rounded=0;whiteSpace=wrap;html=1;fillStyle=auto;strokeColor=#d6b656;fontFamily=Helvetica;fontSize=12;fillColor=#fff2cc;" vertex="1" parent="1">
<mxGeometry x="340" y="1700" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="108" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;endArrow=classic;html=1;curved=0;rounded=0;endSize=8;startSize=8;fontFamily=Helvetica;fontSize=12;fontColor=default;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" target="107">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="190" y="1730" as="sourcePoint"/>
<mxPoint x="340" y="1710" as="targetPoint"/>
<Array as="points">
<mxPoint x="265" y="1720"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="112" value="" style="edgeStyle=none;html=1;fontFamily=Helvetica;fontSize=12;fontColor=default;endArrow=classic;endFill=1;" edge="1" parent="1" source="109" target="111">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="114" value="" style="edgeStyle=none;html=1;fontFamily=Helvetica;fontSize=12;fontColor=default;endArrow=classic;endFill=1;" edge="1" parent="1" source="109" target="113">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="109" value="查看识别报告表" style="whiteSpace=wrap;html=1;rounded=0;fillStyle=auto;gradientColor=none;" vertex="1" parent="1">
<mxGeometry x="340" y="1780" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="128" style="edgeStyle=none;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;fontFamily=Helvetica;fontSize=12;fontColor=default;endArrow=classic;endFill=1;" edge="1" parent="1" source="111" target="120">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="910" y="1810"/>
<mxPoint x="910" y="1040"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="111" value="绘制识别结果统计图" style="whiteSpace=wrap;html=1;rounded=0;fillStyle=auto;gradientColor=none;" vertex="1" parent="1">
<mxGeometry x="540" y="1780" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="129" style="edgeStyle=none;html=1;fontFamily=Helvetica;fontSize=12;fontColor=default;endArrow=classic;endFill=1;" edge="1" parent="1" source="113">
<mxGeometry relative="1" as="geometry">
<mxPoint x="790" y="1810" as="targetPoint"/>
<Array as="points">
<mxPoint x="790" y="1900"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="113" value="保存识别报告表" style="whiteSpace=wrap;html=1;rounded=0;fillStyle=auto;gradientColor=none;" vertex="1" parent="1">
<mxGeometry x="340" y="1870" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="117" value="查看使用说明" style="rounded=0;whiteSpace=wrap;html=1;fillStyle=auto;strokeColor=default;fontFamily=Helvetica;fontSize=12;fontColor=default;fillColor=default;gradientColor=none;" vertex="1" parent="1">
<mxGeometry x="-10" y="1100" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="118" value="查看系统运行环境" style="rounded=0;whiteSpace=wrap;html=1;fillStyle=auto;strokeColor=default;fontFamily=Helvetica;fontSize=12;fontColor=default;fillColor=default;gradientColor=none;" vertex="1" parent="1">
<mxGeometry x="290" y="1100" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="120" value="退出系统" style="whiteSpace=wrap;html=1;fillColor=#6a00ff;strokeColor=#3700CC;rounded=0;fontColor=#ffffff;" vertex="1" parent="1">
<mxGeometry x="660" y="1010" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="131" style="edgeStyle=none;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;fontFamily=Helvetica;fontSize=12;fontColor=default;endArrow=classic;endFill=1;" edge="1" parent="1" source="125" target="88">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="132" value="是" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=12;fontFamily=Helvetica;fontColor=default;" vertex="1" connectable="0" parent="131">
<mxGeometry x="-0.4229" y="-1" relative="1" as="geometry">
<mxPoint as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="133" style="edgeStyle=none;html=1;fontFamily=Helvetica;fontSize=12;fontColor=default;endArrow=classic;endFill=1;" edge="1" parent="1" source="125">
<mxGeometry relative="1" as="geometry">
<mxPoint x="190" y="1170" as="targetPoint"/>
<Array as="points">
<mxPoint x="420" y="1610"/>
<mxPoint x="420" y="1170"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="125" value="模型是否已经训练" style="rhombus;whiteSpace=wrap;html=1;rounded=0;fillStyle=auto;strokeColor=default;fontFamily=Helvetica;fontSize=12;fontColor=default;fillColor=default;gradientColor=none;" vertex="1" parent="1">
<mxGeometry x="125" y="1560" width="130" height="110" as="geometry"/>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>
\ No newline at end of file
- 启动系统
- 选择语料库组合
- 配置情感组合
- 配置情感特征
- 配置配置预处理参数
-
\ No newline at end of file
<mxfile host="65bd71144e">
<diagram id="uUDe0YMawTO2Uo1_Cgbq" name="Page-1">
<mxGraphModel dx="1961" dy="910" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
<root>
<mxCell id="0"/>
<mxCell id="1" parent="0"/>
<mxCell id="2" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;gradientColor=none;opacity=50;fontSize=16;align=center;fontStyle=0;verticalAlign=middle;fontFamily=simsun;" vertex="1" parent="1">
<mxGeometry x="493.75" y="1110" width="392.5" height="180" as="geometry"/>
</mxCell>
<mxCell id="4" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;gradientColor=none;opacity=50;fontSize=16;align=center;fontStyle=0;verticalAlign=middle;fontFamily=simsun;" vertex="1" parent="1">
<mxGeometry x="-2.5" y="1110" width="392.5" height="180" as="geometry"/>
</mxCell>
<mxCell id="91" value="" style="edgeStyle=segmentEdgeStyle;shape=connector;curved=0;rounded=0;html=1;labelBackgroundColor=default;strokeColor=default;fontFamily=simsun;fontSize=16;fontColor=default;endArrow=classic;startSize=8;endSize=8;elbow=horizontal;" edge="1" parent="1" source="11" target="13">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="92" style="edgeStyle=segmentEdgeStyle;shape=connector;curved=0;rounded=0;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;labelBackgroundColor=default;strokeColor=default;fontFamily=simsun;fontSize=16;fontColor=default;endArrow=classic;startSize=8;endSize=8;elbow=horizontal;" edge="1" parent="1" source="11" target="46">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="197" y="1010"/>
<mxPoint x="354" y="1010"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="93" style="edgeStyle=segmentEdgeStyle;shape=connector;curved=0;rounded=0;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;labelBackgroundColor=default;strokeColor=default;fontFamily=simsun;fontSize=16;fontColor=default;endArrow=classic;startSize=8;endSize=8;elbow=horizontal;" edge="1" parent="1" source="11" target="47">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="94" style="edgeStyle=segmentEdgeStyle;shape=connector;curved=0;rounded=0;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.43;entryY=-0.026;entryDx=0;entryDy=0;entryPerimeter=0;labelBackgroundColor=default;strokeColor=default;fontFamily=simsun;fontSize=16;fontColor=default;endArrow=classic;startSize=8;endSize=8;elbow=horizontal;" edge="1" parent="1" source="11" target="45">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="197" y="1010"/>
<mxPoint x="45" y="1010"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="11" value="启动系统" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=16;align=center;fontStyle=0;verticalAlign=middle;fontFamily=simsun;" vertex="1" parent="1">
<mxGeometry x="133.75" y="930" width="126.25" height="60" as="geometry"/>
</mxCell>
<mxCell id="12" style="edgeStyle=none;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;fontSize=16;align=center;fontStyle=0;verticalAlign=middle;fontFamily=simsun;" edge="1" parent="1" source="13" target="4">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="13" value="配置语料库组合" style="whiteSpace=wrap;html=1;rounded=0;fontSize=16;align=center;fontStyle=0;verticalAlign=middle;fontFamily=simsun;" vertex="1" parent="1">
<mxGeometry x="133.75" y="1030" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="14" value="" style="html=1;endArrow=none;endFill=0;fontSize=16;align=center;fontStyle=0;verticalAlign=middle;fontFamily=simsun;" edge="1" parent="1" source="15" target="22">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="15" value="配置情感组合" style="rounded=0;whiteSpace=wrap;html=1;fontSize=16;align=center;fontStyle=0;verticalAlign=middle;fontFamily=simsun;" vertex="1" parent="1">
<mxGeometry x="33.75" y="1170" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="16" value="" style="edgeStyle=none;html=1;fontSize=16;align=center;fontStyle=0;verticalAlign=middle;fontFamily=simsun;" edge="1" parent="1" source="17" target="21">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="17" value="配置特征组合" style="rounded=0;whiteSpace=wrap;html=1;fontSize=16;align=center;fontStyle=0;verticalAlign=middle;fontFamily=simsun;" vertex="1" parent="1">
<mxGeometry x="233.75" y="1130" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="18" value="" style="edgeStyle=none;html=1;endArrow=classic;endFill=1;fontSize=16;align=center;fontStyle=0;verticalAlign=middle;fontFamily=simsun;" edge="1" parent="1" source="20" target="25">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="19" style="edgeStyle=none;html=1;fontFamily=simsun;fontSize=16;fontColor=default;endArrow=classic;endFill=1;align=center;fontStyle=0;verticalAlign=middle;" edge="1" parent="1" source="20" target="31">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="20" value="训练模型" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;fontSize=16;align=center;fontStyle=0;verticalAlign=middle;fontFamily=simsun;" vertex="1" parent="1">
<mxGeometry x="130" y="1400" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="21" value="配置预处理和降维参数" style="whiteSpace=wrap;html=1;rounded=0;fillStyle=auto;dashed=1;fontSize=16;align=center;fontStyle=0;verticalAlign=middle;fontFamily=simsun;" vertex="1" parent="1">
<mxGeometry x="233.75" y="1210" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="22" value="" style="rounded=0;whiteSpace=wrap;html=1;fillStyle=hatch;fillOpacity=0;fontSize=16;align=center;fontStyle=0;verticalAlign=middle;fontFamily=simsun;" vertex="1" parent="1">
<mxGeometry x="213.75" y="1120" width="160" height="160" as="geometry"/>
</mxCell>
<mxCell id="23" value="" style="edgeStyle=none;html=1;endArrow=classic;endFill=1;fontSize=16;align=center;fontStyle=0;verticalAlign=middle;fontFamily=simsun;" edge="1" parent="1" source="25" target="26">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="24" style="edgeStyle=none;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;fontFamily=simsun;fontSize=16;fontColor=default;endArrow=classic;endFill=1;align=center;fontStyle=0;verticalAlign=middle;" edge="1" parent="1" source="25" target="51">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="25" value="选择语音文件" style="whiteSpace=wrap;html=1;rounded=0;fontSize=16;align=center;fontStyle=0;verticalAlign=middle;fontFamily=simsun;" vertex="1" parent="1">
<mxGeometry x="130" y="1490" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="26" value="&lt;font style=&quot;font-size: 16px;&quot;&gt;语音文件可视化&lt;/font&gt;" style="whiteSpace=wrap;html=1;rounded=0;fontSize=16;align=center;fontStyle=0;verticalAlign=middle;fontFamily=simsun;" vertex="1" parent="1">
<mxGeometry x="-6.25" y="1490" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="27" value="" style="edgeStyle=none;html=1;endArrow=classic;endFill=1;fontSize=16;align=center;fontStyle=0;verticalAlign=middle;fontFamily=simsun;" edge="1" parent="1" source="28" target="29">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="28" value="识别单个语音文件情感" style="whiteSpace=wrap;html=1;rounded=0;fontSize=16;align=center;fontStyle=0;verticalAlign=middle;fontFamily=simsun;" vertex="1" parent="1">
<mxGeometry x="130" y="1780" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="29" value="查看预测结果和置信度" style="whiteSpace=wrap;html=1;rounded=0;fontSize=16;align=center;fontStyle=0;verticalAlign=middle;fontFamily=simsun;" vertex="1" parent="1">
<mxGeometry x="130" y="1870" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="31" value="查看模型训练结果" style="whiteSpace=wrap;html=1;rounded=0;fontSize=16;align=center;fontStyle=0;verticalAlign=middle;fontFamily=simsun;" vertex="1" parent="1">
<mxGeometry x="470" y="1400" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="32" value="训练集和测试集上的得分" style="whiteSpace=wrap;html=1;rounded=0;fontSize=16;align=center;fontStyle=0;verticalAlign=middle;fontFamily=simsun;" vertex="1" parent="1">
<mxGeometry x="493.75" y="1160" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="33" value="混淆矩阵" style="whiteSpace=wrap;html=1;rounded=0;fontSize=16;align=center;fontStyle=0;verticalAlign=middle;fontFamily=simsun;" vertex="1" parent="1">
<mxGeometry x="766.25" y="1160" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="34" value="模型交叉验证评估报告" style="rounded=0;whiteSpace=wrap;html=1;fillStyle=auto;gradientColor=none;fontSize=16;align=center;fontStyle=0;verticalAlign=middle;fontFamily=simsun;" vertex="1" parent="1">
<mxGeometry x="630" y="1160" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="35" value="" style="edgeStyle=none;html=1;fontFamily=simsun;fontSize=16;fontColor=default;endArrow=classic;endFill=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;align=center;fontStyle=0;verticalAlign=middle;" edge="1" parent="1" source="52" target="40">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="59" value="是" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=16;fontStyle=0;fontFamily=simsun;" vertex="1" connectable="0" parent="35">
<mxGeometry x="-0.2384" y="2" relative="1" as="geometry">
<mxPoint y="-1" as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="57" style="edgeStyle=none;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;fontSize=16;align=center;fontStyle=0;verticalAlign=middle;fontFamily=simsun;" edge="1" parent="1" source="36" target="56">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="36" value="批量识别" style="rounded=0;whiteSpace=wrap;html=1;fillStyle=auto;strokeColor=#d6b656;fontFamily=simsun;fontSize=16;fillColor=#fff2cc;align=center;fontStyle=0;verticalAlign=middle;" vertex="1" parent="1">
<mxGeometry x="290" y="1620" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="37" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;endArrow=classic;html=1;curved=0;rounded=0;endSize=8;startSize=8;fontFamily=simsun;fontSize=16;fontColor=default;entryX=0;entryY=0.5;entryDx=0;entryDy=0;align=center;fontStyle=0;verticalAlign=middle;" edge="1" parent="1" target="36">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="190" y="1730" as="sourcePoint"/>
<mxPoint x="340" y="1710" as="targetPoint"/>
<Array as="points">
<mxPoint x="265" y="1720"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="38" value="" style="edgeStyle=none;html=1;fontFamily=simsun;fontSize=16;fontColor=default;endArrow=classic;endFill=1;align=center;fontStyle=0;verticalAlign=middle;" edge="1" parent="1" source="40" target="42">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="39" value="" style="edgeStyle=none;html=1;fontFamily=simsun;fontSize=16;fontColor=default;endArrow=classic;endFill=1;align=center;fontStyle=0;verticalAlign=middle;" edge="1" parent="1" source="40" target="44">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="40" value="查看识别报告表" style="whiteSpace=wrap;html=1;rounded=0;fillStyle=auto;gradientColor=none;fontSize=16;align=center;fontStyle=0;verticalAlign=middle;fontFamily=simsun;" vertex="1" parent="1">
<mxGeometry x="530" y="1780" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="42" value="绘制识别结果统计图" style="whiteSpace=wrap;html=1;rounded=0;fillStyle=auto;gradientColor=none;fontSize=16;align=center;fontStyle=0;verticalAlign=middle;fontFamily=simsun;" vertex="1" parent="1">
<mxGeometry x="730" y="1780" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="43" style="edgeStyle=none;html=1;fontFamily=simsun;fontSize=16;fontColor=default;endArrow=classic;endFill=1;align=center;fontStyle=0;verticalAlign=middle;" edge="1" parent="1" source="44">
<mxGeometry relative="1" as="geometry">
<mxPoint x="910" y="1800" as="targetPoint"/>
<Array as="points">
<mxPoint x="910" y="1900"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="44" value="保存识别报告表" style="whiteSpace=wrap;html=1;rounded=0;fillStyle=auto;gradientColor=none;fontSize=16;align=center;fontStyle=0;verticalAlign=middle;fontFamily=simsun;" vertex="1" parent="1">
<mxGeometry x="530" y="1870" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="45" value="查看使用说明" style="rounded=0;whiteSpace=wrap;html=1;fillStyle=auto;strokeColor=default;fontFamily=simsun;fontSize=16;fontColor=default;fillColor=default;gradientColor=none;align=center;fontStyle=0;verticalAlign=middle;" vertex="1" parent="1">
<mxGeometry x="-6.25" y="1030" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="46" value="查看系统运行日志或环境" style="rounded=0;whiteSpace=wrap;html=1;fillStyle=auto;strokeColor=default;fontFamily=simsun;fontSize=16;fontColor=default;fillColor=default;gradientColor=none;align=center;fontStyle=0;verticalAlign=middle;" vertex="1" parent="1">
<mxGeometry x="293.75" y="1030" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="47" value="退出系统" style="whiteSpace=wrap;html=1;fillColor=#6a00ff;strokeColor=#3700CC;rounded=0;fontColor=#ffffff;fontSize=16;align=center;fontStyle=0;verticalAlign=middle;fontFamily=simsun;" vertex="1" parent="1">
<mxGeometry x="663.75" y="930" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="48" style="edgeStyle=none;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;fontFamily=simsun;fontSize=16;fontColor=default;endArrow=classic;endFill=1;align=center;fontStyle=0;verticalAlign=middle;" edge="1" parent="1" source="51" target="28">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="49" value="是" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=16;fontFamily=simsun;fontColor=default;fontStyle=0" vertex="1" connectable="0" parent="48">
<mxGeometry x="-0.4229" y="-1" relative="1" as="geometry">
<mxPoint as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="50" style="edgeStyle=none;html=1;fontFamily=simsun;fontSize=16;fontColor=default;endArrow=classic;endFill=1;align=center;fontStyle=0;verticalAlign=middle;" edge="1" parent="1" source="51">
<mxGeometry relative="1" as="geometry">
<mxPoint x="190" y="1100" as="targetPoint"/>
<Array as="points">
<mxPoint x="420" y="1610"/>
<mxPoint x="420" y="1100"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="95" value="否" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=16;fontFamily=simsun;fontColor=default;" vertex="1" connectable="0" parent="50">
<mxGeometry x="-0.1233" y="-1" relative="1" as="geometry">
<mxPoint y="-1" as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="51" value="模型是否已经训练" style="rhombus;whiteSpace=wrap;html=1;rounded=0;fillStyle=auto;strokeColor=default;fontFamily=simsun;fontSize=16;fontColor=default;fillColor=default;gradientColor=none;align=center;fontStyle=0;verticalAlign=middle;" vertex="1" parent="1">
<mxGeometry x="117.5" y="1560" width="145" height="110" as="geometry"/>
</mxCell>
<mxCell id="60" style="edgeStyle=none;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;fontSize=16;align=center;fontStyle=0;verticalAlign=middle;fontFamily=simsun;" edge="1" parent="1" source="52">
<mxGeometry relative="1" as="geometry">
<mxPoint x="350" y="1700" as="targetPoint"/>
<Array as="points">
<mxPoint x="440" y="1520"/>
<mxPoint x="440" y="1700"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="61" value="否" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=16;fontStyle=0;fontFamily=simsun;" vertex="1" connectable="0" parent="60">
<mxGeometry x="0.2135" y="1" relative="1" as="geometry">
<mxPoint as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="52" value="语音库路径是否有效" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;rounded=0;fillStyle=auto;fontSize=16;align=center;fontStyle=0;verticalAlign=middle;fontFamily=simsun;" vertex="1" parent="1">
<mxGeometry x="505" y="1520" width="170" height="80" as="geometry"/>
</mxCell>
<mxCell id="58" style="edgeStyle=none;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fontSize=16;align=center;fontStyle=0;verticalAlign=middle;fontFamily=simsun;" edge="1" parent="1" source="56" target="52">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="505" y="1750"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="56" value="选择语音库" style="whiteSpace=wrap;html=1;rounded=0;fillStyle=auto;gradientColor=none;fontSize=16;align=center;fontStyle=0;verticalAlign=middle;fontFamily=simsun;" vertex="1" parent="1">
<mxGeometry x="290" y="1720" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="64" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;endArrow=classic;html=1;curved=0;rounded=0;endSize=8;startSize=8;exitX=0.5;exitY=1;exitDx=0;exitDy=0;fontSize=16;align=center;fontStyle=0;verticalAlign=middle;fontFamily=simsun;" edge="1" parent="1" source="29">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="190" y="2080" as="sourcePoint"/>
<mxPoint x="910" y="1890" as="targetPoint"/>
<Array as="points">
<mxPoint x="540" y="1970"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="65" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;endArrow=classic;html=1;curved=0;rounded=0;endSize=8;startSize=8;fontSize=16;align=center;fontStyle=0;verticalAlign=middle;fontFamily=simsun;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="-10" y="1520" as="sourcePoint"/>
<mxPoint x="190" y="1970" as="targetPoint"/>
<Array as="points">
<mxPoint x="-40" y="1740"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="67" value="配置算法" style="rounded=0;whiteSpace=wrap;html=1;fillStyle=auto;strokeColor=#9673a6;fontFamily=simsun;fontSize=16;fillColor=#e1d5e7;" vertex="1" parent="1">
<mxGeometry x="133.75" y="1310" width="120" height="60" as="geometry"/>
</mxCell>
<mxCell id="68" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;endArrow=classic;html=1;curved=0;rounded=0;endSize=8;startSize=8;fontFamily=simsun;fontSize=16;fontColor=default;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="42" target="47">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="810" y="1630" as="sourcePoint"/>
<mxPoint x="780" y="970" as="targetPoint"/>
<Array as="points">
<mxPoint x="910" y="1390"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="69" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;endArrow=none;html=1;curved=0;rounded=0;endSize=8;startSize=8;fontFamily=simsun;fontSize=16;fontColor=default;endFill=0;startArrow=classic;startFill=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" target="11">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="190" y="1470" as="sourcePoint"/>
<mxPoint x="130" y="970" as="targetPoint"/>
<Array as="points">
<mxPoint x="-40" y="1240"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="70" value="" style="edgeStyle=segmentEdgeStyle;endArrow=classic;html=1;curved=0;rounded=0;endSize=8;startSize=8;fontFamily=simsun;fontSize=16;fontColor=default;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="4" target="67">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="440" y="1180" as="sourcePoint"/>
<mxPoint x="490" y="1130" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="71" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;endArrow=classic;html=1;curved=0;rounded=0;endSize=8;startSize=8;fontFamily=simsun;fontSize=16;fontColor=default;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="67">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="170" y="1420" as="sourcePoint"/>
<mxPoint x="194" y="1400" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="72" value="" style="edgeStyle=segmentEdgeStyle;endArrow=classic;html=1;curved=0;rounded=0;endSize=8;startSize=8;fontFamily=simsun;fontSize=16;fontColor=default;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" target="2">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="590" y="1430" as="sourcePoint"/>
<mxPoint x="640" y="1380" as="targetPoint"/>
</mxGeometry>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>
\ No newline at end of file
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="1011px" height="972px" viewBox="-0.5 -0.5 1011 972" content="&lt;mxfile&gt;&lt;diagram id=&quot;uUDe0YMawTO2Uo1_Cgbq&quot; name=&quot;Page-1&quot;&gt;7V1Jk6M2FP41HLsLEAhxBC/JIalM1RySOdIGt6lg08G4l/n1kYTEIokxGIyX7qquahASi763vydZA7Pt+29Z8LL5Mw2jRDP18F0Dc800DRca+B9p+ShaXEMvGp6zOGSdqobv8c+INfJuhziM9o2OeZomefzSbFylu120yhttQZalb81u6zRpPvUleI6khu+rIJFb/47DfFO0Iluv2n+P4ucNf7KhsyvbgHdmDftNEKZvtSaw0MAsS9O8ONq+z6KETB6fl2LcsuVq+WJZtMu7DDCLAa9BcmDfxt4r/+Afm6WHXRiR/roG/LdNnEffX4IVufqG4cVtm3yb4DMDH67jJJmlSZrRsSC0IxRauH2fZ+m/Ue0KMp8AhPjKcxaEMX5bfm2X7vCt/RQ/Is4Jfdjkset0lzM6MMioIImfd/hkhUdGGe/AXpoMeI2yPMaIeazjNg5DcpF2XAbbOCH33sfb/QFf9tk04EHRe+tUGiVAmLKjdBvl2QfuwgZYLsP0g6OOWMNbRSPANR/tonVTpxDeNWCU+VzevgIPHzD81FiC41hGIaZjdsomugZetAs9wh1kXpNgv49XReMyTkp8J8GBvOavUcBflR6yFetlMRkQZM8R61XjpgZYWZQEefzavP2QWbe+OGgsDnqAj6Z9WR6yh/LQdTKIwbVkjUMMMBGHwK85HX1Onb6i/T3O/yGzgzmnOPtRuzJ/ZxNHTz7YiXqyRDDIOZc8YbQODkneTZXguc0+2DshxBt+0AYd8PPq1ejZR/3sW5TFeOYICdDG0+liPAqw7IEUwIZ+S2P85FI0ItG20AVhV7wDGyXQUfkanUgL9bYaKhwbKB6B8MzkNQUxNICHZwHeEK1K3RGQLyhyDOTdMQT1jUN6lL+diSQ893X7i/iagK/E/UVE/GUAOz8PWiIPtkhfPD/BR63bC+mwb3/QgyjmdUtw348N4G/WNgD27G+AXw/AB8VHnipzOI/Vhc7C1vCMe0tygDzNQ9rC0Xyg+T498DV3KfHGIB8riNB6pfKx4ApFT+vb8J4kqHRD9p0MHniqe05wBMfJ6B9sON1suEJnAChUxVSaQhH4Wbgawswzpwwz17yFtkCEozzcAjUX/7mEu3xPcwFjKmQxxkOyBXiEn5rMd4u8UtrTk/BKh5iROizH2KjSslfMEbbMEcV3TsESijiOgiWghgBpJAcW0SrHOaGfnrl+ThAZwbSmZIR7DQ05Ctofapt2nlSnE+07GnI1v9ACCw0Zn5D2ZeKfVAugocR/s/kaPqUN/hgaOOs87+4JMuaOnGTV5IOphBN/eEM4ISKQvDmXQIDoY+z0eQYVRVg4+QNFUdPdW6NVtFK6e0/Itm4lWSZ75lMKL1PltstKxtU8k6kUz6IHDtUtkCKLL81IH+yLII6+TzujpYZM6qlg7SQHwvq5Ixh9DlVwyFPcFAb7Db1+s4pKkRY9H9bmcUXVmx/5hG6CfLVhbX+VGesb4cEySFu6ka4CF6jAxRgFmM9b8WGqvMuhGZjO8271nuZPmyI7Bpo9meXREhLQiR9EAgC+5rm1KJlL4gE+YOEy5GgLi+onOFAbXb9Uky0LlVQ7m7ZRxQQgJWnyxY2ph/8dUn7hYU9n1cMdDPjyTqeCX8dHz/R/F3gL84NkH3Bnh9kq2FDB3dh74E8oXoXd9d4JQlGXNS1JKCIan0XPIYWec6cSmYoIRcFBjCnwsU8P5sRQJxyEW7xuXCbFXu+diySx6kxqxCuKOwgqGCebemUzogErhw1qvk1bioRrAeGCdKs8t9LNw6Aumbvue5r3CVUkcibEEsge8Wn2Z3ntc9ifQFHPYw6UpSfVeUAEBXUKxq2qAKrwjMztUphNEYqT+P/eeduyLhlYA4pgiwIVrFj9ZhitFNhU+RJ1XPahehl5FHiPheN8jKXDlDi6f4EtLc4phegkoKoqNDBgDvkrDghODmVQlyKHCJz3jooDy5Ucl8FFUYihEIoWtWrKwDQFCJu5hOsKa9jgBxbtPCMxa2LXelTc4vsY5FhE8+SYKYtit6z7uQHcoSl7lNMCP8o6n3MujjhhvcbU5pRtyuaUNdWyO7vFn6F8qILyj+ApSpoYShPWOkFZtI9/Bk/lTDIDD9/c9jV73oJ8fe578hJbucweqZV50zokoCVjzqM2+qMJkNXgMobYqfXQ7C4Pwoh0vd5HQxcf2FMsabqvolMAZQa0p0qCAEWclui8oqjIJcEetFSEi8bWglISP4RP0IatUy0xqlAcsF6btDhgqDQdllgUzVVoTqkde8Zbo+QpfVtUDT5twBc2aRb/xNMWJG1ar4bt6pC9lnTQpAo8lEGGKOJBltfOh6liLhAa4qCSDi0CYerVZaCFrWvkYCuogbeNvQDGAQKZtSxCk+4EROfaMYQ7jbSUxoSCfemYI4dYBpfv3Vl0jSPbMAeHhtc6i6yvtYsd0JhqRQp/+JHwo5xKknzmBXXFvaErUu7JebYvmkeyDAmKjrmH8qSbhr03flQ5y0PXEp+kGV2xaA0Zv14DKg0QVqUOVqV8bhriosg7ICYcSMZYFhdybpIvD2Uh8yKK55No95cAKaOulxUg4JMr5qFKuCtXd9whZLD4cPWRpYEqKE8rDNw5LSSfU7HwZTyMYjxMWrhgqWowZbvQInUlPl2N6Vp0+T8F27dYhBfJ0nzcKFIlQIYIn3pkqWptoZ2LhpsepDr2KVPeljqSKFKFtAUEpgoiFHTG50US3HWYCCCXaHIVSweXJlcx2RR7SpASJ1kLfZHQqBHLaUmoZc2rTv6IhnBICvf4LiL9FpLBQNfXa1UMGji6PpvJqqQGchFrXq9vZHcRKO4cM+nuIlbvTckmTg7dkYFqq6rk0ECjtTPQN5DWVWOtFvwVTm0s2CXTa7VMf5XptcoCXyFHe6pbMW5ut2/B6l2y1Og+n5SWMc60L5llCg+CR0JG0gBj5G3DuJA6UrnFJQfbUYx6i6TqjseX0FJRXCkZhpt0+3TYHzcKj/qNn9tExEQgVvvZUGFEWKrNncU04UkbEfeum1daEaXh0Lql4vWVihS1WqNLIGALfO6cKeokFWXb4g8bHBvgjBymgioJxMXMlVgqZy5Agy3FfuxO+qNpAIHhr8koUWUd5JVr5SZ5iGiOQpeQDZMslXaBNFjhsp0rVFsoddUlbWVJ7eVOR7XPDXiZti4qCFXdk6PwMkfZ/P/0ra+13rnNK9QRqnLCUfRGX2kvkYFjj2w+qkKOXTYD4NKgZ+DojjMKUuDPUbHsuQJDsMNWmp1KFfnEtTmQYxQqnvojDNcnKtqWoF+mHNHURenftRxRzpq657FfbdEcdUd2iGHPFS1XULN7DWR9KRKWMm6lodOXhKUgkDvV5vTOsDIgfFr9zl3Rvfq1QLD4Hw==&lt;/diagram&gt;&lt;/mxfile&gt;"><defs><pattern patternUnits="userSpaceOnUse" width="11.5" height="11.5" x="0" y="0" patternTransform="rotate(45)" id="mx-pattern-hatch-1-ffffff-0"><line x1="0" y1="0" x2="0" y2="11.5" stroke="rgb(255, 255, 255)" stroke-width="1.5"/></pattern></defs><g><rect x="579" y="170" width="392.5" height="180" fill-opacity="0.5" fill="#d5e8d4" stroke="#82b366" stroke-opacity="0.5" pointer-events="all"/><path d="M 279 350 L 279 383.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 279 388.88 L 275.5 381.88 L 279 383.63 L 282.5 381.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><rect x="82.75" y="170" width="392.5" height="180" fill-opacity="0.5" fill="#d5e8d4" stroke="#82b366" stroke-opacity="0.5" pointer-events="all"/><path d="M 279 60 L 279 83.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 279 88.88 L 275.5 81.88 L 279 83.63 L 282.5 81.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 279 60 L 279 83.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 279 88.88 L 275.5 81.88 L 279 83.63 L 282.5 81.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 279 60 L 155.74 90.28" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 150.65 91.53 L 156.61 86.46 L 155.74 90.28 L 158.28 93.26 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 279 60 L 432.74 88.83" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 437.9 89.79 L 430.38 91.94 L 432.74 88.83 L 431.67 85.06 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 339 30 L 742.63 30" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 747.88 30 L 740.88 33.5 L 742.63 30 L 740.88 26.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 219 30 L 19 30 Q 9 30 9 40 L 9 450 Q 9 460 19 460 L 139 460 Q 149 460 159 460 L 209 460 Q 219 460 229 460 L 272.63 460" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 277.88 460 L 270.88 463.5 L 272.63 460 L 270.88 456.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><rect x="219" y="0" width="120" height="60" fill="#dae8fc" stroke="#6c8ebf" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 30px; margin-left: 220px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 16px; font-family: simsun; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">启动系统</div></div></div></foreignObject><text x="279" y="35" fill="rgb(0, 0, 0)" font-family="simsun" font-size="16px" text-anchor="middle">启动系统</text></switch></g><path d="M 279 150 L 279 163.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 279 168.88 L 275.5 161.88 L 279 163.63 L 282.5 161.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><rect x="219" y="90" width="120" height="60" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 120px; margin-left: 220px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 16px; font-family: simsun; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">配置语料库组合</div></div></div></foreignObject><text x="279" y="125" fill="rgb(0, 0, 0)" font-family="simsun" font-size="16px" text-anchor="middle">配置语料库组合</text></switch></g><path d="M 239 260 L 299 260" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><rect x="119" y="230" width="120" height="60" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 260px; margin-left: 120px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 16px; font-family: simsun; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">配置情感组合</div></div></div></foreignObject><text x="179" y="265" fill="rgb(0, 0, 0)" font-family="simsun" font-size="16px" text-anchor="middle">配置情感组合</text></switch></g><path d="M 379 250 L 379 263.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 379 268.88 L 375.5 261.88 L 379 263.63 L 382.5 261.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><rect x="319" y="190" width="120" height="60" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 220px; margin-left: 320px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 16px; font-family: simsun; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">配置特征组合</div></div></div></foreignObject><text x="379" y="225" fill="rgb(0, 0, 0)" font-family="simsun" font-size="16px" text-anchor="middle">配置特征组合</text></switch></g><path d="M 279 450 L 279 473.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 279 478.88 L 275.5 471.88 L 279 473.63 L 282.5 471.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 339 420 L 522.63 420" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 527.88 420 L 520.88 423.5 L 522.63 420 L 520.88 416.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><rect x="219" y="390" width="120" height="60" fill="#f8cecc" stroke="#b85450" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 420px; margin-left: 220px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 16px; font-family: simsun; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">训练模型</div></div></div></foreignObject><text x="279" y="425" fill="rgb(0, 0, 0)" font-family="simsun" font-size="16px" text-anchor="middle">训练模型</text></switch></g><rect x="319" y="270" width="120" height="60" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-dasharray="3 3" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 300px; margin-left: 320px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 16px; font-family: simsun; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">配置预处理和降维参数</div></div></div></foreignObject><text x="379" y="305" fill="rgb(0, 0, 0)" font-family="simsun" font-size="16px" text-anchor="middle">配置预处理和降维参数</text></switch></g><rect x="299" y="180" width="160" height="160" fill-opacity="0" fill="url(#mx-pattern-hatch-1-ffffff-0)" stroke="rgb(0, 0, 0)" pointer-events="all"/><path d="M 219 510 L 209.12 510" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 203.87 510 L 210.87 506.5 L 209.12 510 L 210.87 513.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 279 540 L 279 543.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 279 548.88 L 275.5 541.88 L 279 543.63 L 282.5 541.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><rect x="219" y="480" width="120" height="60" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 510px; margin-left: 220px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 16px; font-family: simsun; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">选择语音文件</div></div></div></foreignObject><text x="279" y="515" fill="rgb(0, 0, 0)" font-family="simsun" font-size="16px" text-anchor="middle">选择语音文件</text></switch></g><rect x="82.75" y="480" width="120" height="60" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 510px; margin-left: 84px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 16px; font-family: simsun; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><font style="font-size: 16px;">语音文件可视化</font></div></div></div></foreignObject><text x="143" y="515" fill="rgb(0, 0, 0)" font-family="simsun" font-size="16px" text-anchor="middle">语音文件可视化</text></switch></g><path d="M 279 830 L 279 853.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 279 858.88 L 275.5 851.88 L 279 853.63 L 282.5 851.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><rect x="219" y="770" width="120" height="60" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 800px; margin-left: 220px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 16px; font-family: simsun; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">识别单个语音文件情感</div></div></div></foreignObject><text x="279" y="805" fill="rgb(0, 0, 0)" font-family="simsun" font-size="16px" text-anchor="middle">识别单个语音文件情感</text></switch></g><rect x="219" y="860" width="120" height="60" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 890px; margin-left: 220px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 16px; font-family: simsun; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">查看预测结果和置信度</div></div></div></foreignObject><text x="279" y="895" fill="rgb(0, 0, 0)" font-family="simsun" font-size="16px" text-anchor="middle">查看预测结果和置信度</text></switch></g><path d="M 649 420 L 765 420 Q 775 420 775.04 410 L 775.23 356.37" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 775.25 351.12 L 778.72 358.13 L 775.23 356.37 L 771.72 358.11 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><rect x="529" y="390" width="120" height="60" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 420px; margin-left: 530px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 16px; font-family: simsun; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">查看模型训练结果</div></div></div></foreignObject><text x="589" y="425" fill="rgb(0, 0, 0)" font-family="simsun" font-size="16px" text-anchor="middle">查看模型训练结果</text></switch></g><rect x="579" y="220" width="120" height="60" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 250px; margin-left: 580px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 16px; font-family: simsun; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">训练集和测试集上的得分</div></div></div></foreignObject><text x="639" y="255" fill="rgb(0, 0, 0)" font-family="simsun" font-size="16px" text-anchor="middle">训练集和测试集上的得分</text></switch></g><rect x="851.5" y="220" width="120" height="60" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 250px; margin-left: 853px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 16px; font-family: simsun; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">混淆矩阵</div></div></div></foreignObject><text x="912" y="255" fill="rgb(0, 0, 0)" font-family="simsun" font-size="16px" text-anchor="middle">混淆矩阵</text></switch></g><rect x="715.25" y="220" width="120" height="60" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 250px; margin-left: 716px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 16px; font-family: simsun; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">模型交叉验证评估报告</div></div></div></foreignObject><text x="775" y="255" fill="rgb(0, 0, 0)" font-family="simsun" font-size="16px" text-anchor="middle">模型交叉验证评估报告</text></switch></g><path d="M 679 590 L 679 763.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 679 768.88 L 675.5 761.88 L 679 763.63 L 682.5 761.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 658px; margin-left: 682px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 16px; font-family: simsun; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;"></div></div></div></foreignObject><text x="682" y="663" fill="rgb(0, 0, 0)" font-family="simsun" font-size="16px" text-anchor="middle"></text></switch></g><path d="M 439 670 L 439 703.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 439 708.88 L 435.5 701.88 L 439 703.63 L 442.5 701.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><rect x="379" y="610" width="120" height="60" fill="#fff2cc" stroke="#d6b656" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 640px; margin-left: 380px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 16px; font-family: simsun; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">批量识别</div></div></div></foreignObject><text x="439" y="645" fill="rgb(0, 0, 0)" font-family="simsun" font-size="16px" text-anchor="middle">批量识别</text></switch></g><path d="M 279 720 L 354 720 L 354 640 L 371.13 640" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 377.88 640 L 368.88 644.5 L 371.13 640 L 368.88 635.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 739 800 L 812.63 800" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 817.88 800 L 810.88 803.5 L 812.63 800 L 810.88 796.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 679 830 L 679 853.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 679 858.88 L 675.5 851.88 L 679 853.63 L 682.5 851.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><rect x="619" y="770" width="120" height="60" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 800px; margin-left: 620px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 16px; font-family: simsun; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">查看识别报告表</div></div></div></foreignObject><text x="679" y="805" fill="rgb(0, 0, 0)" font-family="simsun" font-size="16px" text-anchor="middle">查看识别报告表</text></switch></g><path d="M 939 800 L 989 800 Q 999 800 999 790 L 999 40 Q 999 30 989 30 L 875.37 30" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 870.12 30 L 877.12 26.5 L 875.37 30 L 877.12 33.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><rect x="819" y="770" width="120" height="60" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 800px; margin-left: 820px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 16px; font-family: simsun; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">绘制识别结果统计图</div></div></div></foreignObject><text x="879" y="805" fill="rgb(0, 0, 0)" font-family="simsun" font-size="16px" text-anchor="middle">绘制识别结果统计图</text></switch></g><path d="M 739 890 L 989 890 Q 999 890 999 880 L 999 796.37" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 999 791.12 L 1002.5 798.12 L 999 796.37 L 995.5 798.12 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><rect x="619" y="860" width="120" height="60" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 890px; margin-left: 620px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 16px; font-family: simsun; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">保存识别报告表</div></div></div></foreignObject><text x="679" y="895" fill="rgb(0, 0, 0)" font-family="simsun" font-size="16px" text-anchor="middle">保存识别报告表</text></switch></g><rect x="79" y="90" width="120" height="60" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 120px; margin-left: 80px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 16px; font-family: simsun; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">查看使用说明</div></div></div></foreignObject><text x="139" y="125" fill="rgb(0, 0, 0)" font-family="simsun" font-size="16px" text-anchor="middle">查看使用说明</text></switch></g><rect x="379" y="90" width="120" height="60" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 120px; margin-left: 380px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 16px; font-family: simsun; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">查看系统运行日志或环境</div></div></div></foreignObject><text x="439" y="125" fill="rgb(0, 0, 0)" font-family="simsun" font-size="16px" text-anchor="middle">查看系统运行日志或环境</text></switch></g><rect x="749" y="0" width="120" height="60" fill="#6a00ff" stroke="#3700cc" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 30px; margin-left: 750px;"><div data-drawio-colors="color: #ffffff; " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 16px; font-family: simsun; color: rgb(255, 255, 255); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">退出系统</div></div></div></foreignObject><text x="809" y="35" fill="#ffffff" font-family="simsun" font-size="16px" text-anchor="middle">退出系统</text></switch></g><path d="M 279 660 L 279 763.63" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 279 768.88 L 275.5 761.88 L 279 763.63 L 282.5 761.88 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 692px; margin-left: 279px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 16px; font-family: simsun; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;"></div></div></div></foreignObject><text x="279" y="697" fill="rgb(0, 0, 0)" font-family="simsun" font-size="16px" text-anchor="middle"></text></switch></g><path d="M 349.48 603.47 L 499 600.22 Q 509 600 509 590 L 509 170 Q 509 160 499 160 L 285.37 160" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 280.12 160 L 287.12 156.5 L 285.37 160 L 287.12 163.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 279 550 L 351.5 605 L 279 660 L 206.5 605 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 143px; height: 1px; padding-top: 605px; margin-left: 208px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 16px; font-family: simsun; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">模型是否已经训练</div></div></div></foreignObject><text x="279" y="610" fill="rgb(0, 0, 0)" font-family="simsun" font-size="16px" text-anchor="middle">模型是否已经训练</text></switch></g><path d="M 679 510 L 539 510 Q 529 510 529 520 L 529 680 Q 529 690 519 690 L 445.37 690" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 440.12 690 L 447.12 686.5 L 445.37 690 L 447.12 693.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 616px; margin-left: 531px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 16px; font-family: simsun; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;"></div></div></div></foreignObject><text x="531" y="620" fill="rgb(0, 0, 0)" font-family="simsun" font-size="16px" text-anchor="middle"></text></switch></g><path d="M 679 510 L 764 550 L 679 590 L 594 550 Z" fill="#fff2cc" stroke="#d6b656" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 168px; height: 1px; padding-top: 550px; margin-left: 595px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 16px; font-family: simsun; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">语音库路径是否有效</div></div></div></foreignObject><text x="679" y="555" fill="rgb(0, 0, 0)" font-family="simsun" font-size="16px" text-anchor="middle">语音库路径是否有效</text></switch></g><path d="M 499 740 L 584 740 Q 594 740 594 730 L 594 556.37" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 594 551.12 L 597.5 558.12 L 594 556.37 L 590.5 558.12 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><rect x="379" y="710" width="120" height="60" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 740px; margin-left: 380px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 16px; font-family: simsun; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">选择语音库</div></div></div></foreignObject><text x="439" y="745" fill="rgb(0, 0, 0)" font-family="simsun" font-size="16px" text-anchor="middle">选择语音库</text></switch></g><path d="M 279 920 L 279 960 L 999 960 L 999 887.87" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 999 881.12 L 1003.5 890.12 L 999 887.87 L 994.5 890.12 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 79 510 L 9 510 L 9 960 L 271.13 960" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 277.88 960 L 268.88 964.5 L 271.13 960 L 268.88 955.5 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Text is not SVG - cannot display</text></a></switch></svg>
\ No newline at end of file
本文是本人本科阶段第一次完成一篇完整的论文写作.在本文完成的过程中,除了个人努力以外还得到了许多人的支持和帮助。
首先,我要感谢指导老师蒋海华老师,他在整个毕设的过程中给予了我宝贵的指导和建议,使我能够更好地理解和掌握语音情感识别的相关知识和技术。蒋老师的专业知识、严谨态度和无私奉献精神,对我的毕设研究起到了至关重要的作用。
其次,我要感谢陪伴我共同学习的同学们和教授过我专业课的老师们,在写作本文期间,他们直接或间接的向我提供了帮助。感谢学校为我提供了良好的学习和研究的环境与氛围,使我能够完成此次毕业设计和论文写作。
在此,我还要感谢为本研究提供了宝贵语音数据的人员以及开发工具框架的工程师,他们为本研究做出了重要贡献。最后,我要感谢我的家人和朋友们,在我完成毕设的过程中给予了我无尽的关心和支持,他们的关爱和鼓励,是我不断前行和超越自我的动力源泉。
......@@ -2,7 +2,7 @@
"cells": [
{
"cell_type": "code",
"execution_count": 23,
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
......@@ -13,20 +13,9 @@
},
{
"cell_type": "code",
"execution_count": 24,
"execution_count": null,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(107, 35)"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"outputs": [],
"source": [
"#第shape[1]就是pca降维后的维数\n",
"feature.shape"
......@@ -34,57 +23,18 @@
},
{
"cell_type": "code",
"execution_count": 22,
"execution_count": null,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"emodb_chroma-mel-mfcc_ANOS_107_@pca_params={n_components=35,svd_solver=auto}.npy\n",
"emodb_chroma-mel-mfcc_ANOS_107_@pca_params={n_components=None,svd_solver=auto}.npy\n",
"emodb_chroma-mel-mfcc_ANOS_107_@pca_params={n_components=mle,svd_solver=auto}.npy\n",
"emodb_chroma-mel-mfcc_ANOS_428_@pca_params={n_components=35,svd_solver=auto}.npy\n",
"emodb_chroma-mel-mfcc_ANOS_428_@pca_params={n_components=None,svd_solver=auto}.npy\n",
"emodb_chroma-mel-mfcc_ANOS_428_@pca_params={n_components=mle,svd_solver=auto}.npy\n",
"emodb_chroma-mel-mfcc_HNS_169_@pca={n_components=39}.npy\n",
"emodb_mfcc_ANOS_107_@pca={n_components=30}.npy\n",
"emodb_mfcc_ANOS_107_@pca={n_components=mle}.npy\n",
"emodb_mfcc_ANOS_107_@pca_params={n_components=25,svd_solver=auto}.npy\n",
"emodb_mfcc_ANOS_107_@pca_params={n_components=31,svd_solver=auto}.npy\n",
"emodb_mfcc_ANOS_107_@pca_params={n_components=35,svd_solver=auto}.npy\n",
"emodb_mfcc_ANOS_107_@pca_params={n_components=None,svd_solver=auto}.npy\n",
"emodb_mfcc_ANOS_428_@pca={n_components=30}.npy\n",
"emodb_mfcc_ANOS_428_@pca={n_components=mle}.npy\n",
"emodb_mfcc_ANOS_428_@pca_params={n_components=25,svd_solver=auto}.npy\n",
"emodb_mfcc_ANOS_428_@pca_params={n_components=31,svd_solver=auto}.npy\n",
"emodb_mfcc_ANOS_428_@pca_params={n_components=35,svd_solver=auto}.npy\n",
"emodb_mfcc_ANOS_428_@pca_params={n_components=None,svd_solver=auto}.npy\n",
"emodb_mfcc_AS_151_@pca={n_components=39}.npy\n",
"emodb_mfcc_AS_38_@pca={n_components=39}.npy\n"
]
}
],
"outputs": [],
"source": [
"!ls *pca*"
]
},
{
"cell_type": "code",
"execution_count": 17,
"execution_count": null,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"((107, 180), (107, 41))"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"outputs": [],
"source": [
"from sklearn.datasets import load_digits\n",
"from sklearn.decomposition import PCA\n",
......@@ -99,19 +49,9 @@
},
{
"cell_type": "code",
"execution_count": 4,
"execution_count": null,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"a\n",
"std_scaler\n",
"pca\n"
]
}
],
"outputs": [],
"source": [
"d={\"a\":123,\"std_scaler\":True,\"pca\":{\"n_components\":35,\"svd_solver\":\"auto\"}}\n",
"for x in d.keys():\n",
......@@ -120,91 +60,565 @@
},
{
"cell_type": "code",
"execution_count": 7,
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"%matplotlib"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"#%matplotlib inline\n",
"import matplotlib.pyplot as plt\n",
"\n",
"plt.plot([1, 2, 3])"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import tkinter as tk\n",
"from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg\n",
"from matplotlib.figure import Figure\n",
"import numpy as np\n",
"\n",
"def plot_graph():\n",
" # 创建一个简单的图形\n",
" fig = Figure(figsize=(5, 4), dpi=100)\n",
" ax = fig.add_subplot(111)\n",
" t = np.arange(0, 3, .01)\n",
" ax.plot(t, 2 * np.sin(2 * np.pi * t))\n",
"\n",
" # 将图形嵌入到 Tkinter 窗口中\n",
" canvas = FigureCanvasTkAgg(fig, master=root)\n",
" canvas.draw()\n",
" canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=1)\n",
"\n",
"root = tk.Tk()\n",
"root.title(\"Matplotlib in Tkinter\")\n",
"plot_button = tk.Button(master=root, text=\"Plot\", command=plot_graph)\n",
"plot_button.pack(side=tk.BOTTOM)\n",
"\n",
"root.mainloop()\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import matplotlib as mpl\n",
"mpl.get_backend()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"fig, ax = plt.subplots(figsize=(2, 2), facecolor='lightskyblue',\n",
" layout='constrained')\n",
"fig.suptitle('Figure')\n",
"ax.set_title('Axes', loc='left', fontstyle='oblique', fontsize='medium')"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import tkinter\n",
"\n",
"from matplotlib.backends.backend_tkagg import (\n",
" FigureCanvasTkAgg, NavigationToolbar2Tk)\n",
"# Implement the default Matplotlib key bindings.\n",
"from matplotlib.backend_bases import key_press_handler\n",
"from matplotlib.figure import Figure\n",
"\n",
"import numpy as np\n",
"\n",
"\n",
"root = tkinter.Tk()\n",
"root.wm_title(\"Embedding in Tk\")\n",
"\n",
"fig = Figure(figsize=(5, 4), dpi=100)\n",
"t = np.arange(0, 3, .01)\n",
"ax = fig.add_subplot()\n",
"line, = ax.plot(t, 2 * np.sin(2 * np.pi * t))\n",
"ax.set_xlabel(\"time [s]\")\n",
"ax.set_ylabel(\"f(t)\")\n",
"\n",
"canvas = FigureCanvasTkAgg(fig, master=root) # A tk.DrawingArea.\n",
"canvas.draw()\n",
"\n",
"# pack_toolbar=False will make it easier to use a layout manager later on.\n",
"toolbar = NavigationToolbar2Tk(canvas, root, pack_toolbar=False)\n",
"toolbar.update()\n",
"\n",
"canvas.mpl_connect(\n",
" \"key_press_event\", lambda event: print(f\"you pressed {event.key}\"))\n",
"canvas.mpl_connect(\"key_press_event\", key_press_handler)\n",
"\n",
"button_quit = tkinter.Button(master=root, text=\"Quit\", command=root.destroy)\n",
"\n",
"\n",
"def update_frequency(new_val):\n",
" # retrieve frequency\n",
" f = float(new_val)\n",
"\n",
" # update data\n",
" y = 2 * np.sin(2 * np.pi * f * t)\n",
" line.set_data(t, y)\n",
"\n",
" # required to update canvas and attached toolbar!\n",
" canvas.draw()\n",
"\n",
"\n",
"slider_update = tkinter.Scale(root, from_=1, to=5, orient=tkinter.HORIZONTAL,\n",
" command=update_frequency, label=\"Frequency [Hz]\")\n",
"\n",
"# Packing order is important. Widgets are processed sequentially and if there\n",
"# is no space left, because the window is too small, they are not displayed.\n",
"# The canvas is rather flexible in its size, so we pack it last which makes\n",
"# sure the UI controls are displayed as long as possible.\n",
"button_quit.pack(side=tkinter.BOTTOM)\n",
"slider_update.pack(side=tkinter.BOTTOM)\n",
"toolbar.pack(side=tkinter.BOTTOM, fill=tkinter.X)\n",
"canvas.get_tk_widget().pack(side=tkinter.TOP, fill=tkinter.BOTH, expand=True)\n",
"\n",
"tkinter.mainloop()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# %matplotlib tk"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt\n",
"\n",
"# 使用plt.plot() \n",
"plt.plot([1,2,3], [2,4,1])\n",
"plt.show()\n",
"\n",
"#输出一张默认的图\n",
"\n",
"##\n",
"fig, ax = plt.subplots()\n",
"\n",
"# 使用ax.plot() \n",
"ax.plot([1,2,3], [2,4,1])\n",
"plt.show()\n",
"\n",
"# 输出使用 fig 和 ax 创建的图"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
"['a', 'std_scaler', 'pca']"
"<Figure size 640x480 with 1 Axes>"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
"output_type": "display_data"
}
],
"source": [
"keys=[x for x in d.keys()]\n",
"keys"
"import matplotlib.pyplot as plt\n",
"#\n",
"plt.figure()\n",
"plt.subplot(\n",
" # projection=\"aitoff\"\n",
")\n",
"plt.title(\"Normal\")\n",
"plt.grid(True)\n",
"##\n"
]
},
{
"cell_type": "code",
"execution_count": 12,
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAiEAAAExCAYAAACqKXKBAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAADnuElEQVR4nOy9d3gc1fn+fW9v0qqteu/FcpVluReQMdVAKIaQYAwxib+GhBCaCYQEQiA/kpCKDSGUgAkBYojBNuDeZatattV7L6vV9r573j/0zmRXWskqW0Ywn+s618zO7s48W+ac+zznOc/hEEIIWFhYWFhYWFj8DDfQBrCwsLCwsLB8O2FFCAsLCwsLC0tAYEUICwsLCwsLS0BgRQgLCwsLCwtLQGBFCAsLCwsLC0tAYEUICwsLCwsLS0BgRQgLCwsLCwtLQGBFCAsLCwsLC0tAYEUICwsLCwsLS0BgRQgLC4tX4XA4+OUvf+n1877yyitIS0sDj8fDggULAAB2ux1PPPEEEhMTweVyccstt3j9uiwsLL6DFSEsLCxT4rXXXgOHw0FRUdGkXn/mzBn88pe/hFqtnvY1v/76azzxxBNYsWIF3n77bfzmN78BALz11lt45ZVXcPvtt+Pdd9/FT3/602lfg4WFxf9w2LVjWFhYpsKKFSvQ09ODtrY2NDY2IiMjw+15s9kMPp8PPp8PAPjd736Hxx9/HK2trUhJSZnWNZ966im88sorMJlMEAqF9PG77roLp06dQldX17Q/DwsLS+BgPSEsLCyTprW1FWfOnMEf/vAHREZGYvfu3WNeIxaLaQHiLQYGBiCRSNwECHU8NDTUq9diYWHxH6wIYWFhmTS7d+9GWFgYbrjhBtx+++0eRYhrTMgvf/lLPP744wCA1NRUcDgccDgctLW1ARiJ6XjhhReQnp4OkUiElJQUPP3007BYLG7ne/vtt2EwGOj3v/POO+BwODh69CguX75MHz927JivvwIWFhYvwooQFhaWSbN792585zvfgVAoxN13343GxkaUlpaO+/rvfOc7uPvuuwEAr776Kt577z289957iIyMBAD84Ac/wC9+8QssWrQIr776KtasWYOXXnoJd911F32O9957D6tWrYJIJKLfX1hYiPfeew85OTlISEigj+fm5vr2C2BhYfEuhIWFhWUSlJWVEQDk4MGDhBBCnE4nSUhIID/5yU/cXgeAPPfcc/TjV155hQAgra2tbq+rqqoiAMgPfvADt+OPPfYYAUCOHDlCH9u8eTORyWRjbFqzZg2ZM2fOzD4YCwtLwGA9ISwsLJNi9+7diI6Oxrp16wCMDJNs2rQJH374IRwOx5TPt3//fgDAo48+6nb8Zz/7GQBg3759M7SYhYWF6bAihIWF5Yo4HA58+OGHWLduHVpbW9HU1ISmpiYUFRWhv78fhw8fnvI529vbweVyx8yuiYmJQWhoKNrb271lPgsLC0NhRQjLt5aUlBQ6oNG1bN++HQCwdu3aMc/96Ec/cjvH3r17kZWVhezsbHzxxReB+Bh+4ciRI+jt7cWHH36IzMxMutx5550A4DFAdbJwOBxvmcnCwjLL8O48OhaWWURpaanbMMKlS5ewfv163HHHHfSxrVu34vnnn6cfS6VSet9isWD79u14++23QQjB/fffj2uuuWbMNNJvArt370ZUVBT+9re/jXluz549+PTTT7Fr1y5IJJIxz48nMpKTk+F0OtHY2OgWUNrf3w+1Wo3k5GTvfQAWFhZGwooQlm8t1AwNipdffhnp6elYs2YNfUwqlSImJsbj+y0Wi1sKcT6fD4vF8o0TISaTCXv27MEdd9yB22+/fczzcXFx+Ne//oW9e/di06ZNY56XyWQAMCZj6vXXX4+nn34af/zjH/H666/Tx//whz8AAG644QYvfgoWFhYmwg7HsLAAsFqteP/993H//fe79dx3794NhUKB/Px87NixA0ajkX5OLpdjy5YtiI2NRVxcHLZt24bg4OBAmO9T9u7dC51Oh40bN3p8funSpeMmLgOAgoICAMDPf/5zvPfee/jwww9hMBgwf/58bN68GW+88QY2bdqE1157Dffddx/+3//7f7jlllvoAFgWFpZvLqwnhIUFwGeffQa1Wo377ruPPvbd734XycnJiIuLQ3V1NZ588knU19djz5499Guee+45PPLII+Byud9IAQKMCDGxWIz169d7fJ7L5eKGG27A7t27MTQ0NOb5wsJCvPDCC9i1axe+/PJLOJ1OtLa2QiaT4c0330RaWhreeecdfPrpp4iJicGOHTvw3HPP+fpjsbCwMAB27RgWFgAbNmyAUCjE559/Pu5rjhw5gquvvhpNTU1IT0/3o3UsLCws30zY4RiWbz3t7e04dOgQfvCDH0z4OmrV2Kam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",
"text/plain": [
"True"
"<Figure size 640x480 with 1 Axes>"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
"output_type": "display_data"
}
],
"source": [
"set([\"a\",'pca']) <= set(keys)"
"plt.figure()\n",
"plt.subplot(\n",
" projection=\"aitoff\"\n",
")\n",
"plt.title(\"Aitoff\")\n",
"plt.grid(True)\n",
"##\n"
]
},
{
"cell_type": "code",
"execution_count": 13,
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"True"
"['d:\\\\repos\\\\CCSER\\\\SER\\\\features',\n",
" 'D:\\\\repos\\\\ThinkDSP\\\\code',\n",
" 'D:\\\\repos\\\\CCSER\\\\cxxu_serlib',\n",
" 'C:\\\\new_path_demo',\n",
" 'D:\\\\repos\\\\PythonLearn\\\\cxxu_pylib',\n",
" 'D:\\\\repos\\\\CCSER\\\\SER',\n",
" 'd:\\\\repos\\\\CCSER\\\\SER\\\\features',\n",
" 'd:\\\\condaPythonEnvs\\\\tf2.10\\\\python39.zip',\n",
" 'd:\\\\condaPythonEnvs\\\\tf2.10\\\\DLLs',\n",
" 'd:\\\\condaPythonEnvs\\\\tf2.10\\\\lib',\n",
" 'd:\\\\condaPythonEnvs\\\\tf2.10',\n",
" '',\n",
" 'C:\\\\Users\\\\cxxu\\\\AppData\\\\Roaming\\\\Python\\\\Python39\\\\site-packages',\n",
" 'd:\\\\condaPythonEnvs\\\\tf2.10\\\\lib\\\\site-packages',\n",
" 'd:\\\\condaPythonEnvs\\\\tf2.10\\\\lib\\\\site-packages\\\\win32',\n",
" 'd:\\\\condaPythonEnvs\\\\tf2.10\\\\lib\\\\site-packages\\\\win32\\\\lib',\n",
" 'd:\\\\condaPythonEnvs\\\\tf2.10\\\\lib\\\\site-packages\\\\Pythonwin']"
]
},
"execution_count": 13,
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"False ==False"
"import sys\n",
"sys.path"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"from output"
]
},
{
"cell_type": "code",
"execution_count": 14,
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"True"
"['Annotation',\n",
" 'Arrow',\n",
" 'Artist',\n",
" 'AutoLocator',\n",
" 'Axes',\n",
" 'Button',\n",
" 'Circle',\n",
" 'Enum',\n",
" 'ExitStack',\n",
" 'Figure',\n",
" 'FigureBase',\n",
" 'FigureCanvasBase',\n",
" 'FigureManagerBase',\n",
" 'FixedFormatter',\n",
" 'FixedLocator',\n",
" 'FormatStrFormatter',\n",
" 'Formatter',\n",
" 'FuncFormatter',\n",
" 'GridSpec',\n",
" 'IndexLocator',\n",
" 'Line2D',\n",
" 'LinearLocator',\n",
" 'Locator',\n",
" 'LogFormatter',\n",
" 'LogFormatterExponent',\n",
" 'LogFormatterMathtext',\n",
" 'LogLocator',\n",
" 'MaxNLocator',\n",
" 'MouseButton',\n",
" 'MultipleLocator',\n",
" 'Normalize',\n",
" 'NullFormatter',\n",
" 'NullLocator',\n",
" 'Number',\n",
" 'PolarAxes',\n",
" 'Polygon',\n",
" 'Rectangle',\n",
" 'ScalarFormatter',\n",
" 'Slider',\n",
" 'Subplot',\n",
" 'SubplotSpec',\n",
" 'Text',\n",
" 'TickHelper',\n",
" 'Widget',\n",
" '_REPL_DISPLAYHOOK',\n",
" '_ReplDisplayHook',\n",
" '__builtins__',\n",
" '__cached__',\n",
" '__doc__',\n",
" '__file__',\n",
" '__loader__',\n",
" '__name__',\n",
" '__package__',\n",
" '__spec__',\n",
" '_api',\n",
" '_auto_draw_if_interactive',\n",
" '_backend_mod',\n",
" '_copy_docstring_and_deprecators',\n",
" '_docstring',\n",
" '_draw_all_if_interactive',\n",
" '_get_backend_mod',\n",
" '_get_pyplot_commands',\n",
" '_get_required_interactive_framework',\n",
" '_interactive_bk',\n",
" '_log',\n",
" '_pylab_helpers',\n",
" '_warn_if_gui_out_of_main_thread',\n",
" 'acorr',\n",
" 'angle_spectrum',\n",
" 'annotate',\n",
" 'arrow',\n",
" 'autoscale',\n",
" 'autumn',\n",
" 'axes',\n",
" 'axhline',\n",
" 'axhspan',\n",
" 'axis',\n",
" 'axline',\n",
" 'axvline',\n",
" 'axvspan',\n",
" 'bar',\n",
" 'bar_label',\n",
" 'barbs',\n",
" 'barh',\n",
" 'bone',\n",
" 'box',\n",
" 'boxplot',\n",
" 'broken_barh',\n",
" 'cbook',\n",
" 'cla',\n",
" 'clabel',\n",
" 'clf',\n",
" 'clim',\n",
" 'close',\n",
" 'cm',\n",
" 'cohere',\n",
" 'color_sequences',\n",
" 'colorbar',\n",
" 'colormaps',\n",
" 'connect',\n",
" 'contour',\n",
" 'contourf',\n",
" 'cool',\n",
" 'copper',\n",
" 'csd',\n",
" 'cycler',\n",
" 'delaxes',\n",
" 'disconnect',\n",
" 'draw',\n",
" 'draw_all',\n",
" 'draw_if_interactive',\n",
" 'errorbar',\n",
" 'eventplot',\n",
" 'figaspect',\n",
" 'figimage',\n",
" 'figlegend',\n",
" 'fignum_exists',\n",
" 'figtext',\n",
" 'figure',\n",
" 'fill',\n",
" 'fill_between',\n",
" 'fill_betweenx',\n",
" 'findobj',\n",
" 'flag',\n",
" 'functools',\n",
" 'gca',\n",
" 'gcf',\n",
" 'gci',\n",
" 'get',\n",
" 'get_backend',\n",
" 'get_cmap',\n",
" 'get_current_fig_manager',\n",
" 'get_figlabels',\n",
" 'get_fignums',\n",
" 'get_plot_commands',\n",
" 'get_scale_names',\n",
" 'getp',\n",
" 'ginput',\n",
" 'gray',\n",
" 'grid',\n",
" 'hexbin',\n",
" 'hist',\n",
" 'hist2d',\n",
" 'hlines',\n",
" 'hot',\n",
" 'hsv',\n",
" 'importlib',\n",
" 'imread',\n",
" 'imsave',\n",
" 'imshow',\n",
" 'inferno',\n",
" 'inspect',\n",
" 'install_repl_displayhook',\n",
" 'interactive',\n",
" 'ioff',\n",
" 'ion',\n",
" 'isinteractive',\n",
" 'jet',\n",
" 'legend',\n",
" 'locator_params',\n",
" 'logging',\n",
" 'loglog',\n",
" 'magma',\n",
" 'magnitude_spectrum',\n",
" 'margins',\n",
" 'matplotlib',\n",
" 'matshow',\n",
" 'minorticks_off',\n",
" 'minorticks_on',\n",
" 'mlab',\n",
" 'new_figure_manager',\n",
" 'nipy_spectral',\n",
" 'np',\n",
" 'pause',\n",
" 'pcolor',\n",
" 'pcolormesh',\n",
" 'phase_spectrum',\n",
" 'pie',\n",
" 'pink',\n",
" 'plasma',\n",
" 'plot',\n",
" 'plot_date',\n",
" 'polar',\n",
" 'prism',\n",
" 'psd',\n",
" 'quiver',\n",
" 'quiverkey',\n",
" 'rc',\n",
" 'rcParams',\n",
" 'rcParamsDefault',\n",
" 'rcParamsOrig',\n",
" 'rc_context',\n",
" 'rcdefaults',\n",
" 'rcsetup',\n",
" 're',\n",
" 'register_cmap',\n",
" 'rgrids',\n",
" 'savefig',\n",
" 'sca',\n",
" 'scatter',\n",
" 'sci',\n",
" 'semilogx',\n",
" 'semilogy',\n",
" 'set_cmap',\n",
" 'set_loglevel',\n",
" 'setp',\n",
" 'show',\n",
" 'specgram',\n",
" 'spring',\n",
" 'spy',\n",
" 'stackplot',\n",
" 'stairs',\n",
" 'stem',\n",
" 'step',\n",
" 'streamplot',\n",
" 'style',\n",
" 'subplot',\n",
" 'subplot2grid',\n",
" 'subplot_mosaic',\n",
" 'subplot_tool',\n",
" 'subplots',\n",
" 'subplots_adjust',\n",
" 'summer',\n",
" 'suptitle',\n",
" 'switch_backend',\n",
" 'sys',\n",
" 'table',\n",
" 'text',\n",
" 'thetagrids',\n",
" 'threading',\n",
" 'tick_params',\n",
" 'ticklabel_format',\n",
" 'tight_layout',\n",
" 'time',\n",
" 'title',\n",
" 'tricontour',\n",
" 'tricontourf',\n",
" 'tripcolor',\n",
" 'triplot',\n",
" 'twinx',\n",
" 'twiny',\n",
" 'uninstall_repl_displayhook',\n",
" 'violinplot',\n",
" 'viridis',\n",
" 'vlines',\n",
" 'waitforbuttonpress',\n",
" 'winter',\n",
" 'xcorr',\n",
" 'xkcd',\n",
" 'xlabel',\n",
" 'xlim',\n",
" 'xscale',\n",
" 'xticks',\n",
" 'ylabel',\n",
" 'ylim',\n",
" 'yscale',\n",
" 'yticks']"
]
},
"execution_count": 14,
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"\"a\"!=False"
"# fig,ax=plt.subplots()\n",
"# ax[]\n",
"\n",
"# p=plt.figure()\n",
"# plt.subplot(\n",
"# projection=\"aitoff\"\n",
"# )\n",
"# plt.title(\"Aitoff\")\n",
"# plt.grid(True)\n",
"# ##\n",
"from \n",
"dir(plt)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
......
,path,emotion
0,D:\repos\CCSER\SER\data\emodb\wav\12b02Fb.wav,happy
19,D:\repos\CCSER\SER\data\emodb\wav\08a05Fe.wav,happy
27,D:\repos\CCSER\SER\data\emodb\wav\16a07Fb.wav,happy
29,D:\repos\CCSER\SER\data\emodb\wav\11a05Fb.wav,happy
12,D:\repos\CCSER\SER\data\emodb\wav\10b10Fc.wav,happy
20,D:\repos\CCSER\SER\data\emodb\wav\10b01Fa.wav,happy
8,D:\repos\CCSER\SER\data\emodb\wav\14b02Fb.wav,happy
41,D:\repos\CCSER\SER\data\emodb\wav\11b09Fd.wav,happy
36,D:\repos\CCSER\SER\data\emodb\wav\14b01Fc.wav,happy
39,D:\repos\CCSER\SER\data\emodb\wav\09b03Fd.wav,happy
40,D:\repos\CCSER\SER\data\emodb\wav\16b03Fd.wav,happy
1,D:\repos\CCSER\SER\data\emodb\wav\08b09Fd.wav,happy
7,D:\repos\CCSER\SER\data\emodb\wav\09a01Fa.wav,happy
35,D:\repos\CCSER\SER\data\emodb\wav\14b02Na.wav,neutral
37,D:\repos\CCSER\SER\data\emodb\wav\14a02Nc.wav,neutral
32,D:\repos\CCSER\SER\data\emodb\wav\03b10Nc.wav,neutral
38,D:\repos\CCSER\SER\data\emodb\wav\15b10Nb.wav,neutral
31,D:\repos\CCSER\SER\data\emodb\wav\15b10Nc.wav,neutral
30,D:\repos\CCSER\SER\data\emodb\wav\11b10Nc.wav,neutral
26,D:\repos\CCSER\SER\data\emodb\wav\14a05Na.wav,neutral
25,D:\repos\CCSER\SER\data\emodb\wav\10a01Nb.wav,neutral
33,D:\repos\CCSER\SER\data\emodb\wav\13a07Na.wav,neutral
21,D:\repos\CCSER\SER\data\emodb\wav\03a02Nc.wav,neutral
42,D:\repos\CCSER\SER\data\emodb\wav\09a04Nb.wav,neutral
2,D:\repos\CCSER\SER\data\emodb\wav\13b09Na.wav,neutral
18,D:\repos\CCSER\SER\data\emodb\wav\13b01Nc.wav,neutral
17,D:\repos\CCSER\SER\data\emodb\wav\03b03Nb.wav,neutral
16,D:\repos\CCSER\SER\data\emodb\wav\09b10Nd.wav,neutral
3,D:\repos\CCSER\SER\data\emodb\wav\13b02Nb.wav,neutral
4,D:\repos\CCSER\SER\data\emodb\wav\10a04Nb.wav,neutral
22,D:\repos\CCSER\SER\data\emodb\wav\09a07Na.wav,neutral
10,D:\repos\CCSER\SER\data\emodb\wav\14a07Na.wav,neutral
9,D:\repos\CCSER\SER\data\emodb\wav\15a05Na.wav,neutral
27,D:\repos\CCSER\SER\data\emodb\wav\14b02Fb.wav,happy
2,D:\repos\CCSER\SER\data\emodb\wav\08b01Fd.wav,happy
26,D:\repos\CCSER\SER\data\emodb\wav\11b09Fd.wav,happy
25,D:\repos\CCSER\SER\data\emodb\wav\08b09Fd.wav,happy
38,D:\repos\CCSER\SER\data\emodb\wav\10b10Fc.wav,happy
23,D:\repos\CCSER\SER\data\emodb\wav\09b03Fa.wav,happy
8,D:\repos\CCSER\SER\data\emodb\wav\15a05Fb.wav,happy
36,D:\repos\CCSER\SER\data\emodb\wav\13a04Fc.wav,happy
30,D:\repos\CCSER\SER\data\emodb\wav\11a04Fd.wav,happy
42,D:\repos\CCSER\SER\data\emodb\wav\08b01Na.wav,neutral
24,D:\repos\CCSER\SER\data\emodb\wav\03b01Nb.wav,neutral
41,D:\repos\CCSER\SER\data\emodb\wav\09b02Na.wav,neutral
32,D:\repos\CCSER\SER\data\emodb\wav\09b09Nd.wav,neutral
19,D:\repos\CCSER\SER\data\emodb\wav\10b02Na.wav,neutral
33,D:\repos\CCSER\SER\data\emodb\wav\16a07Nb.wav,neutral
34,D:\repos\CCSER\SER\data\emodb\wav\03b09Nc.wav,neutral
14,D:\repos\CCSER\SER\data\emodb\wav\08b10Nc.wav,neutral
15,D:\repos\CCSER\SER\data\emodb\wav\13b02Nb.wav,neutral
35,D:\repos\CCSER\SER\data\emodb\wav\09b01Na.wav,neutral
12,D:\repos\CCSER\SER\data\emodb\wav\11a04Nd.wav,neutral
10,D:\repos\CCSER\SER\data\emodb\wav\13b01Nc.wav,neutral
37,D:\repos\CCSER\SER\data\emodb\wav\13a05Nb.wav,neutral
7,D:\repos\CCSER\SER\data\emodb\wav\09a07Na.wav,neutral
6,D:\repos\CCSER\SER\data\emodb\wav\09a04Nb.wav,neutral
39,D:\repos\CCSER\SER\data\emodb\wav\15b09Nb.wav,neutral
40,D:\repos\CCSER\SER\data\emodb\wav\15b10Nb.wav,neutral
1,D:\repos\CCSER\SER\data\emodb\wav\16b03Nb.wav,neutral
16,D:\repos\CCSER\SER\data\emodb\wav\08a02Na.wav,neutral
29,D:\repos\CCSER\SER\data\emodb\wav\13a01Nb.wav,neutral
31,D:\repos\CCSER\SER\data\emodb\wav\11b10Td.wav,sad
0,D:\repos\CCSER\SER\data\emodb\wav\12b01Ta.wav,sad
22,D:\repos\CCSER\SER\data\emodb\wav\13a02Ta.wav,sad
20,D:\repos\CCSER\SER\data\emodb\wav\10b03Tb.wav,sad
18,D:\repos\CCSER\SER\data\emodb\wav\13a05Tc.wav,sad
17,D:\repos\CCSER\SER\data\emodb\wav\09a05Tb.wav,sad
13,D:\repos\CCSER\SER\data\emodb\wav\16a02Tc.wav,sad
11,D:\repos\CCSER\SER\data\emodb\wav\08b02Tc.wav,sad
9,D:\repos\CCSER\SER\data\emodb\wav\12b03Ta.wav,sad
5,D:\repos\CCSER\SER\data\emodb\wav\10a05Tb.wav,sad
6,D:\repos\CCSER\SER\data\emodb\wav\16a07Td.wav,sad
23,D:\repos\CCSER\SER\data\emodb\wav\14b03Ta.wav,sad
13,D:\repos\CCSER\SER\data\emodb\wav\11a07Ta.wav,sad
14,D:\repos\CCSER\SER\data\emodb\wav\15b09Ta.wav,sad
15,D:\repos\CCSER\SER\data\emodb\wav\16b01Tb.wav,sad
4,D:\repos\CCSER\SER\data\emodb\wav\08a07Ta.wav,sad
3,D:\repos\CCSER\SER\data\emodb\wav\14a07Tc.wav,sad
28,D:\repos\CCSER\SER\data\emodb\wav\08b03Tc.wav,sad
24,D:\repos\CCSER\SER\data\emodb\wav\14a04Tb.wav,sad
34,D:\repos\CCSER\SER\data\emodb\wav\14b02Tc.wav,sad
11,D:\repos\CCSER\SER\data\emodb\wav\16b10Td.wav,sad
21,D:\repos\CCSER\SER\data\emodb\wav\08a07Tb.wav,sad
,path,emotion
0,D:\repos\CCSER\SER\data\emodb\wav\03a01Fa.wav,happy
98,D:\repos\CCSER\SER\data\emodb\wav\14a05Fa.wav,happy
97,D:\repos\CCSER\SER\data\emodb\wav\11a02Fb.wav,happy
96,D:\repos\CCSER\SER\data\emodb\wav\03b01Fa.wav,happy
94,D:\repos\CCSER\SER\data\emodb\wav\14a07Fd.wav,happy
93,D:\repos\CCSER\SER\data\emodb\wav\09a04Fd.wav,happy
91,D:\repos\CCSER\SER\data\emodb\wav\11b02Fd.wav,happy
89,D:\repos\CCSER\SER\data\emodb\wav\15a01Fb.wav,happy
88,D:\repos\CCSER\SER\data\emodb\wav\11a05Fc.wav,happy
99,D:\repos\CCSER\SER\data\emodb\wav\13b09Fb.wav,happy
86,D:\repos\CCSER\SER\data\emodb\wav\08a02Fe.wav,happy
77,D:\repos\CCSER\SER\data\emodb\wav\09b03Fa.wav,happy
72,D:\repos\CCSER\SER\data\emodb\wav\16b02Fd.wav,happy
71,D:\repos\CCSER\SER\data\emodb\wav\08b03Fe.wav,happy
69,D:\repos\CCSER\SER\data\emodb\wav\15a07Fb.wav,happy
68,D:\repos\CCSER\SER\data\emodb\wav\15a05Fb.wav,happy
64,D:\repos\CCSER\SER\data\emodb\wav\12a01Fb.wav,happy
61,D:\repos\CCSER\SER\data\emodb\wav\03a07Fb.wav,happy
56,D:\repos\CCSER\SER\data\emodb\wav\16a07Fa.wav,happy
167,D:\repos\CCSER\SER\data\emodb\wav\13a01Fd.wav,happy
53,D:\repos\CCSER\SER\data\emodb\wav\13b01Fc.wav,happy
100,D:\repos\CCSER\SER\data\emodb\wav\08b10Fd.wav,happy
104,D:\repos\CCSER\SER\data\emodb\wav\13b02Fb.wav,happy
157,D:\repos\CCSER\SER\data\emodb\wav\14a02Fd.wav,happy
148,D:\repos\CCSER\SER\data\emodb\wav\11a04Fd.wav,happy
143,D:\repos\CCSER\SER\data\emodb\wav\14b09Fc.wav,happy
142,D:\repos\CCSER\SER\data\emodb\wav\14a05Fb.wav,happy
139,D:\repos\CCSER\SER\data\emodb\wav\16b09Fb.wav,happy
135,D:\repos\CCSER\SER\data\emodb\wav\13a04Fc.wav,happy
133,D:\repos\CCSER\SER\data\emodb\wav\03a04Fd.wav,happy
131,D:\repos\CCSER\SER\data\emodb\wav\16b10Fb.wav,happy
103,D:\repos\CCSER\SER\data\emodb\wav\08b02Ff.wav,happy
129,D:\repos\CCSER\SER\data\emodb\wav\08b01Fd.wav,happy
122,D:\repos\CCSER\SER\data\emodb\wav\15a04Fd.wav,happy
120,D:\repos\CCSER\SER\data\emodb\wav\16a04Fa.wav,happy
119,D:\repos\CCSER\SER\data\emodb\wav\16a05Fc.wav,happy
117,D:\repos\CCSER\SER\data\emodb\wav\13b10Fa.wav,happy
114,D:\repos\CCSER\SER\data\emodb\wav\16b03Fa.wav,happy
112,D:\repos\CCSER\SER\data\emodb\wav\08b01Fe.wav,happy
110,D:\repos\CCSER\SER\data\emodb\wav\03a02Fc.wav,happy
106,D:\repos\CCSER\SER\data\emodb\wav\08a04Ff.wav,happy
127,D:\repos\CCSER\SER\data\emodb\wav\13a02Fa.wav,happy
49,D:\repos\CCSER\SER\data\emodb\wav\16b01Fa.wav,happy
84,D:\repos\CCSER\SER\data\emodb\wav\13b09Fc.wav,happy
168,D:\repos\CCSER\SER\data\emodb\wav\03a05Fc.wav,happy
7,D:\repos\CCSER\SER\data\emodb\wav\03a07Fa.wav,happy
22,D:\repos\CCSER\SER\data\emodb\wav\08a07Fd.wav,happy
21,D:\repos\CCSER\SER\data\emodb\wav\08a01Fd.wav,happy
11,D:\repos\CCSER\SER\data\emodb\wav\13a07Fd.wav,happy
1,D:\repos\CCSER\SER\data\emodb\wav\11b01Fc.wav,happy
13,D:\repos\CCSER\SER\data\emodb\wav\16a01Fc.wav,happy
38,D:\repos\CCSER\SER\data\emodb\wav\13b03Fd.wav,happy
14,D:\repos\CCSER\SER\data\emodb\wav\15a07Fa.wav,happy
43,D:\repos\CCSER\SER\data\emodb\wav\10a02Fa.wav,happy
5,D:\repos\CCSER\SER\data\emodb\wav\11b03Fc.wav,happy
2,D:\repos\CCSER\SER\data\emodb\wav\14b01Fa.wav,happy
8,D:\repos\CCSER\SER\data\emodb\wav\10a04Fd.wav,happy
15,D:\repos\CCSER\SER\data\emodb\wav\15b09Fa.wav,happy
126,D:\repos\CCSER\SER\data\emodb\wav\15a07Nc.wav,neutral
116,D:\repos\CCSER\SER\data\emodb\wav\10b02Na.wav,neutral
111,D:\repos\CCSER\SER\data\emodb\wav\09b01Na.wav,neutral
113,D:\repos\CCSER\SER\data\emodb\wav\11a04Nd.wav,neutral
108,D:\repos\CCSER\SER\data\emodb\wav\14b01Na.wav,neutral
105,D:\repos\CCSER\SER\data\emodb\wav\15a04Nc.wav,neutral
19,D:\repos\CCSER\SER\data\emodb\wav\13a01Nb.wav,neutral
20,D:\repos\CCSER\SER\data\emodb\wav\11a02Nc.wav,neutral
101,D:\repos\CCSER\SER\data\emodb\wav\13a05Nb.wav,neutral
23,D:\repos\CCSER\SER\data\emodb\wav\08b02Nb.wav,neutral
24,D:\repos\CCSER\SER\data\emodb\wav\15b01Na.wav,neutral
115,D:\repos\CCSER\SER\data\emodb\wav\13a02Nc.wav,neutral
128,D:\repos\CCSER\SER\data\emodb\wav\08a02Na.wav,neutral
132,D:\repos\CCSER\SER\data\emodb\wav\09a05Nb.wav,neutral
25,D:\repos\CCSER\SER\data\emodb\wav\08a05Nb.wav,neutral
166,D:\repos\CCSER\SER\data\emodb\wav\03a07Nc.wav,neutral
163,D:\repos\CCSER\SER\data\emodb\wav\16b03Nb.wav,neutral
161,D:\repos\CCSER\SER\data\emodb\wav\15b09Nb.wav,neutral
160,D:\repos\CCSER\SER\data\emodb\wav\13b10Nc.wav,neutral
159,D:\repos\CCSER\SER\data\emodb\wav\08b01Na.wav,neutral
156,D:\repos\CCSER\SER\data\emodb\wav\14b10Nb.wav,neutral
153,D:\repos\CCSER\SER\data\emodb\wav\03a04Nc.wav,neutral
152,D:\repos\CCSER\SER\data\emodb\wav\15a01Nb.wav,neutral
9,D:\repos\CCSER\SER\data\emodb\wav\11b03Nb.wav,neutral
151,D:\repos\CCSER\SER\data\emodb\wav\03a05Nd.wav,neutral
147,D:\repos\CCSER\SER\data\emodb\wav\08a01Na.wav,neutral
144,D:\repos\CCSER\SER\data\emodb\wav\11b02Na.wav,neutral
3,D:\repos\CCSER\SER\data\emodb\wav\09b02Na.wav,neutral
141,D:\repos\CCSER\SER\data\emodb\wav\09b09Nd.wav,neutral
140,D:\repos\CCSER\SER\data\emodb\wav\03b10Na.wav,neutral
137,D:\repos\CCSER\SER\data\emodb\wav\15a02Na.wav,neutral
136,D:\repos\CCSER\SER\data\emodb\wav\03b01Nb.wav,neutral
6,D:\repos\CCSER\SER\data\emodb\wav\16a01Nc.wav,neutral
149,D:\repos\CCSER\SER\data\emodb\wav\12b02Na.wav,neutral
26,D:\repos\CCSER\SER\data\emodb\wav\15b02Nd.wav,neutral
18,D:\repos\CCSER\SER\data\emodb\wav\08a07Na.wav,neutral
92,D:\repos\CCSER\SER\data\emodb\wav\08b09Nb.wav,neutral
33,D:\repos\CCSER\SER\data\emodb\wav\09a01Nb.wav,neutral
75,D:\repos\CCSER\SER\data\emodb\wav\11b01Nc.wav,neutral
73,D:\repos\CCSER\SER\data\emodb\wav\08a04Nc.wav,neutral
34,D:\repos\CCSER\SER\data\emodb\wav\12a01Nb.wav,neutral
35,D:\repos\CCSER\SER\data\emodb\wav\16a02Nb.wav,neutral
70,D:\repos\CCSER\SER\data\emodb\wav\14a01Na.wav,neutral
37,D:\repos\CCSER\SER\data\emodb\wav\11a05Na.wav,neutral
59,D:\repos\CCSER\SER\data\emodb\wav\11b09Na.wav,neutral
57,D:\repos\CCSER\SER\data\emodb\wav\10a02Na.wav,neutral
54,D:\repos\CCSER\SER\data\emodb\wav\16a04Nc.wav,neutral
50,D:\repos\CCSER\SER\data\emodb\wav\12a02Nb.wav,neutral
42,D:\repos\CCSER\SER\data\emodb\wav\16a07Nb.wav,neutral
48,D:\repos\CCSER\SER\data\emodb\wav\03b09Nc.wav,neutral
46,D:\repos\CCSER\SER\data\emodb\wav\09b03Nb.wav,neutral
45,D:\repos\CCSER\SER\data\emodb\wav\03a01Nc.wav,neutral
78,D:\repos\CCSER\SER\data\emodb\wav\08b03Nb.wav,neutral
79,D:\repos\CCSER\SER\data\emodb\wav\08b10Nc.wav,neutral
36,D:\repos\CCSER\SER\data\emodb\wav\13b03Na.wav,neutral
80,D:\repos\CCSER\SER\data\emodb\wav\15b03Nb.wav,neutral
85,D:\repos\CCSER\SER\data\emodb\wav\11a01Nd.wav,neutral
90,D:\repos\CCSER\SER\data\emodb\wav\03b02Na.wav,neutral
82,D:\repos\CCSER\SER\data\emodb\wav\12a05Nd.wav,neutral
28,D:\repos\CCSER\SER\data\emodb\wav\08b10Tc.wav,sad
58,D:\repos\CCSER\SER\data\emodb\wav\13a07Tc.wav,sad
145,D:\repos\CCSER\SER\data\emodb\wav\08a04Tb.wav,sad
146,D:\repos\CCSER\SER\data\emodb\wav\13a02Ta.wav,sad
31,D:\repos\CCSER\SER\data\emodb\wav\14a04Tc.wav,sad
40,D:\repos\CCSER\SER\data\emodb\wav\11b02Td.wav,sad
55,D:\repos\CCSER\SER\data\emodb\wav\11b03Td.wav,sad
95,D:\repos\CCSER\SER\data\emodb\wav\16b10Tb.wav,sad
150,D:\repos\CCSER\SER\data\emodb\wav\08a07Tb.wav,sad
87,D:\repos\CCSER\SER\data\emodb\wav\08a07Ta.wav,sad
41,D:\repos\CCSER\SER\data\emodb\wav\16a04Tc.wav,sad
52,D:\repos\CCSER\SER\data\emodb\wav\11a05Td.wav,sad
154,D:\repos\CCSER\SER\data\emodb\wav\09a05Tb.wav,sad
102,D:\repos\CCSER\SER\data\emodb\wav\14b10Tc.wav,sad
155,D:\repos\CCSER\SER\data\emodb\wav\03a05Tc.wav,sad
51,D:\repos\CCSER\SER\data\emodb\wav\16a02Tc.wav,sad
30,D:\repos\CCSER\SER\data\emodb\wav\08b02Tc.wav,sad
158,D:\repos\CCSER\SER\data\emodb\wav\15b03Tc.wav,sad
29,D:\repos\CCSER\SER\data\emodb\wav\08a02Tb.wav,sad
165,D:\repos\CCSER\SER\data\emodb\wav\14a07Tc.wav,sad
47,D:\repos\CCSER\SER\data\emodb\wav\13a05Tc.wav,sad
162,D:\repos\CCSER\SER\data\emodb\wav\13b03Td.wav,sad
164,D:\repos\CCSER\SER\data\emodb\wav\16a05Tb.wav,sad
4,D:\repos\CCSER\SER\data\emodb\wav\03a02Ta.wav,sad
39,D:\repos\CCSER\SER\data\emodb\wav\16b03Ta.wav,sad
16,D:\repos\CCSER\SER\data\emodb\wav\10b03Tb.wav,sad
17,D:\repos\CCSER\SER\data\emodb\wav\08b09Tb.wav,sad
109,D:\repos\CCSER\SER\data\emodb\wav\14a05Ta.wav,sad
76,D:\repos\CCSER\SER\data\emodb\wav\09a07Ta.wav,sad
81,D:\repos\CCSER\SER\data\emodb\wav\13a04Ta.wav,sad
118,D:\repos\CCSER\SER\data\emodb\wav\03b01Td.wav,sad
74,D:\repos\CCSER\SER\data\emodb\wav\14a02Tb.wav,sad
12,D:\repos\CCSER\SER\data\emodb\wav\11b10Td.wav,sad
121,D:\repos\CCSER\SER\data\emodb\wav\12b09Td.wav,sad
107,D:\repos\CCSER\SER\data\emodb\wav\16a01Tb.wav,sad
123,D:\repos\CCSER\SER\data\emodb\wav\11b09Td.wav,sad
124,D:\repos\CCSER\SER\data\emodb\wav\12a05Ta.wav,sad
60,D:\repos\CCSER\SER\data\emodb\wav\03a04Ta.wav,sad
125,D:\repos\CCSER\SER\data\emodb\wav\15b02Tc.wav,sad
83,D:\repos\CCSER\SER\data\emodb\wav\03b09Tc.wav,sad
32,D:\repos\CCSER\SER\data\emodb\wav\15a02Ta.wav,sad
130,D:\repos\CCSER\SER\data\emodb\wav\09b02Tb.wav,sad
27,D:\repos\CCSER\SER\data\emodb\wav\09b03Ta.wav,sad
67,D:\repos\CCSER\SER\data\emodb\wav\03b03Tc.wav,sad
134,D:\repos\CCSER\SER\data\emodb\wav\14a05Tc.wav,sad
66,D:\repos\CCSER\SER\data\emodb\wav\11a02Tc.wav,sad
65,D:\repos\CCSER\SER\data\emodb\wav\08a05Ta.wav,sad
63,D:\repos\CCSER\SER\data\emodb\wav\03b02Tb.wav,sad
138,D:\repos\CCSER\SER\data\emodb\wav\12b03Ta.wav,sad
62,D:\repos\CCSER\SER\data\emodb\wav\10a07Ta.wav,sad
10,D:\repos\CCSER\SER\data\emodb\wav\14b09Td.wav,sad
44,D:\repos\CCSER\SER\data\emodb\wav\12b01Ta.wav,sad
92,D:\repos\CCSER\SER\data\emodb\wav\03a01Fa.wav,happy
136,D:\repos\CCSER\SER\data\emodb\wav\14b09Fc.wav,happy
35,D:\repos\CCSER\SER\data\emodb\wav\13a07Fd.wav,happy
74,D:\repos\CCSER\SER\data\emodb\wav\09b03Fd.wav,happy
37,D:\repos\CCSER\SER\data\emodb\wav\14a05Fa.wav,happy
38,D:\repos\CCSER\SER\data\emodb\wav\08b10Fd.wav,happy
125,D:\repos\CCSER\SER\data\emodb\wav\14a02Fd.wav,happy
40,D:\repos\CCSER\SER\data\emodb\wav\15a07Fb.wav,happy
41,D:\repos\CCSER\SER\data\emodb\wav\13a02Fa.wav,happy
167,D:\repos\CCSER\SER\data\emodb\wav\08b01Fe.wav,happy
123,D:\repos\CCSER\SER\data\emodb\wav\10a04Fd.wav,happy
95,D:\repos\CCSER\SER\data\emodb\wav\11a02Fb.wav,happy
121,D:\repos\CCSER\SER\data\emodb\wav\13b02Fb.wav,happy
46,D:\repos\CCSER\SER\data\emodb\wav\16a07Fa.wav,happy
119,D:\repos\CCSER\SER\data\emodb\wav\11a05Fc.wav,happy
48,D:\repos\CCSER\SER\data\emodb\wav\11b01Fc.wav,happy
117,D:\repos\CCSER\SER\data\emodb\wav\09a01Fa.wav,happy
116,D:\repos\CCSER\SER\data\emodb\wav\08b03Fe.wav,happy
51,D:\repos\CCSER\SER\data\emodb\wav\08a04Ff.wav,happy
52,D:\repos\CCSER\SER\data\emodb\wav\15a04Fd.wav,happy
53,D:\repos\CCSER\SER\data\emodb\wav\16a07Fb.wav,happy
55,D:\repos\CCSER\SER\data\emodb\wav\16a04Fa.wav,happy
111,D:\repos\CCSER\SER\data\emodb\wav\08a01Fd.wav,happy
97,D:\repos\CCSER\SER\data\emodb\wav\08a07Fd.wav,happy
108,D:\repos\CCSER\SER\data\emodb\wav\16b02Fd.wav,happy
59,D:\repos\CCSER\SER\data\emodb\wav\14b01Fc.wav,happy
70,D:\repos\CCSER\SER\data\emodb\wav\13b01Fc.wav,happy
98,D:\repos\CCSER\SER\data\emodb\wav\03a04Fd.wav,happy
100,D:\repos\CCSER\SER\data\emodb\wav\03a07Fb.wav,happy
101,D:\repos\CCSER\SER\data\emodb\wav\13b09Fb.wav,happy
137,D:\repos\CCSER\SER\data\emodb\wav\09a04Fd.wav,happy
64,D:\repos\CCSER\SER\data\emodb\wav\13b09Fc.wav,happy
103,D:\repos\CCSER\SER\data\emodb\wav\16b01Fa.wav,happy
156,D:\repos\CCSER\SER\data\emodb\wav\10b01Fa.wav,happy
2,D:\repos\CCSER\SER\data\emodb\wav\14a05Fb.wav,happy
81,D:\repos\CCSER\SER\data\emodb\wav\16b03Fd.wav,happy
7,D:\repos\CCSER\SER\data\emodb\wav\15a01Fb.wav,happy
8,D:\repos\CCSER\SER\data\emodb\wav\08a05Fe.wav,happy
9,D:\repos\CCSER\SER\data\emodb\wav\12b02Fb.wav,happy
1,D:\repos\CCSER\SER\data\emodb\wav\03b01Fa.wav,happy
163,D:\repos\CCSER\SER\data\emodb\wav\11a05Fb.wav,happy
162,D:\repos\CCSER\SER\data\emodb\wav\15a07Fa.wav,happy
80,D:\repos\CCSER\SER\data\emodb\wav\12a01Fb.wav,happy
13,D:\repos\CCSER\SER\data\emodb\wav\16b09Fb.wav,happy
76,D:\repos\CCSER\SER\data\emodb\wav\08b02Ff.wav,happy
155,D:\repos\CCSER\SER\data\emodb\wav\15b09Fa.wav,happy
4,D:\repos\CCSER\SER\data\emodb\wav\14b01Fa.wav,happy
153,D:\repos\CCSER\SER\data\emodb\wav\03a05Fc.wav,happy
150,D:\repos\CCSER\SER\data\emodb\wav\11b03Fc.wav,happy
19,D:\repos\CCSER\SER\data\emodb\wav\08a02Fe.wav,happy
20,D:\repos\CCSER\SER\data\emodb\wav\14a07Fd.wav,happy
149,D:\repos\CCSER\SER\data\emodb\wav\16b10Fb.wav,happy
148,D:\repos\CCSER\SER\data\emodb\wav\13b03Fd.wav,happy
145,D:\repos\CCSER\SER\data\emodb\wav\03a02Fc.wav,happy
24,D:\repos\CCSER\SER\data\emodb\wav\10a02Fa.wav,happy
144,D:\repos\CCSER\SER\data\emodb\wav\16b03Fa.wav,happy
78,D:\repos\CCSER\SER\data\emodb\wav\16a05Fc.wav,happy
27,D:\repos\CCSER\SER\data\emodb\wav\03a07Fa.wav,happy
28,D:\repos\CCSER\SER\data\emodb\wav\13b10Fa.wav,happy
142,D:\repos\CCSER\SER\data\emodb\wav\11b02Fd.wav,happy
90,D:\repos\CCSER\SER\data\emodb\wav\13a01Fd.wav,happy
88,D:\repos\CCSER\SER\data\emodb\wav\16a01Fc.wav,happy
91,D:\repos\CCSER\SER\data\emodb\wav\14b02Na.wav,neutral
96,D:\repos\CCSER\SER\data\emodb\wav\03b10Na.wav,neutral
89,D:\repos\CCSER\SER\data\emodb\wav\15b01Na.wav,neutral
0,D:\repos\CCSER\SER\data\emodb\wav\14b10Nb.wav,neutral
124,D:\repos\CCSER\SER\data\emodb\wav\08a05Nb.wav,neutral
104,D:\repos\CCSER\SER\data\emodb\wav\03b03Nb.wav,neutral
166,D:\repos\CCSER\SER\data\emodb\wav\10a04Nb.wav,neutral
165,D:\repos\CCSER\SER\data\emodb\wav\16a02Nb.wav,neutral
164,D:\repos\CCSER\SER\data\emodb\wav\15b10Nc.wav,neutral
159,D:\repos\CCSER\SER\data\emodb\wav\12a05Nd.wav,neutral
151,D:\repos\CCSER\SER\data\emodb\wav\15b03Nb.wav,neutral
143,D:\repos\CCSER\SER\data\emodb\wav\09a05Nb.wav,neutral
140,D:\repos\CCSER\SER\data\emodb\wav\03a07Nc.wav,neutral
102,D:\repos\CCSER\SER\data\emodb\wav\15a01Nb.wav,neutral
139,D:\repos\CCSER\SER\data\emodb\wav\13b10Nc.wav,neutral
129,D:\repos\CCSER\SER\data\emodb\wav\12a01Nb.wav,neutral
122,D:\repos\CCSER\SER\data\emodb\wav\10a02Na.wav,neutral
113,D:\repos\CCSER\SER\data\emodb\wav\08b09Nb.wav,neutral
109,D:\repos\CCSER\SER\data\emodb\wav\11b03Nb.wav,neutral
107,D:\repos\CCSER\SER\data\emodb\wav\08a04Nc.wav,neutral
106,D:\repos\CCSER\SER\data\emodb\wav\09a01Nb.wav,neutral
105,D:\repos\CCSER\SER\data\emodb\wav\03a04Nc.wav,neutral
138,D:\repos\CCSER\SER\data\emodb\wav\11a01Nd.wav,neutral
87,D:\repos\CCSER\SER\data\emodb\wav\12b02Na.wav,neutral
84,D:\repos\CCSER\SER\data\emodb\wav\09b10Nd.wav,neutral
168,D:\repos\CCSER\SER\data\emodb\wav\11b02Na.wav,neutral
57,D:\repos\CCSER\SER\data\emodb\wav\11a02Nc.wav,neutral
56,D:\repos\CCSER\SER\data\emodb\wav\08b02Nb.wav,neutral
33,D:\repos\CCSER\SER\data\emodb\wav\03a05Nd.wav,neutral
16,D:\repos\CCSER\SER\data\emodb\wav\10a01Nb.wav,neutral
49,D:\repos\CCSER\SER\data\emodb\wav\14a07Na.wav,neutral
17,D:\repos\CCSER\SER\data\emodb\wav\13b03Na.wav,neutral
45,D:\repos\CCSER\SER\data\emodb\wav\15a02Na.wav,neutral
58,D:\repos\CCSER\SER\data\emodb\wav\08a07Na.wav,neutral
44,D:\repos\CCSER\SER\data\emodb\wav\03b10Nc.wav,neutral
42,D:\repos\CCSER\SER\data\emodb\wav\13a02Nc.wav,neutral
86,D:\repos\CCSER\SER\data\emodb\wav\13a07Na.wav,neutral
36,D:\repos\CCSER\SER\data\emodb\wav\14a05Na.wav,neutral
23,D:\repos\CCSER\SER\data\emodb\wav\16a01Nc.wav,neutral
26,D:\repos\CCSER\SER\data\emodb\wav\03a01Nc.wav,neutral
30,D:\repos\CCSER\SER\data\emodb\wav\15b02Nd.wav,neutral
34,D:\repos\CCSER\SER\data\emodb\wav\14b01Na.wav,neutral
43,D:\repos\CCSER\SER\data\emodb\wav\09b03Nb.wav,neutral
60,D:\repos\CCSER\SER\data\emodb\wav\11b10Nc.wav,neutral
32,D:\repos\CCSER\SER\data\emodb\wav\11a05Na.wav,neutral
12,D:\repos\CCSER\SER\data\emodb\wav\14a02Nc.wav,neutral
3,D:\repos\CCSER\SER\data\emodb\wav\03b02Na.wav,neutral
82,D:\repos\CCSER\SER\data\emodb\wav\03a02Nc.wav,neutral
79,D:\repos\CCSER\SER\data\emodb\wav\08a01Na.wav,neutral
77,D:\repos\CCSER\SER\data\emodb\wav\16a04Nc.wav,neutral
75,D:\repos\CCSER\SER\data\emodb\wav\14a01Na.wav,neutral
73,D:\repos\CCSER\SER\data\emodb\wav\15a04Nc.wav,neutral
71,D:\repos\CCSER\SER\data\emodb\wav\13b09Na.wav,neutral
69,D:\repos\CCSER\SER\data\emodb\wav\11b01Nc.wav,neutral
10,D:\repos\CCSER\SER\data\emodb\wav\08b03Nb.wav,neutral
72,D:\repos\CCSER\SER\data\emodb\wav\11b09Na.wav,neutral
68,D:\repos\CCSER\SER\data\emodb\wav\12a02Nb.wav,neutral
11,D:\repos\CCSER\SER\data\emodb\wav\15a05Na.wav,neutral
67,D:\repos\CCSER\SER\data\emodb\wav\15a07Nc.wav,neutral
160,D:\repos\CCSER\SER\data\emodb\wav\11a07Ta.wav,sad
161,D:\repos\CCSER\SER\data\emodb\wav\09a07Ta.wav,sad
141,D:\repos\CCSER\SER\data\emodb\wav\16b01Tb.wav,sad
29,D:\repos\CCSER\SER\data\emodb\wav\08a04Tb.wav,sad
157,D:\repos\CCSER\SER\data\emodb\wav\11b03Td.wav,sad
25,D:\repos\CCSER\SER\data\emodb\wav\16b03Ta.wav,sad
152,D:\repos\CCSER\SER\data\emodb\wav\14a04Tc.wav,sad
146,D:\repos\CCSER\SER\data\emodb\wav\14a05Tc.wav,sad
147,D:\repos\CCSER\SER\data\emodb\wav\03a05Tc.wav,sad
22,D:\repos\CCSER\SER\data\emodb\wav\03b01Td.wav,sad
6,D:\repos\CCSER\SER\data\emodb\wav\14a05Ta.wav,sad
15,D:\repos\CCSER\SER\data\emodb\wav\15b02Tc.wav,sad
158,D:\repos\CCSER\SER\data\emodb\wav\16a01Tb.wav,sad
154,D:\repos\CCSER\SER\data\emodb\wav\09b02Tb.wav,sad
21,D:\repos\CCSER\SER\data\emodb\wav\15a02Ta.wav,sad
18,D:\repos\CCSER\SER\data\emodb\wav\11b02Td.wav,sad
5,D:\repos\CCSER\SER\data\emodb\wav\08a02Tb.wav,sad
14,D:\repos\CCSER\SER\data\emodb\wav\14b09Td.wav,sad
85,D:\repos\CCSER\SER\data\emodb\wav\16a04Tc.wav,sad
135,D:\repos\CCSER\SER\data\emodb\wav\08b09Tb.wav,sad
83,D:\repos\CCSER\SER\data\emodb\wav\08b10Tc.wav,sad
93,D:\repos\CCSER\SER\data\emodb\wav\14b03Ta.wav,sad
94,D:\repos\CCSER\SER\data\emodb\wav\14a04Tb.wav,sad
99,D:\repos\CCSER\SER\data\emodb\wav\09b03Ta.wav,sad
66,D:\repos\CCSER\SER\data\emodb\wav\03a04Ta.wav,sad
65,D:\repos\CCSER\SER\data\emodb\wav\16a07Td.wav,sad
63,D:\repos\CCSER\SER\data\emodb\wav\08a05Ta.wav,sad
62,D:\repos\CCSER\SER\data\emodb\wav\15b09Ta.wav,sad
61,D:\repos\CCSER\SER\data\emodb\wav\03b09Tc.wav,sad
110,D:\repos\CCSER\SER\data\emodb\wav\12b09Td.wav,sad
112,D:\repos\CCSER\SER\data\emodb\wav\14b02Tc.wav,sad
54,D:\repos\CCSER\SER\data\emodb\wav\11a02Tc.wav,sad
31,D:\repos\CCSER\SER\data\emodb\wav\03b02Tb.wav,sad
114,D:\repos\CCSER\SER\data\emodb\wav\13a04Ta.wav,sad
50,D:\repos\CCSER\SER\data\emodb\wav\14b10Tc.wav,sad
118,D:\repos\CCSER\SER\data\emodb\wav\11a05Td.wav,sad
47,D:\repos\CCSER\SER\data\emodb\wav\11b09Td.wav,sad
120,D:\repos\CCSER\SER\data\emodb\wav\03a02Ta.wav,sad
39,D:\repos\CCSER\SER\data\emodb\wav\10a07Ta.wav,sad
126,D:\repos\CCSER\SER\data\emodb\wav\16a05Tb.wav,sad
128,D:\repos\CCSER\SER\data\emodb\wav\14a02Tb.wav,sad
130,D:\repos\CCSER\SER\data\emodb\wav\12a05Ta.wav,sad
131,D:\repos\CCSER\SER\data\emodb\wav\16b10Td.wav,sad
132,D:\repos\CCSER\SER\data\emodb\wav\13a07Tc.wav,sad
133,D:\repos\CCSER\SER\data\emodb\wav\15b03Tc.wav,sad
134,D:\repos\CCSER\SER\data\emodb\wav\03b03Tc.wav,sad
115,D:\repos\CCSER\SER\data\emodb\wav\13b03Td.wav,sad
127,D:\repos\CCSER\SER\data\emodb\wav\16b10Tb.wav,sad
......@@ -32,7 +32,7 @@ from sklearn.svm import SVC
from tqdm import tqdm
from audio.extractor import AudioExtractor, load_data_from_meta
from config.EF import e_config_def, f_config_def, validate_emotions
from config.EF import AHNPS, e_config_def, f_config_def, validate_emotions
from config.MetaPath import (
emodb,
meta_paths_of_db,
......@@ -713,24 +713,24 @@ def main():
passive_emo_others = passive_emo + ["others"]
typical_emo = ["happy", "neutral", "sad"]
AHSO = ["angry", "neutral", "sad", "others"]
e_config = passive_emo
e_config = AHNPS
f_config = ["mfcc"]
# my_model = RandomForestClassifier(max_depth=3, max_features=0.2)
my_model = SVC(C=0.001, gamma=0.001, kernel="poly", probability=True)
# my_model=KNeighborsClassifier(n_neighbors=3, p=1, weights='distance')
# my_model = None
my_model = None
# rec = EmotionRecognizer(model=my_model,e_config=AHNPS,f_config=f_config_def,test_dbs=[ravdess],train_dbs=[ravdess], verbose=1)
# rec = EmotionRecognizer(model=my_model,e_config=AHNPS,f_config=f_config_def,test_dbs=emodb,train_dbs=emodb, verbose=1)
single_db = emodb
meta_dict = {"train_dbs": single_db, "test_dbs": single_db}
# single_db = emodb
# meta_dict = {"train_dbs": single_db, "test_dbs": single_db}
# meta_dict=dict(
# train_dbs=emodb,
# test_dbs=ravdess
# )
meta_dict=dict(
train_dbs=emodb,
test_dbs=emodb
)
er = EmotionRecognizer(
model=my_model,
......@@ -739,8 +739,8 @@ def main():
f_config=f_config,
verbose=1,
std_scaler=False,
pca_params=dict(n_components=39)
# std_scaler=False,
# pca_params=dict(n_components=39)
# std_scaler=False,
# pca={"n_components":"mle"}
......@@ -755,7 +755,7 @@ def main():
cv_score = er.model_cv_score()
print(f"{cv_score=}")
print(er.confusion_matrix())
return er
......
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import tensorflow as tf\n",
"tf.test.is_built_with_cuda()"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Num GPUs Available: 1\n"
]
}
],
"source": [
"import tensorflow as tf\n",
"print(\"Num GPUs Available: \", len(tf.config.list_physical_devices('GPU')))"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "tf2.10",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.16"
},
"orig_nbformat": 4
},
"nbformat": 4,
"nbformat_minor": 2
}
{
"cells": [
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"X.shape, y.shape: (150, 4) (150,)\n",
"X_train.shape, y_train.shape: (90, 4) (90,)\n",
"X_test.shape, y_test.shape: (60, 4) (60,)\n"
]
},
{
"data": {
"text/plain": [
"0.9666666666666667"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import numpy as np\n",
"from sklearn.model_selection import train_test_split\n",
"from sklearn import datasets\n",
"from sklearn import svm\n",
"\n",
"X, y = datasets.load_iris(return_X_y=True)\n",
"X.shape, y.shape\n",
"print('X.shape, y.shape: ', X.shape, y.shape)\n",
"X_train, X_test, y_train, y_test = train_test_split(\n",
" X, y, test_size=0.4, random_state=0)\n",
"\n",
"X_train.shape, y_train.shape\n",
"print('X_train.shape, y_train.shape: ', X_train.shape, y_train.shape)\n",
"\n",
"X_test.shape, y_test.shape\n",
"print('X_test.shape, y_test.shape: ', X_test.shape, y_test.shape)\n",
"\n",
"\n",
"clf = svm.SVC(kernel='linear', C=1).fit(X_train, y_train)\n",
"clf.score(X_test, y_test)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "tf2.10",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.16"
},
"orig_nbformat": 4
},
"nbformat": 4,
"nbformat_minor": 2
}
import os
# disable keras loggings
import sys
from config.EF import e_config_def
from config.EF import e_config_def, f_config_def
stderr = sys.stderr
sys.stderr = open(os.devnull, "w")
import random
from config.MetaPath import savee, emodb, ravdess
import numpy as np
import pandas as pd
from sklearn.metrics import (accuracy_score, confusion_matrix,
mean_absolute_error)
from sklearn.metrics import accuracy_score, confusion_matrix, mean_absolute_error
# import tensorflow as tf
from tensorflow.keras.callbacks import ModelCheckpoint, TensorBoard
from tensorflow.keras.layers import (LSTM, Dense, Dropout)
from tensorflow.keras.layers import LSTM, Dense, Dropout
from tensorflow.keras.models import Sequential
from tensorflow.keras.utils import to_categorical
from audio.core import extract_feature_of_audio, get_dropout_str
from config.EF import validate_emotions
from recognizer.basic import EmotionRecognizer
# from ER import EmotionRecognizer
from config.MetaPath import get_first_letters
from audio.core import extract_feature_of_audio, get_dropout_str
from recognizer.basic import EmotionRecognizer
class DeepEmotionRecognizer(EmotionRecognizer):
......@@ -128,7 +130,6 @@ class DeepEmotionRecognizer(EmotionRecognizer):
)
# number of classes ( emotions )
self.output_dim = len(self.e_config)
# optimization attributes
self.optimizer = optimizer if optimizer else "adam"
......@@ -276,7 +277,7 @@ class DeepEmotionRecognizer(EmotionRecognizer):
)
# reshape labels
if(self.y_train is None or self.y_test is None):
if self.y_train is None or self.y_test is None:
raise ValueError("y_train and y_test must be array_like ")
y_train_shape = self.y_train.shape
y_test_shape = self.y_test.shape
......@@ -349,9 +350,9 @@ class DeepEmotionRecognizer(EmotionRecognizer):
def predict_proba(self, audio_path):
if self.classification_task:
feature = extract_feature_of_audio(audio_path, **self._f_config_dict).reshape(
(1, 1, self.input_length)
)
feature = extract_feature_of_audio(
audio_path, **self._f_config_dict
).reshape((1, 1, self.input_length))
proba = self.model.predict(feature)[0][0]
result = {}
for prob, emotion in zip(proba, self.e_config):
......@@ -418,7 +419,7 @@ class DeepEmotionRecognizer(EmotionRecognizer):
if partition == "test":
if self.classification_task:
# np.squeeze去除数组中所有维度大小为 1 的维度,从而将数组的维度降低。如果数组没有大小为 1 的维度,则不会有任何变化。
#这里的y_test可能采用oneHotEncoder,因此可以如下计算
# 这里的y_test可能采用oneHotEncoder,因此可以如下计算
y_test = np.array(
[
np.argmax(y, axis=None, out=None) + 1
......@@ -449,8 +450,12 @@ class DeepEmotionRecognizer(EmotionRecognizer):
test_samples = []
total = []
for emotion in self.e_config:
n_train = self.count_samples_in_partition(self.emotions2int[emotion] + 1, "train")
n_test = self.count_samples_in_partition(self.emotions2int[emotion] + 1, "test")
n_train = self.count_samples_in_partition(
self.emotions2int[emotion] + 1, "train"
)
n_test = self.count_samples_in_partition(
self.emotions2int[emotion] + 1, "test"
)
train_samples.append(n_train)
test_samples.append(n_test)
total.append(n_train + n_test)
......@@ -463,7 +468,7 @@ class DeepEmotionRecognizer(EmotionRecognizer):
data={"train": train_samples, "test": test_samples, "total": total},
index=self.e_config + ["total"],
)
def get_training_and_testing_samples_per_emotion(self):
"""
Returns a dataframe with the number of training and testing samples
......@@ -473,8 +478,12 @@ class DeepEmotionRecognizer(EmotionRecognizer):
test_samples_per_emotion = []
total_samples_per_emotion = []
for emotion in self.e_config:
n_train = self.count_samples_in_partition(self.emotions2int[emotion] + 1, "train")
n_test = self.count_samples_in_partition(self.emotions2int[emotion] + 1, "test")
n_train = self.count_samples_in_partition(
self.emotions2int[emotion] + 1, "train"
)
n_test = self.count_samples_in_partition(
self.emotions2int[emotion] + 1, "test"
)
train_samples_per_emotion.append(n_train)
test_samples_per_emotion.append(n_test)
total_samples_per_emotion.append(n_train + n_test)
......@@ -492,7 +501,6 @@ class DeepEmotionRecognizer(EmotionRecognizer):
index=self.e_config + ["Total"],
)
def get_random_emotion_index(self, emotion, partition="train"):
"""
Returns random `emotion` data sample index on `partition`
......@@ -517,21 +525,21 @@ class DeepEmotionRecognizer(EmotionRecognizer):
return index
##
if __name__ == "__main__":
from config.MetaPath import ravdess
meta_dict = {
"train_dbs":ravdess,
"test_dbs":ravdess
}
meta_dict = {"train_dbs": savee, "test_dbs": emodb}
print(meta_dict)
der = DeepEmotionRecognizer(**meta_dict, emotions=e_config_def, verbose=0)
der = DeepEmotionRecognizer(
**meta_dict, e_config=e_config_def, f_config=f_config_def, epochs=400, verbose=0
)
# #train
der.train()
print("train_score",der.train_score())
print("test_score",der.test_score())
print("train_score", der.train_score())
print("test_score", der.test_score())
# print(der.train_meta_files,der.test_meta_files)
# der.train(override=False)
# print("Test accuracy score:", der.test_score() * 100, "%")
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"partition='train'\n",
"D:\\repos\\CCSER\\SER\\meta_files\\train_emodb_HNS.csv @🎈{meta_file}\n",
"[I] Loading audio file paths and its corresponding labels...\n",
"meta_file存在D:\\repos\\CCSER\\SER\\meta_files\\train_emodb_HNS.csv文件!\n",
"检查特征文件D:\\repos\\CCSER\\SER\\features\\emodb_chroma-mel-mfcc_HNS_169.npy是否存在...\n",
"self.e_config=['sad', 'neutral', 'happy']\n",
"self.f_config=['chroma', 'mel', 'mfcc']\n",
"特征矩阵文件(.npy)已经存在,直接导入:loading...\n",
"(169, 180) @{feature.shape}\n",
"[Info] Adding train samples\n",
"partition='test'\n",
"D:\\repos\\CCSER\\SER\\meta_files\\test_emodb_HNS.csv @🎈{meta_file}\n",
"[I] Loading audio file paths and its corresponding labels...\n",
"meta_file存在D:\\repos\\CCSER\\SER\\meta_files\\test_emodb_HNS.csv文件!\n",
"检查特征文件D:\\repos\\CCSER\\SER\\features\\emodb_chroma-mel-mfcc_HNS_43.npy是否存在...\n",
"self.e_config=['sad', 'neutral', 'happy']\n",
"self.f_config=['chroma', 'mel', 'mfcc']\n",
"特征矩阵文件(.npy)已经存在,直接导入:loading...\n",
"(43, 180) @{feature.shape}\n",
"[Info] Adding test samples\n"
]
},
{
"data": {
"text/plain": [
"array([[ 0.6140554 , 0.63208479, 0.62568927, ..., -0.15077989,\n",
" -3.0561893 , -1.20821035],\n",
" [ 0.43371701, 0.44542935, 0.50270736, ..., 6.42088842,\n",
" 5.73193407, 5.49575281],\n",
" [ 0.55783778, 0.59623051, 0.62581438, ..., 4.11810064,\n",
" 3.74455643, 4.19198132],\n",
" ...,\n",
" [ 0.57763308, 0.62455612, 0.67713386, ..., -2.30950379,\n",
" -0.32031474, -3.12711573],\n",
" [ 0.41459158, 0.43538466, 0.44827828, ..., 1.46528864,\n",
" -0.79318225, -0.76670861],\n",
" [ 0.48803413, 0.48957926, 0.52813661, ..., 2.92184377,\n",
" 0.63073313, 2.12603712]])"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from audio.extractor import load_data_from_meta,load_data_from_meta_demo\n",
"\n",
"data=load_data_from_meta_demo()\n",
"data['X_train']"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"\n",
"import matplotlib.pyplot as plt\n",
"\n",
"from sklearn import datasets\n",
"from sklearn.decomposition import PCA\n",
"from sklearn.discriminant_analysis import LinearDiscriminantAnalysis\n",
"\n",
"# data = datasets.load_iris()\n",
"# X = data.data\n",
"# y = data.target\n",
"# target_names = data.target_names\n",
"X=data['X_test']\n",
"y=data['y_test']\n",
"target_names=y\n"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"((43, 180), (43,))"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"X.shape,y.shape"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array(['sad', 'neutral', 'neutral', 'happy', 'happy', 'neutral', 'sad',\n",
" 'happy', 'neutral', 'neutral', 'sad', 'happy', 'happy', 'happy',\n",
" 'sad', 'sad', 'neutral', 'neutral', 'sad', 'neutral', 'neutral',\n",
" 'neutral', 'happy', 'neutral', 'neutral', 'neutral', 'neutral',\n",
" 'neutral', 'sad', 'neutral', 'neutral', 'happy', 'sad', 'sad',\n",
" 'neutral', 'neutral', 'sad', 'sad', 'sad', 'sad', 'sad', 'happy',\n",
" 'neutral'], dtype='<U7')"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"y"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"explained variance ratio (first two components): [0.34184143 0.27692456]\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\Users\\cxxu\\AppData\\Local\\Temp\\ipykernel_17732\\296531700.py:19: FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison\n",
" X_r[y == i, 0], X_r[y == i, 1], color=color, alpha=0.8, lw=lw, label=target_name\n",
"C:\\Users\\cxxu\\AppData\\Local\\Temp\\ipykernel_17732\\296531700.py:27: FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison\n",
" X_r2[y == i, 0], X_r2[y == i, 1], alpha=0.8, color=color, label=target_name\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAGzCAYAAADT4Tb9AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA8LElEQVR4nO3deVxVZeLH8e8FvIAo4IIgimKGiY3puIZNowkNZZqWlpKpmOnUuFRqZeWWLban06JTryZbtBwtrSm1ELMyCQWXNLWsHy6pgKZsKut9fn8w3rqBuHEFDp/363VedJ/zPOc8z4G839c5zznHZowxAgAAsAiPqu4AAABAZSLcAAAASyHcAAAASyHcAAAASyHcAAAASyHcAAAASyHcAAAASyHcAAAASyHcAAAASyHcAHCbvLw83XnnnQoJCZHNZtO9995b1V2qFOHh4YqPj6/qbgA4DcINUE0tWLBANpvNufj4+KhNmzYaN26cMjIyytTPyMjQ5MmT1bZtW9WtW1d+fn7q3LmzHn/8cWVlZZW7j27duslms2nevHluGcOTTz6pBQsW6O6779Y777yjYcOGnbZueHi4+vbt61L2+/HbbDb5+/urZ8+e+vTTT8u0P3W8UlJSXMrXrVun66+/Xs2aNZOPj49atGihfv36adGiRZUzyHNw8OBBzZw5U1u2bLno+y7PihUrNHPmzKruBlDpvKq6AwAqNmvWLLVq1Ur5+flat26d5s2bpxUrVmj79u2qW7euJGnjxo3q06eP8vLydPvtt6tz586SpJSUFD311FP66quv9Pnnn7tsd/fu3dq4caPCw8O1cOFC3X333ZXe9zVr1ujKK6/UjBkzznsb1157rYYPHy5jjPbu3at58+apX79+WrlypWJjYytsu2TJEg0ePFgdO3bUPffcowYNGigtLU1fffWVXn/9dd12223n3a/zcfDgQT366KMKDw9Xx44dL+q+y7NixQq98sorBBxYDuEGqOauv/56denSRZJ05513qlGjRnrhhRf00UcfKS4uTllZWbrpppvk6empzZs3q23bti7tn3jiCb3++utltvvuu++qSZMmev755zVo0CDt2bNH4eHhldr3zMxMtWvX7oK20aZNG91+++3OzwMHDlS7du00d+7cM4abmTNnql27dvr2229lt9vL9A2ANXFZCqhhevfuLUlKS0uTJP3rX//SgQMH9MILL5QJNpIUHBysqVOnlilftGiRBg0apL59+yogIOCcLtNkZmZq1KhRCg4Olo+Pjzp06KC33nrLuX7t2rWy2WxKS0vTp59+6rystGfPnnMcbVmRkZFq3Lixfv755zPW/fnnn9W1a9cywUaSmjRpcsb2xhg9/vjjat68uerWratrrrlG33//fZl6R48e1eTJk9W+fXvVq1dP/v7+uv7667V161ZnnbVr16pr166SpJEjRzqPyYIFCyRJX3/9tW655Ra1aNFC3t7eCgsL03333aeTJ0+67Cs9PV0jR45U8+bN5e3traZNm6p///5lju3KlSt19dVXy8/PT/Xr19cNN9zg0vf4+Hi98sorklwv/wFWwJkboIY59aXeqFEjSdLHH38sX19fDRo06Ky3kZycrJ9++klvvvmm7Ha7br75Zi1cuFAPP/zwGduePHlSvXr10k8//aRx48apVatWWrJkieLj45WVlaV77rlHkZGReuedd3TfffepefPmmjRpkiQpKCjoPEbsKjs7W8eOHVPr1q3PWLdly5ZKTEzUL7/8oubNm5/zvqZPn67HH39cffr0UZ8+fbRp0yb97W9/U2FhoUu9//u//9Py5ct1yy23qFWrVsrIyNC//vUv9ezZUzt27FBoaKgiIyM1a9YsTZ8+XWPGjNHVV18tSerRo4ek0ktoJ06c0N13361GjRppw4YNeumll/TLL79oyZIlzn0NHDhQ33//vcaPH6/w8HBlZmYqISFB+/btc555e+eddzRixAjFxsbq6aef1okTJzRv3jz95S9/0ebNmxUeHq6///3vOnjwoBISEvTOO++c87EBqjUDoFp68803jSSzevVqc/jwYbN//37z/vvvm0aNGhlfX1/zyy+/GGOMadCggenQocM5bXvcuHEmLCzMOBwOY4wxn3/+uZFkNm/efMa2c+bMMZLMu+++6ywrLCw0UVFRpl69eiYnJ8dZ3rJlS3PDDTecVZ/KqyvJjBo1yhw+fNhkZmaalJQUc9111xlJ5tlnn3Wpe+p4bdy40Vn2xhtvGEnGbreba665xkybNs18/fXXpqSk5Iz9yczMNHa73dxwww3O42SMMQ8//LCRZEaMGOEsy8/PL7PNtLQ04+3tbWbNmuUs27hxo5Fk3nzzzTL7O3HiRJmy2bNnG5vNZvbu3WuMMebYsWPljv33cnNzTWBgoBk9erRLeXp6ugkICHApHzt2rOFrAFbEZSmgmouJiVFQUJDCwsI0ZMgQ1atXT8uWLVOzZs0kSTk5Oapfv/5Zb6+4uFiLFy/W4MGDnZchevfurSZNmmjhwoVnbL9ixQqFhIQoLi7OWVanTh1NmDBBeXl5+vLLL89xhBV74403FBQUpCZNmqhLly5KTEzUAw88oIkTJ56x7R133KFVq1apV69eWrdunR577DFdffXVioiI0Pr16ytsu3r1ahUWFmr8+PEul2vKu53d29tbHh6l/5yWlJTo119/Vb169XTZZZdp06ZNZzVOX19f538fP35cR44cUY8ePWSM0ebNm5117Ha71q5dq2PHjpW7nYSEBGVlZSkuLk5HjhxxLp6enurevbu++OKLs+oPUJNxWQqo5l555RW1adNGXl5eCg4O1mWXXeb8IpUkf39/5ebmnvX2Pv/8cx0+fFjdunXTTz/95Cy/5ppr9N577+npp5922f4f7d27VxEREWXqREZGOtdXpv79+2vcuHEqLCzUxo0b9eSTT+rEiRMV9vH3YmNjFRsbqxMnTig1NVWLFy/W/Pnz1bdvX+3ateu0c29OjSMiIsKlPCgoSA0aNHApczgcmjt3rl599VWlpaWppKTEue7U5cMz2bdvn6ZPn66PP/64THDJzs6WVBqinn76aU2aNEnBwcG68sor1bdvXw0fPlwhISGSSu+Ck36bm/VH/v7+Z9UfoCYj3ADVXLdu3Zx3S5Wnbdu22rJliwoLC8udOPtHp87O3HrrreWu//LLL3XNNdecX2fdoHnz5oqJiZEk9enTR40bN9a4ceN0zTXX6Oabbz7r7dStW1dXX321rr76ajVu3FiPPvqoVq5cqREjRlxwH5988klNmzZNd9xxhx577DE1bNhQHh4euvfee+VwOM7YvqSkRNdee62OHj2qBx98UG3btpWfn58OHDig+Ph4l23ce++96tevn5YvX67PPvtM06ZN0+zZs7VmzRr9+c9/dtZ95513nIHn97y8+Gcf1sdfOVDD9evXT0lJSfrggw9cLhWV5/jx4/roo480ePDgcicgT5gwQQsXLqww3LRs2VLfffedHA6Hy9mTXbt2Ode709///ne9+OKLmjp1qm666abzusPnVFg8dOjQaeucGsfu3bt1ySWXOMsPHz5c5szK0qVLdc011+iNN95wKc/KylLjxo2dn0/X123btunHH3/UW2+9peHDhzvLExISyq3funVrTZo0SZMmTdLu3bvVsWNHPf/883r33XedE62bNGniDIWnw91RsCrm3AA13F133aWmTZtq0qRJ+vHHH8usz8zM1OOPPy5JWrZsmY4fP66xY8dq0KBBZZa+ffvqgw8+UEFBwWn316dPH6Wnp2vx4sXOsuLiYr300kuqV6+eevbsWfmD/B0vLy9NmjRJO3fu1EcffVRh3cTExHLLV6xYIUm67LLLTts2JiZGderU0UsvvSRjjLN8zpw5Zep6enq61JFK7346cOCAS5mfn58klXlitKenpyS5bMMYo7lz57rUO3HihPLz813KWrdurfr16zt/Z7GxsfL399eTTz6poqKiMn09fPjwGfsD1HScuQFquAYNGmjZsmXq06ePOnbs6PKE4k2bNum9995TVFSUpNJLUo0aNXLefvxHN954o15//XV9+umnp73kM2bMGP3rX/9SfHy8UlNTFR4erqVLl+qbb77RnDlzzmly8/mKj4/X9OnT9fTTT2vAgAGnrde/f3+1atVK/fr1U+vWrXX8+HGtXr1a//3vf9W1a1f169fvtG2DgoI0efJkzZ49W3379lWfPn20efNmrVy50uVsjCT17dtXs2bN0siRI9WjRw9t27ZNCxcudDnjI5UGkcDAQM2fP1/169eXn5+funfvrrZt26p169aaPHmyDhw4IH9/f33wwQdlzhD9+OOPio6O1q233qp27drJy8tLy5YtU0ZGhoYMGSKpdE7NvHnzNGzYMHXq1ElDhgxRUFCQ9u3bp08//VRXXXWVXn75ZUly/p1MmDBBsbGx8vT0dG4HqNGq9F4tAKdV3q3NFTl48KC57777TJs2bYyPj4+pW7eu6dy5s3niiSdMdna2ycjIMF5eXmbYsGGn3caJEydM3bp1zU033VThvjIyMszIkSNN48aNjd1uN+3bty/39ubKuBV87Nix5dafOXOmkWS++OILY0z5x+u9994zQ4YMMa1btza+vr7Gx8fHtGvXzjzyyCMut6yfTklJiXn00UdN06ZNja+vr+nVq5fZvn27admyZZlbwSdNmuSsd9VVV5mkpCTTs2dP07NnT5dtfvTRR6Zdu3bGy8vL5bbwHTt2mJiYGFOvXj3TuHFjM3r0aLN161aXOkeOHDFjx441bdu2NX5+fiYgIMB0797d/Oc//ynT9y+++MLExsaagIAA4+PjY1q3bm3i4+NNSkqKs05xcbEZP368CQoKMjabjdvCYRk2Y/5wLhUAAKAGY84NAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwlFr5ED+Hw6GDBw+qfv36PH4cAIAawhij3NxchYaGVvjy3FoZbg4ePKiwsLCq7gYAADgP+/fvV/PmzU+7vlaGm1OPh9+/f7/8/f2ruDcAAOBs5OTkKCws7IyveamV4ebUpSh/f3/CDQAANcyZppQwoRgAAFgK4QYAAFgK4QYAAFhKrZxzAwDAHxljVFxcrJKSkqruSq3l6ekpLy+vC35MC+EGAFDrFRYW6tChQzpx4kRVd6XWq1u3rpo2bSq73X7e2yDcAABqNYfDobS0NHl6eio0NFR2u50HvFYBY4wKCwt1+PBhpaWlKSIiosIH9VWEcAMAqNUKCwvlcDgUFhamunXrVnV3ajVfX1/VqVNHe/fuVWFhoXx8fM5rO0woBgBAOu+zBKhclfF74DcJAAAshXADAAAshXADAAAklb7WYPny5VXdjQtGuAEAoBI5HEYnTxbJ4TBV3ZVai7ulAACoBD/++KsWLvxOiYlpys8vlo+Pl6KjW2no0CvUpk2jqu5ercKZGwAALtBnn/2kYcOWafnyH7R/f7YOHMjV/v3ZWr78Bw0btkyfffaTW/a7dOlStW/fXr6+vmrUqJFiYmJ0/Phxbdy4Uddee60aN26sgIAA9ezZU5s2bXJpu3v3bv31r3+Vj4+P2rVrp4SEBLf0sSoQbgAAuAA//virpk9fq6NHT+qnn47q6NF8FReX6OjR/P99Pqnp09fqxx9/rdT9Hjp0SHFxcbrjjju0c+dOrV27VjfffLOMMcrNzdWIESO0bt06ffvtt4qIiFCfPn2Um5srqfTBhTfffLPsdruSk5M1f/58Pfjgg5Xav6rEZSkAAC7AwoXfKT+/WAcP5iogwFshIfXk4WGTw2GUnp6ngwdzVbduHS1atE0zZ/aqtP0eOnRIxcXFuvnmm9WyZUtJUvv27SVJvXv3dqn72muvKTAwUF9++aX69u2r1atXa9euXfrss88UGhoqSXryySd1/fXXV1r/qhJnbgAAOE8Oh1FiYpqysk7Kw8PmDDaSXD5nZZ3U6tX/V6mTjDt06KDo6Gi1b99et9xyi15//XUdO3ZMkpSRkaHRo0crIiJCAQEB8vf3V15envbt2ydJ2rlzp8LCwpzBRpKioqIqrW9VjXADAMB5KigoVn5+sQoLHfLx8XQGm1M8PGzy8fFUYaFD+fnFKigorrR9e3p6KiEhQStXrlS7du300ksv6bLLLlNaWppGjBihLVu2aO7cuVq/fr22bNmiRo0aqbCwsNL2X50RbgAAOE/e3l7y8fGS3e6h/PySMmdmHA6j/PwS2e0e8vHxkrd35c4Gsdlsuuqqq/Too49q8+bNstvtWrZsmb755htNmDBBffr00eWXXy5vb28dOXLE2S4yMlL79+/XoUOHnGXffvttpfatKhFuAAA4Tx4eNkVHt1JgoK9zjs2pgPP7z4GBvoqJuaTMmZ0LkZycrCeffFIpKSnat2+fPvzwQx0+fFiRkZGKiIjQO++8o507dyo5OVlDhw6Vr6+vs21MTIzatGmjESNGaOvWrfr666/1yCOPVFrfqhrhBgCACzB06BXy8fFSaGh9ZWcXaPfuo9q7N0u7dx9VdnaBQkPry8fHS7fd1r5S9+vv76+vvvpKffr0UZs2bTR16lQ9//zzuv766/XGG2/o2LFj6tSpk4YNG6YJEyaoSZMmzrYeHh5atmyZTp48qW7duunOO+/UE088Uan9q0o2Y0yte4RiTk6OAgIClJ2dLX9//6ruDgCgCuXn5ystLU2tWrWSj4/PeW3js89+0vTpa5WfX6ysrJMqLHTIbvdQYKCvfHy8NGtWL8XGXlrJPbemin4fZ/v9za3gAABcoNjYS9WqVQMtWrRNq1f/n/MJxTExl+i229rzhOKLjHADAEAlaNOmkWbO7KXp03uqoKBY3t5elTrHBmePcAMAQCXy8LDJ17dOVXejVmNCMQAAsBTCDQAAsBTCDQAAsBTCDQAAsBTCDQAAsBTCDQAAsBTCDQAAlchhjAocDjlq3wsAzkp4eLjmzJnj1n3wnBsAACrB/qICrT5+TJvyc1VojOw2mzr51FeMXwOF1fGu6u6dt169eqljx45uDySViXADAMAF2nAyR29mZajQOJTnKFGxMfKy2bTuRLY2nMzVyMBgdfO17rsMjTEqKSmRl1f1iBVclgIA4ALsLyrQm1kZynUU62BxgXIdJSqRUa6jRAeLC5XrKNabWRnaX1RQ6fvu1auXJkyYoAceeEANGzZUSEiIZs6c6VyflZWlO++8U0FBQfL391fv3r21detW5/r4+HgNGDDAZZv33nuvevXq5Vz/5Zdfau7cubLZbLLZbNqzZ4/Wrl0rm82mlStXqnPnzvL29ta6dev0888/q3///goODla9evXUtWtXrV69utLHfSaEGwAALsDq48dUaBz6taRIfh6eauZlV7CXXc287PLz8NCvJcUqNA4lHj/mlv2/9dZb8vPzU3Jysp555hnNmjVLCQkJkqRbbrlFmZmZWrlypVJTU9WpUydFR0fr6NGjZ7XtuXPnKioqSqNHj9ahQ4d06NAhhYWFOddPmTJFTz31lHbu3KkrrrhCeXl56tOnjxITE7V582Zdd9116tevn/bt2+eWsZ9O9Th/BABADeQwRpvyc5XnKJFNNjXw8JKHrfRlmR620s8nHIXKc5QoNT9Xw02wc31lueKKKzRjxgxJUkREhF5++WUlJibK19dXGzZsUGZmpry9S+f8PPfcc1q+fLmWLl2qMWPGnHHbAQEBstvtqlu3rkJCQsqsnzVrlq699lrn54YNG6pDhw7Oz4899piWLVumjz/+WOPGjbvQoZ41wg0AAOepyBgVGqPi/00g/mNw8bDZZLfZVPy/ekXGyNsN4eb3mjZtqszMTG3dulV5eXlq1KiRy/qTJ0/q559/rpR9d+nSxeVzXl6eZs6cqU8//VSHDh1ScXGxTp48yZkbAABqijr/Cy9eNptO/u/2798HHMf/Qk19Dw/ZbTbVqeRgI0l16ri+gdxms8nhcCgvL09NmzbV2rVry7QJDAyUJHl4eMj84Zb1oqKis963n5+fy+fJkycrISFBzz33nC699FL5+vpq0KBBKiwsPOttVgbCDQAA58njf7d7rzuRrRxHiY45ip2XphzG6JijWEZSPQ9PdfapX+mXpCrSqVMnpaeny8vLS+Hh4eXWCQoK0vbt213KtmzZ4hKY7Ha7SkpKzmqf33zzjeLj43XTTTdJKj2Ts2fPnvPq/4VgQjEAABcgxq+B7DYPNfL00nGHQweKC5VRXKgDxYU67nCokaeX7DYPRfs1uLj9iolRVFSUBgwYoM8//1x79uzR+vXr9cgjjyglJUWS1Lt3b6WkpOjtt9/W7t27NWPGjDJhJzw8XMnJydqzZ4+OHDkih8Nx2n1GREToww8/1JYtW7R161bddtttFdZ3F8INAAAXIKyOt0YGBqu+h5dCveyq7+EpT9lU38Pzf5+9NDIw+KI/yM9ms2nFihX661//qpEjR6pNmzYaMmSI9u7dq+DgYElSbGyspk2bpgceeEBdu3ZVbm6uhg8f7rKdyZMny9PTU+3atVNQUFCF82deeOEFNWjQQD169FC/fv0UGxurTp06uXWc5bGZP15sqwVycnIUEBCg7Oxs+ftb96FKAIAzy8/PV1pamlq1aiUfH5/z3s7+ogIlHj+m1N89obizT31F1/AnFF9sFf0+zvb7+6KcuXnllVcUHh4uHx8fde/eXRs2bKiw/pIlS9S2bVv5+Pioffv2WrFixWnr3nXXXbLZbDXqsdAAAOsJq+Ot+MAQzQ2+VP8MvlRzgy9VfGAIwaYKuD3cLF68WBMnTtSMGTO0adMmdejQQbGxscrMzCy3/vr16xUXF6dRo0Zp8+bNGjBggAYMGFDmGqAkLVu2TN9++61CQ0PdPQwAAM6Kh80mbw+Pizp5GK7cHm5eeOEFjR49WiNHjlS7du00f/581a1bV//+97/LrT937lxdd911uv/++xUZGanHHntMnTp10ssvv+xS78CBAxo/frwWLlxY5jY4AABQe7k13BQWFio1NVUxMTG/7dDDQzExMUpKSiq3TVJSkkt9qXTC0+/rOxwODRs2TPfff78uv/zyM/ajoKBAOTk5LgsAALAmt4abI0eOqKSkxDkr+5Tg4GClp6eX2yY9Pf2M9Z9++ml5eXlpwoQJZ9WP2bNnKyAgwLn8/r0YAADAWmrcreCpqamaO3euFixYINtZXs986KGHlJ2d7Vz279/v5l4CAICq4tZw07hxY3l6eiojI8OlPCMjo9wXcElSSEhIhfW//vprZWZmqkWLFvLy8pKXl5f27t2rSZMmnfYJjN7e3vL393dZAACANbk13NjtdnXu3FmJiYnOMofDocTEREVFRZXbJioqyqW+JCUkJDjrDxs2TN999522bNniXEJDQ3X//ffrs88+c99gAABAjeD2d0tNnDhRI0aMUJcuXdStWzfNmTNHx48f18iRIyVJw4cPV7NmzTR79mxJ0j333KOePXvq+eef1w033KD3339fKSkpeu211yRJjRo1KvOG0zp16igkJESXXXaZu4cDAACqObfPuRk8eLCee+45TZ8+XR07dtSWLVu0atUq56Thffv26dChQ876PXr00KJFi/Taa6+pQ4cOWrp0qZYvX64//elP7u4qAAAXzjikopOlP1FGeHi42x+8e1HeCj5u3DiNGzeu3HXlvYr9lltu0S233HLW26+KN44CAODi6I/SzoXSvkSpJF/y9JFaREuRQ6WGbaq6d+etV69e6tixY416E8BFCTcAAFjans+kb6ZLxflSQZZUUih52qWflkt7VklXzZLCY6u6l25jjFFJSYm8vKpHrKhxt4IDAFCtHP2xNNjkH5Wyfir9aYpdP38zvbReJevVq5cmTJigBx54QA0bNlRISIhmzpzpXJ+VlaU777xTQUFB8vf3V+/evbV161bn+vj4eA0YMMBlm/fee6969erlXP/ll19q7ty5stlsstls2rNnj9auXSubzaaVK1eqc+fO8vb21rp16/Tzzz+rf//+Cg4OVr169dS1a1etXr260sd9JoQbAAAuxM6FpWds8g5K3gFSgwjJv2XpT++A0vLifGnXIrfs/q233pKfn5+Sk5P1zDPPaNasWUpISJBUOs0jMzNTK1euVGpqqjp16qTo6GgdPXr0rLY9d+5cRUVFafTo0Tp06JAOHTrk8iDcKVOm6KmnntLOnTt1xRVXKC8vT3369FFiYqI2b96s6667Tv369dO+ffvcMvbTqR7njwAAqImMo3SOTUGWZPOQ/EJKf0q/fS7MLV2/d7UUNf239ZXkiiuu0IwZMyRJERERevnll5WYmChfX19t2LBBmZmZ8vYufTP5c889p+XLl2vp0qUaM2bMGbcdEBAgu92uunXrlvt8ulmzZunaa691fm7YsKE6dOjg/PzYY49p2bJl+vjjj08799YdCDcAAJyv4oLSycMlhZKXT9ngYvMoLXcUltYrLpDq+FZqF6644gqXz02bNlVmZqa2bt2qvLy8Mo9POXnypH7++edK2XeXLl1cPufl5WnmzJn69NNPdejQIRUXF+vkyZOcuQEAoMbw8i69K8rTLuXnlZ7J+X3AMY7SS1I+DUvreXlXehfq1Knj8tlms8nhcCgvL09NmzYt967kwMBASaUvszbGuKwrKio66337+fm5fJ48ebISEhL03HPP6dJLL5Wvr68GDRqkwsLCs95mZSDcAABwvmwepbd7/7RcOnlEOp7+26Up4yj9bBySd6DUMqbSL0lVpFOnTkpPT5eXl9dpX08UFBSk7du3u5Rt2bLFJTDZ7XaVlJSc1T6/+eYbxcfH66abbpJUeianKh7XwoRiAAAuROTQ0ktP9UKlgmzp2G4pZ2/pz4Ls0nIvH6ntbRe1WzExMYqKitKAAQP0+eefa8+ePVq/fr0eeeQRpaSkSJJ69+6tlJQUvf3229q9e7dmzJhRJuyEh4crOTlZe/bs0ZEjR+RwnP7hhBEREfrwww+1ZcsWbd26VbfddluF9d2FcAMAwIVo2Kb0OTY+DaXAS0t/eni5fr5q1kV/kJ/NZtOKFSv017/+VSNHjlSbNm00ZMgQ7d271/mWgNjYWE2bNk0PPPCAunbtqtzcXA0fPtxlO5MnT5anp6fatWunoKCgCufPvPDCC2rQoIF69Oihfv36KTY2Vp06dXLrOMtjM3+82FYL5OTkKCAgQNnZ2bwhHABqufz8fKWlpalVq1by8fE5/w0d/bH0du+9q397QnHLmNIzNjX4CcUXW0W/j7P9/mbODQAAlaFhG6nHzNLbvYsLSicPX8Q5NvgN4QYAgMpk86j0271xboiUAADAUgg3AADAUgg3AABIZR5mh6pRGb8Hwg0AoFY79cC6EydOVHFPIP32e/jjk5fPBROKAQC1mqenpwIDA5WZmSlJqlu3rmw2WxX3qvYxxujEiRPKzMxUYGCgPD09z3tbhBsAQK136o3XpwIOqk5gYGC5byA/F4QbAECtZ7PZ1LRpUzVp0uScXhyJylWnTp0LOmNzCuEGAID/8fT0rJQvV1QtJhQDAABLIdwAAABLIdwAAABLIdwAAABLIdwAAABLIdwAAABLIdwAAABLIdwAAABLIdwAAABLIdwAAABLIdwAAABLIdwAAABLIdwAAABLIdwAAABLIdwAAABLIdwAAABLIdwAAABLIdwAAABLIdwAAABLIdwAAABLIdwAAABLIdwAAABLIdwAAABLIdwAAABLIdwAAABLIdwAAABLIdwAAABLIdwAAABLIdwAAABLIdwAAABLIdwAAABLIdwAAABLIdwAAABLIdwAAABLIdwAAABLIdwAAABLuSjh5pVXXlF4eLh8fHzUvXt3bdiwocL6S5YsUdu2beXj46P27dtrxYoVznVFRUV68MEH1b59e/n5+Sk0NFTDhw/XwYMH3T0MAABQA7g93CxevFgTJ07UjBkztGnTJnXo0EGxsbHKzMwst/769esVFxenUaNGafPmzRowYIAGDBig7du3S5JOnDihTZs2adq0adq0aZM+/PBD/fDDD7rxxhvdPRQAAFAD2Iwxxp076N69u7p27aqXX35ZkuRwOBQWFqbx48drypQpZeoPHjxYx48f1yeffOIsu/LKK9WxY0fNnz+/3H1s3LhR3bp10969e9WiRYsz9iknJ0cBAQHKzs6Wv7//eY4MAABcTGf7/e3WMzeFhYVKTU1VTEzMbzv08FBMTIySkpLKbZOUlORSX5JiY2NPW1+SsrOzZbPZFBgYWO76goIC5eTkuCwAAMCa3Bpujhw5opKSEgUHB7uUBwcHKz09vdw26enp51Q/Pz9fDz74oOLi4k6b4mbPnq2AgADnEhYWdh6jAQAANUGNvluqqKhIt956q4wxmjdv3mnrPfTQQ8rOznYu+/fvv4i9BAAAF5OXOzfeuHFjeXp6KiMjw6U8IyNDISEh5bYJCQk5q/qngs3evXu1Zs2aCq+9eXt7y9vb+zxHAQAAahK3nrmx2+3q3LmzEhMTnWUOh0OJiYmKiooqt01UVJRLfUlKSEhwqX8q2OzevVurV69Wo0aN3DMAAABQ47j1zI0kTZw4USNGjFCXLl3UrVs3zZkzR8ePH9fIkSMlScOHD1ezZs00e/ZsSdI999yjnj176vnnn9cNN9yg999/XykpKXrttdcklQabQYMGadOmTfrkk09UUlLinI/TsGFD2e12dw8JAABUY24PN4MHD9bhw4c1ffp0paenq2PHjlq1apVz0vC+ffvk4fHbCaQePXpo0aJFmjp1qh5++GFFRERo+fLl+tOf/iRJOnDggD7++GNJUseOHV329cUXX6hXr17uHhIAAKjG3P6cm+qI59wAAFDzVIvn3AAAAFxshBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAphBsAAGAp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MWKEnnjiiXPpPgAAqAXccreUJF1//fXKyMjQ/PnzVVRUpJEjR6pLly5atGiRJOnAgQOKjo7W22+/rW7dukmS7r77bq1YsUILFiyQv7+/xo8fL6l0bo1Ueimqd+/eio2N1bPPPuvcl6en51mFrlO4WwoAgJrnbL+/z+nMzblYuHChxo0bp+joaHl4eGjgwIH65z//6VxfVFSkH374QSdOnHCWvfjii866BQUFio2N1auvvupcv3TpUh0+fFjvvvuu3n33XWd5y5YttWfPHncNBQAA1CBuO3NTnXHmBgCAmqdKn3MDAABQVQg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUtwWbo4ePaqhQ4fK399fgYGBGjVqlPLy8ipsk5+fr7Fjx6pRo0aqV6+eBg4cqIyMjHLr/vrrr2revLlsNpuysrLcMAIAAFATuS3cDB06VN9//70SEhL0ySef6KuvvtKYMWMqbHPffffpv//9r5YsWaIvv/xSBw8e1M0331xu3VGjRumKK65wR9cBAEANZjPGmMre6M6dO9WuXTtt3LhRXbp0kSStWrVKffr00S+//KLQ0NAybbKzsxUUFKRFixZp0KBBkqRdu3YpMjJSSUlJuvLKK511582bp8WLF2v69OmKjo7WsWPHFBgYeNb9y8nJUUBAgLKzs+Xv739hgwUAABfF2X5/u+XMTVJSkgIDA53BRpJiYmLk4eGh5OTkctukpqaqqKhIMTExzrK2bduqRYsWSkpKcpbt2LFDs2bN0ttvvy0Pj7PrfkFBgXJyclwWAABg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ls1mU2BgYKX0u6Zx13F2OBwaNmyY7r//fl1++eXu6XwNU7u/kWqB9PR0NWnSxKXMy8tLDRs2VHp6+mnb2O32Mv8ABQcHO9sUFBQoLi5Ozz77rFq0aOGWvtck7jrOf7R+/XotXrxYY8aMqZR+V3dHjhxRSUmJgoODXcorOkbp6ekV1j/181y2aXXuOM5/lJ+frwcffFBxcXG19u3W7jrOTz/9tLy8vDRhwoTK73QNRbipoaZMmSKbzVbhsmvXLrft/6GHHlJkZKRuv/12t+2jOqjq4/x727dvV//+/TVjxgz97W9/uyj7BCpDUVGRbr31VhljNG/evKrujqWkpqZq7ty5WrBggWw2W1V3p9rwquoO4PxMmjRJ8fHxFda55JJLFBISoszMTJfy4uJiHT16VCEhIeW2CwkJUWFhobKyslzOKmRkZDjbrFmzRtu2bdPSpUslld59IkmNGzfWI488okcfffQ8R1a9VPVxPmXHjh2Kjo7WmDFjNHXq1PMaS03UuHFjeXp6lrlTr7xjdEpISEiF9U/9zMjIUNOmTV3qdOzYsRJ7X3O44zifcirY7N27V2vWrKm1Z20k9xznr7/+WpmZmS5n0EtKSjRp0iTNmTNHe/bsqdxB1BRVPekH7nVqomtKSoqz7LPPPjuria5Lly51lu3atctloutPP/1ktm3b5lz+/e9/G0lm/fr1p531b2XuOs7GGLN9+3bTpEkTc//997tvANVYt27dzLhx45yfS0pKTLNmzSqcgNm3b1+XsqioqDITip977jnn+uzsbCYUV/JxNsaYwsJCM2DAAHP55ZebzMxM93S8hqns43zkyBGXf4u3bdtmQkNDzYMPPmh27drlvoFUc4SbWuC6664zf/7zn01ycrJZt26diYiIcLlF+ZdffjGXXXaZSU5OdpbdddddpkWLFmbNmjUmJSXFREVFmaioqNPu44svvqjVd0sZ457jvG3bNhMUFGRuv/12c+jQIedSm74o3n//fePt7W0WLFhgduzYYcaMGWMCAwNNenq6McaYYcOGmSlTpjjrf/PNN8bLy8s899xzZufOnWbGjBnl3goeGBhoPvroI/Pdd9+Z/v37cyt4JR/nwsJCc+ONN5rmzZubLVu2uPz9FhQUVMkYqwN3/D3/EXdLEW5qhV9//dXExcWZevXqGX9/fzNy5EiTm5vrXJ+WlmYkmS+++MJZdvLkSfOPf/zDNGjQwNStW9fcdNNN5tChQ6fdB+HGPcd5xowZRlKZpWXLlhdxZFXvpZdeMi1atDB2u91069bNfPvtt851PXv2NCNGjHCp/5///Me0adPG2O12c/nll5tPP/3UZb3D4TDTpk0zwcHBxtvb20RHR5sffvjhYgylWqvM43zq77285ff/D9RGlf33/EeEG2NsxvxvsgQAAIAFcLcUAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwFMINAACwlP8HLOstp7PZF74AAAAASUVORK5CYII=",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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v+yyTUn67bffXD43adJEl112mfM2/GbNmik2NlZ/+9vfKgxvhw8fdumLpAr7AzRkHLkB6rm33npLn376abnyhx56yPnfmzZt0jvvvCOHw6G8vDxt2LBB7733nmw2m5YuXaouXbpIkpYvXy5jjG666aYK9zV48GB5eXlp2bJl6tOnT4V1unbtqsTERL3xxhvKy8tT//79tX79er399ttKSEjQNddcUwOjrlrHjh01ePBg/eMf/9CTTz6ppk2bVljvueeeU0ZGhoYNG+acg02bNmnJkiUKCgrSww8/XOV+Zs+erSFDhujqq6/W3XffrSNHjujll19Wp06dnNcySacD3QsvvKBBgwbp9ttvV05Ojl599VVddtllLtfDSFKPHj30xRdf6IUXXlB4eLjatGmjPn366IYbbtDSpUsVEBCgjh07Ki0tTV988UW5sXXs2FGxsbHq0aOHgoKCtHHjRq1atUrjx4931nn11Vd19dVXKzo6Wvfee6/atm2r7OxspaWl6ZdfftHWrVslSd26dZOnp6eee+455efny263a8CAAdV+BhBQb9Xx3VoAKnHmVvDKloMHDzpvfz6zeHl5maCgINOnTx8zbdo0s3//fpdtRkdHm1atWlW539jYWNOsWTNTWlpaaZ3S0lIzc+ZM06ZNG+Pt7W0iIiLMtGnTXG49NqZmbgXv1KlThfXXrl1rJJmkpCRjTMW3gn/33XfmgQceMJ07dzYBAQHG29vbtGrVyowePdrs2bOnWv167733TIcOHYzdbjcdO3Y077//vklMTCx3K/ibb75poqKijN1uN+3btzeLFi0ySUlJ5ux/Znfu3Gn69evnvEX9zG3hR48eNWPGjDHBwcGmSZMmJj4+3uzcudO0bt3a5dbxv/71r6Z3794mMDDQ+Pn5mfbt25unn37alJSUuOxnz549ZtSoUSYsLMx4e3ubFi1amBtuuMGsWrXKpd7f//5307ZtW+Pp6clt4bAMmzFnHQcFAABowLjmBgAAWArhBgAAWArhBgAAWArhBgAAWArhBgAAWArhBgAAWMpF+RA/h8OhX3/9VZdccgmPHwcAoIEwxqiwsFDh4eHy8Kj8+MxFGW5+/fVXRURE1HU3AADAeTh48KBatmxZ6fqLMtxccsklkk5Pzpk3JQMAgPqtoKBAERERzu/xylyU4ebMqSh/f3/CDQAADczvXVLCBcUAAMBSCDcAAMBSCDcAAMBSLsprbgAAOJsxRqdOnVJZWVldd+Wi5enpKS8vrwt+TAvhBgBw0SspKVFmZqaOHz9e11256DVq1EjNmzeXj4/PeW+DcAMAuKg5HA7t3btXnp6eCg8Pl4+PDw94rQPGGJWUlOjw4cPau3evoqKiqnxQX1UINwCAi1pJSYkcDociIiLUqFGjuu7ORc3Pz0/e3t7av3+/SkpK5Ovre17b4YJiAACk8z5KgJpVE78HfpMAAMBSCDcAAMBSCDcAAEDS6dcarF69uq67ccEINwAAwFK4WwoAgBricBht3pyp3NzjCg5upCuuaC4PD24rr20cuQEAoAakpu7VoEHvaNiwFRo9+p8aNmyFBg16R6mpe922z1WrVik6Olp+fn5q2rSp4uLidOzYMW3YsEHXXnutgoODFRAQoP79+2vTpk0ubXfv3q1+/frJ19dXHTt2VHJystv6WdsINwAAXKDU1L26776P9MMP2WrSxEfNmzdRkyY++uGHbN1330duCTiZmZkaOXKk7r77bu3YsUNr167VsGHDZIxRYWGhEhMT9e233+r7779XVFSUBg8erMLCQkmnH1w4bNgw+fj4KD09XQsXLtSjjz5a432sK5yWAgDgAjgcRs8++60KC4vVosUlzqcb+/l5q0ULLx06VKhnn/1WsbGRNXqKKjMzU6dOndKwYcPUunVrSVJ0dLQkacCAAS5133jjDQUGBuqrr77SDTfcoC+++EI7d+7UZ599pvDwcEnSM888o+uvv77G+leXOHIDAMAF2Lw5U7t25appU79yr22w2WwKCvLTrl252rw5s0b327VrVw0cOFDR0dG6+eab9fe//11Hjx6VJGVnZ+vee+9VVFSUAgIC5O/vr6KiIh04cECStGPHDkVERDiDjSTFxMTUaP/qEuEGAIALkJt7XCUlDtntFZ8M8fX1UkmJQ7m5NftSTk9PTyUnJ+uTTz5Rx44d9fLLL6tdu3bau3evEhMTtWXLFi1YsEDr1q3Tli1b1LRpU5WUlNRoH+orwg0AABcgOLiRfHw8VFx8qsL1J0+eko+Ph4KDa/69VTabTVdddZVmzpypzZs3y8fHRx988IG+++47TZgwQYMHD1anTp1kt9uVm5vrbNehQwcdPHhQmZn/Ppr0/fff13j/6grX3AAAcAGuuKK52rUL1g8/ZKtFCy+XU1PGGB05ckJduoTqiiua1+h+09PTlZKSouuuu07NmjVTenq6Dh8+rA4dOigqKkpLly5Vz549VVBQoMmTJ8vPz8/ZNi4uTpdffrkSExM1Z84cFRQU6PHHH6/R/tUljtwAAHABPDxsmjr1al1yiV2HDhXq+PFSORxGx4+X6tChQvn72zV16tU1/rwbf39/ff311xo8eLAuv/xyPfHEE5o3b56uv/56vfnmmzp69Ki6d++uu+66SxMmTFCzZs3+o88e+uCDD3TixAn17t1b99xzj55++uka7V9dshljTF13orYVFBQoICBA+fn58vf3r+vuAADq0MmTJ7V37161adNGvr6+572d1NS9evbZb7VrV65KShzy8fFQu3bBmjr1ag0Y0KYGe2xtVf0+qvv9zWkpAABqwIABbRQbG8kTiusBwg0AADXEw8OmHj3Cf78i3IprbgAAgKUQbgAAgKUQbgAAgKUQbgAAgKUQbgAAgKUQbgAAgKUQbgAAgKUQbgAAQK2JjIzU/Pnz3boPwg0AADXEYYx2FR/X+hMF2lV8XA4LvOEoNjZWDz/8cF1345zwhGIAAGrAphOFWl6Qo4OlxTpljLxsNkV423W7fzN197ukrrvnVsYYlZWVycurfsQKjtwAAHCBNp0o1AtHftH/KzkhP5uHgjy95Gfz0P8rOakXjvyiTScK3bLf2NhYTZgwQVOmTFFQUJDCwsI0Y8YM5/q8vDzdc889CgkJkb+/vwYMGKCtW7c6148ePVoJCQku23z44YcVGxvrXP/VV19pwYIFstlsstls2rdvn9auXSubzaZPPvlEPXr0kN1u17fffqs9e/Zo6NChCg0NVZMmTdSrVy998cUXbhl7VQg3AABcAIcxWl6Qo+OOMgV7esvu4SEPm012Dw8Fe3rpuMOh5QU5bjtF9fbbb6tx48ZKT0/X888/r1mzZik5OVmSdPPNNysnJ0effPKJMjIy1L17dw0cOFBHjhyp1rYXLFigmJgY3XvvvcrMzFRmZqYiIiKc66dOnapnn31WO3bsUJcuXVRUVKTBgwcrJSVFmzdv1qBBg3TjjTfqwIEDbhl7ZerH8SMAABqo3SUndLC0WP4eXrLZXN8AbrPZ5O/hqYOlxdpdckLt7I1qfP9dunRRUlKSJCkqKkqvvPKKUlJS5Ofnp/Xr1ysnJ0d2u12SNHfuXK1evVqrVq3SuHHjfnfbAQEB8vHxUaNGjRQWFlZu/axZs3Tttdc6PwcFBalr167Oz0899ZQ++OADffjhhxo/fvyFDrXaCDcAAFyAfMcpnTJG3h62Ctd722wqdBjlO065Zf9dunRx+dy8eXPl5ORo69atKioqUtOmTV3WnzhxQnv27KmRfffs2dPlc1FRkWbMmKGPP/5YmZmZOnXqlE6cOMGRGwAAGpIADy952WwqNUZ2W/mAU/p/FxcHeLjnK9fb29vls81mk8PhUFFRkZo3b661a9eWaxMYGChJ8vDwkDnrdFlpaWm19924cWOXz5MmTVJycrLmzp2ryy67TH5+fhoxYoRKSkqqvc2aQLgBAOACRPn4KcLbrv9XclLB/3fR7RnGGBU4ytTWx1dRPn612q/u3bsrKytLXl5eioyMrLBOSEiItm3b5lK2ZcsWl8Dk4+OjsrKyau3zu+++0+jRo/WnP/1J0ukjOfv27Tuv/l8ILigGAOACeNhsut2/mRp5eCi37JSKHQ45jFGxw6HcslNq5OGh2/2byaOCozruFBcXp5iYGCUkJOjzzz/Xvn37tG7dOj3++OPauHGjJGnAgAHauHGjlixZot27dyspKalc2ImMjFR6err27dun3NxcORyOSvcZFRWl999/X1u2bNHWrVt1++23V1nfXQg3AABcoO5+l2hiUEu19fHVCePQkbJTOmEcauvjq4lBLevkOTc2m01r1qxRv379NGbMGF1++eW67bbbtH//foWGhkqS4uPj9eSTT2rKlCnq1auXCgsLNWrUKJftTJo0SZ6enurYsaNCQkKqvH7mhRde0B/+8Af17dtXN954o+Lj49W9e3e3jrMiNnP2ybaLQEFBgQICApSfny9/f/+67g4AoA6dPHlSe/fuVZs2beTr63tB23IYo90lJ5TvOKUADy9F+fjV+hGbhq6q30d1v79r5cjNq6++qsjISPn6+qpPnz5av359lfVXrlyp9u3by9fXV9HR0VqzZk2lde+//37ZbDa3v6cCAIDf42GzqZ29kXr7+audvRHBpo64PdysWLFCEydOVFJSkjZt2qSuXbsqPj5eOTk5FdZft26dRo4cqbFjx2rz5s1KSEhQQkJCuXOAkvTBBx/o+++/V3h4uLuHAQAAGgi3h5sXXnhB9957r8aMGaOOHTtq4cKFatSokd56660K6y9YsECDBg3S5MmT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AAAXPZvNpubNm6tZs2bn9OJI1Cxvb+8LOmJzBuEGAID/4+npWSNfrqhbXFAMAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAspVbCzauvvqrIyEj5+vqqT58+Wr9+fZX1V65cqfbt28vX11fR0dFas2aNc11paakeffRRRUdHq3HjxgoPD9eoUaP066+/unsYAACgAXB7uFmxYoUmTpyopKQkbdq0SV27dlV8fLxycnIqrL9u3TqNHDlSY8eO1ebNm5WQkKCEhARt27ZNknT8+HFt2rRJTz75pDZt2qT3339fu3bt0k033eTuoQAAgAbAZowx7txBnz591KtXL73yyiuSJIfDoYiICD344IOaOnVqufq33nqrjh07po8++shZduWVV6pbt25auHBhhfvYsGGDevfurf3796tVq1a/26eCggIFBAQoPz9f/v7+5zkyAABQm6r7/e3WIzclJSXKyMhQXFzcv3fo4aG4uDilpaVV2CYtLc2lviTFx8dXWl+S8vPzZbPZFBgYWOH64uJiFRQUuCwAAMCa3BpucnNzVVZWptDQUJfy0NBQZWVlVdgmKyvrnOqfPHlSjz76qEaOHFlpips9e7YCAgKcS0RExHmMBgAANAQN+m6p0tJS3XLLLTLG6PXXX6+03rRp05Sfn+9cDh48WIu9BAAAtcnLnRsPDg6Wp6ensrOzXcqzs7MVFhZWYZuwsLBq1T8TbPbv36/U1NQqz73Z7XbZ7fbzHAUAAGhI3HrkxsfHRz169FBKSoqzzOFwKCUlRTExMRW2iYmJcakvScnJyS71zwSb3bt364svvlDTpk3dMwAAANDguPXIjSRNnDhRiYmJ6tmzp3r37q358+fr2LFjGjNmjCRp1KhRatGihWbPni1Jeuihh9S/f3/NmzdPQ4YM0bvvvquNGzfqjTfekHQ62IwYMUKbNm3SRx99pLKyMuf1OEFBQfLx8XH3kAAAQD3m9nBz66236vDhw5o+fbqysrLUrVs3ffrpp86Lhg8cOCAPj38fQOrbt6+WL1+uJ554Qo899piioqK0evVqde7cWZJ06NAhffjhh5Kkbt26uezryy+/VGxsrLuHBAAA6jG3P+emPuI5NwAANDz14jk3AAAAtY1wAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALKVWws2rr76qyMhI+fr6qk+fPlq/fn2V9VeuXKn27dvL19dX0dHRWrNmjct6Y4ymT5+u5s2by8/PT3Fxcdq9e7c7hwAAABoIt4ebFStWaOLEiUpKStKmTZvUtWtXxcfHKycnp8L669at08iRIzV27Fht3rxZCQkJSkhI0LZt25x1nn/+eb300ktauHCh0tPT1bhxY8XHx+vkyZPuHg4AAKjnbMYY484d9OnTR7169dIrr7wiSXI4HIqIiNCDDz6oqVOnlqt/66236tixY/roo4+cZVdeeaW6deumhQsXyhij8PBwPfLII5o0aZIkKT8/X6GhoVq8eLFuu+22ctssLi5WcXGx83NBQYEiIiKUn58vf3//mh4yAABwg4KCAgUEBPzu97dbj9yUlJQoIyNDcXFx/96hh4fi4uKUlpZWYZu0tDSX+pIUHx/vrL93715lZWW51AkICFCfPn0q3ebs2bMVEBDgXCIiIi50aAAAoJ5ya7jJzc1VWVmZQkNDXcpDQ0OVlZVVYZusrKwq65/5eS7bnDZtmvLz853LwYMHz2s8AACg/vOq6w7UBrvdLrvd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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"\n",
"\n",
"\n",
"pca = PCA(n_components=2)\n",
"X_r = pca.fit(X).transform(X)\n",
"\n",
"lda = LinearDiscriminantAnalysis(n_components=2)\n",
"X_r2 = lda.fit(X, y).transform(X)\n",
"\n",
"# Percentage of variance explained for each components\n",
"print(\n",
" \"explained variance ratio (first two components): %s\"\n",
" % str(pca.explained_variance_ratio_)\n",
")\n",
"\n",
"plt.figure()\n",
"colors = [\"navy\", \"turquoise\", \"darkorange\"]\n",
"lw = 2\n",
"\n",
"for color, i, target_name in zip(colors, [0, 1, 2], target_names):\n",
" plt.scatter(\n",
" X_r[y == i, 0], X_r[y == i, 1], color=color, alpha=0.8, lw=lw, label=target_name\n",
" )\n",
"plt.legend(loc=\"best\", shadow=False, scatterpoints=1)\n",
"plt.title(\"PCA of data dataset\")\n",
"\n",
"plt.figure()\n",
"for color, i, target_name in zip(colors, [0, 1, 2], target_names):\n",
" plt.scatter(\n",
" X_r2[y == i, 0], X_r2[y == i, 1], alpha=0.8, color=color, label=target_name\n",
" )\n",
"plt.legend(loc=\"best\", shadow=False, scatterpoints=1)\n",
"plt.title(\"LDA of data dataset\")\n",
"\n",
"plt.show()"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "tf2.10",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.16"
},
"orig_nbformat": 4
},
"nbformat": 4,
"nbformat_minor": 2
}
......@@ -21,7 +21,16 @@
### versions with time
- **<u>input version under this line:</u>**
- new notes:"Sort update records in descending order of time".That would be convenient to update new version notes in the future.
-
- 2023-05-09@19:10:05
- fix some bugs.
- certain adjustments to the project code.
### old notes
- old notes:"Sort update records in ascending order of time".
- 2023-04-25@21:35:50
- new:
......@@ -41,4 +50,5 @@
- 2023-04-30@00:02:03
- "update PCA transformer to the SER system"
- "there are some problems with recognize the single audio with pca preprocessing,the idea is to save the pca transformer when it was first fited,and then try to load corresponding file(joblib or pickle) when you need to recognize several audios that need extract the required dimension feature"
-
\ No newline at end of file
-
d = {'A': [1, 2, 3], 'B': [4, 5, 6], 'C':{"a":[7, 8, 9],"b":7}}
import json
def dict_to_filetag(d):
# Convert dictionary to JSON string
json_str = json.dumps(d)
remove_chars=['"',' ']
for c in remove_chars:
json_str=json_str.replace(c,'')
# Replace invalid characters with hyphen
rep_dict={
":":"=",
# '"':'',
# "'":""
}
for char in json_str:
if rep_dict.get(char):
json_str = json_str.replace(char, rep_dict[char])
# Truncate string if too long
# max_len = 260
# if len(json_str) > max_len:
# json_str = json_str[:max_len]
return json_str
res=dict_to_filetag(d)
print(res)
import tkinter
from matplotlib.backends.backend_tkagg import (
FigureCanvasTkAgg, NavigationToolbar2Tk)
# Implement the default Matplotlib key bindings.
from matplotlib.backend_bases import key_press_handler
from matplotlib.figure import Figure
import numpy as np
root = tkinter.Tk()
root.wm_title("Embedding in Tk")
def get_fig():
"""
Returns a matplotlib Figure object, a numpy array of time values, and a matplotlib Line2D object
representing the plot of 2*sin(2*pi*t) over the range [0,3]
with a label of "f(t)" on the y-axis and "time [s]"
on the x-axis.
The Figure has a size of 5x4 inches and a DPI of 100. No parameters are required.
"""
fig = Figure(figsize=(5, 4), dpi=100)
ax = fig.add_subplot()
ax.set_xlabel("time [s]")
ax.set_ylabel("f(t)")
t = np.arange(0, 3, .01)
line, = ax.plot(t, 2 * np.sin(2 * np.pi * t))
return fig,t,line
fig, t, line = get_fig()
canvas = FigureCanvasTkAgg(fig, master=root) # A tk.DrawingArea.
canvas.draw()
# pack_toolbar=False will make it easier to use a layout manager later on.
toolbar = NavigationToolbar2Tk(canvas, root, pack_toolbar=False)
toolbar.update()
canvas.mpl_connect(
"key_press_event", lambda event: print(f"you pressed {event.key}"))
canvas.mpl_connect("key_press_event", key_press_handler)
button_quit = tkinter.Button(master=root, text="Quit", command=root.destroy)
def update_frequency(new_val):
"""
Update plot with new frequency value.
:param new_val: A float representing the new frequency value.
"""
# retrieve frequency
f = float(new_val)
# update data
y = 2 * np.sin(2 * np.pi * f * t)
line.set_data(t, y)
# required to update canvas and attached toolbar!
canvas.draw()
slider_update = tkinter.Scale(root, from_=1, to=5, orient=tkinter.HORIZONTAL,
command=update_frequency, label="Frequency [Hz]")
# Packing order is important. Widgets are processed sequentially and if there
# is no space left, because the window is too small, they are not displayed.
# The canvas is rather flexible in its size, so we pack it last which makes
# sure the UI controls are displayed as long as possible.
button_quit.pack(side=tkinter.BOTTOM)
slider_update.pack(side=tkinter.BOTTOM)
toolbar.pack(side=tkinter.BOTTOM, fill=tkinter.X)
canvas.get_tk_widget().pack(side=tkinter.TOP, fill=tkinter.BOTH, expand=True)
tkinter.mainloop()
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册