Dengan munculnya layanan streaming musik yang dipersonalisasi, ada kebutuhan yang semakin besar akan sistem yang dapat merekomendasikan musik berdasarkan keadaan emosi pengguna. Menyadari kebutuhan ini, Moodify sedang dikembangkan oleh Son Nguyen pada tahun 2024 untuk memberikan rekomendasi musik yang dipersonalisasi berdasarkan emosi yang terdeteksi pengguna.
Proyek Moodify adalah sistem rekomendasi musik berbasis emosi terintegrasi yang menggabungkan frontend, backend, model AI/ML, dan analisis data untuk memberikan rekomendasi musik yang dipersonalisasi berdasarkan emosi pengguna. Aplikasi ini menganalisis teks, ucapan, atau ekspresi wajah dan menyarankan musik yang selaras dengan emosi yang terdeteksi.
Mendukung platform desktop dan seluler, Moodify menawarkan pengalaman pengguna yang mulus dengan deteksi emosi real-time dan rekomendasi musik. Proyek ini memanfaatkan bereaksi untuk frontend, django untuk backend, dan tiga model AI/mL yang dilatih sendiri untuk deteksi emosi . Skrip analisis data digunakan untuk memvisualisasikan tren emosi dan model kinerja.

Moodify memberikan rekomendasi musik yang dipersonalisasi berdasarkan keadaan emosi pengguna yang terdeteksi melalui teks, pidato, dan ekspresi wajah. Ini berinteraksi dengan backend berbasis Django, model AI/ML untuk deteksi emosi, dan menggunakan analisis data untuk wawasan visual ke dalam tren emosi dan model kinerja.
Aplikasi Moodify saat ini langsung dan digunakan di Vercel. Anda dapat mengakses aplikasi langsung menggunakan tautan berikut: Moodify.
Jangan ragu untuk mengunjungi backend di Moodify Backend API.
Diclaimer: Backend of Moodify saat ini di -host dengan tingkat render gratis , sehingga mungkin perlu beberapa detik untuk memuat pada awalnya. Selain itu, ini dapat berputar setelah periode tidak aktif atau lalu lintas tinggi, jadi harap bersabar jika backend membutuhkan beberapa detik untuk merespons.
Juga, jumlah memori yang dialokasikan oleh render hanya 512MB dengan 0,1 CPU , sehingga backend dapat kehabisan memori jika ada terlalu banyak permintaan sekaligus, yang dapat menyebabkan server restart. Selain itu, model deteksi emosi wajah dan ucapan juga dapat gagal karena kendala memori - yang juga dapat menyebabkan server restart.
Tidak ada jaminan uptime atau kinerja dengan penyebaran saat ini, kecuali saya memiliki lebih banyak sumber daya (uang) untuk meningkatkan server :( Jangan ragu untuk menghubungi saya jika Anda menghadapi masalah atau memerlukan bantuan lebih lanjut.


































Proyek ini memiliki struktur file yang komprehensif yang menggabungkan frontend, backend, model AI/mL, dan komponen analisis data:
Moodify-Emotion-Music-App/
├── frontend/ # React frontend for the web application
│ ├── public/
│ │ ├── index.html # Main HTML file
│ │ ├── manifest.json # Web app manifest
│ │ └── favicon.ico # Favicon for the app
│ │
│ ├── src/
│ │ ├── components/ # Contains all React components
│ │ ├── pages/ # Contains main pages of the app
│ │ ├── styles/ # Contains global styles and themes
│ │ ├── context/ # Contains React Context API
│ │ ├── App.js # Main App component
│ │ ├── index.js # Entry point for React
│ │ └── theme.js # Material UI theme configuration
│ │
│ ├── .gitignore # Git ignore file
│ ├── Dockerfile # Dockerfile for containerization
│ ├── package.json # NPM dependencies and scripts
│ └── README.md # Project documentation
│
├── backend/ # Django backend for API services and database management
│ ├── manage.py # Django's command-line utility
│ ├── requirements.txt # Backend dependencies
│ ├── backend/
│ │ ├── settings.py # Django settings for the project
│ │ ├── urls.py # URL declarations for the project
│ │ ├── users/ # User management components
│ │ └── api/ # Emotion detection and recommendation APIs
│ │
│ ├── .gitignore # Git ignore file
│ ├── Dockerfile # Dockerfile for containerization
│ └── db.sqlite3 # SQLite database (if used)
│
├── ai_ml/ # AI/ML models for emotion detection
│ ├── data/ # Datasets for training and testing
│ ├── models/ # Trained models for emotion detection
│ ├── src/ # Source files for emotion detection and recommendation
│ │ ├── api/ # API scripts for running emotion detection services
│ │ ├── recommendation/ # Music recommendation logic
│ │ └── data_processing/ # Data preprocessing scripts
│ │
│ ├── Dockerfile # Dockerfile for containerization
│ └── README.md # AI/ML documentation
│
├── data_analytics/ # Data analytics scripts and visualizations
│ ├── emotion_distribution.py # Script for visualizing emotion distribution
│ ├── training_visualization.py # Script for visualizing training and validation metrics
│ ├── predictions_analysis.py # Script for analyzing model predictions
│ ├── recommendation_analysis.py # Script for visualizing music recommendations
│ ├── spark-hadoop/ # Spark and Hadoop integration scripts
│ └── visualizations/ # Generated visualizations
│
├── kubernetes/ # Kubernetes deployment files
│ ├── backend-deployment.yaml # Deployment file for the backend service
│ ├── backend-service.yaml # Deployment file for the backend service
│ ├── frontend-deployment.yaml # Deployment file for the frontend service
│ ├── frontend-service.yaml # Deployment file for the frontend service
│ └── configmap.yaml # ConfigMap for environment variables
│
├── mobile/ # React Native mobile application
│ ├── App.js # Main entry point for React Native app
│ ├── index.js # App registry for React Native
│ ├── package.json # NPM dependencies and scripts
│ ├── components/ # React Native components
│ │ ├── Footer.js # Footer component
│ │ ├── Navbar.js # Header component
│ │ ├── Auth/ # Authentication components (e.g., Login, Register)
│ │ └── Profile/ # Profile-related components
│ │
│ ├── context/ # React Context API for state management
│ │ └── DarkModeContext.js # Dark mode context provider
│ │
│ ├── pages/ # Main pages of the app
│ │ ├── HomePage.js # Home page component
│ │ ├── ProfilePage.js # Profile page component
│ │ ├── ResultsPage.js # Results page component
│ │ ├── LandingPage.js # Landing page component
│ │ └── (and more...)
│ │
│ ├── assets/ # Images, fonts, and other assets
│ ├── styles/ # Styling files (similar to CSS for web)
│ ├── .gitignore # Git ignore file
│ ├── package.json # Dependencies and scripts
│ └── README.md # Mobile app documentation
│
├── nginx/ # NGINX configuration files (for load balancing and reverse proxy)
│ ├── nginx.conf # Main NGINX configuration file
│ └── Dockerfile # Dockerfile for NGINX container
│
├── images/ # Images used in the README documentation
├── docker-compose.yml # Docker Compose file for containerization
└── README.md # Comprehensive README file for the entire project
venv ).env (untuk variabel lingkungan - Anda membuat kredensial Anda sendiri mengikuti file contoh atau hubungi saya untuk saya.)Mulailah dengan pengaturan dan pelatihan model AI/ML, karena mereka akan diperlukan agar backend berfungsi dengan baik.
Atau, Anda dapat mengunduh model pra-terlatih dari tautan Google Drive yang disediakan di bagian model pra-terlatih. Jika Anda memilih untuk melakukannya, Anda dapat melewatkan bagian ini untuk saat ini.
Klon Repositori:
git clone https://github.com/hoangsonww/Moodify-Emotion-Music-App.gitArahkan ke direktori AI/ML:
cd Moodify-Emotion-Music-App/ai_mlBuat dan aktifkan lingkungan virtual:
python -m venv venv
source venv/bin/activate # For macOS/Linux
. v env S cripts a ctivate # For WindowsInstal dependensi:
pip install -r requirements.txt Edit konfigurasi di file src/config.py :
src/config.py dan perbarui konfigurasi sesuai kebutuhan, terutama tombol API Spotify Anda dan konfigurasikan semua jalur.src/models dan perbarui jalur ke dataset dan jalur output sesuai kebutuhan.Latih model emosi teks:
python src/models/train_text_emotion.pyUlangi perintah serupa untuk model lain sesuai kebutuhan (misalnya model emosi wajah dan ucapan).
Pastikan semua model terlatih ditempatkan di direktori models , dan bahwa Anda telah melatih semua model yang diperlukan sebelum pindah ke langkah berikutnya!
Uji model AI/mL terlatih sesuai kebutuhan :
src/models/test_emotion_models.py untuk menguji model yang terlatih.Setelah model AI/ML siap, lanjutkan dengan menyiapkan backend.
Arahkan ke direktori backend:
cd ../backendBuat dan aktifkan lingkungan virtual:
python -m venv venv
source venv/bin/activate # For macOS/Linux
. v env S cripts a ctivate # For WindowsInstal dependensi:
pip install -r requirements.txtKonfigurasikan Rahasia dan Lingkungan Anda:
.env di direktori backend ..env : SECRET_KEY=your_secret_key
DEBUG=True
ALLOWED_HOSTS=<your_hosts>
MONGODB_URI=<your_mongodb_uri>
backend/settings.py dan tambahkan SECRET_KEY & atur DEBUG ke True .Jalankan migrasi basis data:
python manage.py migrateMulai server Django:
python manage.py runserver Server backend akan berjalan di http://127.0.0.1:8000/ .
Akhirnya, atur frontend untuk berinteraksi dengan backend.
Arahkan ke Direktori Frontend:
cd ../frontendInstal dependensi menggunakan benang:
npm installMulai server pengembangan:
npm start Frontend akan mulai di http://localhost:3000 .
Catatan: Jika Anda mengalami masalah atau membutuhkan file .env saya, jangan ragu untuk menghubungi saya.
| Metode HTTP | Titik akhir | Keterangan |
|---|---|---|
POST | /users/register/ | Daftarkan Pengguna Baru |
POST | /users/login/ | Masuk pengguna dan dapatkan token JWT |
GET | /users/user/profile/ | Ambil profil pengguna yang diautentikasi |
PUT | /users/user/profile/update/ | Perbarui profil pengguna yang diautentikasi |
DELETE | /users/user/profile/delete/ | Hapus profil pengguna yang diautentikasi |
POST | /users/recommendations/ | Simpan rekomendasi untuk pengguna |
GET | /users/recommendations/<str:username>/ | Ambil rekomendasi untuk pengguna dengan nama pengguna |
DELETE | /users/recommendations/<str:username>/<str:recommendation_id>/ | Hapus rekomendasi tertentu untuk pengguna |
DELETE | /users/recommendations/<str:username>/ | Hapus semua rekomendasi untuk pengguna |
POST | /users/mood_history/<str:user_id>/ | Tambahkan suasana hati ke riwayat suasana hati pengguna |
GET | /users/mood_history/<str:user_id>/ | Ambil riwayat suasana hati untuk pengguna |
DELETE | /users/mood_history/<str:user_id>/ | Hapus suasana hati tertentu dari riwayat pengguna |
POST | /users/listening_history/<str:user_id>/ | Tambahkan trek ke riwayat mendengarkan pengguna |
GET | /users/listening_history/<str:user_id>/ | Ambil riwayat mendengarkan untuk pengguna |
DELETE | /users/listening_history/<str:user_id>/ | Hapus trek tertentu dari riwayat pengguna |
POST | /users/user_recommendations/<str:user_id>/ | Simpan rekomendasi pengguna |
GET | /users/user_recommendations/<str:user_id>/ | Ambil rekomendasi pengguna |
DELETE | /users/user_recommendations/<str:user_id>/ | Hapus semua rekomendasi untuk pengguna |
POST | /users/verify-username-email/ | Verifikasi jika nama pengguna dan email valid |
POST | /users/reset-password/ | Setel ulang kata sandi pengguna |
GET | /users/verify-token/ | Verifikasi token pengguna |
| Metode HTTP | Titik akhir | Keterangan |
|---|---|---|
POST | /api/text_emotion/ | Menganalisis teks untuk konten emosional |
POST | /api/speech_emotion/ | Menganalisis pidato untuk konten emosional |
POST | /api/facial_emotion/ | Menganalisis ekspresi wajah untuk emosi |
POST | /api/music_recommendation/ | Dapatkan rekomendasi musik berdasarkan emosi |
| Metode HTTP | Titik akhir | Keterangan |
|---|---|---|
GET | /admin/ | Mengakses antarmuka admin django |
| Metode HTTP | Titik akhir | Keterangan |
|---|---|---|
GET | /swagger/ | Akses dokumentasi API UI Swagger |
GET | /redoc/ | Akses dokumentasi API REDOC |
GET | / | Akses titik akhir root API (Swagger UI) |
Buat superuser:
python manage.py createsuperuser Akses Panel Admin di http://127.0.0.1:8000/admin/
Anda akan melihat halaman login berikut:

