Bu proje, bir İHA veya robotik sistem operatörünün sesinden duygu durumunu (stres, öfke vb.) analiz etmek amacıyla geliştirdiğim bir çalışmadır.
Amacım, Python ortamında eğittiğim bir Derin Öğrenme (LSTM) modelini, robotik sistemlerde standart olan ROS 2 ortamına taşımak ve gerçek zamanlı çalışabilir hale getirmektir.
Bir Mekatronik Mühendisi olarak, sadece model eğitmekle kalmayıp bunu gerçek bir sisteme (Deploy) etmeyi hedefledim.
- Model Eğitimi: Modelin farklı ses tonlarına ve akustik ortamlara uyum sağlayabilmesi için RAVDESS, CREMA-D, SAVEE, TESS ve EmoDB veri setlerini birleştirerek geniş kapsamlı bir eğitim havuzu oluşturdum.
- Optimizasyon (ONNX): Python/TensorFlow bağımlılığını azaltmak ve robot üzerinde daha hızlı çalışmasını sağlamak için modelleri ONNX formatına dönüştürdüm.
- Entegrasyon (ROS 2 & Docker): Modeli açık kod kaynaklı ROS2 ile entegre ettim. Tüm sistemi, bağımlılık (dependency) sorunlarını çözmek için Docker konteyner yapısına taşıdım.
- ROS 2 (Humble) / Ubuntu 22.04: Sistem haberleşmesi için.
- Docker: İzole çalışma ortamı için.
- ONNX Runtime: Modeli hafifletmek ve hızlandırmak için.
- Python & TensorFlow: Model eğitimi ve veri işleme için.
Proje.mp4
Projenin çalıştığını görmek için yukarıdaki görsele tıklayabilirsiniz.
Docker'ın ekran kartına erişimi için (Turtlesim için gereklidir):
xhost +local:docker
docker compose up -d --build
Çalışan Docker'ı terminal'de kullanmak için:
docker exec -it pilot_stress_dev /bin/bash
Docker içindeyken ROS 2 paketini derleyin:
colcon build --symlink-install
source install/setup.bash
Hazırda bulunan test ses dosyası ile sistemi çalıştırmak için:
Varsayılan Çalıştırma:
ros2 launch pilot_stress_analysis audio_test.launch.py \
audio_file:=/ros2_ws/src/pilot_stress_analysis/pilot_stress_analysis/resource/03-01-05-01-01-02-03.wav
Cinsiyet Parametresi ile (Daha yüksek doğruluk için):
ros2 launch pilot_stress_analysis audio_test.launch.py \
gender:=female \
audio_file:=/ros2_ws/src/pilot_stress_analysis/pilot_stress_analysis/resource/03-01-05-02-01-01-02.wav
Modeli yeniden eğitmek, ipynb dosyasını incelemek veya kodları çalışmak isterseniz Python 3.10 ve venv kullanmalısınız.
- Sanal Ortamı Oluşturma:
python3.10 -m venv venv
- Aktif Etme:
source venv/bin/activate # Linux / MacOS
# .\venv\Scripts\activate # Windows
- Gerekli Kütüphanelerin Yüklenmesi:
pip install -r requirements.txt
- Model
model_female.onnxvemodel_male.onnxolarak iki ayrı yapıdadır. - Gerçek dünya koşullarını simüle etmek için eğitim verilerine gürültü ekleme (Noise Injection) ve zaman kaydırma (Time Stretching) gibi Veri Çoğaltma (Data Augmentation) teknikleri uygulanmıştır.
Modelin test veri seti üzerindeki doğruluk (accuracy) oranları cinsiyete göre farklılık göstermektedir:
| Model | Doğruluk (Accuracy) | Gözlem |
|---|---|---|
| Kadın Sesi (Female) | ~%88 | Yüksek frekans aralığı ve belirgin tonlamalar nedeniyle duygular daha net ayırt edilebilmektedir. |
| Erkek Sesi (Male) | ~%61 | Daha düz (monoton) ve pes ses yapısı, özellikle "Nötr" ve "Üzgün" gibi düşük enerjili duyguların karışmasına neden olmaktadır. |
Teknik Not: Bu performans farkı nedeniyle, sistem Cinsiyet Bağlı bir mimaride tasarlanmıştır. ROS 2 başlatma (launch) aşamasında
genderparametresi ile ilgili modelin yüklenmesi sağlanarak, her iki durum için de optimize edilmiş çıkarım (inference) hedeflenmiştir.