Введение

В мире, где ваш телефон умеет угадывать настроение по плейлисту, почему бы не научить его распознавать звуки вокруг? С помощью фреймворка SoundAnalysis это проще, чем кажется. Мы расскажем, как легко и с минимальными потерями для душевного здоровья интегрировать распознавание звуков в ваше iOS-приложение.

Основные компоненты SoundAnalysis

  • SNAudioFileAnalyzer: Ваш личный детектив по звукам, который досконально исследует аудиофайл.

  • SNClassifySoundRequest: Помощник по распознаванию звуков. Дайте ему модель машинного обучения, и он сделает остальное.

  • SNResultsObserving: Протокол, который сделает так, чтобы ваш код знал о каждом успешном или провальном моменте анализа.

Шаги по реализации классификации звуков

Подготовка модели машинного обучения

Здесь у вас есть два варианта. Вы можете использовать одну из стандартных моделей, предоставляемых Apple, которая уже умеет распознавать типичные звуки (например, аплодисменты, лай собаки и т.д.). Однако, если вы хотите, чтобы ваше приложение распознавало специфические звуки, например, голос вашего кота, вам нужно создать свою модель машинного обучения. Это может быть сделано с помощью инструментов вроде Create ML, которые позволяют обучить модель на нужном наборе данных.

Настройка анализатора

Создайте экземпляр SNAudioFileAnalyzer и укажите путь к аудиофайлу:

let audioFileURL = URL(fileURLWithPath: "path_to_audio_file")
let analyzer = try SNAudioFileAnalyzer(url: audioFileURL)

Создание и настройка запроса классификации звуков

В нашем случае мы будем использовать стандартный запрос, предоставляемый Apple, который позволяет классифицировать звуки с использованием уже готовой модели:

let soundRequest = try SNClassifySoundRequest(classifierIdentifier: .version1)

Реализация наблюдателя для обработки результатов

Реализуйте протокол SNResultsObserving, чтобы обрабатывать результаты анализа:

class SoundResultsObserver: NSObject, SNResultsObserving {
    func analyzeRequest(_ analysisRequest: SNRequest, didProduce analysisResult: SNResult) {
        guard let classificationResult = analysisResult as? SNClassificationResult else { return }

        guard let topClassification = classificationResult.classifications.first else { return }

        let analysisStartTime = classificationResult.timeRange.start.seconds
        let readableTime = String(format: "%.2f", analysisStartTime)
        print("Результат анализа для аудио на времени: \(readableTime) сек.")

        let confidencePercentage = topClassification.confidence * 100.0
        let confidenceString = String(format: "%.2f%%", confidencePercentage)

        print("\(topClassification.identifier): уверенность \(confidenceString).\n")
    }
}

Запуск анализа

Запустите процесс анализа, связав запрос с наблюдателем:

let observer = SoundResultsObserver()
try analyzer.add(soundRequest, withObserver: observer)
analyzer.analyze()

Расширенные возможности

  • Анализ в реальном времени: SoundAnalysis также поддерживает потоковый анализ звуков, делая ваш телефон настоящим аудиошпионом.

  • Параллельный анализ: Запускайте несколько запросов одновременно, чтобы покрыть все возможные сценарии.

  • Обработка ошибок и исключений: Обрабатывайте ошибки, чтобы приложение было стабильным и не падало при первой же неполадке.

Заключение

Создать приложение, которое распознает звуки, оказывается, не так сложно, как кажется. С помощью SoundAnalysis вы можете добавить в свое приложение способность понимать мир вокруг, а это — шаг к созданию чего-то действительно умного и полезного. И кто знает, может, скоро ваш телефон начнет подсказывать вам, что за странный звук доносится из соседней комнаты.

Комментарии (0)