sancos/Detect_Behavior_with_Sensor_Data
0
1import streamlit as st2import pandas as pd3import numpy as np4import joblib5import matplotlib.pyplot as plt6 7 8# SAYFA AYARLARI VE BAŞLIK9 10st.set_page_config(page_title="CMI Hareket Tanıma Sistemi", page_icon="🏃♂️", layout="wide")11 12st.title("🏃♂️ CMI: Akıllı Hareket ve Davranış Tanıma")13st.markdown("---")14 15 16# MODEL VE ARAÇLARIN YÜKLENMESİ17 18@st.cache_resource19def load_assets():20 model = joblib.load("src/cmi_behavior_model_compressed.pkl")21 le = joblib.load("src/label_encoder.pkl")22 return model, le23 24try:25 model, le = load_assets()26 st.sidebar.success("✅ Model ve Encoder Yüklendi")27except:28 st.sidebar.error("❌ Model dosyaları bulunamadı!")29 30 31# KULLANICI GİRİŞLERİ 32 33st.sidebar.header("📊 Anlık Sensör Verileri")34 35# İvmeölçer Girişleri36st.sidebar.subheader("İvmeölçer (Accelerometer)")37acc_x = st.sidebar.slider("acc_x", -20.0, 20.0, 0.0)38acc_y = st.sidebar.slider("acc_y", -20.0, 20.0, 0.0)39acc_z = st.sidebar.slider("acc_z", -20.0, 20.0, 0.0)40 41# Dönüş (Rotation) Girişleri42st.sidebar.subheader("Jiroskop (Rotation)")43rot_x = st.sidebar.slider("rot_x", -10.0, 10.0, 0.0)44rot_y = st.sidebar.slider("rot_y", -10.0, 10.0, 0.0)45rot_z = st.sidebar.slider("rot_z", -10.0, 10.0, 0.0)46 47# Kişisel Bilgiler48st.sidebar.subheader("Demografik Bilgiler")49age = st.sidebar.number_input("Yaş", 5, 80, 25)50sex = st.sidebar.selectbox("Cinsiyet", ["Erkek", "Kadın"])51sex_val = 1 if sex == "Erkek" else 052 53 54# ÖZELLİK MÜHENDİSLİĞİ 55 56def prepare_features():57 # Modelde hesapladığımız Magnitude değerleri58 acc_mag = np.sqrt(acc_x**2 + acc_y**2 + acc_z**2)59 rot_mag = np.sqrt(rot_x**2 + rot_y**2 + rot_z**2)60 61 62 input_data = pd.DataFrame([{63 'acc_x': acc_x, 'acc_y': acc_y, 'acc_z': acc_z,64 'rot_x': rot_x, 'rot_y': rot_y, 'rot_z': rot_z,65 'acc_mag': acc_mag, 'rot_mag': rot_mag,66 'age': age, 'sex': sex_val,67 'sequence_counter': 1 # Örnek değer68 }])69 70 71 return input_data72 73 74# ANA EKRAN VE TAHMİN75 76col1, col2 = st.columns([1, 1])77 78with col1:79 st.subheader("📡 Canlı Sensör İzleme")80 # Bar grafik ile ivme şiddetlerini gösterme81 chart_data = pd.DataFrame({82 "Eksen": ["X", "Y", "Z"],83 "İvme (g)": [acc_x, acc_y, acc_z]84 })85 st.bar_chart(chart_data.set_index("Eksen"))86 87 st.metric("Bileşke İvme (Mag)", f"{np.sqrt(acc_x**2 + acc_y**2 + acc_z**2):.2f}")88 89with col2:90 st.subheader("🔮 Davranış Tahmini")91 92 if st.button("HAREKETİ ANALİZ ET", use_container_width=True):93 input_df = prepare_features()94 95 96 input_df = input_df.reindex(columns=model.feature_names_in_, fill_value=0)97 98 # Tahmin ve Olasılık99 prediction = model.predict(input_df)[0]100 proba = model.predict_proba(input_df)[0]101 102 label = le.inverse_transform([prediction])[0]103 104 st.success(f"Tahmin Edilen Davranış: **{label}**")105 106 # Olasılık Göstergesi107 st.write("Tahmin Güveni:")108 st.progress(float(max(proba)))109 110 111# İMZA112 113st.markdown("---")114st.markdown(115 """116 <div style='text-align:center'>117 <b>Serdar ÖNAL</b> | Kıdemli İnşaat Mühendisi & Yapay Zeka Uygulayıcısı<br>118 <i>Final Project - 2026</i>119 </div>120 """,121 unsafe_allow_html=True122)