Update host.py
Browse files
host.py
CHANGED
|
@@ -7,6 +7,7 @@ import librosa
|
|
| 7 |
from scipy.spatial.distance import cosine
|
| 8 |
import numpy as np
|
| 9 |
import os
|
|
|
|
| 10 |
# brew install ffmpeg
|
| 11 |
# pip install flask transformers librosa torch torchaudio
|
| 12 |
|
|
@@ -43,6 +44,15 @@ def preprocess_audio(audio_data):
|
|
| 43 |
waveform = waveform.squeeze().numpy()
|
| 44 |
return waveform
|
| 45 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 46 |
@app.route('/')
|
| 47 |
def index():
|
| 48 |
return render_template('index.html')
|
|
@@ -58,6 +68,7 @@ def chal2():
|
|
| 58 |
@app.route('/compare_audio', methods=['POST'])
|
| 59 |
def compare_audio():
|
| 60 |
try:
|
|
|
|
| 61 |
# Get the recorded audio file from the frontend
|
| 62 |
recorded_audio = request.files['audio_data']
|
| 63 |
|
|
@@ -68,22 +79,20 @@ def compare_audio():
|
|
| 68 |
embeddings_normalized = torch.nn.functional.normalize(embeddings, dim=-1).cpu()
|
| 69 |
|
| 70 |
# Load and preprocess MP3 file for comparison
|
| 71 |
-
|
| 72 |
-
mp3_inputs = feature_extractor(mp3_audio, return_tensors="pt")
|
| 73 |
-
mp3_embeddings = model(**mp3_inputs).embeddings
|
| 74 |
-
mp3_embeddings_normalized = torch.nn.functional.normalize(mp3_embeddings, dim=-1).cpu()
|
| 75 |
|
| 76 |
# Calculate cosine similarity
|
| 77 |
cosine_sim = torch.nn.CosineSimilarity(dim=-1)
|
| 78 |
similarity = cosine_sim(embeddings_normalized, mp3_embeddings_normalized).item()
|
| 79 |
|
| 80 |
similarity = round(similarity, 3)
|
|
|
|
| 81 |
|
| 82 |
threshold = 0.89 # Adjust the threshold as needed
|
| 83 |
if similarity < threshold:
|
| 84 |
-
result = "Authorization Failed! " + str(similarity) + " < 0.890<br>Do your best Terminator impression"
|
| 85 |
else:
|
| 86 |
-
result = "Good job! Match: " + str(similarity) + "<br>" + flag1 + "<br><a href='/chal2'>Click here to open the next challenge</a>"
|
| 87 |
|
| 88 |
return jsonify({'result': result})
|
| 89 |
except Exception as e:
|
|
@@ -118,15 +127,18 @@ def preprocess_audio2(audio_bytes):
|
|
| 118 |
|
| 119 |
return waveform
|
| 120 |
|
|
|
|
|
|
|
| 121 |
@app.route('/compare_audio2', methods=['POST'])
|
| 122 |
def compare_audio2():
|
| 123 |
try:
|
| 124 |
recorded_audio = request.files['audio_data'].read()
|
| 125 |
-
mp3_audio = open(mp3_file_path2, 'rb').read()
|
| 126 |
|
| 127 |
# Compare similarity between audio
|
| 128 |
mfcc1 = extract_mfcc(recorded_audio)
|
| 129 |
-
mfcc2 = extract_mfcc(mp3_audio)
|
|
|
|
| 130 |
similarity = 1 - cosine(np.mean(mfcc1, axis=1), np.mean(mfcc2, axis=1))
|
| 131 |
similarity = round(similarity, 3)
|
| 132 |
if similarity < 0.940:
|
|
@@ -140,4 +152,4 @@ def compare_audio2():
|
|
| 140 |
return jsonify({'error': 'An error occurred during audio comparison. Im fragile please dont abuse.'})
|
| 141 |
|
| 142 |
if __name__ == '__main__':
|
| 143 |
-
app.run(host="0.0.0.0", port=8080, debug=True)
|
|
|
|
| 7 |
from scipy.spatial.distance import cosine
|
| 8 |
import numpy as np
|
| 9 |
import os
|
| 10 |
+
import time
|
| 11 |
# brew install ffmpeg
|
| 12 |
# pip install flask transformers librosa torch torchaudio
|
| 13 |
|
|
|
|
| 44 |
waveform = waveform.squeeze().numpy()
|
| 45 |
return waveform
|
| 46 |
|
| 47 |
+
|
| 48 |
+
# Preload expected audio
|
| 49 |
+
mp3_audio = preprocess_audio(mp3_file_path)
|
| 50 |
+
mp3_inputs = feature_extractor(mp3_audio, return_tensors="pt")
|
| 51 |
+
mp3_embeddings = model(**mp3_inputs).embeddings
|
| 52 |
+
mp3_embeddings_normalized = torch.nn.functional.normalize(mp3_embeddings, dim=-1).cpu()
|
| 53 |
+
|
| 54 |
+
mp3_audio2 = open(mp3_file_path2, 'rb').read()
|
| 55 |
+
|
| 56 |
@app.route('/')
|
| 57 |
def index():
|
| 58 |
return render_template('index.html')
|
|
|
|
| 68 |
@app.route('/compare_audio', methods=['POST'])
|
| 69 |
def compare_audio():
|
| 70 |
try:
|
| 71 |
+
start_time = time.time()
|
| 72 |
# Get the recorded audio file from the frontend
|
| 73 |
recorded_audio = request.files['audio_data']
|
| 74 |
|
|
|
|
| 79 |
embeddings_normalized = torch.nn.functional.normalize(embeddings, dim=-1).cpu()
|
| 80 |
|
| 81 |
# Load and preprocess MP3 file for comparison
|
| 82 |
+
global mp3_embeddings_normalized
|
|
|
|
|
|
|
|
|
|
| 83 |
|
| 84 |
# Calculate cosine similarity
|
| 85 |
cosine_sim = torch.nn.CosineSimilarity(dim=-1)
|
| 86 |
similarity = cosine_sim(embeddings_normalized, mp3_embeddings_normalized).item()
|
| 87 |
|
| 88 |
similarity = round(similarity, 3)
|
| 89 |
+
end = time.time()-start_time
|
| 90 |
|
| 91 |
threshold = 0.89 # Adjust the threshold as needed
|
| 92 |
if similarity < threshold:
|
| 93 |
+
result = "Authorization Failed! " + str(similarity) + " < 0.890"+" in "+str(round(end,3))+"s"+"<br>Do your best Terminator impression"
|
| 94 |
else:
|
| 95 |
+
result = "Good job! Match: " + str(similarity) + "<br>" + flag1 + "<br><a href='/chal2'>Click here to open the next challenge</a>"+"<br>processed in "+str(round(end,3))+"s"
|
| 96 |
|
| 97 |
return jsonify({'result': result})
|
| 98 |
except Exception as e:
|
|
|
|
| 127 |
|
| 128 |
return waveform
|
| 129 |
|
| 130 |
+
mfcc2 = extract_mfcc(mp3_audio2)
|
| 131 |
+
|
| 132 |
@app.route('/compare_audio2', methods=['POST'])
|
| 133 |
def compare_audio2():
|
| 134 |
try:
|
| 135 |
recorded_audio = request.files['audio_data'].read()
|
| 136 |
+
#mp3_audio = open(mp3_file_path2, 'rb').read()
|
| 137 |
|
| 138 |
# Compare similarity between audio
|
| 139 |
mfcc1 = extract_mfcc(recorded_audio)
|
| 140 |
+
#mfcc2 = extract_mfcc(mp3_audio)
|
| 141 |
+
global mfcc2
|
| 142 |
similarity = 1 - cosine(np.mean(mfcc1, axis=1), np.mean(mfcc2, axis=1))
|
| 143 |
similarity = round(similarity, 3)
|
| 144 |
if similarity < 0.940:
|
|
|
|
| 152 |
return jsonify({'error': 'An error occurred during audio comparison. Im fragile please dont abuse.'})
|
| 153 |
|
| 154 |
if __name__ == '__main__':
|
| 155 |
+
app.run(host="0.0.0.0", port=8080, debug=True)
|