Xamarin.Forms 및 Cognitive Services에서 스피커 식별을 시도합니다.
소개
이 게시물은 Xamarin Advent Calendar 2017의 17 일째 기사입니다.
Cognitive Services 에서는, 다양한 API 가 제공되고 있습니다.
그러나 「Speaker Recognition API」에 대해서는, 별로 일본 국내에서 이야기를 듣는 것은 없습니다.
그래서 Xamarin.Forms 와 Speaker Recognition API 에서 바삭바삭한 화자 식별 앱을 사용해 보려고 했습니다!
하지만, 사이에 맞지 않았습니다 ...
그래서 Speaker Recognition API의 소개와 Xamarin.Forms에서는 이렇게 사용할 수 있습니다.
라는 소개를 할 수 있으면 좋겠습니다!
여러가지 실험했으므로 그 결과도 공유합니다.
Speaker Recognition API
공식 API Reference는 여기입니다.
스피커 인증 (Speaker Verification)
이것은 "비밀번호 대신 음성 사용"할 수있는 것입니다.
Xamarin으로 만든 모바일 앱에도 이 기능을 쉽게 구현할 수 있습니다.
그러나 아직 일본어를 지원하지 않습니다.
사전에 지정된 10가지 영어 문구 중 하나를 선택하고 읽고 등록합니다.
이 때문에, 일본어에 대응하고 있지 않아도 사용할 수 있는 것 같은 생각이 듭니다만,
불행히도 논네이티브한 발음에서는, 원래 인식을 해 주지 않는 케이스가 많았습니다.
덧붙여서, 일본어 네이티브의 사람의 발음으로 가장 인식률이 높았던 것은,
my name is unknown to you
이었다.
추측입니다만, 이하가 이유일까라고 생각하고 있습니다.
- L이나 R이 포함되어 있지 않습니다.
- my name is 는 그 억양에 익숙한 사람이 많다.
스피커 식별(Speaker Identification)
이것은 "지금 누가 말하는지"를 식별할 수 있는 것입니다.
Xamarin으로 만든 모바일 앱에도 이 기능을 쉽게 구현할 수 있습니다.
불행히도, 이쪽도 아직 일본어에 대응하고 있지 않습니다.
다만, 이쪽에 대해서는, 일본어에서도 나름의 정밀도가 나오는 것 같기 때문에,
앱에 내장해도 재미있을까 생각합니다.
화자 식별 앱을 Xamarin.Forms로 만들어보세요!
이런 느낌을 만들어 보겠습니다.
공식 API Reference는 여기입니다.
스피커 인증 (Speaker Verification)
이것은 "비밀번호 대신 음성 사용"할 수있는 것입니다.
Xamarin으로 만든 모바일 앱에도 이 기능을 쉽게 구현할 수 있습니다.
그러나 아직 일본어를 지원하지 않습니다.
사전에 지정된 10가지 영어 문구 중 하나를 선택하고 읽고 등록합니다.
이 때문에, 일본어에 대응하고 있지 않아도 사용할 수 있는 것 같은 생각이 듭니다만,
불행히도 논네이티브한 발음에서는, 원래 인식을 해 주지 않는 케이스가 많았습니다.
덧붙여서, 일본어 네이티브의 사람의 발음으로 가장 인식률이 높았던 것은,
my name is unknown to you
이었다.
추측입니다만, 이하가 이유일까라고 생각하고 있습니다.
- L이나 R이 포함되어 있지 않습니다.
- my name is 는 그 억양에 익숙한 사람이 많다.
스피커 식별(Speaker Identification)
이것은 "지금 누가 말하는지"를 식별할 수 있는 것입니다.
Xamarin으로 만든 모바일 앱에도 이 기능을 쉽게 구현할 수 있습니다.
불행히도, 이쪽도 아직 일본어에 대응하고 있지 않습니다.
다만, 이쪽에 대해서는, 일본어에서도 나름의 정밀도가 나오는 것 같기 때문에,
앱에 내장해도 재미있을까 생각합니다.
화자 식별 앱을 Xamarin.Forms로 만들어보세요!
이런 느낌을 만들어 보겠습니다.
1. 사용자를 사용자 이름으로 등록
Speaker Recognition API에 Locale을 지정하여 POST합니다.
등록이 성공하면 JSON에서 사용자의 IdentificationProfileId(GUID)가 돌아옵니다.
IdentificationProfileId는 여기에서 지정할 수 없으므로 돌아온 결과와 사용자 정보 등을 연결할 필요가 있습니다.
public async Task<string> CreateProfile()
{
var client = new HttpClient();
//SubscriptionKeyはAzureの管理ポータルから確認可能。
client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", "{SubscriptionKey}");
var uri = "https://westus.api.cognitive.microsoft.com/spid/v1.0/identificationProfiles";
HttpResponseMessage response;
// Localeはja-jpが使えないので en-us にする。
byte[] byteData = Encoding.UTF8.GetBytes("{\"locale\":\"en-us\"}");
using (var content = new ByteArrayContent(byteData))
{
content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
response = await client.PostAsync(uri, content);
}
//JSONでIdentificationProfileId(GUID)が帰ってくるので受け取ってパースする。
var responceContent = await response.Content.ReadAsStringAsync();
var deserializedResponse = JsonConvert.DeserializeObject<IdentificationProfileId>(responceContent);
return deserializedResponse.Id;
}
2. 사용자를 지정하여 음성 등록
identificationProfileId를 지정하여 wav 파일을 POST합니다.
여기서 Xamarin.Forms에서 쉽게 wav를 녹음 할 수 있습니다.
「 Audio Recorder plugin for Xamarin and Windows 」를 사용해 보았습니다.
여기부터 만들기 때문에, 그대로는 움직이지 않습니다. (죄송합니다)
//作りかけです。。。
public async Task<string> CreateEnrollment(string identificationProfileId)
{
var recorder = new AudioRecorderService
{
StopRecordingOnSilence = true,
StopRecordingAfterTimeout = true,
TotalAudioTimeout = TimeSpan.FromSeconds(15)
};
var recordTask = await recorder.StartRecording();
var audioFile = await recordTask;
var client = new HttpClient();
client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", "{SubscriptionKey}");
var uri = $@"https://westus.api.cognitive.microsoft.com/spid/v1.0/identificationProfiles/{identificationProfileId}/enroll?shortAudio=true";
HttpResponseMessage response;
var byteData = new byte[audioFile.Length];
//結局、DependencyServiceを使わないと、iOSのストレージにアクセスできないじゃん(´;ω;`)
using (var content = new ByteArrayContent(byteData))
{
content.Headers.ContentType = new MediaTypeHeaderValue("multipart/form-data");
response = await client.PostAsync(uri, content);
}
var responceContent = await response.Content.ReadAsStringAsync();
return responceContent;
}
3. 등록한 누군가가 말한다
2.와 같은 요령으로, 대상이 되는 identificationProfileId 를 지정 (10ID까지) 해, wav 파일을 POST 합니다.
이제 아래와 같은 결과(발췌)가 돌아옵니다.
Confidence로서 신뢰도도 돌아옵니다.
일본어로도 동작했습니다∩(´∀`)∩
"IdentifiedProfileId": "0e1e82c8-32b1-45b0-8989-fe61efc95ead",
"Confidence": "High"
4. 누가 이야기했는지 표시
3.에서 IdentifiedProfileId가 돌아오고 있기 때문에, 그것에 근거해 표시할 뿐이군요.
결론
사이에 맞지 않아서 죄송합니다(´;ω;`)
Speaker Recognition API는 Xamarin에서도 쉽게 사용할 수 있으므로,
아이디어에 따라 모바일 앱에 화자 식별을 통합한 재미있는 것을 만들 수 있을 것 같네요!
Reference
이 문제에 관하여(Xamarin.Forms 및 Cognitive Services에서 스피커 식별을 시도합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/t-miyake/items/4bc6a6835863daa1a744
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(Xamarin.Forms 및 Cognitive Services에서 스피커 식별을 시도합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/t-miyake/items/4bc6a6835863daa1a744텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)