Skip to content

mirmen/mansirus

Repository files navigation

❄️ Mansirus

Кроссплатформенное приложение для перевода между мансийским и русским языками

Project StatusLicense
Platforms Platform FastAPI Languages


📋 О проекте

Проект Mansirus — победитель конкурса "Молодой изобретатель Югры" 2024 в категории "Индустриальный трек" .
🏆 Занял 3 место в ХМАО , получив признание за разработку, направленную на сохранение и популяризацию мансийского языка.

Это кроссплатформенное мобильное приложение для перевода между русским и мансийским языками, созданное с использованием современных технологий:

  • Flutter (frontend) — для создания интерфейса, работающего на iOS, Android, Windows, macOS и Linux.
  • FastAPI/Flask (backend) — для обработки запросов на сервере.

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

⚠️ Однако стоит отметить, что после официального добавления мансийского языка в "Яндекс Переводчик", проект Mansirus по сути станет неактуальным и прекратит свое существование.


🌱 Актуальность разработки

Сохранение и возрождение уникальной культуры и языка малочисленных народов ханты и манси имеет важное культурное значение:

  • Поддержка образовательных и коммуникационных процессов среди носителей языка.
  • Расширение доступа к информации о мансийском языке для широкой аудитории.

✨ Преимущества проекта

  1. Кроссплатформенность :
    Приложение работает на устройствах с операционными системами iOS, Android, Windows, macOS и Linux благодаря Flutter.

  2. Гибкость интеграции API :

    • Возможность использования собственного локального сервера на Flask/FastAPI.
    • Поддержка API от ЮНИИТ (Югорский НИИ информационных технологий).
  3. Быстрая настройка локального сервера :
    Предоставляется готовый код для развертывания сервера с минимальными усилиями.

  4. Открытый исходный код :
    Проект лицензирован под Apache License 2.0, что позволяет сообществу улучшать и адаптировать его.

  5. Виртуальная мансийская клавиатура :
    Встроенный инструмент для удобного ввода текста на мансийском языке.

  6. Логирование с помощью Talker :
    Для разработчиков реализовано удобное логирование с использованием библиотеки Talker. Это позволяет легко отслеживать работу приложения и использовать фильтры для анализа логов. Как использовать Talker:

    1. Откройте экран настроек.
    2. Нажмите "Версия".
    3. Используйте фильтры Talker по необходимости.

🔒 Лицензия

Проект Mansirus лицензирован под Apache License 2.0 .
Модель машинного перевода, используемая в приложении и API, разработана Югорским НИИ информационных технологий (ЮНИИТ) и также лицензирована под Apache License 2.0.


🏗️ Архитектура проекта

Проект построен на основе принципов чистой архитектуры (Clean Architecture):

1. Presentation Layer (/lib/presentation/)

  • Содержит пользовательский интерфейс.
  • Включает страницы (views) и переиспользуемые виджеты (widgets).

2. Domain Layer (/lib/domain/)

  • Содержит бизнес-логику приложения.
  • Включает модуль проверки работоспособности сервера (custom_checker.dart).

3. Data Layer (/lib/data/)

  • Отвечает за работу с данными.
  • Включает модели данных (models) и репозитории (repositories), например, translation_service.dart.

4. Config (/lib/config.dart)

  • Конфигурационный файл для настройки приложения.

5. Assets (/lib/assets/)

  • Директория для хранения ресурсов приложения.

⚠️ Минусы проекта

  1. Зависимость от внешних моделей :
    Качество перевода полностью зависит от модели, предоставленной ЮНИИТ. Это ограничивает возможности проекта в плане точности и специализированных терминов.

  2. Нестабильность API ЮНИИТ :
    Официальное API ЮНИИТ не работает постоянно, поэтому в 99% случаев требуется разворачивать собственный сервер.

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

  4. Конкуренция с крупными сервисами :
    После добавления мансийского языка в "Яндекс Переводчик", проект станет неактуальным для аудитории.

  5. Ограниченная функциональность :
    Некоторые функции, такие как история переводов или голосовой ввод, пока не реализованы.

  6. Небольшая база пользователей :
    Мансийский язык используется сравнительно небольшим количеством людей, что ограничивает потенциальную аудиторию.


🖥️ Демонстрация

Демонстрация работы приложения


Как развернуть свой API сервер 🚀

Для развертывания локального сервера выполните следующие шаги:

1. Установите необходимые библиотеки

Вам понадобятся следующие библиотеки:

  • Flask
  • Flask-CORS
  • transformers Вы можете установить их с помощью pip: pip install Flask Flask-CORS transformers

2. Создайте файл api.py

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)

3. Запустите сервер

python app.py

4. Используйте API

  • Публичный сервер : Если сервер развернут на удаленном хостинге или доступен через публичный IP-адрес, используйте соответствующий URL вместо localhost. Например: http://your-public-server.ru:8000.
  • Локальный сервер : Если вы развернули сервер на своем компьютере, используйте адрес http://localhost:8000. Этот вариант подходит, если вы находитесь в той же локальной сети, где запущен сервер.

5. Настройка типа API и его адреса

5.1. Настройка по умолчанию в коде

Не забудьте выбрать режим работы по умолчанию в файле 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 будет игнорироваться.

5.2. Изменение настроек внутри приложения

Приложение также позволяет изменять тип API и его адрес прямо в настройках без необходимости редактировать исходный код. Для этого:

  1. Откройте экран Настройки .
  2. Найдите раздел Настройки API .
  3. Выберите нужный тип API (Собственный или ЮНИИТ).
  4. Введите адрес вашего сервера, независимо от того, какой выбрали

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


Контакты 📩

Если у вас есть вопросы или предложения по улучшению проекта, свяжитесь со мной через GitHub или в Telegram (@emlgzv).


Примечание: Этот проект является прототипом и продолжает развиваться. Ваша обратная связь поможет сделать его лучше! 😊

About

❄️ Кроссплатформенное приложение для перевода между мансийским и русским языками. Cross-platform application for translation between Mansi and Russian languages

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors