Телефон: 8-800-350-22-65
WhatsApp: 8-800-350-22-65
Telegram: sibac
Прием заявок круглосуточно
График работы офиса: с 9.00 до 18.00 Нск (5.00 - 14.00 Мск)

Статья опубликована в рамках: Научного журнала «Студенческий» № 4(258)

Рубрика журнала: Информационные технологии

Скачать книгу(-и): скачать журнал часть 1, скачать журнал часть 2, скачать журнал часть 3, скачать журнал часть 4, скачать журнал часть 5, скачать журнал часть 6

Библиографическое описание:
Крайников А.Н. РАЗРАБОТКА ПРОГРАММЫ ПЕРЕВОДА ЯЗЫКА ЖЕСТОВ В СИМВОЛЫ // Студенческий: электрон. научн. журн. 2024. № 4(258). URL: https://sibac.info/journal/student/258/318425 (дата обращения: 28.11.2024).

РАЗРАБОТКА ПРОГРАММЫ ПЕРЕВОДА ЯЗЫКА ЖЕСТОВ В СИМВОЛЫ

Крайников Александр Николаевич

магистрант, кафедра информационных систем и информационной безопасности, Северный (Арктический) федеральный университет,

РФ, г. Архангельск

DEVELOPMENT OF A PROGRAM FOR TRANSLATING SIGN LANGUAGE INTO SYMBOLS

 

Alexander Krainikov

student, Department of Information Systems and Information Security, Northern (Arctic) Federal University,

Russia, Arkhangelsk

 

АННОТАЦИЯ

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

ABSTRACT

This paper examines the solution to the problem of translating sign language at the letter level. The main logic of the application will be the development of a neural network for determining the hand symbol in real time.

 

Ключевые слова: Torch, Python, язык жестов, классификация.

Keywords: Torch, Python, sign language, classification.

 

Актуальность данного проекта заключается в необходимости специального переводчика, для общения с люди, имеющими дефекты речи. Данный проект призван упростить процесс перевода языка жестов в человеко-читаемый текст Целью данного проекта будет являться получение исходного кода программы для перевода языка жестов в текст с использованием модели глубокого обучения и веб-камеры. Задачи проекта можно выделить следующие:

- составление слов из жестов и вывод на экран;

- составление текста из слов и вывод на экран;

- простой и понятный интерфейс;

- использование веб-камеры для перевода в реальном времени;

- низкие требования к аппаратной части.

В следствии отсутствия знаний о языке жестов [1] было принято решение найти набор данных в сети интернет, а не создать самостоятельно. Исходя из анализа наборов данных можно сделать следующие выводы.

Набор данных делятся на два вида: "Уровень слов", "Уровень букв". В языке жестов есть два уровня общения, соответственно. Первый, где жесты означают слова и второй где жесты означают буквы или "символы", например, "Удалить", "Пробел", "Ничего".

Наборов данных на русском языке жестов крайне мало. Наиболее массово представлен набор данных "SLOVO"[2] от команды из "Сбербанка". Это набор данных уровня слов и представляет из себя видео, так как почти все слова включают в себя движения руками. Подобный набор данных крайне сложен в обучении и очень требователен в ресурсах для использования в реальном времени. Набор данных занимает порядка 15 гигабайт. Наборы данных на английском языке жестов более распространены. Большая часть из них предназначена для задач классификации фотографии, содержащей кисть на символы алфавита. Подобные наборы данных представлены в размерах от мегабайт до нескольких гигабайт и широко поддержаны различными разработчиками.

Стоит также отметить, что большинство наборов данных не имеют букв "J" и "Z" так как для их идентификации используются движения кисти руки. Этот аспект станет недостатком приложения. Однако в будущих версиях при более плотном рассмотрении датасета будет возможность избавиться от этого недостатка. Аналогично один из аспектов датасета - это география сбора данных. Дело в том, что некоторые символы показываются по-разному в разных географических местностях. Это можно назвать своеобразным "диалектом".

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

Учтя все задачи был выбран kaggle sign-language-mnist [3]. Этот набор данных не многочисленный: 35 тысяч изображений. Данные в наборе представляют собой изображения в черно-белом формате 28х28 пикселей, без фоновых элементов. Этот набор данных широко поддержан пользователем. В конечном счете было принято решение остановиться в первой версии программы на этом наборе данных. Однако данный набор данных не содержит символов, что также станет недостатком первой версии приложения и может быть исправлено в будущем.

