[Swift] 가희에게 iOS Speech 프레임워크를 들려주세요.

입문


Life is Tech ! Advent Calender 10일째입니다.
Life is Tech !나는 아이폰 멘토가 되는 초밥금이다.
평소에는 라이프 이즈 테크!스쿨은 아이폰 어플리케이션 제작을 통해 10명 안팎의 중·고등학생에게 프로그래밍 등을 가르친다.
대학은 도쿄대 법학부이기 때문에 대학과 정보학과는 전혀 관계가 없기 때문에 이른바 문과 엔지니어다.
첫날은 맡은 장과 함께 4일째 맡은 헤헤, 처음에 광고 달력에 초대받았을 때 보통 스위프트의 엔룸과 extension을 하고 싶었다.
하지만 4일째 헤헤 보도나는 스승과 판서를 인공지능으로 구분해 보았다에서 Life is Tech!멘토라는 대학생 스태프 활용, 웃는 느낌, 5일째 생각나는 기사, 목표 건강 프로그래머: 성분을 비교적 고려한 프로그래머에게 가장 적합한 에너지 음료에서 갑자기 swift로 벤젠 고리를 쓰는 절차 등 일반적인 기사가 아닌 느낌으로 울다
그래서 (드디어 본론이다.) 오늘은 아이폰으로 음성인식을 하고 싶다.생활 과학 기술에 익숙한 가희 스승 다반의 오리지널 곡으로 해보고 싶다는 것을 깨달았다.

실시

Speech 프레임과 AVFoundationAVAudioEngine 을 사용합니다.SFSpeechRecognizer라는 종류를 사용하여 마이크에서 얻은 음성 데이터를 식별한다.AVAudioEngine에서 얻은 음성 데이터를 SFSpeechRecognitionRequest에 전송하여 설치합니다.
그렇다면 우선 마이크 등을 사용하기 위해 사용자의 허락을 받는다.Speech 프레임 자체를 먼저 가져옵니다.
ViewController.swift
import Speech
그리고 음성인식 허가를 받는 방법은 다음과 같다.
ViewController.swift
    private func request() {

        SFSpeechRecognizer.requestAuthorization { (status) in

            OperationQueue.main.addOperation {

                switch status {

                case .authorized: print("authorized")
                case .denied: print("denied")
                case .restricted: print("restricted")
                case .notDetermined: print("notDetermined")
                }
            }
        }
    }
request 에서 이 viewDidAppear 방법을 호출합니다.
info.plist에 마이크 사용 목적 등을 기재했다.다음은 info입니다.plist에 추가합니다.
info.plist
    <key>NSMicrophoneUsageDescription</key>
    <string>歌詞判定のために使用します</string>
    <key>NSSpeechRecognitionUsageDescription</key>
    <string>歌詞判定のために使用します</string>
이로써 음성인식 준비는 끝났다.
그럼 음성인식 방법을 준비하세요.
ViewController.swift
    private func startRecording() throws {

        refreshTask()

        let audioSession = AVAudioSession.sharedInstance()
        try audioSession.setCategory(AVAudioSessionCategoryRecord)
        try audioSession.setMode(AVAudioSessionModeMeasurement)
        try audioSession.setActive(true, with: .notifyOthersOnDeactivation)

        recognitionRequest = SFSpeechAudioBufferRecognitionRequest()
        guard let inputNode = audioEngine.inputNode else {

            fatalError("Audio Engine has no inputNode")
        }

        guard let recognitionRequest = recognitionRequest else {

            fatalError("Unable to create a SFSpeechAudioBufferRecognition object")
        }

        recognitionRequest.shouldReportPartialResults = true

        recognitionTask = speechRecognizer?.recognitionTask(with: recognitionRequest, resultHandler: { [weak self] result, error in

            guard let `self` = self else { return }

            var isFinal = false
            if let result = result {

                print(result.bestTranscription.formattedString)
                isFinal = result.isFinal
            }

            if error != nil || isFinal {

                self.audioEngine.stop()
                inputNode.removeTap(onBus: 0)

                self.recognitionRequest = nil
                self.recognitionTask = nil

            }
        })

        let recordingFormat = inputNode.outputFormat(forBus: 0)
        inputNode.installTap(onBus: 0, bufferSize: 1024, format: recordingFormat, block: { (buffer: AVAudioPCMBuffer, when: AVAudioTime) in

            self.recognitionRequest?.append(buffer)
        })

        try startAudioEngine()
    }

    private func refreshTask() {

        if let recognitionTask = recognitionTask {

            recognitionTask.cancel()
            self.recognitionTask = nil
        }
    }

    private func startAudioEngine() throws {

        audioEngine.prepare()

        try audioEngine.start()
    }
이때까지 말만 하면 콘솔에 단단히 찍혔다.
그럼 이게 가희 스승의 노래라면 어떨까요?

가희의 노래를 목소리로 식별해 봤어요.


그럼 바로 가희 지도교사의 오리지널 곡을 알아보자.
결과, 전혀 식별되지 않음
나는 몇 번 시도했지만 주위의 잡음도 없었지만 가사를 주지 않았다.
음악으로 재생되기 때문에 식별된 소리와 차이가 있을 수 있다.아니면 다른 사람의 목소리인지, 반주인지, 알기만 하면 기사를 업데이트하고 싶다.
맨 아래 샘플 코드에도 음원이 있으니 꼭 들어보세요.

번외편


1. 스위프트로 써봤으니 테일러 스위프트도 알게 해줘


스위프트로 검색하면 자주 나오는 테일러 스위프트의 노래는 어떨까.이것도 가희네.
내가 깨달은 것은 테일러 스위프트의 새로운 로맨스였다.베란다에서 익숙하네.

결과


유감스럽게도 이것도 전혀 인식되지 않은 결과이다.
원래 음악을 구어를 식별하는 기능에 두는 것은 잘못된 것이다.사과 선생은 상대할 수 없다.

2. Google Cloud Speech API 구현 방법


구글 클라우드 스피치 API도 인식할 수 있도록 하고 싶습니다.안타깝게도 Advent Calendar의 일정 관계로 인해 구현을 완료할 수 없습니다.Advent Calendar에서 Advent Calendar를 처음 핥는다.스케줄 결정 어려워
하지만 좋은 기사가 많아서 그쪽 공유만 해요.
Google Cloud Speech API 베타의 wav 파일에 대한 음성 인식
설정은 거의 전적으로 이 보도에 의존한다.
Google Cloud Speech API | Quickstart
GoogleCloudPlatform/ios-docs-samples(Goole의 예제 코드입니다.)

참조 URL


[iOS10] Speech Framework를 통한 음성 인식
SpeakToMe: Using Speech Recognition with AVAudioEngine(본 보도의 샘플 코드는 애플의 샘플 코드와 기본적으로 같다.)
[iOS] Speech Framework의 실현

예제 코드


마지막


결과


그렇다면 그 결과 가희 스승과 테일러 스위프트는 깨닫지 못했다.

느끼다


본론의 노래는 전혀 인식하지 못했지만 일반적으로 말하면 잘 알게 되는 좋은 틀이다.또 아주 간단하게 설치할 수 있어서 좋아요.(일반)
그렇다면 내일은 생명과학기술사가 자랑하는 최고급 아이폰 멘토와 미.LT 같은 것도 좋은데.
제목이'더 많은 사람들이 응용 프로그램을 사용할 수 있도록'이기 때문에 응용 프로그램 제작자와 디자이너는 반드시 봐야 한다.
그럼, 메리 크리스마스.

좋은 웹페이지 즐겨찾기