API backend kami semuanya didokumentasikan dengan baik menggunakan Swagger UI dan REDOC. Anda dapat mengakses dokumentasi API di URL berikut:
https://moodify-emotion-music-app.onrender.com/swagger .https://moodify-emotion-music-app.onrender.com/redoc .Atau, Anda dapat menjalankan server backend secara lokal dan mengakses dokumentasi API pada titik akhir berikut:
http://127.0.0.1:8000/swagger .http://127.0.0.1:8000/redoc .Terlepas dari pilihan Anda, Anda harus melihat dokumentasi API berikut jika semuanya berjalan dengan benar:
Swagger UI:

Redoc:

Model AI/ML dibangun menggunakan transformator Pytorch, Tensorflow, Keras, dan Huggingface. Model -model ini dilatih pada berbagai dataset untuk mendeteksi emosi dari teks, ucapan, dan ekspresi wajah.
Model deteksi emosi digunakan untuk menganalisis input pengguna dan memberikan rekomendasi musik real-time berdasarkan emosi yang terdeteksi. Model dilatih pada berbagai set data untuk menangkap nuansa emosi manusia dan memberikan prediksi yang akurat.
Model-model tersebut diintegrasikan ke dalam layanan API backend untuk memberikan deteksi emosi waktu nyata dan rekomendasi musik untuk pengguna.
Model harus dilatih terlebih dahulu sebelum menggunakannya di layanan backend. Pastikan model dilatih dan ditempatkan di direktori models sebelum menjalankan server backend. Rujuk ke bagian (Memulai) [#Getting-Started] untuk lebih jelasnya.
Contoh melatih model emosi teks.
Untuk melatih model, Anda dapat menjalankan skrip yang disediakan di direktori ai_ml/src/models . Script ini digunakan untuk melakukan preprocess data, melatih model, dan menyimpan model yang terlatih untuk digunakan nanti. Skrip ini termasuk:
train_text_emotion.py : melatih model deteksi emosi teks.train_speech_emotion.py : melatih model deteksi emosi ucapan.train_facial_emotion.py : melatih model deteksi emosi wajah. Pastikan Anda memiliki dependensi, kumpulan data, dan konfigurasi yang diperlukan sebelum melatih model. Secara khusus, pastikan untuk mengunjungi file config.py dan perbarui jalur ke dataset dan direktori output ke yang benar di sistem Anda.
Catatan: Secara default, skrip ini akan memprioritaskan menggunakan GPU Anda dengan CUDA (jika tersedia) untuk pelatihan yang lebih cepat. Namun, jika itu tidak tersedia di mesin Anda, skrip akan secara otomatis kembali menggunakan CPU untuk pelatihan. Untuk memastikan bahwa Anda memiliki dependensi yang diperlukan untuk pelatihan GPU, instal Pytorch dengan dukungan CUDA menggunakan perintah berikut:
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 Setelah itu, Anda dapat menjalankan skrip test_emotion_models.py untuk menguji model yang terlatih dan memastikan mereka memberikan prediksi yang akurat:
python src/models/test_emotion_models.pyAtau, Anda dapat menjalankan Flask API sederhana untuk menguji model melalui titik akhir API yang tenang:
python ai_ml/src/api/emotion_api.pyTitik akhir adalah sebagai berikut:
/text_emotion : mendeteksi emosi dari input teks/speech_emotion : mendeteksi emosi dari audio wicara/facial_emotion : mendeteksi emosi dari gambar/music_recommendation : memberikan rekomendasi musik berdasarkan emosi yang terdeteksi Penting : Untuk informasi lebih lanjut tentang pelatihan dan menggunakan model, silakan merujuk ke dokumentasi AI/ML di direktori ai_ml .
Namun, jika pelatihan model ini terlalu padat sumber daya untuk Anda, Anda dapat menggunakan tautan Google Drive berikut untuk mengunduh model pra-terlatih:
model.safetensors . Silakan unduh model.safetensors ini ai_ml/models/text_emotion_modelscaler.pkl . Silakan unduh ini dan tempatkan ini ke dalam direktori ai_ml/models/speech_emotion_model .trained_speech_emotion_model.pkl . Silakan unduh ini dan tempatkan ini ke dalam direktori ai_ml/models/speech_emotion_model .trained_facial_emotion_model.pt . Silakan unduh ini dan masukkan ini ke direktori ai_ml/models/facial_emotion_model . Ini telah dilatih sebelumnya pada dataset untuk Anda dan siap digunakan di layanan backend atau untuk tujuan pengujian setelah diunduh dan ditempatkan dengan benar di direktori models .
Jangan ragu untuk mengulurkan saya jika Anda mengalami masalah atau memerlukan bantuan lebih lanjut dengan model AI/ML.
Folder data_analytics menyediakan analisis data dan skrip visualisasi untuk mendapatkan wawasan tentang kinerja model deteksi emosi.
Jalankan semua skrip analitik:
python data_analytics/main.py Lihat visualisasi yang dihasilkan di folder visualizations .
Berikut adalah beberapa contoh visualisasi:
Visualisasi distribusi emosi
Visualisasi Kurva Kehilangan Pelatihan
Ada juga versi seluler dari aplikasi Moodify yang dibangun menggunakan React Native dan Expo. Anda dapat menemukan aplikasi seluler di direktori mobile .
Arahkan ke direktori seluler:
cd ../mobileInstal dependensi menggunakan benang:
yarn installMulai server pengembangan Expo:
yarn startPindai kode QR menggunakan aplikasi Expo GO di perangkat seluler Anda untuk menjalankan aplikasi.
Jika berhasil, Anda akan melihat layar beranda berikut:

Jangan ragu untuk menjelajahi aplikasi seluler dan menguji fungsinya!
Proyek ini menggunakan Nginx dan Gunicorn untuk menyeimbangkan beban dan menyajikan backend Django. Nginx bertindak sebagai server proxy terbalik, sementara Gunicorn melayani aplikasi Django.
Instal Nginx:
sudo apt-get update
sudo apt-get install nginxInstal Gunicorn:
pip install gunicornKonfigurasikan nginx:
/nginx/nginx.conf dengan konfigurasi Anda.Mulai Nginx dan Gunicorn:
sudo systemctl start nginxgunicorn backend.wsgi:application Akses backend di http://<server_ip>:8000/ .
Jangan ragu untuk menyesuaikan pengaturan konfigurasi dan Gunicorn Nginx sesuai kebutuhan untuk penyebaran Anda.
Proyek ini dapat dikemukakan menggunakan Docker untuk penerapan dan penskalaan yang mudah. Anda dapat membuat gambar Docker untuk model Frontend, Backend, dan AI/ML.
Bangun gambar Docker:
docker compose up --buildGambar Docker akan dibangun untuk model Frontend, Backend, dan AI/ML. Verifikasi gambar menggunakan:
docker imagesJika Anda mengalami kesalahan, cobalah untuk membangun kembali gambar Anda tanpa menggunakan cache karena cache Docker dapat menyebabkan masalah.
docker-compose build --no-cacheKami juga menambahkan file penyebaran Kubernetes untuk layanan backend dan frontend. Anda dapat menggunakan layanan pada cluster Kubernetes menggunakan file YAML yang disediakan.
Menyebarkan layanan backend:
kubectl apply -f kubernetes/backend-deployment.yamlMenyebarkan Layanan Frontend:
kubectl apply -f kubernetes/frontend-deployment.yamlMengekspos layanan:
kubectl expose deployment moodify-backend --type=LoadBalancer --port=8000
kubectl expose deployment moodify-frontend --type=LoadBalancer --port=3000Akses Layanan Menggunakan IP LoadBalancer:
http://<backend_loadbalancer_ip>:8000 .http://<frontend_loadbalancer_ip>:3000 . Jangan ragu untuk mengunjungi direktori kubernetes untuk informasi lebih lanjut tentang file dan konfigurasi penyebaran.
Kami juga menyertakan skrip pipa Jenkins untuk mengotomatisasi proses build dan penyebaran. Anda dapat menggunakan Jenkins untuk mengotomatiskan proses CI/CD untuk aplikasi Moodify.
Instal Jenkins di server atau mesin lokal Anda.
Buat pekerjaan pipa Jenkins baru:
Jenkinsfile di direktori jenkins .Jalankan Pipa Jenkins:
Jangan ragu untuk menjelajahi skrip pipa Jenkins di Jenkinsfile dan menyesuaikannya sesuai kebutuhan untuk proses penyebaran Anda.
Kontribusi dipersilakan! Jangan ragu untuk membayar repositori dan mengirimkan permintaan tarik.
Perhatikan bahwa proyek ini masih dalam pengembangan aktif, dan kontribusi apa pun dihargai.
Jika Anda memiliki saran, permintaan fitur, atau laporan bug, jangan ragu untuk membuka masalah di sini.
Happy Coding dan Vibin '! ?
Dibuat dengan ❤️ oleh putra Nguyen pada tahun 2024.
? Kembali ke atas