Showing
6 changed files
with
33 additions
and
54 deletions
1 | from flask import Flask, request, send_file | 1 | from flask import Flask, request, send_file |
2 | -from extract_feature4 import extract | 2 | +from extract_server import extract |
3 | -from verification4_merge import load_model, load_enroll_embeddings,perform_verification | 3 | +from verification_server import load_model, load_enroll_embeddings, perform_verification |
4 | -from identification4 import perform_identification | 4 | +from identification_server import perform_identification |
5 | -from enroll4_merge import split_enroll_and_test,enroll_per_spk | 5 | +from enroll_server import split_enroll_and_test, enroll_per_spk |
6 | import os | 6 | import os |
7 | import shutil | 7 | import shutil |
8 | 8 | ||
9 | app = Flask(__name__) | 9 | app = Flask(__name__) |
10 | -log_dir = '../new_model4_merge' # Where the checkpoints are saved | 10 | +log_dir = '../new_model4_merge' # Where the checkpoints are saved |
11 | -embedding_dir = '../enroll_embeddings4_merge' # Where embeddings are saved | 11 | +embedding_dir = '../enroll_embeddings4_merge' # Where embeddings are saved |
12 | -test_dir = '../feat_logfbank_nfilt40/test/' # Where test features are saved | 12 | +test_dir = '../feat_logfbank_nfilt40/test/' # Where test features are saved |
13 | 13 | ||
14 | - # Settings | 14 | +# Settings |
15 | -use_cuda = True # Use cuda or not | 15 | +use_cuda = True # Use cuda or not |
16 | -embedding_size = 128 # Dimension of speaker embeddings | 16 | +embedding_size = 128 # Dimension of speaker embeddings |
17 | -cp_num = 50 # Which checkpoint to use? | 17 | +cp_num = 50 # Which checkpoint to use? |
18 | -n_classes = 348 # How many speakers in training data? | 18 | +n_classes = 348 # How many speakers in training data? |
19 | -test_frames = 100 # Split the test utterance | 19 | +test_frames = 100 # Split the test utterance |
20 | 20 | ||
21 | model = load_model(use_cuda, log_dir, cp_num, embedding_size, n_classes) | 21 | model = load_model(use_cuda, log_dir, cp_num, embedding_size, n_classes) |
22 | embeddings = load_enroll_embeddings(embedding_dir) | 22 | embeddings = load_enroll_embeddings(embedding_dir) |
... | @@ -31,21 +31,23 @@ def enrollment(): | ... | @@ -31,21 +31,23 @@ def enrollment(): |
31 | enroll_DB, test_DB = split_enroll_and_test(test_dir) | 31 | enroll_DB, test_DB = split_enroll_and_test(test_dir) |
32 | enroll_per_spk(use_cuda, test_frames, model, enroll_DB, embedding_dir) | 32 | enroll_per_spk(use_cuda, test_frames, model, enroll_DB, embedding_dir) |
33 | embeddings = load_enroll_embeddings(embedding_dir) | 33 | embeddings = load_enroll_embeddings(embedding_dir) |
34 | - | 34 | + |
35 | except Exception as e: | 35 | except Exception as e: |
36 | print(e) | 36 | print(e) |
37 | 37 | ||
38 | + | ||
38 | def verification(enroll_speaker): | 39 | def verification(enroll_speaker): |
39 | - test_speaker = 'TEST_SPEAKER' | 40 | + test_speaker = 'TEST_SPEAKER' |
40 | thres = 0.95 | 41 | thres = 0.95 |
41 | - # Perform the test | 42 | + # Perform the test |
42 | - return perform_verification(use_cuda, model, embeddings, enroll_speaker, test_path, test_frames, thres) | 43 | + return perform_verification(use_cuda, model, embeddings, enroll_speaker, |
43 | - | 44 | + test_path, test_frames, thres) |
44 | -def identification(): | ||
45 | - best_spk = perform_identification(use_cuda, model, embeddings, test_path, test_frames, spk_list) | ||
46 | - return best_spk | ||
47 | 45 | ||
48 | 46 | ||
47 | +def identification(): | ||
48 | + best_spk = perform_identification(use_cuda, model, embeddings, test_path, | ||
49 | + test_frames, spk_list) | ||
50 | + return best_spk | ||
49 | 51 | ||
50 | 52 | ||
51 | @app.route('/enroll', methods=['POST', "GET"]) | 53 | @app.route('/enroll', methods=['POST', "GET"]) |
... | @@ -55,10 +57,10 @@ def enroll_controller(): | ... | @@ -55,10 +57,10 @@ def enroll_controller(): |
55 | enroll_speaker = request.form['enroll_speaker'] | 57 | enroll_speaker = request.form['enroll_speaker'] |
56 | print(f.name) | 58 | print(f.name) |
57 | f.save('./myrequest_enroll.wav') | 59 | f.save('./myrequest_enroll.wav') |
58 | - extract('./myrequest_enroll.wav',enroll_speaker) | 60 | + extract('./myrequest_enroll.wav', enroll_speaker) |
59 | - new_path = '../feat_logfbank_nfilt40/test/'+enroll_speaker+'/' | 61 | + new_path = '../feat_logfbank_nfilt40/test/' + enroll_speaker + '/' |
60 | os.mkdir(new_path) | 62 | os.mkdir(new_path) |
61 | - shutil.move('./enroll.p',new_path+'enroll.p') | 63 | + shutil.move('./enroll.p', new_path + 'enroll.p') |
62 | 64 | ||
63 | try: | 65 | try: |
64 | enrollment() | 66 | enrollment() |
... | @@ -66,13 +68,11 @@ def enroll_controller(): | ... | @@ -66,13 +68,11 @@ def enroll_controller(): |
66 | return 'enroll_complete' | 68 | return 'enroll_complete' |
67 | except: | 69 | except: |
68 | return 'failed' | 70 | return 'failed' |
69 | - | ||
70 | 71 | ||
71 | #return 'post' | 72 | #return 'post' |
72 | return 'get' | 73 | return 'get' |
73 | 74 | ||
74 | 75 | ||
75 | - | ||
76 | @app.route('/verification', methods=['POST', "GET"]) | 76 | @app.route('/verification', methods=['POST', "GET"]) |
77 | def verfication_controller(): | 77 | def verfication_controller(): |
78 | if request.method == 'POST': | 78 | if request.method == 'POST': |
... | @@ -82,11 +82,12 @@ def verfication_controller(): | ... | @@ -82,11 +82,12 @@ def verfication_controller(): |
82 | f.save('./myrequest.wav') | 82 | f.save('./myrequest.wav') |
83 | extract('./myrequest.wav') | 83 | extract('./myrequest.wav') |
84 | speak, score = verification(enroll_speaker) | 84 | speak, score = verification(enroll_speaker) |
85 | - return score | 85 | + return score |
86 | 86 | ||
87 | #return 'post' | 87 | #return 'post' |
88 | return 'get' | 88 | return 'get' |
89 | 89 | ||
90 | + | ||
90 | @app.route('/identification', methods=['POST', "GET"]) | 91 | @app.route('/identification', methods=['POST', "GET"]) |
91 | def identification_controller(): | 92 | def identification_controller(): |
92 | if request.method == 'POST': | 93 | if request.method == 'POST': |
... | @@ -100,14 +101,16 @@ def identification_controller(): | ... | @@ -100,14 +101,16 @@ def identification_controller(): |
100 | #return 'post' | 101 | #return 'post' |
101 | return 'get' | 102 | return 'get' |
102 | 103 | ||
104 | + | ||
103 | @app.route('/debugger', methods=['GET']) | 105 | @app.route('/debugger', methods=['GET']) |
104 | -def debugger(): | 106 | +def debugger(): |
105 | return anything | 107 | return anything |
106 | 108 | ||
107 | -@app.route('/robots.txt',methods=['GET']) | 109 | + |
110 | +@app.route('/robots.txt', methods=['GET']) | ||
108 | def antirobot(): | 111 | def antirobot(): |
109 | return send_file('robots.txt') | 112 | return send_file('robots.txt') |
110 | 113 | ||
114 | + | ||
111 | if __name__ == '__main__': | 115 | if __name__ == '__main__': |
112 | app.run(host='0.0.0.0', port="7777", debug=True) | 116 | app.run(host='0.0.0.0', port="7777", debug=True) |
113 | - | ... | ... |
source/server/extract_feature.py
deleted
100755 → 0
1 | -import librosa | ||
2 | -import numpy as np | ||
3 | -from python_speech_features import fbank | ||
4 | -import pickle | ||
5 | -sample_rate=16000 | ||
6 | -#filename='./sunghwan/8sec2.wav' | ||
7 | - | ||
8 | -def normalize_frames(m,Scale=True): | ||
9 | - if Scale: | ||
10 | - return (m - np.mean(m, axis=0)) / (np.std(m, axis=0) + 2e-12) | ||
11 | - else: | ||
12 | - return (m - np.mean(m, axis=0)) | ||
13 | - | ||
14 | -def extract(filename,savename='test.p'): | ||
15 | - audio, sr = librosa.load(filename, sr=sample_rate, mono=True) | ||
16 | - filter_banks, energies = fbank(audio, samplerate=sample_rate, nfilt=40, winlen=0.025) | ||
17 | - filter_banks = 20 * np.log10(np.maximum(filter_banks,1e-5)) | ||
18 | - feature = normalize_frames(filter_banks, Scale=False) | ||
19 | - label = savename.split('.')[0] | ||
20 | - todump = {'feat': feature, 'label': label} | ||
21 | - with open(savename,'wb') as f: | ||
22 | - pickle.dump(todump,f) | ||
23 | - | ||
24 | - |
-
Please register or login to post a comment