지식 공유

MS Azure Speaker Recognition(화자 인식) 사용하기

한상규 2021. 9. 27. 13:39

https://docs.microsoft.com/ko-kr/azure/cognitive-services/speech-service/get-started-speaker-recognition?tabs=script&pivots=programming-language-curl

 

Speaker Recognition 빠른 시작 - Speech Service - Azure Cognitive Services

Speech SDK에서 Speaker Recognition을 사용하여 질문에 대답하는 "말하는 사람"에 대해 알아봅니다. 이 빠른 시작에서는 음성 생체 측정을 사용하여 고유한 음성을 식별하는 스피커 확인 및 식별을 위한

docs.microsoft.com

공식 문서를 읽고 풀어써보았습니다.

 

Speaker Recognition이란?

Speaker Recognition(화자인식)이란 화자가 누구인지 식별하는 기술입니다. 이 기술을 사용하면 비밀번호 없이 목소리를 이용해서 로그인할 수 있습니다.

 

 

Azure 준비

1. Azure 가입을 먼저 해야 합니다.

2. Cognitive Services-음성 서비스-만들기

2.1 만들 때 반드시 미국 서부로 만들어주세요. 화자인식 기능은 westus 지역만 지원합니다.

 

3. 엔드포인트, 키 얻기

엔드포인트는 무조건 https://westus.api.cognitive.microsoft.com/ 입니다. 이 외의 엔드포인트에서는 지원되지 않습니다.

키는 키1, 키2 중 아무거나 사용하면 되는 것 같습니다. 

 

 

 

Speaker Recognition REST API로 사용하기

여러 방식으로 Speaker Recognition를 사용할 수 있지만 개인적으로 가장 간편하다고 생각하는 REST API로 사용해보겠습니다.

(REST API 외에도 여러 방법이 있습니다.) 

 

화자인식 적용 순서

1. 프로필 생성 - profileId 값을 얻습니다.

2. 프로필 등록 - 화자인식 때 사용할 사용자의 목소리를 입력합니다.

3. 화자인식 사용 - 등록된 화자가 맞는지 판단합니다.

화자인식 종류

Azure에서는 화자인식 프로필을 등록할 때 두가지 방법을 제공합니다. 

1. 텍스트 종속

  • 텍스트 종속은 말 그대로 정해진 대사를 이용해서 프로필을 생성하는 것입니다.
  • 'My voice is my passport verify me'라고 3번 말해야 합니다.

2.텍스트 독립

  • 어떤 대사를 말해도 상관 없습니다.
  • 20초 이상만 말하면 됩니다.

텍스트 종속 프로필 생성하기

대사를 말하기 전에 우선 프로필을 생성하겠습니다.

이 과정을 통해 profileId 값을 얻습니다.

Request

METHOD: POST
URL: https://westus.api.cognitive.microsoft.com/speaker/verification/v2.0/text-dependent/profiles
HEADER: 
Ocp-Apim-Subscription-Key:{위에서 준비한 키1 값}
Content-Type: application/json
BODY:
{'locale':'en-us'}

 

Response

{
    "remainingEnrollmentsCount": 3,
    "locale": "en-us",
    "createdDateTime": "2020-09-29T14:54:29.683Z",
    "enrollmentStatus": "Enrolling",
    "modelVersion": null,
    "profileId": "714ce523-de76-4220-b93f-7c1cc1882d6e",
    "lastUpdatedDateTime": null,
    "enrollmentsCount": 0,
    "enrollmentsLength": 0.0,
    "enrollmentSpeechLength": 0.0
}

profileId 필드에 714ce523-de76-4220-b93f-7c1cc1882d6e를 이용해서 화자인식을 사용할 것입니다. 잘 기억해두세요.

 

텍스트 종속 프로필 등록하기

방금 생성한 프로필에 화자의 목소리를 입력하겠습니다.

텍스트 종속은 위에 설명한 것 처럼 정해진 대사를 말해야 합니다.

'My voice is my passport verify me'라고 3번 말해야 합니다. 그러면 최종적으로 프로필이 생성됩니다. 

 

Request

METHOD: POST
URL: https://westus.api.cognitive.microsoft.com/speaker/verification/v2.0/text-dependent/profiles/{profileId}/enrollments
HEADER: 
Ocp-Apim-Subscription-Key:{위에서 준비한 키1 값}
Content-Type: audio/wav
BODY:
{binary file date}

URL에 {profileId} 라고 되어 있는 부분에 방금 발급 받은 714ce523-de76-4220-b93f-7c1cc1882d6e를 입력합니다.

그리고 .wav형식으로 녹음된 음성 파일을 보냅니다.

다시 말하자면 'My voice is my passport verify me'라고 말한 음성 파일을 보내야 합니다.

 

Response

