Unity에서 iOS Speech로 음성 인식

iOS10 에서 공개된 Speech API 입니다만, 이제 iOS11 도 나왔다고 하는 지금 무렵이 되어, Unity 로부터 사용해 보고 싶어졌습니다.
그러나 plugin 은 아무래도 아무도 공개하지 않았던 것 같아서, 만들어 보았습니다.

TL;DR



GitHub 로 공개하고 있으므로, clone 하고 사용해 주세요.
htps : // 기주 b. 코 m / 노이 r 네오 / 우니 S 페에 ch



사용법



ISpeechRecognizer 구현


public class SpeechRecognizer : MonoBehaviour, ISpeechRecognizer
{
    // 音声認識したときに呼ばれる
    public void OnRecognized(string transcription) { }

    // アクセスが承認されたときに呼ばれる
    public void OnAuthorized() { }

    public void OnError(string description) { }
    public void OnUnauthorized() { }
    public void OnAvailable() { }
    public void OnUnavailable() { }
}

콜백을받는 GameObject의 이름 등록


UniSpeech.SpeechRecognizer.CallbackGameObjectName = gameObject.name;샘플 프로젝트에서는 Start() 에 쓰고 있습니다.

사용자에게 음성 인식 액세스 권한을 요청


UniSpeech.SpeechRecognizer.RequestRecognizerAuthorization();마찬가지로 샘플 프로젝트에서는 Start() 에 쓰고 있습니다.

음성 인식 시작


UniSpeech.SpeechRecognizer.StartRecord();샘플 프로젝트에서는 OnAuthorized() 에 쓰고 있습니다.

구현 설명



Swift에서 SpeechRecognizer 구현



거의 Apple 샘플 코드 그대로이므로 특필할 일은 없습니다.

Unity -> Swift 브리지



위의 샘플이 Swift이거나 정보량이 역전되어 와서 Swift로 쓰고 싶었기 때문에 여기 plugin을 사용했습니다.
htps : // 기주 b. 코 m / 미야비 / 우니 타이 슈 ft

이것을 넣으면 거의 좋은 느낌이 됩니다만, objective-c 에서의 interface 의 정의만은 필요하므로, 3중 정의가 되어 버리는 것은 어떻게든 자동 생성으로 하고 싶습니다.

사이고에게



과연 인식 정확도는 상당히 높습니다.
Unity에서 모바일에서 사용할 수 있는 음성 인식이라고 하면, 아직 뭔가와 허들이 높은 것이 현재입니다만, 멀티 플랫폼을 버리고 바삭바삭과 네이티브의 기능을 사용한다고 하는 선택도 준비해 보았습니다.

Android도 똑같이 음성 인식의 API가 공개되고 있으므로, 인터페이스를 가지런히 한 플러그인으로 하면 편리할 것 같다고는 생각했습니다만, 특히 할 예정은 없습니다.

또 native -> Unity 에 string 이외를 돌려보려고 하면 귀찮아서 이번은 단단히 접었습니다만, bestTranscription 이외도 돌려주도록(듯이)라든지, 사용성의 개선의 여지는 있어, 그것은 마음이 향하면 해 갑니다.

좋은 웹페이지 즐겨찾기