مع ظهور خدمات بث الموسيقى الشخصية ، هناك حاجة متزايدة لأنظمة يمكن أن توصي بالموسيقى بناءً على الحالات العاطفية للمستخدمين. إدراكًا لهذه الحاجة ، يتم تطوير Moodify بواسطة Son Nguyen في عام 2024 لتوفير توصيات موسيقى شخصية بناءً على مشاعر المستخدمين المكتشفين.
مشروع Moodify هو نظام توصية موسيقي متكامل قائم على العاطفة يجمع بين الواجهة الأمامية والخلفية ونماذج الذكاء الاصطناعي/ML وتحليلات البيانات لتوفير توصيات موسيقى مخصصة بناءً على مشاعر المستخدم. يحلل التطبيق تعبيرات النص أو الكلام أو الوجه ويقترح الموسيقى التي تتماشى مع العواطف المكتشفة.
يدعم Moodify من منصات سطح المكتب والهاتف المحمول تجربة مستخدم سلسة مع توصيات العاطفة في الوقت الفعلي وتوصيات الموسيقى. يتفاعل المشروع مع الواجهة الأمامية ، وجانغو للواجهة الخلفية ، وثلاثة نماذج متقدمة من الذكاء الاصطناعى/ML المتقدمين لاكتشاف العاطفة . يتم استخدام البرامج النصية لتحليل البيانات لتصور اتجاهات العاطفة وأداء النموذج.

