Skip to content

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

Notifications You must be signed in to change notification settings

mirmen/mansirus

Repository files navigation

Mansirus

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

Название кейса

Мобильное приложение "Переводчик мансийского языка"

Описание решения кейса

Мобильное приложение перевода реализовано на Flutter (frontend) и FastAPI (backend). Приложение отправляет текст на сервер, где запрос обрабатывается через языковую модель, после чего результат возвращается пользователю.

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

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

Преимущества перед аналогами

Приложение уникально, так как аналогов для перевода с/на мансийский язык практически нет. Использует современные технологии (Flutter и FastAPI), обеспечивая высокую производительность и кроссплатформенность.

Лицензия

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

Разработка

Проект разработан в рамках конкурса «Молодой изобретатель Югры» 2024г. Приложение было разработано всего за одну неделю. Этот сжатый срок разработки может повлиять на качество и функциональность приложения. В результате, некоторые аспекты, такие как тестирование, оптимизация и пользовательский интерфейс, могли быть упрощены или не полностью реализованы.

Несмотря на это, я стремился создать рабочий прототип, который может быть улучшен и доработан в будущем на основе отзывов пользователей и дополнительных исследований.

Предстоит исправить

  • ⚠️ Нарушение принципа единственной ответственности (SRP): Классы, такие как TranslationViewModel и TranslationService, выполняют несколько задач (управление состоянием, взаимодействие с API, логирование). Это может привести к усложнению и затруднениям в тестировании и поддержке.
  • ❌ Обработка ошибок: Обработка ошибок реализована, но можно улучшить. Рассмотреть возможность выбрасывания пользовательских исключений вместо возврата строки с сообщением.
  • 🔗 Конфигурация API: URL-адреса API жестко закодированы. Вынести их в конфигурацию или использовать переменные окружения.
  • ⏱️ Таймауты: Таймауты установлены, но для checkApiAvailability можно использовать более короткий таймаут.

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

image

Варианты использования API

Существует две вариации использования API:

  1. Можно развернуть API локально.
  • Если вы разворачиваете свой API, используете файл translation_custom_service.dart. В этом файле вы можете настроить логику обработки запросов и интеграцию с вашей моделью перевода.
  1. Можно использовать API от ЮНИИТ, если оно рабочее.
  • Если вы используете API от ЮНИИТ, используйте файл translation_uriit_service.dart. Этот файл уже настроен для работы с API ЮНИИТ и включает необходимые параметры для взаимодействия с их сервисом, но убедитесь, что apiUrl корректный.

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

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

  1. Установите необходимые библиотеки. Вам понадобятся следующие библиотеки:

    • Flask
    • Flask-CORS
    • transformers

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

  2. Создайте файл app.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)
  1. Запустите сервер:
python app.py
  1. Теперь ваш API сервер будет доступен по адресу http://localhost:8000. Вы можете использовать его для перевода текста между мансийским и русским языками.

About

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

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published