import librosa
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
# Функция для извлечения звуковых признаков из аудиофайла
def extract_features(file_path, mfcc=True, chroma=True, mel=True):
audio_data, sr = librosa.load(file_path)
features = []
if mfcc:
mfccs = librosa.feature.mfcc(y=audio_data, sr=sr, n_mfcc=13)
features.extend(np.mean(mfccs, axis=1))
if chroma:
chroma = librosa.feature.chroma_stft(y=audio_data, sr=sr)
features.extend(np.mean(chroma, axis=1))
if mel:
mel = librosa.feature.melspectrogram(y=audio_data, sr=sr)
features.extend(np.mean(mel, axis=1))
return features
# Путь к аудиофайлам для обучения модели
file_path_1 = 'C:\\Users\\Павел\\Desktop\\Павел.wav'
file_path_2 = 'C:\\Users\\Павел\\Desktop\\Андрей.wav'
# Извлечение звуковых признаков для каждого голоса
features_1 = extract_features(file_path_1)
features_2 = extract_features(file_path_2)
# Подготовка данных для обучения модели
X = np.array([features_1, features_2])
y = np.array([0, 1]) # 0 - первый голос, 1 - второй голос
# Разделение данных на обучающий и тестовый наборы
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Обучение модели
model = SVC(kernel='linear')
model.fit(X_train, y_train)
# Проверка точности модели на тестовом наборе
accuracy = model.score(X_test, y_test)
print("Точность модели:", accuracy)
# Предсказание голоса для новых данных
new_features = np.array(extract_features('C:\\Users\\Павел\\Desktop\\Вася.wav')) # Преобразуем признаки в массив NumPy
new_features = new_features.reshape(1, -1) # Преобразуем форму для одного образца
predicted_voice = model.predict(new_features)
print("Предсказанный голос:", predicted_voice)