96 lines
2.1 KiB
Python
96 lines
2.1 KiB
Python
import os
|
|
import numpy as np
|
|
import librosa
|
|
import joblib
|
|
|
|
from sklearn.model_selection import train_test_split
|
|
from sklearn.ensemble import RandomForestClassifier
|
|
from sklearn.metrics import accuracy_score
|
|
|
|
DATASET_PATH = "D:/tugas akhir/dataset"
|
|
|
|
X = []
|
|
y = []
|
|
|
|
print("Processing audio...")
|
|
|
|
# =========================
|
|
# HUMAN
|
|
# =========================
|
|
human_path = os.path.join(DATASET_PATH, "human")
|
|
|
|
for file in os.listdir(human_path):
|
|
file_path = os.path.join(human_path, file)
|
|
|
|
try:
|
|
audio, sr = librosa.load(file_path, duration=1.5)
|
|
|
|
# ❌ filter dimatikan dulu
|
|
# if np.max(np.abs(audio)) < 0.01:
|
|
# continue
|
|
|
|
mfcc = librosa.feature.mfcc(y=audio, sr=sr, n_mfcc=13)
|
|
mfcc_scaled = np.mean(mfcc.T, axis=0)
|
|
|
|
X.append(mfcc_scaled)
|
|
y.append(10)
|
|
|
|
except:
|
|
print("Error human:", file)
|
|
|
|
# =========================
|
|
# BIRD
|
|
# =========================
|
|
bird_path = os.path.join(DATASET_PATH, "bird")
|
|
|
|
for file in os.listdir(bird_path):
|
|
file_path = os.path.join(bird_path, file)
|
|
|
|
try:
|
|
audio, sr = librosa.load(file_path, duration=1.5)
|
|
|
|
# ❌ filter dimatikan
|
|
# if np.max(np.abs(audio)) < 0.01:
|
|
# continue
|
|
|
|
mfcc = librosa.feature.mfcc(y=audio, sr=sr, n_mfcc=13)
|
|
mfcc_scaled = np.mean(mfcc.T, axis=0)
|
|
|
|
X.append(mfcc_scaled)
|
|
y.append(20)
|
|
|
|
print("BIRD LOADED:", file) # debug
|
|
|
|
except:
|
|
print("Error bird:", file)
|
|
|
|
# =========================
|
|
# ARRAY
|
|
# =========================
|
|
X = np.array(X)
|
|
y = np.array(y)
|
|
|
|
print("Total data:", len(X))
|
|
print("Class:", set(y))
|
|
|
|
# =========================
|
|
# TRAIN
|
|
# =========================
|
|
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
|
|
|
|
model = RandomForestClassifier()
|
|
model.fit(X_train, y_train)
|
|
|
|
# =========================
|
|
# EVALUASI
|
|
# =========================
|
|
y_pred = model.predict(X_test)
|
|
accuracy = accuracy_score(y_test, y_pred)
|
|
|
|
print("Akurasi:", accuracy)
|
|
|
|
# =========================
|
|
# SIMPAN
|
|
# =========================
|
|
joblib.dump(model, "model_burung.pkl")
|
|
print("Model disimpan!") |