Professional Documents
Culture Documents
2024 Магістерська ІПЗ Іванов Віктор
2024 Магістерська ІПЗ Іванов Віктор
УДК ___004.942_
(індекс)
МАГІСТЕРСЬКА РОБОТА
Іванов В.С.
_____________________________________
(підпис, ініціали та прізвище здобувача освітнього ступеня)
Івано-Франківськ – 2024
3
ЗАВДАННЯ
НА МАГІСТЕРСЬКУ РОБОТУ СТУДЕНТУ
Іванову Віктору Сергійовичу
(прізвище, ім’я, по-батькові)
Керівник ___________________________
(підпис)
КАЛЕНДАРНИЙ ПЛАН
№ Строк виконання
Назви етапів магістерської роботи Примітка
п/п етапів роботи
Дослідження мел-частотних
4 кепстральні та рекурентних нейронних 31.10.2023 виконано
мереж
Розробка алгоритму виявлення
5 12.11.2023 виконано
мовлення
6 Програмна реалізація алгоритму 18.11.2023 виконано
АНОТАЦІЯ
ANNOTATION
ЗМІСТ
РОЗДІЛ 1
АУДІОАНАЛІЗ. ОГЛЯД НАЯВНИХ ПРОГРАМНИХ РІШЕНЬ АНАЛІЗУ
АУДІОПОТОКУ………………………………………………………………………..15
1.1 Системи аналізу аудіопотоку…………………………………………………….16
1.2 Аналіз голосу програми Praat……………………………………………………17
РОЗДІЛ 2
АНАЛІЗ МОЖЛИВОСТЕЙ АЛГОРИТМІВ ЗНАХОДЖЕННЯ ТА ІДЕНТИФІКАЦІЇ
ЕЛЕМЕНТІВ АНАЛІЗУ МОВЛЕННЯ В АУДІОПОТОЦІ…………………….…….25
2.1 Поняття та методи розпізнавання елементів аналізу мовлення………….……23
2.2 Відстеження та ідентифікація. Аналіз даних аудіопотоку………………….…25
2.3 Поняття інтелектуального аналізу………………………………………………29
2.4 Необхідність інтелектуального аналізу для розпізнавання елементів
мовлення………………………………………………………………………….……33
2.5 Кластерний аналіз………………………………………………………….……...34
2.6 Висновки до розділу………………………………………………………………37
РОЗДІЛ 3
ЕТАПИ ОБРОБКИ АУДІОФРАГМЕНТІВ…………………………………….……..41
3.1 Аналіз спектральних характеристик аудіосигналу…………………………….38
8
РОЗДІЛ 4
ВИСНОВКИ………………………………………………………………………….…78
СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ……………………………………………...79
ДОДАТКИ………………………………………………………………………………84
9
ВСТУП
Актуальність роботи
У сучасному світі значно зростає роль та вплив цифрових технологій у всіх
сферах людської діяльності. Одним із ключових напрямків технологічного прогресу
є розвиток мультимедійного інтелекту, який охоплює широкий спектр додатків, від
автоматизації домашніх систем до розширених аналітичних інструментів у бізнесі та
науці. Актуальність даної роботи полягає у створенні та вдосконаленні засобів для
обробки та аналізу мовлення в аудіопотоках, що є критично важливим у контексті
зростаючої інформаційної перенасиченості та потреби в ефективному управлінні
цими даними.
Розпізнавання та обробка мовлення є основною складовою багатьох сучасних
інтелектуальних систем. Вони використовуються у широкому спектрі застосувань -
від голосових помічників та інтерактивних систем до аналітичних інструментів, що
дозволяють виявляти ключові інформаційні патерни в аудіоданих. Така обробка
дозволяє не тільки підвищити зручність використання голосових інтерфейсів, але й
відкриває можливості для глибокого аналізу мовлення, які можуть бути використані
в різних галузях, включаючи освіту, медицину, безпеку та юриспруденцію.
Завдяки постійному розвитку обчислювальних технологій та машинного
навчання, можливості аналізу мовлення стрімко зростають. Це відкриває нові
перспективи для створення більш ефективних та точних систем розпізнавання
мовлення. Однак, наявність великих обсягів даних та різноманітність мовних
особливостей ставлять перед дослідниками складні завдання щодо розробки
алгоритмів, здатних ефективно обробляти та аналізувати аудіопотоки. Ця робота
спрямована на вирішення цих завдань шляхом розробки нових моделей та методів
аналізу мовлення, що включають в себе виявлення та ідентифікацію ключових
елементів мовлення та їх подальшу обробку.
Важливість цієї роботи також полягає у розробці програмного додатку, що
дозволяє автоматизувати процес перетворення аудіоданих у стислий конспект. Такий
підхід значно спрощує обробку великих обсягів аудіоінформації та підвищує
11
Методи дослідження
Дослідження базується на застосуванні комплексного підходу, що включає
аналіз наукової літератури, програмування, експериментальну верифікацію, а також
порівняльний аналіз. Використовуються методи обчислювальної лінгвістики та
машинного навчання для обробки аудіоданих, а також статистичні методи для оцінки
точності та ефективності алгоритмів.
РОЗДІЛ 1
АУДІОАНАЛІЗ. ОГЛЯД НАЯВНИХ ПРОГРАМНИХ РІШЕНЬ АНАЛІЗУ
АУДІОПОТОКУ
РОЗДІЛ 2
АНАЛІЗ МОЖЛИВОСТЕЙ АЛГОРИТМІВ ЗНАХОДЖЕННЯ ТА
ІДЕНТИФІКАЦІЇ ЕЛЕМЕНТІВ АНАЛІЗУ МОВЛЕННЯ В АУДІОПОТОЦІ
РОЗДІЛ 3
ЕТАПИ ОБРОБКИ АУДІОФРАГМЕНТІВ
та багато інших.
Спектрограма полягає в розбитті аудіосигналу на короткі часові вікна, після
чого для кожного вікна обчислюється його спектральний склад за допомогою
алгоритму перетворення Фур'є. Отримані спектральні дані відображаються на
графіку, де по осі X відображається час, по осі Y - частота, а кольором чи яскравістю
позначається інтенсивність спектральних компонентів (рис. 3.6).
більш точно відображає сприйняття звуку людьми, оскільки наше вухо має
неоднакову чутливість до різних частот звуку.
Застосування мел-шкали включає:
1) Мовна та акустична обробка;
2) Аудіоаналіз;
3) Розпізнавання музики;
4) Психоакустичні дослідження;
5) Комунікація та технології розпізнавання мови.
Мовна та акустична обробка використовується для розпізнавання голосу,
синтезу мовлення, компресії аудіо та інших завдань обробки звуку.
Аудіоаналіз використовується для аналізу аудіосигналів у музичних індустріях,
сприйнятті музики та аудіоінженерії для аналізу мелодій, ритмів та характеристик
інструментів.
Розпізнавання музики допомагає в розпізнаванні композицій та музичних
фрагментів на основі специфічних мел-шкал.
Психоакустичні дослідження використовується для вивчення сприйняття та
реакції людей на різні аудіофактори.
Комунікація та технології розпізнавання мови допомагає в покращенні якості
акустичних систем для розпізнавання мови та мовленнєвих інтерфейсів.
(3.1)
де - вхідний дискретний сигнал;
- кількість відліків у сигналі;
- результат DFT;
- комплексна експонента, що представляє сигнал у частотному
домені.
f
m = 2595 log10 (1 + ) (3.2)
100
де m - значення в мел-шкалі;
f - частота в герцах.
в себе виявлення акустичних ознак, які вказують на перехід від однієї мовленнєвої
одиниці до іншої. Серед таких ознак можна виділити паузи, зміни амплітуди та
інтенсивності, а також характеристики мовленнєвих звуків.
У сучасних системах сегментації використовуються різноманітні методи та
алгоритми, включаючи прикладне машинне навчання, які навчаються виділяти
моменти переходу між мовленнєвими одиницями на основі акустичних та
статистичних ознак. Також використовуються алгоритми кластеризації та аналізу
часових рядів для виділення сегментів мовлення.
TP
IoU = (3.3)
TP+FP+FN
TP
Accurancy = (3.4)
TP+FP
55
S+D+I
SER = (3.5)
N
РОЗДІЛ 4
ПРОЕКТУВАННЯ ТА РЕАЛІЗАЦІЯ АЛГОРИТМУ ДЛЯ ВІДСТЕЖЕННЯ
ЕЛЕМЕНТІВ АНАЛІЗУ МОВЛЕННЯ В АУДІОПОТОЦІ
В RabbitMQ існує кілька типів обмінників, кожен з яких підтримує свою логіку
маршрутизації:
1) Direct Exchange, який аправляє повідомлення до черг на основі точної
відповідності ключа маршрутизації;
2) Topic Exchange, що використовує шаблони ключів маршрутизації для більш
гнучкої маршрутизації;
3) Fanout Exchange, який розсилає повідомлення усім прив'язаним чергам без
урахування ключа маршрутизації;
4) Headers Exchange, який використовує атрибути заголовків повідомлень для
маршрутизації.
Однією з ключових переваг обмінників в RabbitMQ є їхня здатність
забезпечувати гнучку маршрутизацію повідомлень. Завдяки цьому RabbitMQ може
бути конфігурований для обробки широкого спектру вимог до маршрутизації в
розподілених системах.
Обмінники в RabbitMQ розроблені таким чином, щоб забезпечувати високу
продуктивність та надійність у обробці повідомлень. Вони відіграють ключову роль
у забезпеченні стійкості та ефективності в обробці повідомлень у великих
розподілених системах.
Папка «src» є кореневою папкою для вихідного коду. Вона містить наступні
компоненти:
1) Директорія logs - папка для зберігання логів;
2) Директорія main - Тут розміщується основний Java код додатку;
3) Директорія target для зберігання скомпільованих файлів та артефактів збірки;
4) Директорія test викориристовується для зберігання тестових класів;
5) .mvn - папки, що містять скрипти та налаштування для забезпечення збірки
проекту;
6) Dockerfile - цей файл визначає інструкції для створення Docker образу вашого
застосунку;
7) pom.xml - файл конфігурації залежностей та плагінів проекту;
8) README.md - файл з описом проекту, інструкціями зі збірки та
використання;
9) .gitignore - файл, що вказує Git, які файли або папки ігнорувати;
10) Audio Elements Detection.iml - зберігає інформацію про модуль розробки
Склад папки main:
- директорія resources для зберігання ресурсів проекту, таких як конфігураційні
файли;
- клас AudioProcessor;
- клас DatabaseManager;
- клас SpeechRecognizer;
- клас MainApplication.
Директорія target містить docker-compose.yml, який використовується для
визначення та запуnску множини контейнерів Docker для MongoDB.
Даний проект має певну структуру. Кожний файл має певний функціонал, який
відповідає за певну ділянку додатку:
- AudioProcessor.java - клас, який займається первинною обробкою аудіоданих,
відповідає за перетворення аудіопотоку у формат байтовий масиву;
- DatabaseManager.java - клас відіграє ключову роль у зберіганні та управлінні
даними, встановлює з'єднання з MongoDB, забезпечує виконання операцій з базою
70
Лістинг 4.1
try {
byte[] audioData =
audioProcessor.processAudioFile(audioFilePath);
String recognizedText =
speechRecognizer.recognizeSpeech(audioData);
databaseManager.saveRecognitionResult(recognizedText);
writeRecognizedTextToFile(recognizedText,
"src/logs/recognizedText.txt");
} catch (Exception e) {
Лістинг 4.2
private static void setupLogging() {
try {
fileHandler.setFormatter(new SimpleFormatter());
logger.addHandler(fileHandler);
} catch (IOException e) {
При запуску MainApplication, він ініціалізує інші класи, необхідні для роботи
програми. Це включає створення екземплярів класів AudioProcessor,
SpeechRecognizer, і DatabaseManager.
Лістинг 4.3
AudioProcessor audioProcessor = new AudioProcessor();
Лістинг 4.5
private static void writeRecognizedTextToFile(String text, String
filePath) {
writer.write(text);
} catch (IOException e) {
Лістинг 4.6
databaseManager.saveRecognitionResult(recognizedText);
MainApplication керує цілим потоком роботи від початку до кінця. Він гарантує,
що кожен компонент виконує свою частину роботи в правильній послідовності.
У разі виникнення помилок або виключних ситуацій, MainApplication може
логувати ці події та вживати відповідних заходів.
74
Лістинг 4.7
private static void setupLogging() {
try {
fileHandler.setFormatter(new SimpleFormatter());
logger.addHandler(fileHandler);
} catch (IOException e) {
Лістинг 4.8
if (!AudioSystem.isLineSupported(info)) {
return;
Лістинг 4.8
public DatabaseManager(String dbName, String collectionName) {
database = mongoClient.getDatabase(dbName);
collection = database.getCollection(collectionName);
Лістинг 4.8
public void saveRecognitionResult(String text) {
.append("timestamp", System.currentTimeMillis());
collection.insertOne(doc);
}
77
ВИСНОВКИ
us/java/api/com.microsoft.cognitiveservices.speech.speechrecognizer?view=azure-
java-stable.
22. Converting Text to Speech in Java - GeeksforGeeks – [Електронний ресурс]. –
Режим доступу: https://www.geeksforgeeks.org/converting-text-speech-java/.
23. Java Speech Recognition Systems - LinkedIn – [Електронний ресурс]. – Режим
доступу: https://www.linkedin.com/pulse/java-speech-recognition-systems-
transforming-verbal-input-unhef/.
24. Adding Offline Speech Recognition to a Java Application - Medium –
[Електронний ресурс]. – Режим доступу:
https://medium.com/picovoice/prioritizing-privacy-add-offline-speech-recognition-
to-a-java-application-1c864574fb7e.
25. How to Convert Speech to Text in Java - Stack Overflow – [Електронний ресурс].
– Режим доступу: https://stackoverflow.com/questions/4292004/how-to-convert-
speech-to-text-in-java.
26. Introduction to the Java Speech API - Object Computing – [Електронний ресурс].
Режим доступу: https://objectcomputing.com/resources/publications/sett/march-
2006introduction-to-the-java-speech-api.
27. MongoDB - W3Schools – [Електронний ресурс]. – Режим доступу:
https://www.w3schools.com/mongodb/.
28. MongoDB - Wikipedia, the free encyclopedia – [Електронний ресурс]. – Режим
доступу: https://en.wikipedia.org/wiki/MongoDB.
29. MongoDB - IBM – [Електронний ресурс]. – Режим доступу:
https://www.ibm.com/topics/mongodb.
30. "What is a Recurrent Neural Network (RNN)?" - AWS – [Електронний ресурс]. –
Режим доступу: https://aws.amazon.com/what-is/recurrent-neural-
network/?nc1=h_ls.
31. "RNN Tutorial: What is a Recurrent Neural Network?" - Simplilearn –
[Електронний ресурс]. – Режим доступу:
https://www.simplilearn.com/tutorials/deep-learning-tutorial/rnn.
82
32. "Recurrent Neural Networks (RNN) and Long Short-Term Memory (LSTM)" -
Built In – [Електронний ресурс]. – Режим доступу: https://builtin.com/data-
science/recurrent-neural-networks-and-lstm.
33. "Educational Java Simulations" - ComPADRE – [Електронний ресурс]. – Режим
доступу: https://www.compadre.org/osp/EJSS/4487/272.htm.
34. "How are Neural Networks Related to Fourier Transforms?" - Medium –
[Електронний ресурс]. – Режим доступу: https://medium.com/@lorenzojcducv/how-
are-neural-networks-related-to-fourier-transforms-54e0b78e50de.
35. "Audio Data Processing: Feature Extraction and the Science Behind Them" -
Analytics Vidhya – [Електронний ресурс]. – Режим доступу:
https://www.analyticsvidhya.com/blog/2021/06/part-14-audio-data-processing-
feature-extraction-science-concepts-behind-them/.
35. "Spatial and Spectral Methods of Image Coding" - University of Auckland –
[Електронний ресурс]. – Режим доступу:
https://www.cs.auckland.ac.nz/compsci708s1c/lectures/jpeg_mpeg/spatial_spectral.ht
ml.
36. "Speech-to-Text: Automatic Speech Recognition" - Google Cloud – [Електронний
ресурс]. – Режим доступу: https://cloud.google.com/speech-to-text.
37. "Speech Recognition: Comprehensive Guide" - AIMultiple – [Електронний
ресурс]. – Режим доступу: https://research.aimultiple.com/speech-recognition/.
39. "Computational Linguistics" - Wikipedia – [Електронний ресурс]. – Режим
доступу: https://en.wikipedia.org/wiki/Computational_linguistics.
40. "RNN Explained: What is a Recurrent Neural Network?" - IBM Cloud Education –
[Електронний ресурс]. – Режим доступу:
https://www.ibm.com/cloud/learn/recurrent-neural-networks.
41. "Understanding LSTM Networks" - Colah's Blog – [Електронний ресурс]. –
Режим доступу: https://colah.github.io/posts/2015-08-Understanding-LSTMs/.
ДОДАТКИ
Додаток А
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.logging.FileHandler;
import java.util.logging.Logger;
import java.util.logging.SimpleFormatter;
setupLogging();
if (!audioFile.exists()) {
return;
try {
byte[] audioData =
audioProcessor.processAudioFile(audioFilePath);
String recognizedText =
speechRecognizer.recognizeSpeech(audioData);
Продовження додатку А
databaseManager.saveRecognitionResult(recognizedText);
writeRecognizedTextToFile(recognizedText,
"src/logs/recognizedText.txt");
} catch (Exception e) {
try {
fileHandler.setFormatter(new SimpleFormatter());
logger.addHandler(fileHandler);
} catch (IOException e) {
writer.write(text);
} catch (IOException e) {
}
Додаток Б
import javax.sound.sampled.*;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
try {
AudioInputStream audioStream =
AudioSystem.getAudioInputStream(audioFile);
AudioFormat.Encoding.PCM_SIGNED,
format.getSampleRate(),
16,
format.getChannels(),
format.getChannels() * 2,
format.getSampleRate(),
false);
AudioInputStream decodedAudioStream =
AudioSystem.getAudioInputStream(decodedFormat, audioStream);
int bytesRead;
return baos.toByteArray();
ex.printStackTrace();
return null;
}
Додаток В
import javax.sound.sampled.*;
import java.io.File;
import java.io.IOException;
try {
AudioInputStream audioStream =
AudioSystem.getAudioInputStream(audioFile);
if (!AudioSystem.isLineSupported(info)) {
return;
line.open(format);
line.start();
int bytesRead;
System.out.println("Start speaking...");
ex.printStackTrace();
if (buffer[i] != 0) {
soundDetected = true;
break;
}
Додаток Д
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.MongoCollection;
import org.bson.Document;
database = mongoClient.getDatabase(dbName);
collection = database.getCollection(collectionName);
.append("timestamp", System.currentTimeMillis());
collection.insertOne(doc);
public InnerMongoClient() {
return client.getDatabase(dbName);
if (client != null) {
client.close();
}
Додаток Е
version: '3.8'
services:
mongodb:
image: mongo:latest
container_name: mongodb_dev
ports:
- "27018:27017"
environment:
MONGO_INITDB_ROOT_USERNAME: UserPC
MONGO_INITDB_ROOT_PASSWORD: mongopass
volumes:
- mongodb_data_dev:/data/db
networks:
- mongo-network
networks:
mongo-network:
driver: bridge
volumes:
mongodb_data_dev: