Skip to content

dydtjr1128/Speaker-Recognition-using-NN

Repository files navigation

Speaker-Recognition-using-NN(화자 인식)

Speaker Recognition using Neural Network & Linear Regression

독립적인 인물들의 음성데이터를 이용하여 말하는 사람이 누구인지 파악 할 수 있다.

화자 인식의 종류

화자 검증(Speaker Verification)

`화자 검증`은 저장한 화자의 음성과 입력 음성 사이의 유사도(Likelihood)를 이용하여 구한다. 즉, 저장되지 않은 목소리, 즉, 사칭 목소리와 ‘유사도 간 비율(Δ)’을 측정한다. 그리고 사칭자 대비 신뢰할 수 있는 비율에 해당하는 ‘기준값(Θ)’에 따라 화자 일치 여부를 검증하게 된다. 이러한 과정으로 시스템은 이를 통해 등록되지 않은 목소리를 구별할 수가 있게 된다.

화자 식별(Speaker Identification)

`화자식별`은 미리 N명의 화자 모델(Voiceprint)을 등록한 시스템을 이용하여 화자 식별을 한다(그림3). 특정 사람이 시스템에 음성을 입력하면, 등록된 화자 모델을 검색해 음성과 가장 일치하는 화자를 찾게 된다.

본 프로젝트에서는 화자 식별을 이용한 화자인식을 Neural Network를 이용하여 구현하였다.

MFCC

MFCC는 Mel Frequency Cepstrum Coefficient의 약자로서 음성인식 분야에서 널리 사용되는 알고리즘이다. MFCC는 소리의 특징을 추출하는 알고리즘으로서 입력받은 소리를 일반적으로 20ms-40ms정도의 작은 프레임으로 쪼개는 과정을 거치고 이러한 프레임들의 스펙트럼을 분석하여 특징을 추출하는 기법이다. MFCC를 이용한 Features 추출은 음정이 변해도 어느 정도 일정하다는 장점이 있기 때문에 음성인식에 효과적인 알고리즘이다. 아래의 그림은 MFCC의 전체적인 과정이다. 사람마다 개개인의 고유한 DNA 및 지문을 가지고 있듯이, 각 사람마다 목소리의 고유 주파수, 진폭 등이 다르다는 특성(MFCC)을 이용하여 개인의 신분을 확인 할 수 있는 화자 인식이 가능하다.

Project Structure

Data Collection

Folder name Name Number of data
0 유인나 20
1 배철수 20
2 이재은 20
3 최일구 20
4 문재인 20

Library

import pyaudio                     # Record audio from mic
import wave                        # Read/Write .wav
import os                          # Access folder
import librosa                     # Calc mfcc
import librosa.display             # Display mfcc with matplotlib
import matplotlib.pyplot as plt    # Draw waveform
import tensorflow as tf            # Use tf.nn
import numpy as np
import pandas as pd

Learning process

Linear Regression vs Nerual Network
Linear Regression Nerual Network

learning late = 0.001, shape[256,256], shape[128,128]을 섞은 총 8개의 Hidden layer를 이용한 학습으로 5개의 클래스에서 최종적으로 97%의 정답률을 보여주었다.

Result

Linear Regression vs Nerual Network
Linear Regression Nerual Network

이재은 아나운서의 목소리 데이터를 넣었을 때
2번을 뜻하는 이재은 아나운서일 확률이 약97.8%