Skip to content

Для разработчиков: Desktop приложение

prickly-u edited this page Feb 7, 2020 · 4 revisions

Desktop приложение проекта Lacmus

Введение

Клиентская часть lacmus состоит из 2 модулей:

  • UI клиент - кросс платформенное dotnet core приложение построенное с использованием avalonia UI и reactive UI.
  • Локальный сервер - представляет собой docker образ с небольшим python rest-api веб сервисом на flask. Данный сервер производит обработку изображений с помощью нейронной сети и отдает клиенту ответ о результатах работы нейронной сети. Данный сервер поднимается локально в docker контейнере.

Общая архитектурная схема

Оригинальная схема доступна по ссылке.

Desktop UI client

Клиент отображает пользовательский интерфейс, осуществляет управление всеми другими компонентами программы c внешними модулями (docker-ml-server). Клиент построен на MVVM паттерне и имеет 3 компоненты: Model, View, ViewModel.

Исходный код клиента находится в репозитории lacmus-app. Основная ветка разработки - dev.

Полезные ссылки

Подробнее о MVVM паттерне можно почитать тут

Другие ссылки

Интересные проекты (можно смотреть как примеры)

View

View представлена XAML кодом с описанием интерфейса: https://github.com/lacmus-foundation/lacmus-app/tree/master/Views

  • MainWindow.xaml - основное окно программы

Интерфейс состоит из следующих блоков. Также приведены используемые контролы и ссылки на avalonia UI документацию, ссылки на соответствующие строки кода:

Полезные ссылки

View-Model

View-Model представлена cs кодом. View-Model спроектирована с использованием ReactiveUI фреймворка, вместо стандартного INotifyPrepertyChange интерфейса: https://github.com/lacmus-foundation/lacmus-app/tree/master/ViewModels

  • MainWindowViewModel.cs - главная VM программы

Полезные ссылки

Model

Model представлена cs кодом: https://github.com/lacmus-foundation/lacmus-app/tree/master/Models

  • Docker.cs - Docker агент - осуществляет управление Docker контейнерами.

Полезные ссылки

Local ML Server

Сервер представляет собой docker образ с небольшим python rest-api веб сервисом на flask. Сервер разворачивается в docker контейнере и слушает 5000 порт.

Исходный код доступен в файле inference.py:

Официальный docker repository доступен тут:

Описание Rest API

Сервер использует один POST запрос

/image

REQUEST
{
	"data": image byte array (base64)
}

RESPONSE
{
	"objects"[
		{
			"score": string, (float)
			"xmin": string,  (int)
			"ymin": string,  (int)
			"xmax": string,  (int)
			"ymax": string,  (int)
		},
		...
	]
}
Clone this wiki locally