Кроссплатформенное приложение для перевода между мансийским и русским языками
Проект Mansirus — победитель конкурса "Молодой изобретатель Югры" 2024 в категории "Индустриальный трек" .
🏆 Занял 3 место в ХМАО , получив признание за разработку, направленную на сохранение и популяризацию мансийского языка.
Это кроссплатформенное мобильное приложение для перевода между русским и мансийским языками, созданное с использованием современных технологий:
- Flutter (frontend) — для создания интерфейса, работающего на iOS, Android, Windows, macOS и Linux.
- FastAPI/Flask (backend) — для обработки запросов на сервере.
Приложение отправляет текст на сервер, где запрос обрабатывается через предобученную языковую модель машинного перевода. Результат затем возвращается пользователю.
Сохранение и возрождение уникальной культуры и языка малочисленных народов ханты и манси имеет важное культурное значение:
- Поддержка образовательных и коммуникационных процессов среди носителей языка.
- Расширение доступа к информации о мансийском языке для широкой аудитории.
-
Кроссплатформенность :
Приложение работает на устройствах с операционными системами iOS, Android, Windows, macOS и Linux благодаря Flutter. -
Гибкость интеграции API :
- Возможность использования собственного локального сервера на Flask/FastAPI.
- Поддержка API от ЮНИИТ (Югорский НИИ информационных технологий).
-
Быстрая настройка локального сервера :
Предоставляется готовый код для развертывания сервера с минимальными усилиями. -
Открытый исходный код :
Проект лицензирован под Apache License 2.0, что позволяет сообществу улучшать и адаптировать его. -
Виртуальная мансийская клавиатура :
Встроенный инструмент для удобного ввода текста на мансийском языке. -
Логирование с помощью Talker :
Для разработчиков реализовано удобное логирование с использованием библиотеки Talker. Это позволяет легко отслеживать работу приложения и использовать фильтры для анализа логов. Как использовать Talker:- Откройте экран настроек.
- Нажмите "Версия".
- Используйте фильтры Talker по необходимости.
Проект Mansirus лицензирован под Apache License 2.0 .
Модель машинного перевода, используемая в приложении и API, разработана Югорским НИИ информационных технологий (ЮНИИТ) и также лицензирована под Apache License 2.0.
Проект построен на основе принципов чистой архитектуры (Clean Architecture):
- Содержит пользовательский интерфейс.
- Включает страницы (
views) и переиспользуемые виджеты (widgets).
- Содержит бизнес-логику приложения.
- Включает модуль проверки работоспособности сервера (
custom_checker.dart).
- Отвечает за работу с данными.
- Включает модели данных (
models) и репозитории (repositories), например,translation_service.dart.
- Конфигурационный файл для настройки приложения.
- Директория для хранения ресурсов приложения.
-
Зависимость от внешних моделей :
Качество перевода полностью зависит от модели, предоставленной ЮНИИТ. Это ограничивает возможности проекта в плане точности и специализированных терминов. -
Нестабильность API ЮНИИТ :
Официальное API ЮНИИТ не работает постоянно, поэтому в 99% случаев требуется разворачивать собственный сервер. -
Высокие требования к ресурсам :
Модель машинного перевода требует значительных вычислительных ресурсов для работы, что может быть проблемой для некоторых устройств. -
Конкуренция с крупными сервисами :
После добавления мансийского языка в "Яндекс Переводчик", проект станет неактуальным для аудитории. -
Ограниченная функциональность :
Некоторые функции, такие как история переводов или голосовой ввод, пока не реализованы. -
Небольшая база пользователей :
Мансийский язык используется сравнительно небольшим количеством людей, что ограничивает потенциальную аудиторию.
Для развертывания локального сервера выполните следующие шаги:
Вам понадобятся следующие библиотеки:
- Flask
- Flask-CORS
- transformers
Вы можете установить их с помощью pip:
pip install Flask Flask-CORS transformers
from flask import Flask, request, jsonify
from flask_cors import CORS
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
app = Flask(__name__)
CORS(app) # Включаем CORS для всего приложения
# Загрузка модели и токенизатора
tokenizer = AutoTokenizer.from_pretrained("Neira/nllb-200-3.3B-ru-mns-2.0.2", tgt_lang="rus_Cyrl", src_lang="mancy_Cyrl", token="256151")
model = AutoModelForSeq2SeqLM.from_pretrained("Neira/nllb-200-3.3B-ru-mns-2.0.2", token="256151")
def translate_text(text, direction):
# Токенизация текста
inputs = tokenizer(text, return_tensors="pt")
# Перевод текста
outputs = model.generate(**inputs)
translated_text = tokenizer.decode(outputs[0], skip_special_tokens=True)
return translated_text
@app.route('/translate/<direction>', methods=['POST'])
def translate(direction):
data = request.get_json()
text = data.get('text', '')
if not text:
return jsonify({'error': 'Text is required'}), 400
# Проверка направления перевода
if direction not in ['ru_to_mns', 'mns_to_ru']:
return jsonify({'error': 'Invalid translation direction'}), 400
# Выполнение перевода
translated_text = translate_text(text, direction)
return jsonify({'translated_text': translated_text})
@app.route('/health', methods=['GET'])
def health_check():
return jsonify({'status': 'API is running'}), 200
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8000)python app.py- Публичный сервер : Если сервер развернут на удаленном хостинге или доступен через публичный IP-адрес, используйте соответствующий URL вместо
localhost. Например:http://your-public-server.ru:8000. - Локальный сервер : Если вы развернули сервер на своем компьютере, используйте адрес
http://localhost:8000. Этот вариант подходит, если вы находитесь в той же локальной сети, где запущен сервер.
Не забудьте выбрать режим работы по умолчанию в файле lib/config.dart. Здесь вы можете указать тип API (custom или uriit) и адрес сервера:
class AppConfig {
static const String apiType = 'custom'; // 'custom' для локального/пользовательского API, 'uriit' для API ЮНИИТ
static const String apiUrl = 'http://localhost:8000'; // Адрес вашего сервера или сервера ЮНИИТ
}- Если вы используете локальный или собственный сервер , установите
apiType = 'custom'и укажите соответствующийapiUrl. - Если вы хотите использовать API от ЮНИИТ , установите
apiType = 'uriit'. В этом случаеapiUrlбудет игнорироваться.
Приложение также позволяет изменять тип API и его адрес прямо в настройках без необходимости редактировать исходный код. Для этого:
- Откройте экран Настройки .
- Найдите раздел Настройки API .
- Выберите нужный тип API (
СобственныйилиЮНИИТ). - Введите адрес вашего сервера, независимо от того, какой выбрали
Это удобно, если вам нужно быстро переключаться между разными серверами или тестировать работу приложения с различными конфигурациями.
Если у вас есть вопросы или предложения по улучшению проекта, свяжитесь со мной через GitHub или в Telegram (@emlgzv).
Примечание: Этот проект является прототипом и продолжает развиваться. Ваша обратная связь поможет сделать его лучше! 😊
