Введение
В мире, где ваш телефон умеет угадывать настроение по плейлисту, почему бы не научить его распознавать звуки вокруг? С помощью фреймворка 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 вы можете добавить в свое приложение способность понимать мир вокруг, а это — шаг к созданию чего-то действительно умного и полезного. И кто знает, может, скоро ваш телефон начнет подсказывать вам, что за странный звук доносится из соседней комнаты.