개인화 된 음악 스트리밍 서비스가 증가함에 따라 사용자의 감정 상태를 기반으로 음악을 추천 할 수있는 시스템에 대한 요구가 커지고 있습니다. 이러한 요구를 깨닫고, Moodify는 2024 년 Son Nguyen이 사용자의 감지 감정을 기반으로 개인화 된 음악 추천을 제공하기 위해 개발되고 있습니다.
Moodify 프로젝트는 프론트 엔드, 백엔드, AI/ML 모델 및 데이터 분석을 결합하여 사용자 감정을 기반으로 개인화 된 음악 추천을 제공하는 통합 감정 기반 음악 추천 시스템입니다. 응용 프로그램은 텍스트, 음성 또는 얼굴 표정을 분석하고 감지 된 감정과 일치하는 음악을 제안합니다.
Dicktop과 모바일 플랫폼을 모두 지원하는 Moodify는 실시간 감정 감지 및 음악 권장 사항에 대한 완벽한 사용자 경험을 제공합니다. 이 프로젝트는 프론트 엔드, 백엔드 용 Django 및 감정 탐지를위한 3 개의 고급자가 훈련 된 AI/ML 모델에 대한 반응을 활용합니다. 데이터 분석 스크립트는 감정 트렌드와 모델 성능을 시각화하는 데 사용됩니다.

Moodify는 텍스트, 음성 및 얼굴 표정을 통해 감지 된 사용자의 감정 상태를 기반으로 개인화 된 음악 추천을 제공합니다. 감정 탐지를위한 Django 기반 백엔드, AI/ML 모델과 상호 작용하고 감정 추세 및 모델 성능에 대한 시각적 통찰력을 위해 데이터 분석을 활용합니다.
Moodify 앱은 현재 Vercel에 라이브 및 배포되었습니다. 다음 링크를 사용하여 라이브 앱에 액세스 할 수 있습니다 : moodify.
Moodify 백엔드 API에서 백엔드를 방문하십시오.
DICLAIMER : Moodify의 백엔드는 현재 렌더의 자유 계층 과 함께 호스팅되므로 처음에로드하는 데 몇 초가 걸릴 수 있습니다. 또한 비활성 또는 트래픽이 높은 기간이 지나면 스핀이 중단 될 수 있으므로 백엔드가 응답하는 데 몇 초가 걸리면 인내하십시오.
또한 렌더로 할당 된 메모리의 양은 0.1 CPU로 512MB 에 불과하므로 한 번에 요청이 너무 많으면 백엔드가 메모리가 부족하여 서버가 다시 시작될 수 있습니다. 또한 메모리 제약으로 인해 얼굴 및 음성 감정 감지 모델도 실패 할 수 있습니다. 이로 인해 서버가 다시 시작될 수도 있습니다.
서버를 업그레이드 할 리소스 (돈) 가 더 많지 않으면 현재 배포에 대한 가동 시간 또는 성능을 보장하지 않습니다.


































이 프로젝트에는 Frontend, Backend, 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 파일 (환경 변수 - 예제 파일에 따라 나만의 자격 증명을 만들거나 저에게 연락하십시오.)백엔드가 올바르게 작동하려면 AI/ML 모델을 설정하고 훈련하는 것으로 시작하십시오.
또는 미리 훈련 된 모델 섹션에 제공된 Google 드라이브 링크에서 미리 훈련 된 모델을 다운로드 할 수 있습니다. 그렇게하기로 선택하면 지금은이 섹션을 건너 뛸 수 있습니다.
저장소 복제 :
git clone https://github.com/hoangsonww/Moodify-Emotion-Music-App.gitAI/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 파일을 방문하여 필요에 따라 구성을 업데이트하고 특히 Spotify API 키를 업데이트하고 모든 경로를 구성하십시오.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비밀과 환경 구성 :
backend 디렉토리에서 .env 파일을 만듭니다..env 파일에 다음 환경 변수를 추가하십시오. SECRET_KEY=your_secret_key
DEBUG=True
ALLOWED_HOSTS=<your_hosts>
MONGODB_URI=<your_mongodb_uri>
backend/settings.py 방문하고 SECRET_KEY 추가하고 DEBUG True 로 설정하십시오.데이터베이스 마이그레이션 실행 :
python manage.py migrateDjango 서버 시작 :
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 API 문서에 액세스하십시오 |
GET | /redoc/ | 리드락 API 문서에 액세스하십시오 |
GET | / | API 루트 엔드 포인트 (Swagger UI) 액세스 |
슈퍼업자 만들기 :
python manage.py createsuperuser http://127.0.0.1:8000/admin/ 에서 관리자 패널에 액세스하십시오.
다음 로그인 페이지가 표시됩니다.

