Pengusir-Hama-Burung-Otomatis/tugas akhir/train.py

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!")