Выбранный набор данных представляет собой csv таблицу с классом изображения в первом столбце, а остальные столбцы содержат значения соответствующего пикселя в черно-белом формате от 0 до 255. всего 784 пикселя, что соответствует изображению 28 на 28 пикселей.

Для обучения был использован модуль языка Python Torch. Данная модель может составить и обучить необходимую нам модель глубокого обучения для классификации изображений.

В качестве модели было принято решение разработать собственную, так как готовые модели оказались слишком большими для использования в подобных задачах. Простая модель из трех сверточных слоев и трех полносвязных. Схема приведена на следующей картинке. Опытном путем было принято, что результаты работы данной модели приемлемы для работы разрабатываемого приложения.

Испытываемая модель была обучена с помощью функции потерь крос-энтропии и оптимизатора SGD c шагом 0.01. Модель обучилась с за 10 эпох до результата в 95 % верных классификаций на проверочном датасете. Модель была экспортирована в формат ONNX для использования в приложении, как более универсальный формат.

Итоговая модель должна была использоваться в связке с YOLO API, как удобном интерфейсе. Однако интерфейс YOLO не позволяет нормально использовать модели классификации формата ONNX. В качестве замены было принято использовать оригинальный ONNXRUNTIME. Для сбора данных с видеокамеры использовался модуль opencv-python. Также для работы с матрицами использовался модуль numpy.

Первичный интерфейс также был реализован с помощью opencv. Пример работы интерфейса приведен на следующем рисунке.

Для входа в нейросеть необходимо использовать квадратное изображения черно-белого формата 28 на 28 пикселей. При этом фон изображения имеет важную роль. Приоритетно, чтобы он был светлым-монотонным. В первой версии использовалась нормализация изображения, однако из-за автоэкспозиции камеры использование нормализации оказалось лишним.

На изображении был выделен квадрат с подписью "помести свою кисть сюда". Далее этот квадрат вырезается, обрабатывается и отправляется в нейронную сеть. Результатом мы получаем лист данных с вероятностью указания каждого символа соответственно. Далее отбираются все символы с выходным значением больше 500. Если такие найдены, это означает, что хотя бы один символ из них вероятно показывается, в противном случае считается, что на изображении нет символов. Показываемым символом считается символ с наибольшей вероятностью. Если 150 кадров подряд показываемый символ не меняется, то символ добавляется в строку, означающую набираемое слово.

После простого тестирования было обнаружено, что некоторые символы показываются с большей вероятностью, некоторые же очень тяжело показать таким образом, чтобы модель посчитала их наиболее вероятными. Однако показываемый символ всегда находится среди вероятных. Это означает, что некоторые символы имеют более ярко выраженную специфику, в отличии от остальных и в датасете им следовало бы уделить особое внимание. При проверке такими символами оказались буквы "A", "E", "I" и некоторые другие. Вероятно также то, что качество изображений следовало бы увеличить, так как при подобном разрешении многие символы становятся практический неразличимыми.

Разработка графического интерфейса началась с разработки дизайна.  Горизонтально с верху вниз интерфейс состоит из изображения, двух строк текста для ввода слова и итогового текста, соответственно, и блок кнопок добавления слова в текст, сброса слова и сброса текста.

Разрабатывать данный интерфейс было принято с помощью модуля PyQt5. Это достаточно распространенный модуль с простым использованием и хорошей документацией. Однако данный модуль не имеет прямой поддержки вывода изображений в виде массива. Что является усложнением программы, так как opencv работает с изображениями в виде массива. Однако сообщество пользователей PyQt изучило этот вопрос и выложило в открытый доступ решение этой проблемы.

 

Список литературы:

  1. Wikipedia [электронный ресурс] – Электрон. Дан: Язык жестов – Режим доступа: https://en.wikipedia.org/wiki/Sign_language, свободный (дата обращения 01.01.2024);
  2. Cloud.ru [электронный ресурс] – Электрон. Дан: Набор данных SLOVO – Режим доступа: https://cloud.ru/ru/datahub/slovo, свободный (дата обращения 01.01.2024);
  3. Kaggle [электронный ресурс] – Электрон. Дан: Язык жестов – Режим доступа: https://www.kaggle.com/datasets/datamunge/sign-language-mnist, свободный (дата обращения 01.01.2024);
Удалить статью(вывести сообщение вместо статьи): 

Оставить комментарий

Форма обратной связи о взаимодействии с сайтом
CAPTCHA
Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.