우리의 백엔드 API는 모두 Swagger UI 및 Redoc을 사용하여 잘 문서화되어 있습니다. 다음 URL에서 API 문서에 액세스 할 수 있습니다.
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 :

Redoc :

AI/ML 모델은 Pytorch, Tensorflow, Keras 및 Huggingface Transformers를 사용하여 구축됩니다. 이 모델은 다양한 데이터 세트에서 교육을받으며 텍스트, 음성 및 얼굴 표정에서 감정을 감지합니다.
감정 감지 모델은 사용자 입력을 분석하고 감지 된 감정을 기반으로 실시간 음악 권장 사항을 제공하는 데 사용됩니다. 이 모델은 인간 감정의 뉘앙스를 포착하고 정확한 예측을 제공하기 위해 다양한 데이터 세트에 대한 교육을받습니다.
이 모델은 백엔드 API 서비스에 통합되어 사용자에게 실시간 감정 감지 및 음악 권장 사항을 제공합니다.
모델은 백엔드 서비스에서 사용하기 전에 먼저 교육을 받아야합니다. 백엔드 서버를 실행하기 전에 모델이 모델을 교육하고 models 디렉토리에 배치해야합니다. 자세한 내용은 (시작 Getting) [#Gettarted] 섹션을 참조하십시오.
텍스트 감정 모델 훈련의 예.
모델을 훈련시키기 위해 ai_ml/src/models 디렉토리에서 제공된 스크립트를 실행할 수 있습니다. 이 스크립트는 데이터를 사전 처리하고 모델을 훈련하며 나중에 사용하기 위해 숙련 된 모델을 저장하는 데 사용됩니다. 이 스크립트에는 다음이 포함됩니다.
train_text_emotion.py : 텍스트 감정 감지 모델을 훈련시킵니다.train_speech_emotion.py : 음성 감정 감지 모델을 훈련시킵니다.train_facial_emotion.py : 얼굴 감정 감지 모델을 훈련시킵니다. 모델을 훈련하기 전에 필요한 종속성, 데이터 세트 및 구성이 설정되어 있는지 확인하십시오. 구체적으로 config.py 파일을 방문하여 데이터 세트 및 출력 디렉토리로의 경로를 시스템의 올바른 디렉토리로 업데이트하십시오.
참고 : 기본적 으로이 스크립트는 CUDA (사용 가능한 경우)를 사용하여 GPU를 사용하여 더 빠른 교육을받습니다. 그러나 컴퓨터에서 사용할 수없는 경우 스크립트는 자동으로 교육을 위해 CPU 사용으로 돌아갑니다. GPU 교육에 필요한 종속성이 있는지 확인하려면 다음 명령을 사용하여 CUDA 지원으로 Pytorch를 설치하십시오.
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 그런 다음 test_emotion_models.py 스크립트를 실행하여 훈련 된 모델을 테스트하고 정확한 예측을 제공 할 수 있습니다.
python src/models/test_emotion_models.py또는 RESTFUL API 엔드 포인트를 통해 모델을 테스트하기 위해 간단한 플라스크 API를 실행할 수 있습니다.
python ai_ml/src/api/emotion_api.py엔드 포인트는 다음과 같습니다.
/text_emotion : 텍스트 입력에서 감정을 감지합니다/speech_emotion : Speech Audio에서 감정을 감지합니다/facial_emotion : 이미지에서 감정을 감지합니다/music_recommendation : 감지 된 감정을 기반으로 음악 추천 제공 중요 : 교육 및 모델 사용에 대한 자세한 내용은 ai_ml 디렉토리의 AI/ML 문서를 참조하십시오.
그러나 모델을 교육하는 경우 모델이 너무 자원 집약적이면 다음 Google 드라이브 링크를 사용하여 미리 훈련 된 모델을 다운로드 할 수 있습니다.
model.safetensors . 이 model.safetensors 파일을 다운로드하여 ai_ml/models/text_emotion_model 디렉토리에 배치하십시오.scaler.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 디렉토리에 올바르게 다운로드하여 올바르게 배치되면 테스트 목적으로 사용할 준비가되었습니다.
문제에 직면하거나 AI/ML 모델에 대한 추가 지원이 필요한 경우 저에게 자유롭게 연락하십시오.
data_analytics 폴더는 감정 감지 모델의 성능에 대한 통찰력을 얻기 위해 데이터 분석 및 시각화 스크립트를 제공합니다.
모든 분석 스크립트를 실행하십시오.
python data_analytics/main.py visualizations 폴더에서 생성 된 시각화를 봅니다.
시각화 예는 다음과 같습니다.
감정 분포 시각화
훈련 손실 곡선 시각화
React Native 및 Expo를 사용하여 구축 된 Moodify 앱의 모바일 버전도 있습니다. mobile 디렉토리에서 모바일 앱을 찾을 수 있습니다.
모바일 디렉토리로 이동하십시오.
cd ../mobile원사를 사용하여 종속성 설치 :
yarn install엑스포 개발 서버 시작 :
yarn start모바일 장치의 Expo GO 앱을 사용하여 QR 코드를 스캔하여 앱을 실행하십시오.
성공하면 다음 홈 화면이 표시됩니다.

모바일 앱을 탐색하고 기능을 테스트하십시오!
이 프로젝트는 Nginx와 Gunicorn을 사용하여 Django 백엔드를로드 밸런싱하고 서비스합니다. Nginx는 리버스 프록시 서버 역할을하며 Gunicorn은 Django 응용 프로그램을 제공합니다.
nginx 설치 :
sudo apt-get update
sudo apt-get install nginxGunicorn 설치 :
pip install gunicornnginx 구성 :
/nginx/nginx.conf 에서 nginx 구성 파일 (필요한 경우)을 업데이트하십시오.nginx 및 gunicorn 시작 :
sudo systemctl start nginxgunicorn backend.wsgi:application http://<server_ip>:8000/ 에서 백엔드에 액세스하십시오 .
배포에 필요에 따라 Nginx 구성 및 Gunicorn 설정을 자유롭게 사용자 정의하십시오.
손쉬운 배포 및 스케일링을 위해 Docker를 사용하여 프로젝트를 컨테이너화할 수 있습니다. 프론트 엔드, 백엔드 및 AI/ML 모델에 대한 Docker 이미지를 만들 수 있습니다.
Docker 이미지 만들기 :
docker compose up --buildDocker 이미지는 프론트 엔드, 백엔드 및 AI/ML 모델을 위해 구축됩니다. 다음을 사용하여 이미지를 확인하십시오.
docker images오류가 발생하면 Docker의 캐시가 문제를 일으킬 수 있으므로 캐시를 사용하지 않고 이미지를 재건하십시오.
docker-compose build --no-cache또한 백엔드 및 프론트 엔드 서비스에 대한 Kubernetes 배포 파일을 추가했습니다. 제공된 Yaml 파일을 사용하여 Kubernetes 클러스터에 서비스를 배포 할 수 있습니다.
백엔드 서비스 배포 :
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=3000LoadBalancer IP를 사용하여 서비스에 액세스하십시오.
http://<backend_loadbalancer_ip>:8000 에서 백엔드 서비스에 액세스 할 수 있습니다.http://<frontend_loadbalancer_ip>:3000 에서 프론트 엔드 서비스에 액세스 할 수 있습니다. 배포 파일 및 구성에 대한 자세한 내용은 kubernetes 디렉토리를 방문하십시오.
또한 빌드 및 배포 프로세스 자동화를위한 Jenkins 파이프 라인 스크립트도 포함했습니다. Jenkins를 사용하여 Moodify 앱의 CI/CD 프로세스를 자동화 할 수 있습니다.
서버 또는 로컬 컴퓨터에 Jenkins를 설치하십시오.
새로운 Jenkins 파이프 라인 작업 만들기 :
jenkins 디렉토리에서 Jenkinsfile 사용하도록 파이프 라인을 구성하십시오.Jenkins 파이프 라인 실행 :
Jenkinsfile 에서 Jenkins 파이프 라인 스크립트를 탐색하고 배포 프로세스에 필요에 따라 사용자 정의하십시오.
기부금을 환영합니다! 리포지토리를 자유롭게 포크하고 풀 요청을 제출하십시오.
이 프로젝트는 여전히 적극적으로 개발 중이며 모든 기여에 감사드립니다.
제안, 기능 요청 또는 버그 보고서가 있으면 여기에서 자유롭게 문제를여십시오.
행복한 코딩과 바이빈! ?
2024 년 아들 Nguyen이 ❤️과 함께 만들었습니다.
? 위로 돌아갑니다