Merge pull request #6 from kavlab/mulyavin_aa_api
Browse files- README.md +59 -3
- api.py +50 -0
- mulyavin_aa/PostmanLangDetect.png +0 -0
- mulyavin_aa/PostmanTranslate.png +0 -0
- mulyavin_aa/langdetector.py +5 -1
- mulyavin_aa/model/__init__.py +0 -0
- mulyavin_aa/model/langdetector.py +17 -0
- mulyavin_aa/model/translator.py +11 -0
- requirements.txt +3 -0
README.md
CHANGED
@@ -9,7 +9,7 @@ app_file: run.py
|
|
9 |
pinned: false
|
10 |
---
|
11 |
|
12 |
-
# Программная инженерия. Практическое задание №2
|
13 |
|
14 |
Приложение разработано с использованием фреймворка [Streamlit](https://streamlit.io/).
|
15 |
Состоит из двух страниц и Главной страницы:
|
@@ -21,19 +21,26 @@ pinned: false
|
|
21 |
3. Описание изображения - позволяет получить описание изображения на русском языке. Использует 1 модель:
|
22 |
- Классификация и описание изображений
|
23 |
|
|
|
|
|
|
|
|
|
24 |
## Используемые модели
|
25 |
- Определение языка текста - [papluca/xlm-roberta-base-language-detection](https://huggingface.co/papluca/xlm-roberta-base-language-detection)
|
26 |
- Перевод текста с языка Ru на En - [Helsinki-NLP/opus-mt-ru-en](https://huggingface.co/Helsinki-NLP/opus-mt-ru-en)
|
27 |
- Озвучивание текста на английском языке - [microsoft/speecht5_tts](https://huggingface.co/microsoft/speecht5_tts)
|
28 |
- Классификация и описание изображений. Модель описания изображения [Salesforce/blip-image-captioning-large](https://huggingface.co/Salesforce/blip-image-captioning-large)
|
29 |
|
30 |
-
## Как запустить
|
31 |
Запуск осуществляется через модуль streamlit:
|
32 |
```
|
33 |
streamlit run run.py
|
34 |
```
|
35 |
|
36 |
-
## Как
|
|
|
|
|
|
|
37 |
После запуска приложение открывается на Главной странице. Выбор режима работы приложения доступен слева в меню
|
38 |
|
39 |
### Генератор аудио
|
@@ -46,3 +53,52 @@ streamlit run run.py
|
|
46 |
Необходимо выбрать изображение и нажать кнопку "Получить описание изображения". В результате появится текстовое описание изображения на русском языке.
|
47 |
|
48 |

|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9 |
pinned: false
|
10 |
---
|
11 |
|
12 |
+
# Программная инженерия. Практическое задание №2 и №3
|
13 |
|
14 |
Приложение разработано с использованием фреймворка [Streamlit](https://streamlit.io/).
|
15 |
Состоит из двух страниц и Главной страницы:
|
|
|
21 |
3. Описание изображения - позволяет получить описание изображения на русском языке. Использует 1 модель:
|
22 |
- Классификация и описание изображений
|
23 |
|
24 |
+
API разработано с использованием фреймворка [FastAPI]('https://fastapi.tiangolo.com/'). API доступные для использования:
|
25 |
+
1. ```/langdetector/detect``` - Определение языка текста
|
26 |
+
2. ```/translator/translate``` - Перевод текста с языка Ru на En
|
27 |
+
|
28 |
## Используемые модели
|
29 |
- Определение языка текста - [papluca/xlm-roberta-base-language-detection](https://huggingface.co/papluca/xlm-roberta-base-language-detection)
|
30 |
- Перевод текста с языка Ru на En - [Helsinki-NLP/opus-mt-ru-en](https://huggingface.co/Helsinki-NLP/opus-mt-ru-en)
|
31 |
- Озвучивание текста на английском языке - [microsoft/speecht5_tts](https://huggingface.co/microsoft/speecht5_tts)
|
32 |
- Классификация и описание изображений. Модель описания изображения [Salesforce/blip-image-captioning-large](https://huggingface.co/Salesforce/blip-image-captioning-large)
|
33 |
|
34 |
+
## Как запустить Web-приложение
|
35 |
Запуск осуществляется через модуль streamlit:
|
36 |
```
|
37 |
streamlit run run.py
|
38 |
```
|
39 |
|
40 |
+
## Как запустить API-сервер
|
41 |
+
```uvicorn api:app``` либо ```python api.py```
|
42 |
+
|
43 |
+
## Как использовать Web-приложение
|
44 |
После запуска приложение открывается на Главной странице. Выбор режима работы приложения доступен слева в меню
|
45 |
|
46 |
### Генератор аудио
|
|
|
53 |
Необходимо выбрать изображение и нажать кнопку "Получить описание изображения". В результате появится текстовое описание изображения на русском языке.
|
54 |
|
55 |

|
56 |
+
|
57 |
+
### Как использовать API
|
58 |
+
Описание методов API генерируется Swagger и доступно по адресу
|
59 |
+
```
|
60 |
+
<hots>/docs
|
61 |
+
```
|
62 |
+
|
63 |
+
#### Пример вызова сервиса Определение языка текста
|
64 |
+
Вызвать url сервиса ```<host>/langdetector/detect``` методом POST
|
65 |
+
|
66 |
+

|
67 |
+
|
68 |
+
Передаваемые параметры:
|
69 |
+
```
|
70 |
+
{
|
71 |
+
"text": "Приветик от Мити кота"
|
72 |
+
}
|
73 |
+
```
|
74 |
+
|
75 |
+
Результат выполнения:
|
76 |
+
```
|
77 |
+
{
|
78 |
+
"langs": [
|
79 |
+
{
|
80 |
+
"label": "bg",
|
81 |
+
"score": 0.9945043921470642
|
82 |
+
}
|
83 |
+
]
|
84 |
+
}
|
85 |
+
```
|
86 |
+
|
87 |
+
#### Пример вызова сервиса Перевод текста с языка Ru на En
|
88 |
+
Вызвать url сервиса ```<host>/translator/translate``` методом POST
|
89 |
+
|
90 |
+

|
91 |
+
|
92 |
+
Передаваемые параметры:
|
93 |
+
```
|
94 |
+
{
|
95 |
+
"text": "Приветик от Мити кота"
|
96 |
+
}
|
97 |
+
```
|
98 |
+
|
99 |
+
Результат выполнения:
|
100 |
+
```
|
101 |
+
{
|
102 |
+
"text": "Hello from Michi Cat."
|
103 |
+
}
|
104 |
+
```
|
api.py
ADDED
@@ -0,0 +1,50 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import uvicorn
|
2 |
+
from fastapi import FastAPI
|
3 |
+
|
4 |
+
import mulyavin_aa.langdetector
|
5 |
+
import mulyavin_aa.translator
|
6 |
+
import mulyavin_aa.model.langdetector
|
7 |
+
import mulyavin_aa.model.translator
|
8 |
+
|
9 |
+
app = FastAPI()
|
10 |
+
|
11 |
+
|
12 |
+
# Представление проекта урлом по умолчанию
|
13 |
+
@app.get("/")
|
14 |
+
async def root():
|
15 |
+
"""Получение базовой информации об API"""
|
16 |
+
return {"message": "Проект ДЗ: Модуль 3. Разработка API для приложений искусственного интеллекта (vo_HW)",
|
17 |
+
"git": "https://github.com/kavlab/urfu_iml_2023_1_3_hw2",
|
18 |
+
"apis": [
|
19 |
+
{
|
20 |
+
"descr": "API для определения языка текста ",
|
21 |
+
"base_url": "/langdetector"
|
22 |
+
},
|
23 |
+
{
|
24 |
+
"descr": "API для перевода текста из Ru в En",
|
25 |
+
"base_url": "/translator"}
|
26 |
+
]}
|
27 |
+
|
28 |
+
|
29 |
+
@app.post("/langdetector/detect")
|
30 |
+
def lang_detect(request: mulyavin_aa.model.langdetector.Request) \
|
31 |
+
-> mulyavin_aa.model.langdetector.Response:
|
32 |
+
"""Определение языка текста"""
|
33 |
+
pipe = mulyavin_aa.langdetector.load_text_detection_model()
|
34 |
+
langs = pipe(request.text, )
|
35 |
+
return mulyavin_aa.model.langdetector.Response(langs=langs)
|
36 |
+
|
37 |
+
|
38 |
+
@app.post("/translator/translate")
|
39 |
+
def lang_detect(request: mulyavin_aa.model.translator.Request) \
|
40 |
+
-> mulyavin_aa.model.translator.Response:
|
41 |
+
"""Перевод текста из Ru в En"""
|
42 |
+
pipe = mulyavin_aa.translator.load_text_translator_model()
|
43 |
+
text = mulyavin_aa.translator.translate_to_en(request.text, pipe)
|
44 |
+
|
45 |
+
return mulyavin_aa.model.translator.Response(text=text)
|
46 |
+
|
47 |
+
|
48 |
+
# Запуск как приложения
|
49 |
+
if __name__ == '__main__':
|
50 |
+
uvicorn.run(app, port=8000, host='127.0.0.1')
|
mulyavin_aa/PostmanLangDetect.png
ADDED
![]() |
mulyavin_aa/PostmanTranslate.png
ADDED
![]() |
mulyavin_aa/langdetector.py
CHANGED
@@ -12,7 +12,9 @@ def load_text_detection_model() -> transformers.pipelines.base.Pipeline:
|
|
12 |
return pipeline("text-classification", model="papluca/xlm-roberta-base-language-detection")
|
13 |
|
14 |
|
15 |
-
def lang_detect(text: str,
|
|
|
|
|
16 |
"""
|
17 |
Определение языка для введенного текста
|
18 |
:param text: Текст
|
@@ -30,5 +32,7 @@ def lang_detect(text: str, langdetector: transformers.pipelines.base.Pipeline) -
|
|
30 |
print(text_langs[i])
|
31 |
if text_langs[i]['label'] in ['ru', 'en']:
|
32 |
return text_langs[i]['label']
|
|
|
|
|
33 |
|
34 |
return None
|
|
|
12 |
return pipeline("text-classification", model="papluca/xlm-roberta-base-language-detection")
|
13 |
|
14 |
|
15 |
+
def lang_detect(text: str,
|
16 |
+
langdetector: transformers.pipelines.base.Pipeline,
|
17 |
+
is_any: bool = False) -> str:
|
18 |
"""
|
19 |
Определение языка для введенного текста
|
20 |
:param text: Текст
|
|
|
32 |
print(text_langs[i])
|
33 |
if text_langs[i]['label'] in ['ru', 'en']:
|
34 |
return text_langs[i]['label']
|
35 |
+
if is_any:
|
36 |
+
return text_langs[i]['label']
|
37 |
|
38 |
return None
|
mulyavin_aa/model/__init__.py
ADDED
File without changes
|
mulyavin_aa/model/langdetector.py
ADDED
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from pydantic import BaseModel
|
2 |
+
|
3 |
+
|
4 |
+
class Request(BaseModel):
|
5 |
+
"""Структура запроса"""
|
6 |
+
text: str
|
7 |
+
|
8 |
+
|
9 |
+
class LangInfo(BaseModel):
|
10 |
+
"""Информация об определении языка"""
|
11 |
+
label: str
|
12 |
+
score: float
|
13 |
+
|
14 |
+
|
15 |
+
class Response(BaseModel):
|
16 |
+
"""Структура ответа"""
|
17 |
+
langs: list[LangInfo]
|
mulyavin_aa/model/translator.py
ADDED
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from pydantic import BaseModel
|
2 |
+
|
3 |
+
|
4 |
+
class Request(BaseModel):
|
5 |
+
"""Структура запроса"""
|
6 |
+
text: str
|
7 |
+
|
8 |
+
|
9 |
+
class Response(BaseModel):
|
10 |
+
"""Структура ответа"""
|
11 |
+
text: str
|
requirements.txt
CHANGED
@@ -8,3 +8,6 @@ sacremoses==0.1.1
|
|
8 |
translate==3.6.1
|
9 |
fastapi==0.104.1
|
10 |
uvicorn==0.24.0
|
|
|
|
|
|
|
|
8 |
translate==3.6.1
|
9 |
fastapi==0.104.1
|
10 |
uvicorn==0.24.0
|
11 |
+
|
12 |
+
pillow~=10.1.0
|
13 |
+
pydantic~=2.5.2
|