kowalsky commited on
Commit
3d055a1
·
1 Parent(s): 5b29ccc

first commit

Browse files
Files changed (10) hide show
  1. Dockerfile +30 -0
  2. README.md +4 -4
  3. header.webm +0 -0
  4. main.py +154 -0
  5. models/scaler.pkl +3 -0
  6. models/xgboost.json +0 -0
  7. requirements.txt +0 -0
  8. static/i.jpg +0 -0
  9. templates/index.html +207 -0
  10. test/test.ipynb +2320 -0
Dockerfile ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ FROM python:3.12-slim
2
+
3
+ # Set environment variables to prevent Python from writing pyc files to disk
4
+ # and to force stdout and stderr streams to be unbuffered
5
+ ENV PYTHONDONTWRITEBYTECODE=1
6
+ ENV PYTHONUNBUFFERED=1
7
+
8
+ # Install system dependencies
9
+ RUN apt-get update && apt-get install -y \
10
+ ffmpeg \
11
+ gcc \
12
+ libasound-dev \
13
+ portaudio19-dev \
14
+ && rm -rf /var/lib/apt/lists/*
15
+
16
+ # Create and set the working directory
17
+ WORKDIR /app
18
+
19
+ # Copy the requirements.txt file and install the Python dependencies
20
+ COPY requirements.txt .
21
+ RUN pip install --no-cache-dir -r requirements.txt
22
+
23
+ # Copy the rest of the application code
24
+ COPY . .
25
+
26
+ # Expose the port that the FastAPI app runs on
27
+ EXPOSE 7860
28
+
29
+ # Run the FastAPI application with Uvicorn
30
+ CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "7860"]
README.md CHANGED
@@ -1,8 +1,8 @@
1
  ---
2
- title: Fake Audio Detection
3
- emoji: 💻
4
- colorFrom: yellow
5
- colorTo: blue
6
  sdk: docker
7
  pinned: false
8
  ---
 
1
  ---
2
+ title: Fake Detection
3
+ emoji: 🔥
4
+ colorFrom: green
5
+ colorTo: red
6
  sdk: docker
7
  pinned: false
8
  ---
header.webm ADDED
Binary file (18.3 kB). View file
 
main.py ADDED
@@ -0,0 +1,154 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ os.environ['NUMBA_CACHE_DIR'] = '/tmp/'
3
+
4
+ from fastapi import FastAPI, WebSocket, WebSocketDisconnect, Request
5
+ from fastapi.middleware.cors import CORSMiddleware
6
+ from fastapi.responses import JSONResponse, HTMLResponse
7
+ from fastapi.staticfiles import StaticFiles
8
+ import numpy as np
9
+ import librosa
10
+ import soundfile as sf
11
+ import xgboost as xgb
12
+ import uvicorn
13
+ import logging
14
+ import pickle
15
+ import io
16
+ from pydub import AudioSegment
17
+ from typing import List
18
+ from collections import deque
19
+
20
+ logging.basicConfig(level=logging.INFO)
21
+ logger = logging.getLogger(__name__)
22
+
23
+ app = FastAPI()
24
+
25
+ app.mount("/static", StaticFiles(directory="static"), name="static")
26
+
27
+ @app.get("/", response_class=HTMLResponse)
28
+ async def get(request: Request):
29
+ logger.info("Serving the index page")
30
+ with open("templates/index.html") as f:
31
+ html_content = f.read()
32
+ return HTMLResponse(content=html_content, status_code=200)
33
+
34
+ @app.get("/health")
35
+ def health_check():
36
+ return {"status": "ok"}
37
+
38
+ app.add_middleware(
39
+ CORSMiddleware,
40
+ allow_origins=["*"],
41
+ allow_credentials=True,
42
+ allow_methods=["*"],
43
+ allow_headers=["*"],
44
+ )
45
+
46
+ with open("header.webm", 'rb') as source_file:
47
+ header_data = source_file.read(1024)
48
+
49
+ is_detecting = False
50
+
51
+ model = xgb.XGBClassifier()
52
+ model.load_model("models/xgboost.json")
53
+
54
+ with open("models/scaler.pkl", "rb") as file:
55
+ scaler = pickle.load(file)
56
+
57
+ q = deque()
58
+
59
+ class ConnectionManager:
60
+ def __init__(self):
61
+ self.active_connections: List[WebSocket] = []
62
+
63
+ async def connect(self, websocket: WebSocket):
64
+ await websocket.accept()
65
+ self.active_connections.append(websocket)
66
+
67
+ def disconnect(self, websocket: WebSocket):
68
+ self.active_connections.remove(websocket)
69
+
70
+ async def send_message(self, websocket: WebSocket, message: str):
71
+ await websocket.send_text(message)
72
+
73
+ manager = ConnectionManager()
74
+
75
+ def extract_features(audio, sr=16000):
76
+
77
+ target_duration = 5
78
+ target_samples = int(target_duration * sr)
79
+
80
+ # Get the current number of samples
81
+ current_samples = len(audio)
82
+
83
+ # If the audio is shorter than 5 seconds, pad with zeros
84
+ if current_samples < target_samples:
85
+ padding_samples = target_samples - current_samples
86
+ audio = np.concatenate([audio, np.zeros(padding_samples)])
87
+ else:
88
+ audio = audio[:target_samples]
89
+ mfcc = librosa.feature.mfcc(y=audio, sr=sr, n_mfcc=13).flatten()
90
+ mfcc = np.array(mfcc)
91
+
92
+ return mfcc
93
+
94
+ async def process_audio_data(audio_data):
95
+ try:
96
+ full_audio_data = header_data + audio_data
97
+
98
+ audio_segment = AudioSegment.from_file(io.BytesIO(full_audio_data), format="webm")
99
+ wav_io = io.BytesIO()
100
+ audio_segment.export(wav_io, format="wav")
101
+ wav_io.seek(0)
102
+ audio, sr = sf.read(wav_io, dtype='float32')
103
+ except Exception as e:
104
+ logger.error(f"Failed to read audio data: {e}")
105
+ return
106
+
107
+ if audio.ndim > 1: # If audio has more than one channel, average them
108
+ audio = np.mean(audio, axis=1)
109
+
110
+ features = extract_features(audio)
111
+ features = scaler.transform(features.reshape(1, -1))
112
+ # features = features.reshape(1, -1)
113
+ prediction = model.predict(features)
114
+ is_fake = prediction[0]
115
+ result = 'fake' if is_fake else 'real'
116
+ q.append(is_fake)
117
+ if len(q) > 2:
118
+ if sum(q) == 2:
119
+ for connection in manager.active_connections:
120
+ await manager.send_message(connection, "global-fake")
121
+ q.clear()
122
+ else:
123
+ q.popleft()
124
+
125
+ return result
126
+
127
+ @app.post("/start_detection")
128
+ async def start_detection():
129
+ global is_detecting
130
+
131
+ if not is_detecting:
132
+ is_detecting = True
133
+ return JSONResponse(content={'status': 'detection_started'})
134
+
135
+ @app.post("/stop_detection")
136
+ async def stop_detection():
137
+ global is_detecting
138
+ is_detecting = False
139
+ return JSONResponse(content={'status': 'detection_stopped'})
140
+
141
+ @app.websocket("/ws")
142
+ async def websocket_endpoint(websocket: WebSocket):
143
+ await manager.connect(websocket)
144
+ try:
145
+ while True:
146
+ data = await websocket.receive_bytes()
147
+ result = await process_audio_data(data)
148
+ if result:
149
+ await manager.send_message(websocket, result)
150
+ except WebSocketDisconnect:
151
+ manager.disconnect(websocket)
152
+
153
+ if __name__ == '__main__':
154
+ uvicorn.run(app, host="0.0.0.0", port=7860)
models/scaler.pkl ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:5e5a34892253975cd5d13097111bd8c11451be547358b3422c9b643bc22f2bd7
3
+ size 49446
models/xgboost.json ADDED
The diff for this file is too large to render. See raw diff
 
requirements.txt ADDED
Binary file (2.74 kB). View file
 
static/i.jpg ADDED
templates/index.html ADDED
@@ -0,0 +1,207 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Fake Audio Detection</title>
7
+ <style>
8
+ body {
9
+ font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
10
+ background: url('/static/i.jpg') no-repeat center center fixed;
11
+ background-size: cover;
12
+ color: #f0f0f0;
13
+ display: flex;
14
+ flex-direction: column;
15
+ align-items: center;
16
+ justify-content: center;
17
+ height: 100vh;
18
+ margin: 0;
19
+ }
20
+ h1 {
21
+ margin-bottom: 20px;
22
+ }
23
+ #buttons {
24
+ display: flex;
25
+ gap: 10px;
26
+ margin-bottom: 20px;
27
+ }
28
+ button {
29
+ padding: 10px 20px;
30
+ font-size: 16px;
31
+ cursor: pointer;
32
+ border: none;
33
+ border-radius: 5px;
34
+ background-color: #007BFF;
35
+ color: #fff;
36
+ transition: background-color 0.3s;
37
+ }
38
+ button:hover {
39
+ background-color: #0056b3;
40
+ }
41
+ button:disabled {
42
+ background-color: #555;
43
+ cursor: not-allowed;
44
+ }
45
+ #console {
46
+ width: 80%;
47
+ max-width: 600px;
48
+ border: 1px solid #444;
49
+ border-radius: 5px;
50
+ padding: 10px;
51
+ background-color: rgba(30, 30, 30, 0.9);
52
+ height: 200px;
53
+ overflow-y: scroll;
54
+ }
55
+ .log {
56
+ margin: 0;
57
+ padding: 5px;
58
+ border-bottom: 1px solid #333;
59
+ }
60
+ .log.real {
61
+ color: green;
62
+ }
63
+ .log.fake {
64
+ color: red;
65
+ }
66
+ #notification {
67
+ position: fixed;
68
+ bottom: 50%;
69
+ left: 50%;
70
+ transform: translateX(-50%);
71
+ background-color: red;
72
+ color: white;
73
+ padding: 10px 20px;
74
+ border-radius: 5px;
75
+ display: none;
76
+ }
77
+ </style>
78
+ </head>
79
+ <body>
80
+ <h1>Fake Audio Detection</h1>
81
+ <div id="buttons">
82
+ <button id="startButton">Start Detection</button>
83
+ <button id="stopButton" disabled>Stop Detection</button>
84
+ </div>
85
+
86
+ <div id="console"></div>
87
+ <div id="notification">Fake Call Detected!</div>
88
+
89
+ <script>
90
+ let isDetecting = false;
91
+ const startButton = document.getElementById('startButton');
92
+ const stopButton = document.getElementById('stopButton');
93
+ const consoleDiv = document.getElementById('console');
94
+ const notification = document.getElementById('notification');
95
+ let websocket = null;
96
+ let mediaRecorder = null;
97
+
98
+ function logMessage(message, type) {
99
+ const log = document.createElement('p');
100
+ log.className = `log ${type}`;
101
+ log.textContent = message;
102
+ consoleDiv.appendChild(log);
103
+ consoleDiv.scrollTop = consoleDiv.scrollHeight;
104
+ }
105
+
106
+ function showNotification() {
107
+ notification.style.display = 'block';
108
+ setTimeout(() => {
109
+ notification.style.display = 'none';
110
+ }, 10000)
111
+ }
112
+
113
+ async function startDetection() {
114
+ if (isDetecting) {
115
+ logMessage('Detection is already running...', 'info');
116
+ return;
117
+ }
118
+ isDetecting = true;
119
+ logMessage('Starting detection...', 'info');
120
+ startButton.disabled = true;
121
+ stopButton.disabled = false;
122
+
123
+ try {
124
+ const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
125
+ logMessage('Microphone access granted', 'info');
126
+
127
+ mediaRecorder = new MediaRecorder(stream, { mimeType: 'audio/webm' });
128
+ mediaRecorder.ondataavailable = function(event) {
129
+ if (websocket && websocket.readyState === WebSocket.OPEN) {
130
+ websocket.send(event.data);
131
+ }
132
+ };
133
+
134
+ const response = await fetch(`${window.location.origin}/start_detection`, {
135
+ //const response = await fetch(`http://localhost:7860/start_detection`, {
136
+ method: 'POST',
137
+ });
138
+
139
+ if (!response.ok) {
140
+ throw new Error('Network response was not ok');
141
+ }
142
+
143
+ const result = await response.json();
144
+ logMessage(`Status: ${result.status}`, 'info');
145
+
146
+ websocket = new WebSocket(`wss://${window.location.host}/ws`);
147
+ // websocket = new WebSocket(`ws://localhost:7860/ws`);
148
+ websocket.onmessage = async function(event) {
149
+ const data = event.data;
150
+ if (data === 'global-fake') {
151
+ logMessage(`The detection is being stopped, the audio is fake`);
152
+ showNotification();
153
+ await stopDetection();
154
+ } else {
155
+ logMessage(`Detected ${data} audio`, data);
156
+ }
157
+ };
158
+ websocket.onclose = function() {
159
+ logMessage('WebSocket connection closed', 'info');
160
+ };
161
+
162
+ mediaRecorder.start(3000); // Start recording with 3-second intervals
163
+ } catch (error) {
164
+ logMessage(`Error: ${error.message}`, 'error');
165
+ }
166
+ }
167
+
168
+ async function stopDetection() {
169
+ if (!isDetecting) {
170
+ logMessage('Detection is not running...', 'info');
171
+ return;
172
+ }
173
+ isDetecting = false;
174
+ logMessage('Stopping detection...', 'info');
175
+ startButton.disabled = false;
176
+ stopButton.disabled = true;
177
+
178
+ try {
179
+ if (mediaRecorder && mediaRecorder.state === 'recording') {
180
+ mediaRecorder.stop();
181
+ }
182
+
183
+ const response = await fetch(`${window.location.origin}/stop_detection`, {
184
+ method: 'POST',
185
+ });
186
+
187
+ if (!response.ok) {
188
+ throw new Error('Network response was not ok');
189
+ }
190
+
191
+ const result = await response.json();
192
+ logMessage(`Status: ${result.status}`, 'info');
193
+
194
+ if (websocket) {
195
+ websocket.close();
196
+ websocket = null;
197
+ }
198
+ } catch (error) {
199
+ logMessage(`Error: ${error.message}`, 'error');
200
+ }
201
+ }
202
+
203
+ startButton.addEventListener('click', startDetection);
204
+ stopButton.addEventListener('click', stopDetection);
205
+ </script>
206
+ </body>
207
+ </html>
test/test.ipynb ADDED
@@ -0,0 +1,2320 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "code",
5
+ "execution_count": 1,
6
+ "metadata": {},
7
+ "outputs": [],
8
+ "source": [
9
+ "import xgboost as xgb\n",
10
+ "import numpy as np\n",
11
+ "import librosa"
12
+ ]
13
+ },
14
+ {
15
+ "cell_type": "code",
16
+ "execution_count": 2,
17
+ "metadata": {},
18
+ "outputs": [],
19
+ "source": [
20
+ "model = xgb.XGBClassifier()\n",
21
+ "model.load_model(\"xgboost.json\")"
22
+ ]
23
+ },
24
+ {
25
+ "cell_type": "code",
26
+ "execution_count": 3,
27
+ "metadata": {},
28
+ "outputs": [
29
+ {
30
+ "name": "stderr",
31
+ "output_type": "stream",
32
+ "text": [
33
+ "c:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\sklearn\\base.py:376: InconsistentVersionWarning: Trying to unpickle estimator StandardScaler from version 1.5.1 when using version 1.4.2. This might lead to breaking code or invalid results. Use at your own risk. For more info please refer to:\n",
34
+ "https://scikit-learn.org/stable/model_persistence.html#security-maintainability-limitations\n",
35
+ " warnings.warn(\n"
36
+ ]
37
+ }
38
+ ],
39
+ "source": [
40
+ "import pickle\n",
41
+ "\n",
42
+ "with open(\"scaler.pkl\", \"rb\") as file:\n",
43
+ " scaler = pickle.load(file)"
44
+ ]
45
+ },
46
+ {
47
+ "cell_type": "code",
48
+ "execution_count": 4,
49
+ "metadata": {},
50
+ "outputs": [
51
+ {
52
+ "data": {
53
+ "text/html": [
54
+ "<style>#sk-container-id-1 {\n",
55
+ " /* Definition of color scheme common for light and dark mode */\n",
56
+ " --sklearn-color-text: black;\n",
57
+ " --sklearn-color-line: gray;\n",
58
+ " /* Definition of color scheme for unfitted estimators */\n",
59
+ " --sklearn-color-unfitted-level-0: #fff5e6;\n",
60
+ " --sklearn-color-unfitted-level-1: #f6e4d2;\n",
61
+ " --sklearn-color-unfitted-level-2: #ffe0b3;\n",
62
+ " --sklearn-color-unfitted-level-3: chocolate;\n",
63
+ " /* Definition of color scheme for fitted estimators */\n",
64
+ " --sklearn-color-fitted-level-0: #f0f8ff;\n",
65
+ " --sklearn-color-fitted-level-1: #d4ebff;\n",
66
+ " --sklearn-color-fitted-level-2: #b3dbfd;\n",
67
+ " --sklearn-color-fitted-level-3: cornflowerblue;\n",
68
+ "\n",
69
+ " /* Specific color for light theme */\n",
70
+ " --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
71
+ " --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
72
+ " --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
73
+ " --sklearn-color-icon: #696969;\n",
74
+ "\n",
75
+ " @media (prefers-color-scheme: dark) {\n",
76
+ " /* Redefinition of color scheme for dark theme */\n",
77
+ " --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
78
+ " --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
79
+ " --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
80
+ " --sklearn-color-icon: #878787;\n",
81
+ " }\n",
82
+ "}\n",
83
+ "\n",
84
+ "#sk-container-id-1 {\n",
85
+ " color: var(--sklearn-color-text);\n",
86
+ "}\n",
87
+ "\n",
88
+ "#sk-container-id-1 pre {\n",
89
+ " padding: 0;\n",
90
+ "}\n",
91
+ "\n",
92
+ "#sk-container-id-1 input.sk-hidden--visually {\n",
93
+ " border: 0;\n",
94
+ " clip: rect(1px 1px 1px 1px);\n",
95
+ " clip: rect(1px, 1px, 1px, 1px);\n",
96
+ " height: 1px;\n",
97
+ " margin: -1px;\n",
98
+ " overflow: hidden;\n",
99
+ " padding: 0;\n",
100
+ " position: absolute;\n",
101
+ " width: 1px;\n",
102
+ "}\n",
103
+ "\n",
104
+ "#sk-container-id-1 div.sk-dashed-wrapped {\n",
105
+ " border: 1px dashed var(--sklearn-color-line);\n",
106
+ " margin: 0 0.4em 0.5em 0.4em;\n",
107
+ " box-sizing: border-box;\n",
108
+ " padding-bottom: 0.4em;\n",
109
+ " background-color: var(--sklearn-color-background);\n",
110
+ "}\n",
111
+ "\n",
112
+ "#sk-container-id-1 div.sk-container {\n",
113
+ " /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
114
+ " but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
115
+ " so we also need the `!important` here to be able to override the\n",
116
+ " default hidden behavior on the sphinx rendered scikit-learn.org.\n",
117
+ " See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
118
+ " display: inline-block !important;\n",
119
+ " position: relative;\n",
120
+ "}\n",
121
+ "\n",
122
+ "#sk-container-id-1 div.sk-text-repr-fallback {\n",
123
+ " display: none;\n",
124
+ "}\n",
125
+ "\n",
126
+ "div.sk-parallel-item,\n",
127
+ "div.sk-serial,\n",
128
+ "div.sk-item {\n",
129
+ " /* draw centered vertical line to link estimators */\n",
130
+ " background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
131
+ " background-size: 2px 100%;\n",
132
+ " background-repeat: no-repeat;\n",
133
+ " background-position: center center;\n",
134
+ "}\n",
135
+ "\n",
136
+ "/* Parallel-specific style estimator block */\n",
137
+ "\n",
138
+ "#sk-container-id-1 div.sk-parallel-item::after {\n",
139
+ " content: \"\";\n",
140
+ " width: 100%;\n",
141
+ " border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
142
+ " flex-grow: 1;\n",
143
+ "}\n",
144
+ "\n",
145
+ "#sk-container-id-1 div.sk-parallel {\n",
146
+ " display: flex;\n",
147
+ " align-items: stretch;\n",
148
+ " justify-content: center;\n",
149
+ " background-color: var(--sklearn-color-background);\n",
150
+ " position: relative;\n",
151
+ "}\n",
152
+ "\n",
153
+ "#sk-container-id-1 div.sk-parallel-item {\n",
154
+ " display: flex;\n",
155
+ " flex-direction: column;\n",
156
+ "}\n",
157
+ "\n",
158
+ "#sk-container-id-1 div.sk-parallel-item:first-child::after {\n",
159
+ " align-self: flex-end;\n",
160
+ " width: 50%;\n",
161
+ "}\n",
162
+ "\n",
163
+ "#sk-container-id-1 div.sk-parallel-item:last-child::after {\n",
164
+ " align-self: flex-start;\n",
165
+ " width: 50%;\n",
166
+ "}\n",
167
+ "\n",
168
+ "#sk-container-id-1 div.sk-parallel-item:only-child::after {\n",
169
+ " width: 0;\n",
170
+ "}\n",
171
+ "\n",
172
+ "/* Serial-specific style estimator block */\n",
173
+ "\n",
174
+ "#sk-container-id-1 div.sk-serial {\n",
175
+ " display: flex;\n",
176
+ " flex-direction: column;\n",
177
+ " align-items: center;\n",
178
+ " background-color: var(--sklearn-color-background);\n",
179
+ " padding-right: 1em;\n",
180
+ " padding-left: 1em;\n",
181
+ "}\n",
182
+ "\n",
183
+ "\n",
184
+ "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
185
+ "clickable and can be expanded/collapsed.\n",
186
+ "- Pipeline and ColumnTransformer use this feature and define the default style\n",
187
+ "- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
188
+ "*/\n",
189
+ "\n",
190
+ "/* Pipeline and ColumnTransformer style (default) */\n",
191
+ "\n",
192
+ "#sk-container-id-1 div.sk-toggleable {\n",
193
+ " /* Default theme specific background. It is overwritten whether we have a\n",
194
+ " specific estimator or a Pipeline/ColumnTransformer */\n",
195
+ " background-color: var(--sklearn-color-background);\n",
196
+ "}\n",
197
+ "\n",
198
+ "/* Toggleable label */\n",
199
+ "#sk-container-id-1 label.sk-toggleable__label {\n",
200
+ " cursor: pointer;\n",
201
+ " display: block;\n",
202
+ " width: 100%;\n",
203
+ " margin-bottom: 0;\n",
204
+ " padding: 0.5em;\n",
205
+ " box-sizing: border-box;\n",
206
+ " text-align: center;\n",
207
+ "}\n",
208
+ "\n",
209
+ "#sk-container-id-1 label.sk-toggleable__label-arrow:before {\n",
210
+ " /* Arrow on the left of the label */\n",
211
+ " content: \"▸\";\n",
212
+ " float: left;\n",
213
+ " margin-right: 0.25em;\n",
214
+ " color: var(--sklearn-color-icon);\n",
215
+ "}\n",
216
+ "\n",
217
+ "#sk-container-id-1 label.sk-toggleable__label-arrow:hover:before {\n",
218
+ " color: var(--sklearn-color-text);\n",
219
+ "}\n",
220
+ "\n",
221
+ "/* Toggleable content - dropdown */\n",
222
+ "\n",
223
+ "#sk-container-id-1 div.sk-toggleable__content {\n",
224
+ " max-height: 0;\n",
225
+ " max-width: 0;\n",
226
+ " overflow: hidden;\n",
227
+ " text-align: left;\n",
228
+ " /* unfitted */\n",
229
+ " background-color: var(--sklearn-color-unfitted-level-0);\n",
230
+ "}\n",
231
+ "\n",
232
+ "#sk-container-id-1 div.sk-toggleable__content.fitted {\n",
233
+ " /* fitted */\n",
234
+ " background-color: var(--sklearn-color-fitted-level-0);\n",
235
+ "}\n",
236
+ "\n",
237
+ "#sk-container-id-1 div.sk-toggleable__content pre {\n",
238
+ " margin: 0.2em;\n",
239
+ " border-radius: 0.25em;\n",
240
+ " color: var(--sklearn-color-text);\n",
241
+ " /* unfitted */\n",
242
+ " background-color: var(--sklearn-color-unfitted-level-0);\n",
243
+ "}\n",
244
+ "\n",
245
+ "#sk-container-id-1 div.sk-toggleable__content.fitted pre {\n",
246
+ " /* unfitted */\n",
247
+ " background-color: var(--sklearn-color-fitted-level-0);\n",
248
+ "}\n",
249
+ "\n",
250
+ "#sk-container-id-1 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
251
+ " /* Expand drop-down */\n",
252
+ " max-height: 200px;\n",
253
+ " max-width: 100%;\n",
254
+ " overflow: auto;\n",
255
+ "}\n",
256
+ "\n",
257
+ "#sk-container-id-1 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
258
+ " content: \"▾\";\n",
259
+ "}\n",
260
+ "\n",
261
+ "/* Pipeline/ColumnTransformer-specific style */\n",
262
+ "\n",
263
+ "#sk-container-id-1 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
264
+ " color: var(--sklearn-color-text);\n",
265
+ " background-color: var(--sklearn-color-unfitted-level-2);\n",
266
+ "}\n",
267
+ "\n",
268
+ "#sk-container-id-1 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
269
+ " background-color: var(--sklearn-color-fitted-level-2);\n",
270
+ "}\n",
271
+ "\n",
272
+ "/* Estimator-specific style */\n",
273
+ "\n",
274
+ "/* Colorize estimator box */\n",
275
+ "#sk-container-id-1 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
276
+ " /* unfitted */\n",
277
+ " background-color: var(--sklearn-color-unfitted-level-2);\n",
278
+ "}\n",
279
+ "\n",
280
+ "#sk-container-id-1 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
281
+ " /* fitted */\n",
282
+ " background-color: var(--sklearn-color-fitted-level-2);\n",
283
+ "}\n",
284
+ "\n",
285
+ "#sk-container-id-1 div.sk-label label.sk-toggleable__label,\n",
286
+ "#sk-container-id-1 div.sk-label label {\n",
287
+ " /* The background is the default theme color */\n",
288
+ " color: var(--sklearn-color-text-on-default-background);\n",
289
+ "}\n",
290
+ "\n",
291
+ "/* On hover, darken the color of the background */\n",
292
+ "#sk-container-id-1 div.sk-label:hover label.sk-toggleable__label {\n",
293
+ " color: var(--sklearn-color-text);\n",
294
+ " background-color: var(--sklearn-color-unfitted-level-2);\n",
295
+ "}\n",
296
+ "\n",
297
+ "/* Label box, darken color on hover, fitted */\n",
298
+ "#sk-container-id-1 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
299
+ " color: var(--sklearn-color-text);\n",
300
+ " background-color: var(--sklearn-color-fitted-level-2);\n",
301
+ "}\n",
302
+ "\n",
303
+ "/* Estimator label */\n",
304
+ "\n",
305
+ "#sk-container-id-1 div.sk-label label {\n",
306
+ " font-family: monospace;\n",
307
+ " font-weight: bold;\n",
308
+ " display: inline-block;\n",
309
+ " line-height: 1.2em;\n",
310
+ "}\n",
311
+ "\n",
312
+ "#sk-container-id-1 div.sk-label-container {\n",
313
+ " text-align: center;\n",
314
+ "}\n",
315
+ "\n",
316
+ "/* Estimator-specific */\n",
317
+ "#sk-container-id-1 div.sk-estimator {\n",
318
+ " font-family: monospace;\n",
319
+ " border: 1px dotted var(--sklearn-color-border-box);\n",
320
+ " border-radius: 0.25em;\n",
321
+ " box-sizing: border-box;\n",
322
+ " margin-bottom: 0.5em;\n",
323
+ " /* unfitted */\n",
324
+ " background-color: var(--sklearn-color-unfitted-level-0);\n",
325
+ "}\n",
326
+ "\n",
327
+ "#sk-container-id-1 div.sk-estimator.fitted {\n",
328
+ " /* fitted */\n",
329
+ " background-color: var(--sklearn-color-fitted-level-0);\n",
330
+ "}\n",
331
+ "\n",
332
+ "/* on hover */\n",
333
+ "#sk-container-id-1 div.sk-estimator:hover {\n",
334
+ " /* unfitted */\n",
335
+ " background-color: var(--sklearn-color-unfitted-level-2);\n",
336
+ "}\n",
337
+ "\n",
338
+ "#sk-container-id-1 div.sk-estimator.fitted:hover {\n",
339
+ " /* fitted */\n",
340
+ " background-color: var(--sklearn-color-fitted-level-2);\n",
341
+ "}\n",
342
+ "\n",
343
+ "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
344
+ "\n",
345
+ "/* Common style for \"i\" and \"?\" */\n",
346
+ "\n",
347
+ ".sk-estimator-doc-link,\n",
348
+ "a:link.sk-estimator-doc-link,\n",
349
+ "a:visited.sk-estimator-doc-link {\n",
350
+ " float: right;\n",
351
+ " font-size: smaller;\n",
352
+ " line-height: 1em;\n",
353
+ " font-family: monospace;\n",
354
+ " background-color: var(--sklearn-color-background);\n",
355
+ " border-radius: 1em;\n",
356
+ " height: 1em;\n",
357
+ " width: 1em;\n",
358
+ " text-decoration: none !important;\n",
359
+ " margin-left: 1ex;\n",
360
+ " /* unfitted */\n",
361
+ " border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
362
+ " color: var(--sklearn-color-unfitted-level-1);\n",
363
+ "}\n",
364
+ "\n",
365
+ ".sk-estimator-doc-link.fitted,\n",
366
+ "a:link.sk-estimator-doc-link.fitted,\n",
367
+ "a:visited.sk-estimator-doc-link.fitted {\n",
368
+ " /* fitted */\n",
369
+ " border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
370
+ " color: var(--sklearn-color-fitted-level-1);\n",
371
+ "}\n",
372
+ "\n",
373
+ "/* On hover */\n",
374
+ "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
375
+ ".sk-estimator-doc-link:hover,\n",
376
+ "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
377
+ ".sk-estimator-doc-link:hover {\n",
378
+ " /* unfitted */\n",
379
+ " background-color: var(--sklearn-color-unfitted-level-3);\n",
380
+ " color: var(--sklearn-color-background);\n",
381
+ " text-decoration: none;\n",
382
+ "}\n",
383
+ "\n",
384
+ "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
385
+ ".sk-estimator-doc-link.fitted:hover,\n",
386
+ "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
387
+ ".sk-estimator-doc-link.fitted:hover {\n",
388
+ " /* fitted */\n",
389
+ " background-color: var(--sklearn-color-fitted-level-3);\n",
390
+ " color: var(--sklearn-color-background);\n",
391
+ " text-decoration: none;\n",
392
+ "}\n",
393
+ "\n",
394
+ "/* Span, style for the box shown on hovering the info icon */\n",
395
+ ".sk-estimator-doc-link span {\n",
396
+ " display: none;\n",
397
+ " z-index: 9999;\n",
398
+ " position: relative;\n",
399
+ " font-weight: normal;\n",
400
+ " right: .2ex;\n",
401
+ " padding: .5ex;\n",
402
+ " margin: .5ex;\n",
403
+ " width: min-content;\n",
404
+ " min-width: 20ex;\n",
405
+ " max-width: 50ex;\n",
406
+ " color: var(--sklearn-color-text);\n",
407
+ " box-shadow: 2pt 2pt 4pt #999;\n",
408
+ " /* unfitted */\n",
409
+ " background: var(--sklearn-color-unfitted-level-0);\n",
410
+ " border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
411
+ "}\n",
412
+ "\n",
413
+ ".sk-estimator-doc-link.fitted span {\n",
414
+ " /* fitted */\n",
415
+ " background: var(--sklearn-color-fitted-level-0);\n",
416
+ " border: var(--sklearn-color-fitted-level-3);\n",
417
+ "}\n",
418
+ "\n",
419
+ ".sk-estimator-doc-link:hover span {\n",
420
+ " display: block;\n",
421
+ "}\n",
422
+ "\n",
423
+ "/* \"?\"-specific style due to the `<a>` HTML tag */\n",
424
+ "\n",
425
+ "#sk-container-id-1 a.estimator_doc_link {\n",
426
+ " float: right;\n",
427
+ " font-size: 1rem;\n",
428
+ " line-height: 1em;\n",
429
+ " font-family: monospace;\n",
430
+ " background-color: var(--sklearn-color-background);\n",
431
+ " border-radius: 1rem;\n",
432
+ " height: 1rem;\n",
433
+ " width: 1rem;\n",
434
+ " text-decoration: none;\n",
435
+ " /* unfitted */\n",
436
+ " color: var(--sklearn-color-unfitted-level-1);\n",
437
+ " border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
438
+ "}\n",
439
+ "\n",
440
+ "#sk-container-id-1 a.estimator_doc_link.fitted {\n",
441
+ " /* fitted */\n",
442
+ " border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
443
+ " color: var(--sklearn-color-fitted-level-1);\n",
444
+ "}\n",
445
+ "\n",
446
+ "/* On hover */\n",
447
+ "#sk-container-id-1 a.estimator_doc_link:hover {\n",
448
+ " /* unfitted */\n",
449
+ " background-color: var(--sklearn-color-unfitted-level-3);\n",
450
+ " color: var(--sklearn-color-background);\n",
451
+ " text-decoration: none;\n",
452
+ "}\n",
453
+ "\n",
454
+ "#sk-container-id-1 a.estimator_doc_link.fitted:hover {\n",
455
+ " /* fitted */\n",
456
+ " background-color: var(--sklearn-color-fitted-level-3);\n",
457
+ "}\n",
458
+ "</style><div id=\"sk-container-id-1\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>XGBClassifier(base_score=&#x27;5E-1&#x27;, booster=&#x27;gbtree&#x27;, callbacks=None,\n",
459
+ " colsample_bylevel=None, colsample_bynode=None,\n",
460
+ " colsample_bytree=None, device=None, early_stopping_rounds=None,\n",
461
+ " enable_categorical=False, eval_metric=None, feature_types=None,\n",
462
+ " gamma=None, grow_policy=None, importance_type=None,\n",
463
+ " interaction_constraints=None, learning_rate=None, max_bin=None,\n",
464
+ " max_cat_threshold=None, max_cat_to_onehot=None,\n",
465
+ " max_delta_step=None, max_depth=None, max_leaves=None,\n",
466
+ " min_child_weight=None, missing=nan, monotone_constraints=None,\n",
467
+ " multi_strategy=None, n_estimators=None, n_jobs=None,\n",
468
+ " num_parallel_tree=None, random_state=None, ...)</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-1\" type=\"checkbox\" checked><label for=\"sk-estimator-id-1\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\">&nbsp;XGBClassifier<span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></label><div class=\"sk-toggleable__content fitted\"><pre>XGBClassifier(base_score=&#x27;5E-1&#x27;, booster=&#x27;gbtree&#x27;, callbacks=None,\n",
469
+ " colsample_bylevel=None, colsample_bynode=None,\n",
470
+ " colsample_bytree=None, device=None, early_stopping_rounds=None,\n",
471
+ " enable_categorical=False, eval_metric=None, feature_types=None,\n",
472
+ " gamma=None, grow_policy=None, importance_type=None,\n",
473
+ " interaction_constraints=None, learning_rate=None, max_bin=None,\n",
474
+ " max_cat_threshold=None, max_cat_to_onehot=None,\n",
475
+ " max_delta_step=None, max_depth=None, max_leaves=None,\n",
476
+ " min_child_weight=None, missing=nan, monotone_constraints=None,\n",
477
+ " multi_strategy=None, n_estimators=None, n_jobs=None,\n",
478
+ " num_parallel_tree=None, random_state=None, ...)</pre></div> </div></div></div></div>"
479
+ ],
480
+ "text/plain": [
481
+ "XGBClassifier(base_score='5E-1', booster='gbtree', callbacks=None,\n",
482
+ " colsample_bylevel=None, colsample_bynode=None,\n",
483
+ " colsample_bytree=None, device=None, early_stopping_rounds=None,\n",
484
+ " enable_categorical=False, eval_metric=None, feature_types=None,\n",
485
+ " gamma=None, grow_policy=None, importance_type=None,\n",
486
+ " interaction_constraints=None, learning_rate=None, max_bin=None,\n",
487
+ " max_cat_threshold=None, max_cat_to_onehot=None,\n",
488
+ " max_delta_step=None, max_depth=None, max_leaves=None,\n",
489
+ " min_child_weight=None, missing=nan, monotone_constraints=None,\n",
490
+ " multi_strategy=None, n_estimators=None, n_jobs=None,\n",
491
+ " num_parallel_tree=None, random_state=None, ...)"
492
+ ]
493
+ },
494
+ "execution_count": 4,
495
+ "metadata": {},
496
+ "output_type": "execute_result"
497
+ }
498
+ ],
499
+ "source": [
500
+ "model"
501
+ ]
502
+ },
503
+ {
504
+ "cell_type": "code",
505
+ "execution_count": 4,
506
+ "metadata": {},
507
+ "outputs": [],
508
+ "source": [
509
+ "def extract_features(audio, sr=16000):\n",
510
+ "\n",
511
+ " target_duration = 5\n",
512
+ " target_samples = int(target_duration * sr)\n",
513
+ "\n",
514
+ " # Get the current number of samples\n",
515
+ " current_samples = len(audio)\n",
516
+ "\n",
517
+ " # If the audio is shorter than 5 seconds, pad with zeros\n",
518
+ " if current_samples < target_samples:\n",
519
+ " padding_samples = target_samples - current_samples\n",
520
+ " audio = np.concatenate([audio, np.zeros(padding_samples)])\n",
521
+ " else:\n",
522
+ " audio = audio[:target_samples]\n",
523
+ " mfcc = librosa.feature.mfcc(y=audio, sr=sr, n_mfcc=13).flatten()\n",
524
+ " mfcc = np.array(mfcc)\n",
525
+ " # print(mfcc.shape)\n",
526
+ " # [[1], [2], [4]]\n",
527
+ "\n",
528
+ " return mfcc"
529
+ ]
530
+ },
531
+ {
532
+ "cell_type": "code",
533
+ "execution_count": 5,
534
+ "metadata": {},
535
+ "outputs": [
536
+ {
537
+ "name": "stdout",
538
+ "output_type": "stream",
539
+ "text": [
540
+ "(2041,)\n",
541
+ "(2041,)\n",
542
+ "(2041,)\n",
543
+ "(2041,)\n",
544
+ "(2041,)\n",
545
+ "(2041,)\n",
546
+ "(2041,)\n",
547
+ "(2041,)\n",
548
+ "(2041,)\n",
549
+ "(2041,)\n",
550
+ "(2041,)\n",
551
+ "(2041,)\n",
552
+ "(2041,)\n",
553
+ "(2041,)\n",
554
+ "(2041,)\n",
555
+ "(2041,)\n",
556
+ "(2041,)\n",
557
+ "(2041,)\n",
558
+ "(2041,)\n",
559
+ "(2041,)\n",
560
+ "(2041,)\n",
561
+ "(2041,)\n",
562
+ "(2041,)\n",
563
+ "(2041,)\n",
564
+ "(2041,)\n",
565
+ "(2041,)\n",
566
+ "(2041,)\n",
567
+ "(2041,)\n",
568
+ "(2041,)\n",
569
+ "(2041,)\n",
570
+ "(2041,)\n",
571
+ "(2041,)\n",
572
+ "(2041,)\n",
573
+ "(2041,)\n",
574
+ "(2041,)\n",
575
+ "(2041,)\n",
576
+ "(2041,)\n",
577
+ "(2041,)\n",
578
+ "(2041,)\n",
579
+ "(2041,)\n",
580
+ "(2041,)\n",
581
+ "(2041,)\n",
582
+ "(2041,)\n",
583
+ "(2041,)\n",
584
+ "(2041,)\n",
585
+ "(2041,)\n",
586
+ "(2041,)\n",
587
+ "(2041,)\n",
588
+ "(2041,)\n",
589
+ "(2041,)\n",
590
+ "(2041,)\n",
591
+ "(2041,)\n",
592
+ "(2041,)\n",
593
+ "(2041,)\n",
594
+ "(2041,)\n",
595
+ "(2041,)\n",
596
+ "(2041,)\n",
597
+ "(2041,)\n",
598
+ "(2041,)\n",
599
+ "(2041,)\n",
600
+ "(2041,)\n",
601
+ "(2041,)\n",
602
+ "(2041,)\n",
603
+ "(2041,)\n",
604
+ "(2041,)\n",
605
+ "(2041,)\n",
606
+ "(2041,)\n",
607
+ "(2041,)\n",
608
+ "(2041,)\n",
609
+ "(2041,)\n",
610
+ "(2041,)\n",
611
+ "(2041,)\n",
612
+ "(2041,)\n",
613
+ "(2041,)\n",
614
+ "(2041,)\n",
615
+ "(2041,)\n",
616
+ "(2041,)\n",
617
+ "(2041,)\n",
618
+ "(2041,)\n",
619
+ "(2041,)\n",
620
+ "(2041,)\n",
621
+ "(2041,)\n",
622
+ "(2041,)\n",
623
+ "(2041,)\n",
624
+ "(2041,)\n",
625
+ "(2041,)\n",
626
+ "(2041,)\n",
627
+ "(2041,)\n",
628
+ "(2041,)\n",
629
+ "(2041,)\n",
630
+ "(2041,)\n",
631
+ "(2041,)\n",
632
+ "(2041,)\n",
633
+ "(2041,)\n",
634
+ "(2041,)\n",
635
+ "(2041,)\n",
636
+ "(2041,)\n",
637
+ "(2041,)\n",
638
+ "(2041,)\n",
639
+ "(2041,)\n",
640
+ "(2041,)\n",
641
+ "(2041,)\n",
642
+ "(2041,)\n",
643
+ "(2041,)\n",
644
+ "(2041,)\n",
645
+ "(2041,)\n",
646
+ "(2041,)\n",
647
+ "(2041,)\n",
648
+ "(2041,)\n",
649
+ "(2041,)\n",
650
+ "(2041,)\n",
651
+ "(2041,)\n",
652
+ "(2041,)\n",
653
+ "(2041,)\n",
654
+ "(2041,)\n",
655
+ "(2041,)\n",
656
+ "(2041,)\n",
657
+ "(2041,)\n",
658
+ "(2041,)\n",
659
+ "(2041,)\n",
660
+ "(2041,)\n",
661
+ "(2041,)\n",
662
+ "(2041,)\n",
663
+ "(2041,)\n",
664
+ "(2041,)\n",
665
+ "(2041,)\n",
666
+ "(2041,)\n",
667
+ "(2041,)\n",
668
+ "(2041,)\n",
669
+ "(2041,)\n",
670
+ "(2041,)\n",
671
+ "(2041,)\n",
672
+ "(2041,)\n",
673
+ "(2041,)\n",
674
+ "(2041,)\n",
675
+ "(2041,)\n",
676
+ "(2041,)\n",
677
+ "(2041,)\n",
678
+ "(2041,)\n",
679
+ "(2041,)\n",
680
+ "(2041,)\n",
681
+ "(2041,)\n",
682
+ "(2041,)\n",
683
+ "(2041,)\n",
684
+ "(2041,)\n",
685
+ "(2041,)\n",
686
+ "(2041,)\n",
687
+ "(2041,)\n",
688
+ "(2041,)\n",
689
+ "(2041,)\n",
690
+ "(2041,)\n",
691
+ "(2041,)\n",
692
+ "(2041,)\n",
693
+ "(2041,)\n",
694
+ "(2041,)\n",
695
+ "(2041,)\n",
696
+ "(2041,)\n",
697
+ "(2041,)\n",
698
+ "(2041,)\n",
699
+ "(2041,)\n",
700
+ "(2041,)\n",
701
+ "(2041,)\n",
702
+ "(2041,)\n",
703
+ "(2041,)\n",
704
+ "(2041,)\n",
705
+ "(2041,)\n",
706
+ "(2041,)\n",
707
+ "(2041,)\n",
708
+ "(2041,)\n",
709
+ "(2041,)\n",
710
+ "(2041,)\n",
711
+ "(2041,)\n",
712
+ "(2041,)\n",
713
+ "(2041,)\n",
714
+ "(2041,)\n",
715
+ "(2041,)\n",
716
+ "(2041,)\n",
717
+ "(2041,)\n",
718
+ "(2041,)\n",
719
+ "(2041,)\n",
720
+ "(2041,)\n",
721
+ "(2041,)\n",
722
+ "(2041,)\n",
723
+ "(2041,)\n",
724
+ "(2041,)\n",
725
+ "(2041,)\n",
726
+ "(2041,)\n",
727
+ "(2041,)\n",
728
+ "(2041,)\n",
729
+ "(2041,)\n",
730
+ "(2041,)\n",
731
+ "(2041,)\n",
732
+ "(2041,)\n",
733
+ "(2041,)\n",
734
+ "(2041,)\n",
735
+ "(2041,)\n",
736
+ "(2041,)\n",
737
+ "(2041,)\n",
738
+ "(2041,)\n",
739
+ "(2041,)\n",
740
+ "(2041,)\n",
741
+ "(2041,)\n",
742
+ "(2041,)\n",
743
+ "(2041,)\n",
744
+ "(2041,)\n",
745
+ "(2041,)\n",
746
+ "(2041,)\n",
747
+ "(2041,)\n",
748
+ "(2041,)\n",
749
+ "(2041,)\n",
750
+ "(2041,)\n",
751
+ "(2041,)\n",
752
+ "(2041,)\n",
753
+ "(2041,)\n",
754
+ "(2041,)\n",
755
+ "(2041,)\n",
756
+ "(2041,)\n",
757
+ "(2041,)\n",
758
+ "(2041,)\n",
759
+ "(2041,)\n",
760
+ "(2041,)\n",
761
+ "(2041,)\n",
762
+ "(2041,)\n",
763
+ "(2041,)\n",
764
+ "(2041,)\n",
765
+ "(2041,)\n",
766
+ "(2041,)\n",
767
+ "(2041,)\n",
768
+ "(2041,)\n",
769
+ "(2041,)\n",
770
+ "(2041,)\n",
771
+ "(2041,)\n",
772
+ "(2041,)\n",
773
+ "(2041,)\n",
774
+ "(2041,)\n",
775
+ "(2041,)\n",
776
+ "(2041,)\n",
777
+ "(2041,)\n",
778
+ "(2041,)\n",
779
+ "(2041,)\n",
780
+ "(2041,)\n",
781
+ "(2041,)\n",
782
+ "(2041,)\n",
783
+ "(2041,)\n",
784
+ "(2041,)\n",
785
+ "(2041,)\n",
786
+ "(2041,)\n",
787
+ "(2041,)\n",
788
+ "(2041,)\n",
789
+ "(2041,)\n",
790
+ "(2041,)\n",
791
+ "(2041,)\n",
792
+ "(2041,)\n",
793
+ "(2041,)\n",
794
+ "(2041,)\n",
795
+ "(2041,)\n",
796
+ "(2041,)\n",
797
+ "(2041,)\n",
798
+ "(2041,)\n",
799
+ "(2041,)\n",
800
+ "(2041,)\n",
801
+ "(2041,)\n",
802
+ "(2041,)\n",
803
+ "(2041,)\n",
804
+ "(2041,)\n",
805
+ "(2041,)\n",
806
+ "(2041,)\n",
807
+ "(2041,)\n",
808
+ "(2041,)\n",
809
+ "(2041,)\n",
810
+ "(2041,)\n",
811
+ "(2041,)\n",
812
+ "(2041,)\n",
813
+ "(2041,)\n",
814
+ "(2041,)\n",
815
+ "(2041,)\n",
816
+ "(2041,)\n",
817
+ "(2041,)\n",
818
+ "(2041,)\n",
819
+ "(2041,)\n",
820
+ "(2041,)\n",
821
+ "(2041,)\n",
822
+ "(2041,)\n",
823
+ "(2041,)\n",
824
+ "(2041,)\n",
825
+ "(2041,)\n",
826
+ "(2041,)\n",
827
+ "(2041,)\n",
828
+ "(2041,)\n",
829
+ "(2041,)\n",
830
+ "(2041,)\n",
831
+ "(2041,)\n",
832
+ "(2041,)\n",
833
+ "(2041,)\n",
834
+ "(2041,)\n",
835
+ "(2041,)\n",
836
+ "(2041,)\n",
837
+ "(2041,)\n",
838
+ "(2041,)\n",
839
+ "(2041,)\n",
840
+ "(2041,)\n",
841
+ "(2041,)\n",
842
+ "(2041,)\n",
843
+ "(2041,)\n",
844
+ "(2041,)\n",
845
+ "(2041,)\n",
846
+ "(2041,)\n",
847
+ "(2041,)\n",
848
+ "(2041,)\n",
849
+ "(2041,)\n",
850
+ "(2041,)\n",
851
+ "(2041,)\n",
852
+ "(2041,)\n",
853
+ "(2041,)\n",
854
+ "(2041,)\n",
855
+ "(2041,)\n",
856
+ "(2041,)\n",
857
+ "(2041,)\n",
858
+ "(2041,)\n",
859
+ "(2041,)\n",
860
+ "(2041,)\n",
861
+ "(2041,)\n",
862
+ "(2041,)\n",
863
+ "(2041,)\n",
864
+ "(2041,)\n",
865
+ "(2041,)\n",
866
+ "(2041,)\n",
867
+ "(2041,)\n",
868
+ "(2041,)\n",
869
+ "(2041,)\n",
870
+ "(2041,)\n",
871
+ "(2041,)\n",
872
+ "(2041,)\n",
873
+ "(2041,)\n",
874
+ "(2041,)\n",
875
+ "(2041,)\n",
876
+ "(2041,)\n",
877
+ "(2041,)\n",
878
+ "(2041,)\n",
879
+ "(2041,)\n",
880
+ "(2041,)\n",
881
+ "(2041,)\n",
882
+ "(2041,)\n",
883
+ "(2041,)\n",
884
+ "(2041,)\n",
885
+ "(2041,)\n",
886
+ "(2041,)\n",
887
+ "(2041,)\n",
888
+ "(2041,)\n",
889
+ "(2041,)\n",
890
+ "(2041,)\n",
891
+ "(2041,)\n",
892
+ "(2041,)\n",
893
+ "(2041,)\n",
894
+ "(2041,)\n",
895
+ "(2041,)\n",
896
+ "(2041,)\n",
897
+ "(2041,)\n",
898
+ "(2041,)\n",
899
+ "(2041,)\n",
900
+ "(2041,)\n",
901
+ "(2041,)\n",
902
+ "(2041,)\n",
903
+ "(2041,)\n",
904
+ "(2041,)\n",
905
+ "(2041,)\n",
906
+ "(2041,)\n",
907
+ "(2041,)\n",
908
+ "(2041,)\n",
909
+ "(2041,)\n",
910
+ "(2041,)\n",
911
+ "(2041,)\n",
912
+ "(2041,)\n",
913
+ "(2041,)\n",
914
+ "(2041,)\n",
915
+ "(2041,)\n",
916
+ "(2041,)\n",
917
+ "(2041,)\n",
918
+ "(2041,)\n",
919
+ "(2041,)\n",
920
+ "(2041,)\n",
921
+ "(2041,)\n",
922
+ "(2041,)\n",
923
+ "(2041,)\n",
924
+ "(2041,)\n",
925
+ "(2041,)\n",
926
+ "(2041,)\n",
927
+ "(2041,)\n",
928
+ "(2041,)\n",
929
+ "(2041,)\n",
930
+ "(2041,)\n",
931
+ "(2041,)\n",
932
+ "(2041,)\n",
933
+ "(2041,)\n",
934
+ "(2041,)\n",
935
+ "(2041,)\n",
936
+ "(2041,)\n",
937
+ "(2041,)\n",
938
+ "(2041,)\n",
939
+ "(2041,)\n",
940
+ "(2041,)\n",
941
+ "(2041,)\n",
942
+ "(2041,)\n",
943
+ "(2041,)\n",
944
+ "(2041,)\n",
945
+ "(2041,)\n",
946
+ "(2041,)\n",
947
+ "(2041,)\n",
948
+ "(2041,)\n",
949
+ "(2041,)\n",
950
+ "(2041,)\n",
951
+ "(2041,)\n",
952
+ "(2041,)\n",
953
+ "(2041,)\n",
954
+ "(2041,)\n",
955
+ "(2041,)\n",
956
+ "(2041,)\n",
957
+ "(2041,)\n",
958
+ "(2041,)\n",
959
+ "(2041,)\n",
960
+ "(2041,)\n",
961
+ "(2041,)\n",
962
+ "(2041,)\n",
963
+ "(2041,)\n",
964
+ "(2041,)\n",
965
+ "(2041,)\n",
966
+ "(2041,)\n",
967
+ "(2041,)\n",
968
+ "(2041,)\n",
969
+ "(2041,)\n",
970
+ "(2041,)\n",
971
+ "(2041,)\n",
972
+ "(2041,)\n",
973
+ "(2041,)\n",
974
+ "(2041,)\n",
975
+ "(2041,)\n",
976
+ "(2041,)\n",
977
+ "(2041,)\n",
978
+ "(2041,)\n",
979
+ "(2041,)\n",
980
+ "(2041,)\n",
981
+ "(2041,)\n",
982
+ "(2041,)\n",
983
+ "(2041,)\n",
984
+ "(2041,)\n",
985
+ "(2041,)\n",
986
+ "(2041,)\n",
987
+ "(2041,)\n",
988
+ "(2041,)\n",
989
+ "(2041,)\n",
990
+ "(2041,)\n",
991
+ "(2041,)\n",
992
+ "(2041,)\n",
993
+ "(2041,)\n",
994
+ "(2041,)\n",
995
+ "(2041,)\n",
996
+ "(2041,)\n",
997
+ "(2041,)\n",
998
+ "(2041,)\n",
999
+ "(2041,)\n",
1000
+ "(2041,)\n",
1001
+ "(2041,)\n",
1002
+ "(2041,)\n",
1003
+ "(2041,)\n",
1004
+ "(2041,)\n",
1005
+ "(2041,)\n",
1006
+ "(2041,)\n",
1007
+ "(2041,)\n",
1008
+ "(2041,)\n",
1009
+ "(2041,)\n",
1010
+ "(2041,)\n",
1011
+ "(2041,)\n",
1012
+ "(2041,)\n",
1013
+ "(2041,)\n",
1014
+ "(2041,)\n",
1015
+ "(2041,)\n",
1016
+ "(2041,)\n",
1017
+ "(2041,)\n",
1018
+ "(2041,)\n",
1019
+ "(2041,)\n",
1020
+ "(2041,)\n",
1021
+ "(2041,)\n",
1022
+ "(2041,)\n",
1023
+ "(2041,)\n",
1024
+ "(2041,)\n",
1025
+ "(2041,)\n",
1026
+ "(2041,)\n",
1027
+ "(2041,)\n",
1028
+ "(2041,)\n",
1029
+ "(2041,)\n",
1030
+ "(2041,)\n",
1031
+ "(2041,)\n",
1032
+ "(2041,)\n",
1033
+ "(2041,)\n",
1034
+ "(2041,)\n",
1035
+ "(2041,)\n",
1036
+ "(2041,)\n",
1037
+ "(2041,)\n",
1038
+ "(2041,)\n",
1039
+ "(2041,)\n",
1040
+ "(2041,)\n",
1041
+ "(2041,)\n",
1042
+ "(2041,)\n",
1043
+ "(2041,)\n",
1044
+ "(2041,)\n",
1045
+ "(2041,)\n",
1046
+ "(2041,)\n",
1047
+ "(2041,)\n",
1048
+ "(2041,)\n",
1049
+ "(2041,)\n",
1050
+ "(2041,)\n",
1051
+ "(2041,)\n",
1052
+ "(2041,)\n",
1053
+ "(2041,)\n",
1054
+ "(2041,)\n",
1055
+ "(2041,)\n",
1056
+ "(2041,)\n",
1057
+ "(2041,)\n",
1058
+ "(2041,)\n",
1059
+ "(2041,)\n",
1060
+ "(2041,)\n",
1061
+ "(2041,)\n",
1062
+ "(2041,)\n",
1063
+ "(2041,)\n",
1064
+ "(2041,)\n",
1065
+ "(2041,)\n",
1066
+ "(2041,)\n",
1067
+ "(2041,)\n",
1068
+ "(2041,)\n",
1069
+ "(2041,)\n",
1070
+ "(2041,)\n",
1071
+ "(2041,)\n",
1072
+ "(2041,)\n",
1073
+ "(2041,)\n",
1074
+ "(2041,)\n",
1075
+ "(2041,)\n",
1076
+ "(2041,)\n",
1077
+ "(2041,)\n",
1078
+ "(2041,)\n",
1079
+ "(2041,)\n",
1080
+ "(2041,)\n",
1081
+ "(2041,)\n",
1082
+ "(2041,)\n",
1083
+ "(2041,)\n",
1084
+ "(2041,)\n",
1085
+ "(2041,)\n",
1086
+ "(2041,)\n",
1087
+ "(2041,)\n",
1088
+ "(2041,)\n",
1089
+ "(2041,)\n",
1090
+ "(2041,)\n",
1091
+ "(2041,)\n",
1092
+ "(2041,)\n",
1093
+ "(2041,)\n",
1094
+ "(2041,)\n",
1095
+ "(2041,)\n",
1096
+ "(2041,)\n",
1097
+ "(2041,)\n",
1098
+ "(2041,)\n",
1099
+ "(2041,)\n",
1100
+ "(2041,)\n",
1101
+ "(2041,)\n",
1102
+ "(2041,)\n",
1103
+ "(2041,)\n",
1104
+ "(2041,)\n",
1105
+ "(2041,)\n",
1106
+ "(2041,)\n",
1107
+ "(2041,)\n",
1108
+ "(2041,)\n",
1109
+ "(2041,)\n",
1110
+ "(2041,)\n",
1111
+ "(2041,)\n",
1112
+ "(2041,)\n",
1113
+ "(2041,)\n",
1114
+ "(2041,)\n",
1115
+ "(2041,)\n",
1116
+ "(2041,)\n",
1117
+ "(2041,)\n",
1118
+ "(2041,)\n",
1119
+ "(2041,)\n",
1120
+ "(2041,)\n",
1121
+ "(2041,)\n",
1122
+ "(2041,)\n",
1123
+ "(2041,)\n",
1124
+ "(2041,)\n",
1125
+ "(2041,)\n",
1126
+ "(2041,)\n",
1127
+ "(2041,)\n",
1128
+ "(2041,)\n",
1129
+ "(2041,)\n",
1130
+ "(2041,)\n",
1131
+ "(2041,)\n",
1132
+ "(2041,)\n",
1133
+ "(2041,)\n",
1134
+ "(2041,)\n",
1135
+ "(2041,)\n",
1136
+ "(2041,)\n",
1137
+ "(2041,)\n",
1138
+ "(2041,)\n",
1139
+ "(2041,)\n",
1140
+ "(2041,)\n",
1141
+ "(2041,)\n",
1142
+ "(2041,)\n",
1143
+ "(2041,)\n",
1144
+ "(2041,)\n",
1145
+ "(2041,)\n",
1146
+ "(2041,)\n",
1147
+ "(2041,)\n",
1148
+ "(2041,)\n",
1149
+ "(2041,)\n",
1150
+ "(2041,)\n",
1151
+ "(2041,)\n",
1152
+ "(2041,)\n",
1153
+ "(2041,)\n",
1154
+ "(2041,)\n",
1155
+ "(2041,)\n",
1156
+ "(2041,)\n",
1157
+ "(2041,)\n",
1158
+ "(2041,)\n",
1159
+ "(2041,)\n",
1160
+ "(2041,)\n",
1161
+ "(2041,)\n",
1162
+ "(2041,)\n",
1163
+ "(2041,)\n",
1164
+ "(2041,)\n",
1165
+ "(2041,)\n",
1166
+ "(2041,)\n",
1167
+ "(2041,)\n",
1168
+ "(2041,)\n",
1169
+ "(2041,)\n",
1170
+ "(2041,)\n",
1171
+ "(2041,)\n",
1172
+ "(2041,)\n",
1173
+ "(2041,)\n",
1174
+ "(2041,)\n",
1175
+ "(2041,)\n",
1176
+ "(2041,)\n",
1177
+ "(2041,)\n",
1178
+ "(2041,)\n",
1179
+ "(2041,)\n",
1180
+ "(2041,)\n",
1181
+ "(2041,)\n",
1182
+ "(2041,)\n",
1183
+ "(2041,)\n",
1184
+ "(2041,)\n",
1185
+ "(2041,)\n",
1186
+ "(2041,)\n",
1187
+ "(2041,)\n",
1188
+ "(2041,)\n",
1189
+ "(2041,)\n",
1190
+ "(2041,)\n",
1191
+ "(2041,)\n",
1192
+ "(2041,)\n",
1193
+ "(2041,)\n",
1194
+ "(2041,)\n",
1195
+ "(2041,)\n",
1196
+ "(2041,)\n",
1197
+ "(2041,)\n",
1198
+ "(2041,)\n",
1199
+ "(2041,)\n",
1200
+ "(2041,)\n",
1201
+ "(2041,)\n",
1202
+ "(2041,)\n",
1203
+ "(2041,)\n",
1204
+ "(2041,)\n",
1205
+ "(2041,)\n",
1206
+ "(2041,)\n",
1207
+ "(2041,)\n",
1208
+ "(2041,)\n",
1209
+ "(2041,)\n",
1210
+ "(2041,)\n",
1211
+ "(2041,)\n",
1212
+ "(2041,)\n",
1213
+ "(2041,)\n",
1214
+ "(2041,)\n",
1215
+ "(2041,)\n",
1216
+ "(2041,)\n",
1217
+ "(2041,)\n",
1218
+ "(2041,)\n",
1219
+ "(2041,)\n",
1220
+ "(2041,)\n",
1221
+ "(2041,)\n",
1222
+ "(2041,)\n",
1223
+ "(2041,)\n",
1224
+ "(2041,)\n",
1225
+ "(2041,)\n",
1226
+ "(2041,)\n",
1227
+ "(2041,)\n",
1228
+ "(2041,)\n",
1229
+ "(2041,)\n",
1230
+ "(2041,)\n",
1231
+ "(2041,)\n",
1232
+ "(2041,)\n",
1233
+ "(2041,)\n",
1234
+ "(2041,)\n",
1235
+ "(2041,)\n",
1236
+ "(2041,)\n",
1237
+ "(2041,)\n",
1238
+ "(2041,)\n",
1239
+ "(2041,)\n",
1240
+ "(2041,)\n",
1241
+ "(2041,)\n",
1242
+ "(2041,)\n",
1243
+ "(2041,)\n",
1244
+ "(2041,)\n",
1245
+ "(2041,)\n",
1246
+ "(2041,)\n",
1247
+ "(2041,)\n",
1248
+ "(2041,)\n",
1249
+ "(2041,)\n",
1250
+ "(2041,)\n",
1251
+ "(2041,)\n",
1252
+ "(2041,)\n",
1253
+ "(2041,)\n",
1254
+ "(2041,)\n",
1255
+ "(2041,)\n",
1256
+ "(2041,)\n",
1257
+ "(2041,)\n",
1258
+ "(2041,)\n",
1259
+ "(2041,)\n",
1260
+ "(2041,)\n",
1261
+ "(2041,)\n",
1262
+ "(2041,)\n",
1263
+ "(2041,)\n",
1264
+ "(2041,)\n",
1265
+ "(2041,)\n",
1266
+ "(2041,)\n",
1267
+ "(2041,)\n",
1268
+ "(2041,)\n",
1269
+ "(2041,)\n",
1270
+ "(2041,)\n",
1271
+ "(2041,)\n",
1272
+ "(2041,)\n",
1273
+ "(2041,)\n",
1274
+ "(2041,)\n",
1275
+ "(2041,)\n",
1276
+ "(2041,)\n",
1277
+ "(2041,)\n",
1278
+ "(2041,)\n",
1279
+ "(2041,)\n",
1280
+ "(2041,)\n",
1281
+ "(2041,)\n",
1282
+ "(2041,)\n",
1283
+ "(2041,)\n",
1284
+ "(2041,)\n",
1285
+ "(2041,)\n",
1286
+ "(2041,)\n",
1287
+ "(2041,)\n",
1288
+ "(2041,)\n",
1289
+ "(2041,)\n",
1290
+ "(2041,)\n",
1291
+ "(2041,)\n",
1292
+ "(2041,)\n",
1293
+ "(2041,)\n",
1294
+ "(2041,)\n",
1295
+ "(2041,)\n",
1296
+ "(2041,)\n",
1297
+ "(2041,)\n",
1298
+ "(2041,)\n",
1299
+ "(2041,)\n",
1300
+ "(2041,)\n",
1301
+ "(2041,)\n",
1302
+ "(2041,)\n",
1303
+ "(2041,)\n",
1304
+ "(2041,)\n",
1305
+ "(2041,)\n",
1306
+ "(2041,)\n",
1307
+ "(2041,)\n",
1308
+ "(2041,)\n",
1309
+ "(2041,)\n",
1310
+ "(2041,)\n",
1311
+ "(2041,)\n",
1312
+ "(2041,)\n",
1313
+ "(2041,)\n",
1314
+ "(2041,)\n",
1315
+ "(2041,)\n",
1316
+ "(2041,)\n",
1317
+ "(2041,)\n",
1318
+ "(2041,)\n",
1319
+ "(2041,)\n",
1320
+ "(2041,)\n",
1321
+ "(2041,)\n",
1322
+ "(2041,)\n",
1323
+ "(2041,)\n",
1324
+ "(2041,)\n",
1325
+ "(2041,)\n",
1326
+ "(2041,)\n",
1327
+ "(2041,)\n",
1328
+ "(2041,)\n",
1329
+ "(2041,)\n",
1330
+ "(2041,)\n",
1331
+ "(2041,)\n",
1332
+ "(2041,)\n",
1333
+ "(2041,)\n",
1334
+ "(2041,)\n",
1335
+ "(2041,)\n",
1336
+ "(2041,)\n",
1337
+ "(2041,)\n",
1338
+ "(2041,)\n",
1339
+ "(2041,)\n",
1340
+ "(2041,)\n",
1341
+ "(2041,)\n",
1342
+ "(2041,)\n",
1343
+ "(2041,)\n",
1344
+ "(2041,)\n",
1345
+ "(2041,)\n",
1346
+ "(2041,)\n",
1347
+ "(2041,)\n",
1348
+ "(2041,)\n",
1349
+ "(2041,)\n",
1350
+ "(2041,)\n",
1351
+ "(2041,)\n",
1352
+ "(2041,)\n",
1353
+ "(2041,)\n",
1354
+ "(2041,)\n",
1355
+ "(2041,)\n",
1356
+ "(2041,)\n",
1357
+ "(2041,)\n",
1358
+ "(2041,)\n",
1359
+ "(2041,)\n",
1360
+ "(2041,)\n",
1361
+ "(2041,)\n",
1362
+ "(2041,)\n",
1363
+ "(2041,)\n",
1364
+ "(2041,)\n",
1365
+ "(2041,)\n",
1366
+ "(2041,)\n",
1367
+ "(2041,)\n",
1368
+ "(2041,)\n",
1369
+ "(2041,)\n",
1370
+ "(2041,)\n",
1371
+ "(2041,)\n",
1372
+ "(2041,)\n",
1373
+ "(2041,)\n",
1374
+ "(2041,)\n",
1375
+ "(2041,)\n",
1376
+ "(2041,)\n",
1377
+ "(2041,)\n",
1378
+ "(2041,)\n",
1379
+ "(2041,)\n",
1380
+ "(2041,)\n",
1381
+ "(2041,)\n",
1382
+ "(2041,)\n",
1383
+ "(2041,)\n",
1384
+ "(2041,)\n",
1385
+ "(2041,)\n",
1386
+ "(2041,)\n",
1387
+ "(2041,)\n",
1388
+ "(2041,)\n",
1389
+ "(2041,)\n",
1390
+ "(2041,)\n",
1391
+ "(2041,)\n",
1392
+ "(2041,)\n",
1393
+ "(2041,)\n",
1394
+ "(2041,)\n",
1395
+ "(2041,)\n",
1396
+ "(2041,)\n",
1397
+ "(2041,)\n",
1398
+ "(2041,)\n",
1399
+ "(2041,)\n",
1400
+ "(2041,)\n",
1401
+ "(2041,)\n",
1402
+ "(2041,)\n",
1403
+ "(2041,)\n",
1404
+ "(2041,)\n",
1405
+ "(2041,)\n",
1406
+ "(2041,)\n",
1407
+ "(2041,)\n",
1408
+ "(2041,)\n",
1409
+ "(2041,)\n",
1410
+ "(2041,)\n",
1411
+ "(2041,)\n",
1412
+ "(2041,)\n",
1413
+ "(2041,)\n",
1414
+ "(2041,)\n",
1415
+ "(2041,)\n",
1416
+ "(2041,)\n",
1417
+ "(2041,)\n",
1418
+ "(2041,)\n",
1419
+ "(2041,)\n",
1420
+ "(2041,)\n",
1421
+ "(2041,)\n",
1422
+ "(2041,)\n",
1423
+ "(2041,)\n",
1424
+ "(2041,)\n",
1425
+ "(2041,)\n",
1426
+ "(2041,)\n",
1427
+ "(2041,)\n",
1428
+ "(2041,)\n",
1429
+ "(2041,)\n",
1430
+ "(2041,)\n",
1431
+ "(2041,)\n",
1432
+ "(2041,)\n",
1433
+ "(2041,)\n",
1434
+ "(2041,)\n",
1435
+ "(2041,)\n",
1436
+ "(2041,)\n",
1437
+ "(2041,)\n",
1438
+ "(2041,)\n",
1439
+ "(2041,)\n",
1440
+ "(2041,)\n",
1441
+ "(2041,)\n",
1442
+ "(2041,)\n",
1443
+ "(2041,)\n",
1444
+ "(2041,)\n",
1445
+ "(2041,)\n",
1446
+ "(2041,)\n",
1447
+ "(2041,)\n",
1448
+ "(2041,)\n",
1449
+ "(2041,)\n",
1450
+ "(2041,)\n",
1451
+ "(2041,)\n",
1452
+ "(2041,)\n",
1453
+ "(2041,)\n",
1454
+ "(2041,)\n",
1455
+ "(2041,)\n",
1456
+ "(2041,)\n",
1457
+ "(2041,)\n",
1458
+ "(2041,)\n",
1459
+ "(2041,)\n",
1460
+ "(2041,)\n",
1461
+ "(2041,)\n",
1462
+ "(2041,)\n",
1463
+ "(2041,)\n",
1464
+ "(2041,)\n",
1465
+ "(2041,)\n",
1466
+ "(2041,)\n",
1467
+ "(2041,)\n",
1468
+ "(2041,)\n",
1469
+ "(2041,)\n",
1470
+ "(2041,)\n",
1471
+ "(2041,)\n",
1472
+ "(2041,)\n",
1473
+ "(2041,)\n",
1474
+ "(2041,)\n",
1475
+ "(2041,)\n",
1476
+ "(2041,)\n",
1477
+ "(2041,)\n",
1478
+ "(2041,)\n",
1479
+ "(2041,)\n",
1480
+ "(2041,)\n",
1481
+ "(2041,)\n",
1482
+ "(2041,)\n",
1483
+ "(2041,)\n",
1484
+ "(2041,)\n",
1485
+ "(2041,)\n",
1486
+ "(2041,)\n",
1487
+ "(2041,)\n",
1488
+ "(2041,)\n",
1489
+ "(2041,)\n",
1490
+ "(2041,)\n",
1491
+ "(2041,)\n",
1492
+ "(2041,)\n",
1493
+ "(2041,)\n",
1494
+ "(2041,)\n",
1495
+ "(2041,)\n",
1496
+ "(2041,)\n",
1497
+ "(2041,)\n",
1498
+ "(2041,)\n",
1499
+ "(2041,)\n",
1500
+ "(2041,)\n",
1501
+ "(2041,)\n",
1502
+ "(2041,)\n",
1503
+ "(2041,)\n",
1504
+ "(2041,)\n",
1505
+ "(2041,)\n",
1506
+ "(2041,)\n",
1507
+ "(2041,)\n",
1508
+ "(2041,)\n",
1509
+ "(2041,)\n",
1510
+ "(2041,)\n",
1511
+ "(2041,)\n",
1512
+ "(2041,)\n",
1513
+ "(2041,)\n",
1514
+ "(2041,)\n",
1515
+ "(2041,)\n",
1516
+ "(2041,)\n",
1517
+ "(2041,)\n",
1518
+ "(2041,)\n",
1519
+ "(2041,)\n",
1520
+ "(2041,)\n",
1521
+ "(2041,)\n",
1522
+ "(2041,)\n",
1523
+ "(2041,)\n",
1524
+ "(2041,)\n",
1525
+ "(2041,)\n",
1526
+ "(2041,)\n",
1527
+ "(2041,)\n",
1528
+ "(2041,)\n",
1529
+ "(2041,)\n",
1530
+ "(2041,)\n",
1531
+ "(2041,)\n",
1532
+ "(2041,)\n",
1533
+ "(2041,)\n",
1534
+ "(2041,)\n",
1535
+ "(2041,)\n",
1536
+ "(2041,)\n",
1537
+ "(2041,)\n",
1538
+ "(2041,)\n",
1539
+ "(2041,)\n",
1540
+ "(2041,)\n",
1541
+ "(2041,)\n",
1542
+ "(2041,)\n",
1543
+ "(2041,)\n",
1544
+ "(2041,)\n",
1545
+ "(2041,)\n",
1546
+ "(2041,)\n",
1547
+ "(2041,)\n",
1548
+ "(2041,)\n",
1549
+ "(2041,)\n",
1550
+ "(2041,)\n",
1551
+ "(2041,)\n",
1552
+ "(2041,)\n",
1553
+ "(2041,)\n",
1554
+ "(2041,)\n",
1555
+ "(2041,)\n",
1556
+ "(2041,)\n",
1557
+ "(2041,)\n",
1558
+ "(2041,)\n",
1559
+ "(2041,)\n",
1560
+ "(2041,)\n",
1561
+ "(2041,)\n",
1562
+ "(2041,)\n",
1563
+ "(2041,)\n",
1564
+ "(2041,)\n",
1565
+ "(2041,)\n",
1566
+ "(2041,)\n",
1567
+ "(2041,)\n",
1568
+ "(2041,)\n",
1569
+ "(2041,)\n",
1570
+ "(2041,)\n",
1571
+ "(2041,)\n",
1572
+ "(2041,)\n",
1573
+ "(2041,)\n",
1574
+ "(2041,)\n",
1575
+ "(2041,)\n",
1576
+ "(2041,)\n",
1577
+ "(2041,)\n",
1578
+ "(2041,)\n",
1579
+ "(2041,)\n",
1580
+ "(2041,)\n",
1581
+ "(2041,)\n",
1582
+ "(2041,)\n",
1583
+ "(2041,)\n",
1584
+ "(2041,)\n",
1585
+ "(2041,)\n",
1586
+ "(2041,)\n",
1587
+ "(2041,)\n",
1588
+ "(2041,)\n",
1589
+ "(2041,)\n",
1590
+ "(2041,)\n",
1591
+ "(2041,)\n",
1592
+ "(2041,)\n",
1593
+ "(2041,)\n",
1594
+ "(2041,)\n",
1595
+ "(2041,)\n",
1596
+ "(2041,)\n",
1597
+ "(2041,)\n",
1598
+ "(2041,)\n",
1599
+ "(2041,)\n",
1600
+ "(2041,)\n",
1601
+ "(2041,)\n",
1602
+ "(2041,)\n",
1603
+ "(2041,)\n",
1604
+ "(2041,)\n",
1605
+ "(2041,)\n",
1606
+ "(2041,)\n",
1607
+ "(2041,)\n",
1608
+ "(2041,)\n",
1609
+ "(2041,)\n",
1610
+ "(2041,)\n",
1611
+ "(2041,)\n",
1612
+ "(2041,)\n",
1613
+ "(2041,)\n",
1614
+ "(2041,)\n",
1615
+ "(2041,)\n",
1616
+ "(2041,)\n",
1617
+ "(2041,)\n",
1618
+ "(2041,)\n",
1619
+ "(2041,)\n",
1620
+ "(2041,)\n",
1621
+ "(2041,)\n",
1622
+ "(2041,)\n",
1623
+ "(2041,)\n",
1624
+ "(2041,)\n",
1625
+ "(2041,)\n",
1626
+ "(2041,)\n",
1627
+ "(2041,)\n",
1628
+ "(2041,)\n",
1629
+ "(2041,)\n",
1630
+ "(2041,)\n",
1631
+ "(2041,)\n",
1632
+ "(2041,)\n",
1633
+ "(2041,)\n",
1634
+ "(2041,)\n",
1635
+ "(2041,)\n",
1636
+ "(2041,)\n",
1637
+ "(2041,)\n",
1638
+ "(2041,)\n",
1639
+ "(2041,)\n",
1640
+ "(2041,)\n",
1641
+ "(2041,)\n",
1642
+ "(2041,)\n",
1643
+ "(2041,)\n",
1644
+ "(2041,)\n",
1645
+ "(2041,)\n",
1646
+ "(2041,)\n",
1647
+ "(2041,)\n",
1648
+ "(2041,)\n",
1649
+ "(2041,)\n",
1650
+ "(2041,)\n",
1651
+ "(2041,)\n",
1652
+ "(2041,)\n",
1653
+ "(2041,)\n",
1654
+ "(2041,)\n",
1655
+ "(2041,)\n",
1656
+ "(2041,)\n",
1657
+ "(2041,)\n",
1658
+ "(2041,)\n",
1659
+ "(2041,)\n",
1660
+ "(2041,)\n",
1661
+ "(2041,)\n",
1662
+ "(2041,)\n",
1663
+ "(2041,)\n",
1664
+ "(2041,)\n",
1665
+ "(2041,)\n",
1666
+ "(2041,)\n",
1667
+ "(2041,)\n",
1668
+ "(2041,)\n",
1669
+ "(2041,)\n",
1670
+ "(2041,)\n",
1671
+ "(2041,)\n",
1672
+ "(2041,)\n",
1673
+ "(2041,)\n",
1674
+ "(2041,)\n",
1675
+ "(2041,)\n",
1676
+ "(2041,)\n",
1677
+ "(2041,)\n",
1678
+ "(2041,)\n",
1679
+ "(2041,)\n",
1680
+ "(2041,)\n",
1681
+ "(2041,)\n",
1682
+ "(2041,)\n",
1683
+ "(2041,)\n",
1684
+ "(2041,)\n",
1685
+ "(2041,)\n",
1686
+ "(2041,)\n",
1687
+ "(2041,)\n",
1688
+ "(2041,)\n",
1689
+ "(2041,)\n",
1690
+ "(2041,)\n",
1691
+ "(2041,)\n",
1692
+ "(2041,)\n",
1693
+ "(2041,)\n",
1694
+ "(2041,)\n",
1695
+ "(2041,)\n",
1696
+ "(2041,)\n",
1697
+ "(2041,)\n",
1698
+ "(2041,)\n",
1699
+ "(2041,)\n",
1700
+ "(2041,)\n",
1701
+ "(2041,)\n",
1702
+ "(2041,)\n",
1703
+ "(2041,)\n",
1704
+ "(2041,)\n",
1705
+ "(2041,)\n",
1706
+ "(2041,)\n",
1707
+ "(2041,)\n",
1708
+ "(2041,)\n",
1709
+ "(2041,)\n",
1710
+ "(2041,)\n",
1711
+ "(2041,)\n",
1712
+ "(2041,)\n",
1713
+ "(2041,)\n",
1714
+ "(2041,)\n",
1715
+ "(2041,)\n",
1716
+ "(2041,)\n",
1717
+ "(2041,)\n",
1718
+ "(2041,)\n",
1719
+ "(2041,)\n",
1720
+ "(2041,)\n",
1721
+ "(2041,)\n",
1722
+ "(2041,)\n",
1723
+ "(2041,)\n",
1724
+ "(2041,)\n",
1725
+ "(2041,)\n",
1726
+ "(2041,)\n",
1727
+ "(2041,)\n",
1728
+ "(2041,)\n",
1729
+ "(2041,)\n",
1730
+ "(2041,)\n",
1731
+ "(2041,)\n",
1732
+ "(2041,)\n",
1733
+ "(2041,)\n",
1734
+ "(2041,)\n",
1735
+ "(2041,)\n",
1736
+ "(2041,)\n",
1737
+ "(2041,)\n",
1738
+ "(2041,)\n",
1739
+ "(2041,)\n",
1740
+ "(2041,)\n",
1741
+ "(2041,)\n",
1742
+ "(2041,)\n",
1743
+ "(2041,)\n",
1744
+ "(2041,)\n",
1745
+ "(2041,)\n",
1746
+ "(2041,)\n",
1747
+ "(2041,)\n",
1748
+ "(2041,)\n",
1749
+ "(2041,)\n",
1750
+ "(2041,)\n",
1751
+ "(2041,)\n",
1752
+ "(2041,)\n",
1753
+ "(2041,)\n",
1754
+ "(2041,)\n",
1755
+ "(2041,)\n",
1756
+ "(2041,)\n",
1757
+ "(2041,)\n",
1758
+ "(2041,)\n",
1759
+ "(2041,)\n",
1760
+ "(2041,)\n",
1761
+ "(2041,)\n",
1762
+ "(2041,)\n",
1763
+ "(2041,)\n",
1764
+ "(2041,)\n",
1765
+ "(2041,)\n",
1766
+ "(2041,)\n",
1767
+ "(2041,)\n",
1768
+ "(2041,)\n",
1769
+ "(2041,)\n",
1770
+ "(2041,)\n",
1771
+ "(2041,)\n",
1772
+ "(2041,)\n",
1773
+ "(2041,)\n",
1774
+ "(2041,)\n",
1775
+ "(2041,)\n",
1776
+ "(2041,)\n",
1777
+ "(2041,)\n",
1778
+ "(2041,)\n",
1779
+ "(2041,)\n",
1780
+ "(2041,)\n",
1781
+ "(2041,)\n",
1782
+ "(2041,)\n",
1783
+ "(2041,)\n",
1784
+ "(2041,)\n",
1785
+ "(2041,)\n",
1786
+ "(2041,)\n",
1787
+ "(2041,)\n",
1788
+ "(2041,)\n",
1789
+ "(2041,)\n",
1790
+ "(2041,)\n",
1791
+ "(2041,)\n",
1792
+ "(2041,)\n",
1793
+ "(2041,)\n",
1794
+ "(2041,)\n",
1795
+ "(2041,)\n",
1796
+ "(2041,)\n",
1797
+ "(2041,)\n",
1798
+ "(2041,)\n",
1799
+ "(2041,)\n",
1800
+ "(2041,)\n",
1801
+ "(2041,)\n",
1802
+ "(2041,)\n",
1803
+ "(2041,)\n",
1804
+ "(2041,)\n",
1805
+ "(2041,)\n",
1806
+ "(2041,)\n",
1807
+ "(2041,)\n",
1808
+ "(2041,)\n",
1809
+ "(2041,)\n",
1810
+ "(2041,)\n",
1811
+ "(2041,)\n",
1812
+ "(2041,)\n",
1813
+ "(2041,)\n",
1814
+ "(2041,)\n",
1815
+ "(2041,)\n",
1816
+ "(2041,)\n",
1817
+ "(2041,)\n",
1818
+ "(2041,)\n",
1819
+ "(2041,)\n",
1820
+ "(2041,)\n",
1821
+ "(2041,)\n",
1822
+ "(2041,)\n",
1823
+ "(2041,)\n",
1824
+ "(2041,)\n",
1825
+ "(2041,)\n",
1826
+ "(2041,)\n",
1827
+ "(2041,)\n",
1828
+ "(2041,)\n",
1829
+ "(2041,)\n",
1830
+ "(2041,)\n",
1831
+ "(2041,)\n",
1832
+ "(2041,)\n",
1833
+ "(2041,)\n",
1834
+ "(2041,)\n",
1835
+ "(2041,)\n",
1836
+ "(2041,)\n",
1837
+ "(2041,)\n",
1838
+ "(2041,)\n",
1839
+ "(2041,)\n",
1840
+ "(2041,)\n",
1841
+ "(2041,)\n",
1842
+ "(2041,)\n",
1843
+ "(2041,)\n",
1844
+ "(2041,)\n",
1845
+ "(2041,)\n",
1846
+ "(2041,)\n",
1847
+ "(2041,)\n",
1848
+ "(2041,)\n",
1849
+ "(2041,)\n",
1850
+ "(2041,)\n",
1851
+ "(2041,)\n",
1852
+ "(2041,)\n",
1853
+ "(2041,)\n",
1854
+ "(2041,)\n",
1855
+ "(2041,)\n",
1856
+ "(2041,)\n",
1857
+ "(2041,)\n",
1858
+ "(2041,)\n",
1859
+ "(2041,)\n",
1860
+ "(2041,)\n",
1861
+ "(2041,)\n",
1862
+ "(2041,)\n",
1863
+ "(2041,)\n",
1864
+ "(2041,)\n",
1865
+ "(2041,)\n",
1866
+ "(2041,)\n",
1867
+ "(2041,)\n",
1868
+ "(2041,)\n",
1869
+ "(2041,)\n",
1870
+ "(2041,)\n",
1871
+ "(2041,)\n",
1872
+ "(2041,)\n",
1873
+ "(2041,)\n",
1874
+ "(2041,)\n",
1875
+ "(2041,)\n",
1876
+ "(2041,)\n",
1877
+ "(2041,)\n",
1878
+ "(2041,)\n",
1879
+ "(2041,)\n",
1880
+ "(2041,)\n",
1881
+ "(2041,)\n",
1882
+ "(2041,)\n",
1883
+ "(2041,)\n",
1884
+ "(2041,)\n",
1885
+ "(2041,)\n",
1886
+ "(2041,)\n",
1887
+ "(2041,)\n",
1888
+ "(2041,)\n",
1889
+ "(2041,)\n",
1890
+ "(2041,)\n",
1891
+ "(2041,)\n",
1892
+ "(2041,)\n",
1893
+ "(2041,)\n",
1894
+ "(2041,)\n",
1895
+ "(2041,)\n",
1896
+ "(2041,)\n",
1897
+ "(2041,)\n",
1898
+ "(2041,)\n",
1899
+ "(2041,)\n",
1900
+ "(2041,)\n",
1901
+ "(2041,)\n",
1902
+ "(2041,)\n",
1903
+ "(2041,)\n",
1904
+ "(2041,)\n",
1905
+ "(2041,)\n",
1906
+ "(2041,)\n",
1907
+ "(2041,)\n",
1908
+ "(2041,)\n",
1909
+ "(2041,)\n",
1910
+ "(2041,)\n",
1911
+ "(2041,)\n",
1912
+ "(2041,)\n",
1913
+ "(2041,)\n",
1914
+ "(2041,)\n",
1915
+ "(2041,)\n",
1916
+ "(2041,)\n",
1917
+ "(2041,)\n",
1918
+ "(2041,)\n",
1919
+ "(2041,)\n",
1920
+ "(2041,)\n",
1921
+ "(2041,)\n",
1922
+ "(2041,)\n",
1923
+ "(2041,)\n",
1924
+ "(2041,)\n",
1925
+ "(2041,)\n",
1926
+ "(2041,)\n",
1927
+ "(2041,)\n",
1928
+ "(2041,)\n",
1929
+ "(2041,)\n",
1930
+ "(2041,)\n",
1931
+ "(2041,)\n",
1932
+ "(2041,)\n",
1933
+ "(2041,)\n",
1934
+ "(2041,)\n",
1935
+ "(2041,)\n",
1936
+ "(2041,)\n",
1937
+ "(2041,)\n",
1938
+ "(2041,)\n",
1939
+ "(2041,)\n",
1940
+ "(2041,)\n",
1941
+ "(2041,)\n",
1942
+ "(2041,)\n",
1943
+ "(2041,)\n",
1944
+ "(2041,)\n",
1945
+ "(2041,)\n",
1946
+ "(2041,)\n",
1947
+ "(2041,)\n",
1948
+ "(2041,)\n",
1949
+ "(2041,)\n",
1950
+ "(2041,)\n",
1951
+ "(2041,)\n",
1952
+ "(2041,)\n",
1953
+ "(2041,)\n",
1954
+ "(2041,)\n",
1955
+ "(2041,)\n",
1956
+ "(2041,)\n",
1957
+ "(2041,)\n",
1958
+ "(2041,)\n",
1959
+ "(2041,)\n",
1960
+ "(2041,)\n",
1961
+ "(2041,)\n",
1962
+ "(2041,)\n",
1963
+ "(2041,)\n",
1964
+ "(2041,)\n",
1965
+ "(2041,)\n",
1966
+ "(2041,)\n",
1967
+ "(2041,)\n",
1968
+ "(2041,)\n",
1969
+ "(2041,)\n",
1970
+ "(2041,)\n",
1971
+ "(2041,)\n",
1972
+ "(2041,)\n",
1973
+ "(2041,)\n",
1974
+ "(2041,)\n",
1975
+ "(2041,)\n",
1976
+ "(2041,)\n",
1977
+ "(2041,)\n",
1978
+ "(2041,)\n",
1979
+ "(2041,)\n",
1980
+ "(2041,)\n",
1981
+ "(2041,)\n",
1982
+ "(2041,)\n",
1983
+ "(2041,)\n",
1984
+ "(2041,)\n",
1985
+ "(2041,)\n",
1986
+ "(2041,)\n",
1987
+ "(2041,)\n",
1988
+ "(2041,)\n",
1989
+ "(2041,)\n",
1990
+ "(2041,)\n",
1991
+ "(2041,)\n",
1992
+ "(2041,)\n",
1993
+ "(2041,)\n",
1994
+ "(2041,)\n",
1995
+ "(2041,)\n",
1996
+ "(2041,)\n",
1997
+ "(2041,)\n",
1998
+ "(2041,)\n",
1999
+ "(2041,)\n",
2000
+ "(2041,)\n",
2001
+ "(2041,)\n",
2002
+ "(2041,)\n",
2003
+ "(2041,)\n",
2004
+ "(2041,)\n",
2005
+ "(2041,)\n",
2006
+ "(2041,)\n",
2007
+ "(2041,)\n",
2008
+ "(2041,)\n",
2009
+ "(2041,)\n",
2010
+ "(2041,)\n",
2011
+ "(2041,)\n",
2012
+ "(2041,)\n",
2013
+ "(2041,)\n",
2014
+ "(2041,)\n",
2015
+ "(2041,)\n",
2016
+ "(2041,)\n",
2017
+ "(2041,)\n",
2018
+ "(2041,)\n",
2019
+ "(2041,)\n",
2020
+ "(2041,)\n",
2021
+ "(2041,)\n",
2022
+ "(2041,)\n",
2023
+ "(2041,)\n",
2024
+ "(2041,)\n",
2025
+ "(2041,)\n",
2026
+ "(2041,)\n",
2027
+ "(2041,)\n",
2028
+ "(2041,)\n",
2029
+ "(2041,)\n",
2030
+ "(2041,)\n",
2031
+ "(2041,)\n",
2032
+ "(2041,)\n",
2033
+ "(2041,)\n",
2034
+ "(2041,)\n",
2035
+ "(2041,)\n",
2036
+ "(2041,)\n",
2037
+ "(2041,)\n",
2038
+ "(2041,)\n",
2039
+ "(2041,)\n",
2040
+ "(2041,)\n",
2041
+ "(2041,)\n",
2042
+ "(2041,)\n",
2043
+ "(2041,)\n",
2044
+ "(2041,)\n",
2045
+ "(2041,)\n",
2046
+ "(2041,)\n",
2047
+ "(2041,)\n",
2048
+ "(2041,)\n",
2049
+ "(2041,)\n",
2050
+ "(2041,)\n",
2051
+ "(2041,)\n",
2052
+ "(2041,)\n",
2053
+ "(2041,)\n",
2054
+ "(2041,)\n",
2055
+ "(2041,)\n",
2056
+ "(2041,)\n",
2057
+ "(2041,)\n",
2058
+ "(2041,)\n",
2059
+ "(2041,)\n",
2060
+ "(2041,)\n",
2061
+ "(2041,)\n",
2062
+ "(2041,)\n",
2063
+ "(2041,)\n",
2064
+ "(2041,)\n",
2065
+ "(2041,)\n",
2066
+ "(2041,)\n",
2067
+ "(2041,)\n",
2068
+ "(2041,)\n",
2069
+ "(2041,)\n",
2070
+ "(2041,)\n",
2071
+ "(2041,)\n",
2072
+ "(2041,)\n",
2073
+ "(2041,)\n",
2074
+ "(2041,)\n",
2075
+ "(2041,)\n",
2076
+ "(2041,)\n",
2077
+ "(2041,)\n",
2078
+ "(2041,)\n",
2079
+ "(2041,)\n",
2080
+ "(2041,)\n",
2081
+ "(2041,)\n",
2082
+ "(2041,)\n",
2083
+ "(2041,)\n",
2084
+ "(2041,)\n",
2085
+ "(2041,)\n",
2086
+ "(2041,)\n",
2087
+ "(2041,)\n",
2088
+ "(2041,)\n",
2089
+ "(2041,)\n",
2090
+ "(2041,)\n",
2091
+ "(2041,)\n",
2092
+ "(2041,)\n",
2093
+ "(2041,)\n",
2094
+ "(2041,)\n",
2095
+ "(2041,)\n",
2096
+ "(2041,)\n",
2097
+ "(2041,)\n",
2098
+ "(2041,)\n",
2099
+ "(2041,)\n",
2100
+ "(2041,)\n",
2101
+ "(2041,)\n",
2102
+ "(2041,)\n",
2103
+ "(2041,)\n",
2104
+ "(2041,)\n",
2105
+ "(2041,)\n",
2106
+ "(2041,)\n",
2107
+ "(2041,)\n",
2108
+ "(2041,)\n",
2109
+ "(2041,)\n",
2110
+ "(2041,)\n",
2111
+ "(2041,)\n",
2112
+ "(2041,)\n",
2113
+ "(2041,)\n",
2114
+ "(2041,)\n",
2115
+ "(2041,)\n",
2116
+ "(2041,)\n",
2117
+ "(2041,)\n",
2118
+ "(2041,)\n",
2119
+ "(2041,)\n",
2120
+ "(2041,)\n",
2121
+ "(2041,)\n",
2122
+ "(2041,)\n",
2123
+ "(2041,)\n",
2124
+ "(2041,)\n",
2125
+ "(2041,)\n",
2126
+ "(2041,)\n",
2127
+ "(2041,)\n",
2128
+ "(2041,)\n",
2129
+ "(2041,)\n",
2130
+ "(2041,)\n",
2131
+ "(2041,)\n",
2132
+ "(2041,)\n",
2133
+ "(2041,)\n",
2134
+ "(2041,)\n",
2135
+ "(2041,)\n",
2136
+ "(2041,)\n",
2137
+ "(2041,)\n",
2138
+ "(2041,)\n",
2139
+ "(2041,)\n",
2140
+ "(2041,)\n",
2141
+ "(2041,)\n",
2142
+ "(2041,)\n",
2143
+ "(2041,)\n",
2144
+ "(2041,)\n",
2145
+ "(2041,)\n",
2146
+ "(2041,)\n",
2147
+ "(2041,)\n",
2148
+ "(2041,)\n",
2149
+ "(2041,)\n",
2150
+ "(2041,)\n",
2151
+ "(2041,)\n",
2152
+ "(2041,)\n",
2153
+ "(2041,)\n",
2154
+ "(2041,)\n",
2155
+ "(2041,)\n",
2156
+ "(2041,)\n",
2157
+ "(2041,)\n",
2158
+ "(2041,)\n",
2159
+ "(2041,)\n",
2160
+ "(2041,)\n",
2161
+ "(2041,)\n",
2162
+ "(2041,)\n",
2163
+ "(2041,)\n",
2164
+ "(2041,)\n",
2165
+ "(2041,)\n",
2166
+ "(2041,)\n",
2167
+ "(2041,)\n",
2168
+ "(2041,)\n",
2169
+ "(2041,)\n",
2170
+ "(2041,)\n",
2171
+ "(2041,)\n",
2172
+ "(2041,)\n",
2173
+ "(2041,)\n",
2174
+ "(2041,)\n",
2175
+ "(2041,)\n",
2176
+ "(2041,)\n",
2177
+ "(2041,)\n"
2178
+ ]
2179
+ }
2180
+ ],
2181
+ "source": [
2182
+ "import os\n",
2183
+ "\n",
2184
+ "data = []\n",
2185
+ "\n",
2186
+ "fake_folder_path = os.path.join(\"..\", \"fake\")\n",
2187
+ "\n",
2188
+ "for filename in os.listdir(fake_folder_path):\n",
2189
+ " file_path = os.path.join(fake_folder_path, filename)\n",
2190
+ " y, sr = librosa.load(file_path, sr=16000)\n",
2191
+ " features = extract_features(y)\n",
2192
+ " data.append(features)"
2193
+ ]
2194
+ },
2195
+ {
2196
+ "cell_type": "code",
2197
+ "execution_count": 6,
2198
+ "metadata": {},
2199
+ "outputs": [
2200
+ {
2201
+ "data": {
2202
+ "text/plain": [
2203
+ "(1638, 2041)"
2204
+ ]
2205
+ },
2206
+ "execution_count": 6,
2207
+ "metadata": {},
2208
+ "output_type": "execute_result"
2209
+ }
2210
+ ],
2211
+ "source": [
2212
+ "data = np.array(data)\n",
2213
+ "data.shape"
2214
+ ]
2215
+ },
2216
+ {
2217
+ "cell_type": "code",
2218
+ "execution_count": 19,
2219
+ "metadata": {},
2220
+ "outputs": [
2221
+ {
2222
+ "data": {
2223
+ "text/plain": [
2224
+ "(1, 5)"
2225
+ ]
2226
+ },
2227
+ "execution_count": 19,
2228
+ "metadata": {},
2229
+ "output_type": "execute_result"
2230
+ }
2231
+ ],
2232
+ "source": [
2233
+ "n = np.array([[1], [2], [3], [4], [5]])\n",
2234
+ "n.reshape(1, -1).shape"
2235
+ ]
2236
+ },
2237
+ {
2238
+ "cell_type": "code",
2239
+ "execution_count": 16,
2240
+ "metadata": {},
2241
+ "outputs": [
2242
+ {
2243
+ "data": {
2244
+ "text/plain": [
2245
+ "(2041,)"
2246
+ ]
2247
+ },
2248
+ "execution_count": 16,
2249
+ "metadata": {},
2250
+ "output_type": "execute_result"
2251
+ }
2252
+ ],
2253
+ "source": [
2254
+ "data[0].shape"
2255
+ ]
2256
+ },
2257
+ {
2258
+ "cell_type": "code",
2259
+ "execution_count": 9,
2260
+ "metadata": {},
2261
+ "outputs": [],
2262
+ "source": [
2263
+ "prediction = []\n",
2264
+ "for sample in data:\n",
2265
+ " \n",
2266
+ " sample = scaler.transform(sample.reshape(1, -1))\n",
2267
+ "\n",
2268
+ " pred = model.predict(sample)\n",
2269
+ " prediction.append(pred)"
2270
+ ]
2271
+ },
2272
+ {
2273
+ "cell_type": "code",
2274
+ "execution_count": 21,
2275
+ "metadata": {},
2276
+ "outputs": [
2277
+ {
2278
+ "name": "stdout",
2279
+ "output_type": "stream",
2280
+ "text": [
2281
+ "cool\n"
2282
+ ]
2283
+ }
2284
+ ],
2285
+ "source": [
2286
+ "if prediction[0] == 0:\n",
2287
+ " print(\"cool\")\n",
2288
+ "# 1 is fake"
2289
+ ]
2290
+ },
2291
+ {
2292
+ "cell_type": "code",
2293
+ "execution_count": null,
2294
+ "metadata": {},
2295
+ "outputs": [],
2296
+ "source": []
2297
+ }
2298
+ ],
2299
+ "metadata": {
2300
+ "kernelspec": {
2301
+ "display_name": "Python 3",
2302
+ "language": "python",
2303
+ "name": "python3"
2304
+ },
2305
+ "language_info": {
2306
+ "codemirror_mode": {
2307
+ "name": "ipython",
2308
+ "version": 3
2309
+ },
2310
+ "file_extension": ".py",
2311
+ "mimetype": "text/x-python",
2312
+ "name": "python",
2313
+ "nbconvert_exporter": "python",
2314
+ "pygments_lexer": "ipython3",
2315
+ "version": "3.12.3"
2316
+ }
2317
+ },
2318
+ "nbformat": 4,
2319
+ "nbformat_minor": 2
2320
+ }