يوفر Moodify توصيات موسيقية مخصصة بناءً على الحالات العاطفية للمستخدمين التي تم اكتشافها من خلال تعبيرات النص والكلام والوجه. يتفاعل مع الواجهة الخلفية المستندة إلى Django ، ونماذج AI/ML للكشف عن العاطفة ، وتستخدم تحليلات البيانات للرؤى البصرية في اتجاهات العاطفة وأداء النموذج.
تطبيق Moodify حاليًا مباشر ونشره على Vercel. يمكنك الوصول إلى التطبيق المباشر باستخدام الرابط التالي: Moodify.
لا تتردد في زيارة الواجهة الخلفية في Moodify Backend API.
Dicilder: يتم استضافة الواجهة الخلفية لـ Moodify حاليًا مع الطبقة المجانية للعرض ، لذلك قد يستغرق تحميل بضع ثوانٍ في البداية. بالإضافة إلى ذلك ، قد تدور بعد فترة من عدم النشاط أو ارتفاع حركة المرور ، لذا يرجى التحلي بالصبر إذا استغرقت الواجهة الخلفية بضع ثوان للرد.
وأيضًا ، فإن كمية الذاكرة المخصصة من خلال العرض هي 512 ميجابايت فقط مع 0.1 وحدة المعالجة المركزية ، وبالتالي قد تنفد الواجهة الخلفية من الذاكرة إذا كان هناك الكثير من الطلبات في وقت واحد ، مما قد يتسبب في إعادة تشغيل الخادم. أيضًا ، قد تفشل نماذج الكشف عن مشاعر الوجه والكلام أيضًا بسبب قيود الذاكرة - والتي يمكن أن تتسبب أيضًا في إعادة تشغيل الخادم.
ليس هناك ما يضمن وقت التشغيل أو الأداء مع النشر الحالي ، ما لم يكن لدي المزيد من الموارد (المال) لترقية الخادم :( لا تتردد في الاتصال بي إذا واجهت أي مشاكل أو تحتاج إلى مزيد من المساعدة.


































يحتوي المشروع على بنية ملفات شاملة تجمع بين الواجهة الأمامية والخلفية ونماذج AI/ML ومكونات تحليل البيانات:
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 File (لمتغيرات البيئة - يمكنك إنشاء بيانات الاعتماد الخاصة بك باتباع ملف المثال أو اتصل بي من أجل.)ابدأ بإعداد وتدريب نماذج الذكاء الاصطناعى/مل ، حيث ستكون هناك حاجة إلى الواجهة الخلفية لتعمل بشكل صحيح.
أو يمكنك تنزيل النماذج المدربة مسبقًا من روابط Google Drive المتوفرة في قسم النماذج التي تم تدريبها مسبقًا. إذا اخترت القيام بذلك ، يمكنك تخطي هذا القسم الآن.
استنساخ المستودع:
git clone https://github.com/hoangsonww/Moodify-Emotion-Music-App.gitانتقل إلى دليل AI/ML:
cd Moodify-Emotion-Music-App/ai_mlإنشاء وتفعيل بيئة افتراضية:
python -m venv venv
source venv/bin/activate # For macOS/Linux
. v env S cripts a ctivate # For Windowsتثبيت التبعيات:
pip install -r requirements.txt قم بتحرير التكوينات في ملف src/config.py :
src/config.py وقم بتحديث التكوينات حسب الحاجة ، وخاصة مفاتيح API Spotify وتكوين جميع المسارات.src/models وقم بتحديث المسارات إلى مجموعات البيانات ومسارات الإخراج حسب الحاجة.تدريب نموذج مشاعر النص:
python src/models/train_text_emotion.pyكرر أوامر مماثلة للنماذج الأخرى حسب الحاجة (على سبيل المثال ، نماذج العاطفة في الوجه والكلام).
تأكد من وضع جميع النماذج المدربة في دليل models ، وأنك قمت بتدريب جميع النماذج اللازمة قبل الانتقال إلى الخطوة التالية!
اختبار نماذج AI/ML المدربة حسب الحاجة :
src/models/test_emotion_models.py لاختبار النماذج المدربة.بمجرد أن تصبح نماذج AI/ML جاهزة ، تابع إنشاء الواجهة الخلفية.
انتقل إلى الدليل الخلفي:
cd ../backendإنشاء وتفعيل بيئة افتراضية:
python -m venv venv
source venv/bin/activate # For macOS/Linux
. v env S cripts a ctivate # For Windowsتثبيت التبعيات:
pip install -r requirements.txtتكوين أسرارك وبيئتك:
.env في دليل backend ..env : SECRET_KEY=your_secret_key
DEBUG=True
ALLOWED_HOSTS=<your_hosts>
MONGODB_URI=<your_mongodb_uri>
SECRET_KEY بزيارة DEBUG backend/settings.py Trueتشغيل ترحيل قاعدة البيانات:
python manage.py migrateابدأ خادم Django:
python manage.py runserver سيتم تشغيل خادم الخلفية على http://127.0.0.1:8000/ .
أخيرًا ، قم بإعداد الواجهة الأمامية للتفاعل مع الواجهة الخلفية.
انتقل إلى دليل الواجهة الأمامية:
cd ../frontendتثبيت التبعيات باستخدام الغزل:
npm installابدأ خادم التطوير:
npm start ستبدأ الواجهة الأمامية في http://localhost:3000 .
ملاحظة: إذا واجهت أي مشاكل أو تحتاج إلى ملف .env الخاص بي ، لا تتردد في الاتصال بي.
| طريقة HTTP | نقطة النهاية | وصف |
|---|---|---|
POST | /users/register/ | تسجيل مستخدم جديد |
POST | /users/login/ | قم بتسجيل الدخول إلى مستخدم واحصل على رمز JWT |
GET | /users/user/profile/ | استرداد ملف تعريف المستخدم المصادق عليه |
PUT | /users/user/profile/update/ | قم بتحديث ملف تعريف المستخدم المصادق عليه |
DELETE | /users/user/profile/delete/ | حذف ملف تعريف المستخدم المصادق عليه |
POST | /users/recommendations/ | احفظ توصيات للمستخدم |
GET | /users/recommendations/<str:username>/ | استرداد توصيات المستخدم بواسطة اسم المستخدم |
DELETE | /users/recommendations/<str:username>/<str:recommendation_id>/ | حذف توصية محددة للمستخدم |
DELETE | /users/recommendations/<str:username>/ | احذف جميع التوصيات للمستخدم |
POST | /users/mood_history/<str:user_id>/ | أضف مزاجًا إلى تاريخ مزاج المستخدم |
GET | /users/mood_history/<str:user_id>/ | استرداد تاريخ المزاج للمستخدم |
DELETE | /users/mood_history/<str:user_id>/ | احذف مزاجًا محددًا من تاريخ المستخدم |
POST | /users/listening_history/<str:user_id>/ | أضف مسارًا إلى سجل الاستماع للمستخدم |
GET | /users/listening_history/<str:user_id>/ | استرداد سجل الاستماع للمستخدم |
DELETE | /users/listening_history/<str:user_id>/ | احذف مسارًا محددًا من تاريخ المستخدم |
POST | /users/user_recommendations/<str:user_id>/ | احفظ توصيات المستخدم |
GET | /users/user_recommendations/<str:user_id>/ | استرداد توصيات المستخدم |
DELETE | /users/user_recommendations/<str:user_id>/ | احذف جميع التوصيات للمستخدم |
POST | /users/verify-username-email/ | تحقق مما إذا كان اسم المستخدم والبريد الإلكتروني صالحين |
POST | /users/reset-password/ | إعادة تعيين كلمة مرور المستخدم |
GET | /users/verify-token/ | تحقق من رمز المستخدم |
| طريقة HTTP | نقطة النهاية | وصف |
|---|---|---|
POST | /api/text_emotion/ | تحليل النص للمحتوى العاطفي |
POST | /api/speech_emotion/ | تحليل الكلام للمحتوى العاطفي |
POST | /api/facial_emotion/ | تحليل تعبيرات الوجه للعواطف |
POST | /api/music_recommendation/ | احصل على توصيات الموسيقى على أساس العاطفة |
| طريقة HTTP | نقطة النهاية | وصف |
|---|---|---|
GET | /admin/ | الوصول إلى واجهة مسؤول Django |
| طريقة HTTP | نقطة النهاية | وصف |
|---|---|---|
GET | /swagger/ | الوصول إلى وثائق واجهة برمجة تطبيقات Swagger UI |
GET | /redoc/ | الوصول إلى وثائق API REDOC |
GET | / | الوصول إلى نقطة نهاية جذر API (Swagger UI) |
إنشاء Superuser:
python manage.py createsuperuser الوصول إلى لوحة المسؤول على http://127.0.0.1:8000/admin/
يجب أن ترى صفحة تسجيل الدخول التالية:

واجهات برمجة التطبيقات الخلفية لدينا كلها موثقة بشكل جيد باستخدام Swagger UI و REDOC. يمكنك الوصول إلى وثائق API في عناوين URL التالية:
https://moodify-emotion-music-app.onrender.com/swagger .https://moodify-emotion-music-app.onrender.com/redoc .بدلاً من ذلك ، يمكنك تشغيل خادم الواجهة الخلفية محليًا والوصول إلى وثائق API في نقاط النهاية التالية:
http://127.0.0.1:8000/swagger .http://127.0.0.1:8000/redoc .بغض النظر عن اختيارك ، يجب أن ترى وثائق API التالية إذا كان كل شيء يعمل بشكل صحيح:
Swagger UI:

ريدوك:

تم تصميم نماذج AI/ML باستخدام محولات Pytorch و TensorFlow و Keras و Unggingface. يتم تدريب هذه النماذج على مجموعات البيانات المختلفة للكشف عن العواطف من التعبيرات النصية والكلام والوجه.
تُستخدم نماذج اكتشاف العاطفة لتحليل مدخلات المستخدم وتوفير توصيات الموسيقى في الوقت الفعلي بناءً على العواطف المكتشفة. يتم تدريب النماذج على مجموعات البيانات المختلفة لالتقاط الفروق الدقيقة في المشاعر الإنسانية وتوفير تنبؤات دقيقة.
تم دمج النماذج في خدمات API الخلفية لتوفير توصيات العاطفة في الوقت الفعلي وتوصيات الموسيقى للمستخدمين.
يجب تدريب النماذج أولاً قبل استخدامها في خدمات الواجهة الخلفية. تأكد من تدريب النماذج ووضعها في دليل models قبل تشغيل خادم الواجهة الخلفية. ارجع إلى قسم (البدء) [#ابدأ] لمزيد من التفاصيل.
أمثلة على تدريب نموذج المشاعر النصية.
لتدريب النماذج ، يمكنك تشغيل البرامج النصية المقدمة في دليل ai_ml/src/models . يتم استخدام هذه البرامج النصية للمعالجة المسبقة للبيانات وتدريب النماذج وحفظ النماذج المدربة للاستخدام لاحقًا. وتشمل هذه البرامج النصية:
train_text_emotion.py : يدرب نموذج اكتشاف المشاعر النصية.train_speech_emotion.py : يدرب نموذج الكشف عن مشاعر الكلام.train_facial_emotion.py : يدرب نموذج الكشف عن مشاعر الوجه. تأكد من أن لديك التبعيات الضرورية ومجموعات البيانات والتكوينات التي تم إعدادها قبل تدريب النماذج. على وجه التحديد ، تأكد من زيارة ملف config.py وتحديث المسارات إلى مجموعات البيانات وأدلة الإخراج إلى تلك الصحيحة على نظامك.
ملاحظة: بشكل افتراضي ، ستعطي هذه البرامج النصية أولوية باستخدام وحدة معالجة الرسومات الخاصة بك مع CUDA (إن وجدت) للتدريب بشكل أسرع. ومع ذلك ، إذا لم يكن ذلك متاحًا على جهازك ، فستعود البرامج النصية تلقائيًا إلى استخدام وحدة المعالجة المركزية للتدريب. للتأكد من أن لديك التبعيات اللازمة لتدريب GPU ، قم بتثبيت Pytorch بدعم CUDA باستخدام الأمر التالي:
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 بعد ذلك ، يمكنك تشغيل البرنامج النصي test_emotion_models.py لاختبار النماذج المدربة والتأكد من أنها توفر تنبؤات دقيقة:
python src/models/test_emotion_models.pyبدلاً من ذلك ، يمكنك تشغيل واجهة برمجة تطبيقات Flask Simple لاختبار النماذج عبر نقاط نهاية API Restful:
python ai_ml/src/api/emotion_api.pyنقاط النهاية هي كما يلي:
/text_emotion : يكتشف العاطفة من إدخال النص/speech_emotion : اكتشف العاطفة من صوت الكلام/facial_emotion : يكتشف العاطفة من صورة/music_recommendation : يوفر توصيات الموسيقى بناءً على العاطفة المكتشفة هام : لمزيد من المعلومات حول التدريب واستخدام النماذج ، يرجى الرجوع إلى وثائق AI/ML في دليل ai_ml .
ومع ذلك ، إذا كان تدريب النموذج كثيفًا للغاية بالنسبة لك ، فيمكنك استخدام روابط Google Drive التالية لتنزيل النماذج التي تم تدريبها مسبقًا:
model.safetensors . يرجى تنزيل ملف model.safetensors ai_ml/models/text_emotion_modelscaler.pkl . يرجى تنزيل هذا ووضع هذا في دليل ai_ml/models/speech_emotion_model .trained_speech_emotion_model.pkl . يرجى تنزيل هذا ووضع هذا في دليل ai_ml/models/speech_emotion_model .trained_facial_emotion_model.pt . يرجى تنزيل هذا ووضع هذا في دليل ai_ml/models/facial_emotion_model . تم تدريبها مسبقًا على مجموعات البيانات من أجلك وهي جاهزة للاستخدام في خدمات الواجهة الخلفية أو لأغراض الاختبار بمجرد تنزيلها ووضعها بشكل صحيح في دليل models .
لا تتردد في محورني إذا واجهت أي مشاكل أو تحتاج إلى مزيد من المساعدة في نماذج الذكاء الاصطناعي/ML.
يوفر مجلد data_analytics تحليل البيانات والتصور البرامج النصية لاكتساب رؤى في أداء نموذج اكتشاف العاطفة.
قم بتشغيل جميع البرامج النصية للتحليلات:
python data_analytics/main.py عرض التصورات التي تم إنشاؤها في مجلد visualizations .
فيما يلي بعض التصورات على سبيل المثال:
تصور توزيع العاطفة
منحنى فقدان التدريب
يوجد أيضًا إصدار محمول من تطبيق Moodify الذي تم تصميمه باستخدام React Native and Expo. يمكنك العثور على تطبيق الهاتف المحمول في دليل mobile .
انتقل إلى دليل الهاتف المحمول:
cd ../mobileتثبيت التبعيات باستخدام الغزل:
yarn installابدأ خادم تطوير المعرض:
yarn startمسح رمز الاستجابة السريعة باستخدام تطبيق Expo GO على جهازك المحمول لتشغيل التطبيق.
إذا نجحت ، يجب أن ترى الشاشة الرئيسية التالية:

لا تتردد في استكشاف تطبيق الهاتف المحمول واختبار وظائفه!
يستخدم المشروع Nginx و Gunicorn لموازنة التحميل وخدمة الواجهة الخلفية Django. يعمل Nginx كخادم وكيل عكسي ، بينما يخدم Gunicorn تطبيق Django.
تثبيت nginx:
sudo apt-get update
sudo apt-get install nginxتثبيت Gunicorn:
pip install gunicornتكوين nginx:
/nginx/nginx.conf مع التكوين الخاص بك.ابدأ Nginx و Gunicorn:
sudo systemctl start nginxgunicorn backend.wsgi:application الوصول إلى الواجهة الخلفية على http://<server_ip>:8000/ .
لا تتردد في تخصيص تكوين Nginx وإعدادات Gunicorn حسب الحاجة لنشرك.
يمكن تمييز المشروع باستخدام Docker لسهولة النشر والتوسيع. يمكنك إنشاء صور Docker لنماذج الواجهة الأمامية والخلفية و AI/ML.
بناء صور Docker:
docker compose up --buildسيتم بناء صور Docker لنماذج الواجهة الأمامية والخلفية و AI/ML. تحقق من الصور باستخدام:
docker imagesإذا واجهت أي أخطاء ، فحاول إعادة بناء صورتك دون استخدام ذاكرة التخزين المؤقت لأن ذاكرة التخزين المؤقت لـ Docker قد تسبب مشكلات.
docker-compose build --no-cacheأضفنا أيضًا ملفات نشر Kubernetes لخدمات الخلفية والواجهة الأمامية. يمكنك نشر الخدمات على مجموعة Kubernetes باستخدام ملفات Yaml المقدمة.
نشر خدمة الواجهة الخلفية:
kubectl apply -f kubernetes/backend-deployment.yamlنشر خدمة الواجهة الأمامية:
kubectl apply -f kubernetes/frontend-deployment.yamlفضح الخدمات:
kubectl expose deployment moodify-backend --type=LoadBalancer --port=8000
kubectl expose deployment moodify-frontend --type=LoadBalancer --port=3000الوصول إلى الخدمات باستخدام IP LoadBalancer:
http://<backend_loadbalancer_ip>:8000 .http://<frontend_loadbalancer_ip>:3000 . لا تتردد في زيارة دليل kubernetes للحصول على مزيد من المعلومات حول ملفات النشر والتكوينات.
لقد قمنا أيضًا بتضمين البرنامج النصي لخط أنابيب Jenkins لأتمتة عملية الإنشاء والنشر. يمكنك استخدام Jenkins لأتمتة عملية CI/CD لتطبيق Moodify.
قم بتثبيت Jenkins على الخادم أو الجهاز المحلي.
قم بإنشاء وظيفة خط أنابيب جينكينز الجديدة:
Jenkinsfile في دليل jenkins .قم بتشغيل خط أنابيب جنكينز:
لا تتردد في استكشاف البرنامج النصي لخط أنابيب Jenkins في Jenkinsfile وتخصيصه حسب الحاجة لعملية النشر الخاصة بك.
المساهمات مرحب بها! لا تتردد في توتر المستودع وتقديم طلب سحب.
لاحظ أن هذا المشروع لا يزال قيد التطوير النشط ، وأي مساهمات موضع تقدير.
إذا كان لديك أي اقتراحات أو طلبات الميزات أو تقارير الأخطاء ، فلا تتردد في فتح مشكلة هنا.
ترميز سعيد و vibin! ؟
تم إنشاؤه مع ❤ من قبل Son Nguyen في عام 2024.
؟ العودة إلى الأعلى