0. 주제

<전자책 텍스트 분석을 통해 분위기에 맞는 배경음악을 제공해주는 백그라운드 앱>

 

0.1. 사용 기술

  • 사용자의 화면을 캡쳐하여 텍스트를 인식하는 ocr 기술
  • 텍스트를 다중감성분류하는 nlp 기술
  • 음악을 다중감성분류하는 딥러닝 기술 

 

0.2. 기능

  • 메인기능: 실시간 ocr 수행을 기반으로 한 텍스트 분위기에 맞는 배경음악 제공
  • 부가기능: - on/off, - 음악 장르 취향 설정,  -음악의 fade효과, -예민도 등...

 

0.3. 진행

  •  23년 1학기 캡스톤디자인과창업프로젝트 그로스팀
  •  flask-firebase 수단은 실패로 끝나 다른 수단을 택했다

 


 

1. 데이터 관리

1.1 음악 데이터

firebase web 개발, firebase storage sdk를 사용했다

 

 

 

음성 데이터 다중 감성 분류기를 통해 분류하였다.

위 사진은 '슬픔'으로 판단된 감성을 저장한 firebase storage 모습이다.

 

 

중립음악의 경우, 분류기의 결과가 '중립'이다.

위 사진은 '중립'으로 판단된 로파이 장르의 음악을 저장한 firebase storage 모습이다.

 

 

1.2. 음악 메타(meta)데이터 

 

firebase realtime database를 사용하여 메타데이터를 저장했다.

디렉토리를 통해 top-down 방식으로 음악 위치를 찾을 수 있다.

감성음악/기쁨/001 의 value로 001.mp3의 위치를 반환한다.

 

https://romeoh.tistory.com/entry/Firebase-Python-Firebase-Realtime-Database

 

 

 

2. 개발 환경 설정

2.1. flask

 

python으로 개발하기 위해 flask를 사용했다.

 

 

2.2. firebase

 

 

firebase hosting sdk를 사용해 배포했다.

 

https://romeoh.tistory.com/70

 

 

2.3. postman

 

postman을 사용하여 params와 body request에 대한 api 작동을 확인했다.

 

 

 

 

3. api 코드

3.1. setting

flask, firebase 관련 라이브러리를 import 한다.

firebase sdk를 사용하기 위해 initialize 과정을 거친다.

이 값들은 공개해서는 안된다. 

 

코드의 가장 하단에는 위와 같은 모습이다.

app.run을 통해 대기중인 모습이다.

 

 

 

 

3.2. (nlp)딥러닝 모델과 연동 & 감성분석 결과

 

genre, mode, prediction을 바탕으로 firebase realtime db에서

우리가 원하는 음악의 메타데이터를 가져오는 함수이다.

mode에 따라 3가지로 구분하였으며,

mode2의 경우, 감성음악과 중립음악이 교차적으로 등장할 수 있도록 구성하였다.

 

 

3.3. playlist

 

앞 단계에서 얻은 음악 메타데이터를 사용하는 함수이다.

재생할 음악의 위치가 담긴 리스트를 구성함으로써,

재생목록 playlist(json)를 만들 수 있었다.

 

 

3.4. streamming

 

 

재생할 음악 위치가 담긴 jsonfile을 바탕으로 스트리밍하는 함수이다.

audio/mp3타입으로 반환하며, 현재 곡 종료 후 다음 곡을 자동으로 재생한다.

 

 

request value 의미 사용처
genreId 음악 장르(=genre) query를 위한 조건문(if,elif,else) 속 조건
modeId 재생모드(예민도) query를 위한 조건문(if,elif,else) 속 조건

 

 

 


 

1. 가장먼저 root url에 의해, genreId, modeId가 생성된 상태에서, 진행된다.

2.  nlp 모델결과로 감성prediction을 얻는다.

3. get_genre 함수에서 메타데이터를 얻는다.

4. get_playlist 함수에서 플레이리스트를 얻는다.

5. stream_audio 함수에서 음악을 재생한다.


 

 

 

 

4. 제언

저자는 firebase, flask를 이용한 api를 개발하려고 했지만, api 배포에 실패하였다.

원인은 firebase hosting에 있었으며, 독자들에게 fibase를 통한 api배포를 추천하지 않는다.

 

 

https://ppororo.tistory.com/5

두번째로 시도한 것이 nodejs, aws, filezilla, putty, sql을 이용한 api개발이다.

연동해야 할 기술이 많아 더 복잡하지만, 한번 익히면 그 이후에는 쉬운 방법이다.

api 배포시 방화벽에 막혔는데, 저자는 방화벽을 뚫었지만, 이것이 싫다면, 보안 설정을 잘 하는 것이 좋다.

 

 

 

 

 

 

 

 

+ Recent posts