{
  "profileId": "714ce523-de76-4220-b93f-7c1cc1882d6e",
  "enrollmentStatus": "Enrolling",
  "enrollmentsCount": 1,
  "enrollmentsLength": 1.83,
  "enrollmentsSpeechLength": 1.35,
  "remainingEnrollmentsCount": 2,
  "passPhrase": "my voice is my passport verify me",
  "audioLength": 1.83,
  "audioSpeechLength": 1.35
}

 

enrollmentStatus 필드가 Enrolled가 되면 등록이 완료된 것입니다.

 

 

화자 인식하기

프로필이 등록되었으면 이제부터 화자를 인식할 수 있습니다. 아무말이나 해보고 정확하게 판단하는지 확인해보세요.

Request

METHOD: POST
URL: https://westus.api.cognitive.microsoft.com/speaker/verification/v2.0/text-dependent/profiles/{profileId}/verify
HEADER: 
Ocp-Apim-Subscription-Key:{위에서 준비한 키1 값}
Content-Type: audio/wav
BODY:
{binary file date}

URL에 {profileId} 라고 되어 있는 부분에 방금 발급 받은 714ce523-de76-4220-b93f-7c1cc1882d6e를 입력합니다.

그리고 .wav형식으로 녹음된 음성 파일을 보냅니다.

 

Response

{
    "recognitionResult": "Accept",
    "score": 1.0
}

 

 

프로필 등록 때 화자가 입력을 했다면 Accept가 될 것이고 다른 사람이 입력을 했다면 reject가 될 것입니다.

 

텍스트 독립 프로필 생성하기

이제 텍스트 독립으로 넘어가겠습니다.

텍스트 독립은 텍스트 종속과 과정이 완전히 같습니다.

다만, 프로필 등록과정에서 'My voice is my passport verify me'라는 대사 대신 아무말이나 20초 이상 해야 합니다.

Request

METHOD: POST
URL: https://westus.api.cognitive.microsoft.com/speaker/verification/v2.0/text-independent/profiles
HEADER: 
Ocp-Apim-Subscription-Key:{위에서 준비한 키1 값}
Content-Type: application/json
BODY:
{
  "locale": "en-us"
}

URL만 다르고 모두 텍스트 종속과 동일하게 진행합니다.

 

Response

{
  "profileId": "49a36324-fc4b-4387-aa06-090cfbf0064f",
  "locale": "en-US",
  "enrollmentStatus": "Enrolling",
  "createdDateTime": "2015-04-23T18:25:43.41Z",
  "lastUpdatedDateTime": "2015-04-23T18:25:43.41Z",
  "enrollmentsCount": 0,
  "enrollmentsLength": 0,
  "enrollmentsSpeechLength": 0,
  "remainingEnrollmentsSpeechLength": 20,
  "modelVersion": "2019-12-05"
}

"profileId": "49a36324-fc4b-4387-aa06-090cfbf0064f" 를 잘 기억해둡니다.

 

텍스트 독립 프로필 등록하기

Request

METHOD: POST
URL: https://westus.api.cognitive.microsoft.com/speaker/verification/v2.0/text-independent/profiles/{profileId}/enrollments
HEADER: 
Ocp-Apim-Subscription-Key:{위에서 준비한 키1 값}
Content-Type: audio/wav
BODY:
{"binary file date"}

{profileId}에 발급 받은 프로필 아이디를 입력하니다. 여기서는 49a36324-fc4b-4387-aa06-090cfbf0064f입니다.

텍스트 독립은 정해진 대사 없이 20초 이상 말하면 됩니다. 한번에 다 말할 필요 없이 여러번 끊어서 말해도 됩니다.

음성 파일 형식 .wav로 해주어야 합니다.

 

Response

{
  "profileId": "49a36324-fc4b-4387-aa06-090cfbf0064f",
  "enrollmentStatus": "Enrolling",
  "enrollmentsCount": 1,
  "enrollmentsLength": 1.83,
  "enrollmentsSpeechLength": 1.35,
  "remainingEnrollmentsSpeechLength": 18.65,
  "audioLength": 1.83,
  "audioSpeechLength": 1.35
}

enrollmentStatus 필드가 Enrolled가 되면 등록이 완료된 것입니다.

 

 

화자 인식하기

Request

METHOD: POST
URL: https://westus.api.cognitive.microsoft.com/speaker/identification/v2.0/text-independent/profiles/identifySingleSpeaker?profileIds={profileId}
HEADER: 
Ocp-Apim-Subscription-Key:{위에서 준비한 키1 값}
Content-Type: audio/wav
BODY:
{"binary file date"}

텍스트 독립은 정해진 대사 없이 20초 이상 말하면 됩니다. 한번에 다 말할 필요 없이 여러번 끊어서 말해도 됩니다.

음성 파일 형식 .wav로 해주어야 합니다.

 

Response

Success:
{
    "identifiedProfile": {
        "profileId": "de99ab38-36c8-4b82-b137-510907c61fe8",
        "score": 0.9083486
    },
    "profilesRanking": [
        {
            "profileId": "de99ab38-36c8-4b82-b137-510907c61fe8",
            "score": 0.9083486
        }
    ]
}