wave_compare.py 1.2 KB

123456789101112131415161718192021222324252627282930313233
  1. from datetime import datetime
  2. import librosa
  3. # from matplotlib import pyplot
  4. from librosa.feature import mfcc
  5. import numpy as np
  6. from scipy.spatial.distance import euclidean
  7. def extract_mfcc(filename, num_mfcc=13):
  8. # 取低频维度上的部分值输出,语音能量大多集中在低频域,数值一般取13。
  9. print("start extract_mfcc time:" + filename + str(datetime.now()))
  10. audio, sample_rate = librosa.load(filename)
  11. # pyplot.figure(figsize=(14, 5))
  12. # librosa.display.waveshow(y=audio, sr=sample_rate)
  13. # pyplot.title('Wave Form of ' + filename)
  14. # pyplot.show()
  15. mfcc_result = mfcc(y=audio, sr=sample_rate, n_mfcc=num_mfcc)
  16. mean_mfcc = np.mean(mfcc_result, axis=1)
  17. print("end extract_mfcc time:" + filename + str(datetime.now()))
  18. return mean_mfcc
  19. def compute_similarity(feature_1, feature_2):
  20. print("start compute_similarity time:" + str(datetime.now()))
  21. distance = euclidean(feature_1, feature_2)
  22. result = (100-distance)/100
  23. # 以下2种弃用的计算方式
  24. # result = 1-(distance*distance / 10000)
  25. # result = 1 - np.square((100-distance)/100)
  26. if result < 0:
  27. result = 0
  28. print("end compute_similarity time:" + str(datetime.now()))
  29. return result