FLOW
음성 녹음 후 데이터를 백엔드로 전송 #71 이슈에서 음성데이터를 백엔드로 전송 성공
위의 기능은 버튼 이벤트로 녹음의 시작과 끝을 정함
이제 추가적으로 화자가 말할때 녹음을 시작하고 말이 끝나면 녹음을 중단해야함.
따라서 Chrome STT 의 이벤트를 활용하여 STT 분석이 끝나는 시점에 녹음을 중단하고 다시 시작하도록 구현함
하지만 이렇게 구현하면 발언 대기시간동안 녹음이 계속 진행되므로 묵음 제거가 필요
백엔드에서 녹음된 음성을 받게되면 pydub 라이브러리를 사용해 묵음구간을 제거해준다.
myaudio = AudioSegment .from_wav (fs )
dBFS = myaudio .dBFS
silence_section = silence .detect_silence (myaudio , min_silence_len = 1000 , silence_thresh = dBFS - 16 )
silence_section = [((start / 1000 ),(stop / 1000 )) for start ,stop in silence_section ]
감정 분석
학습된 모델 (pkl) 파일을 서버에 올려 load.
모델(pkl)은 4초 단위로 학습되었으므로, 묵음 제거 음성을 4초단위로 slice함
각 음성 slice를 전처리해준다.
# 음성 전처리 실시
mfcc = librosa .feature .mfcc (sliced_signal , sr , n_fft = 400 , hop_length = 160 , n_mfcc = 36 )
mfcc = mfcc .reshape (- 1 )
mfcc = scaler_from_joblib .transform ([mfcc ])
전처리된 음성을 모델에 넣고, 감정 결과 반환
정확도 이슈
현재 음성 전처리가 부족한 부분이 있어 happy 와 sad 의 두 감정이 가장 많이 나옴
나머지 감정은 잘 인식하지 못하고 있으므로 정확도를 높여야함
묵음 이슈
모든 묵음을 제거 vs 맨 앞 가장 큰 묵음 제거
모든 묵음 제거 : 음성이 매우 짧아짐. 대신 정확도 향상 기대 가능
맨 앞 가장 큰 묵음 제거 : 음성 길이를 보존 가능 + 자연스러운 음성 추출 가능
but 묵음 중간에 발언이 아닌 잡음이 들어간다면 그 뒤 묵음은 제거가 안됨. => 묵음 부분 모두 sad 반환됨
감정 선택 이슈
감정 결과 리스트에서 빈도수 체크하는데 빈도수가 동일할때의 감정 우선순위 지정 필요
FLOW
pydub라이브러리를 사용해 묵음구간을 제거해준다.감정 분석
정확도 이슈
happy와sad의 두 감정이 가장 많이 나옴묵음 이슈
감정 선택 이슈