Pull to refresh

Imagine Cup 2014 глазами C4L

Development for Windows Phone *
Здравствуй, дорогой Хабр!

Перед Вами история команды C4L, Национального победителя Imagine Cup 2014 в категории «Социальные проекты»!

Идея


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

Мы решили не оставаться безучастными и начали создавать свою систему. Ее идея в том, что любой человек может снять 15-секундное видео и получить данные о своем состоянии. А еще это может делать кто-нибудь другой. Например, Вы переживаете за здоровье своих родственников, тогда Вы сможете установить наше приложение на их ПК и попросить их периодический проверяться на нем.
Фишка идеи заключается в том, что стандартная камера может отследить изменения кровообращения, незаметные человеческому глазу. Наша система, основанная на нашем уникальном математическом аппарате, отслеживает эти изменения, анализирует их и выводит результат не только числовой, но и графический и диаграммный.

Реализация


Развитие ARGUS планируется в 5 направлениях, но мы делали больший упор на одно направление — Мобильная версия. Алгоритм работы пользователя с мобильным приложением ARGUS прост:
  • при запуске приложения пользователь проходит процедуру регистрации/авторизации;
  • выбирает режим съемки:

съемка лица (дает более полные сведения);
съемка пальца (дает общие сведения);

  • загружает видео в Windows Azure, где происходит обработка видео;
  • смотрит результаты в истории обследований.

Результаты выводятся не только числовыми показателями, но и графиками. Пользователь также может сохранять все результаты в Microsoft Health Vault и дать доступ к ним своему лечащему врачу.

Мобильный клиент ARGUS


Мобильный клиент разработан для платформы Windows Phone 8. Приложение делает запись продолжительностью 18 секунд (достаточно и 15, но 3 секунды — запас), после чего пользователь выбирает ключевые точки, по которым будет вестись обследование. Когда точки выбраны, данные отправляются в хранилище Windows Azure Storage, и сервис обработки данных начинает свою таинственную работу.
image
Скриншот экрана записи видео

Сервис, кстати расположен тоже в Windows Azure, это дает возможность моментального обмена данными между хранилищем исходных данных, которые поступили с клиентского ПО и виртуальной машины, на которой «крутится» сервис. Сервис извлекает из видео необходимые для обработки данные (какие — секрет), проводит анализ данных, подсчитывает пульс, определяет разность ваз венозного и артериального пульсов, строит графики пульсовой волны для каждой из точек, дает заключение о стабильности пульса (как все это происходит, мы тоже не скажем).
В это время клиент шлет сервису запросы типа «ну, ты скоро там?» ( или «результат готов?»), когда обработка завершается, сервис отправляет клиенту результат, который можно увидеть на экране.
image
Скриншот результатов обследования

Ниже приведен код отправки данных в хранилище (тут ничего секретного, это почти код из примеров от Microsoft):
//Данные для подключения
string AccountKey = ВашКлючОтХранилища;
string AccountName = УчетнаяЗаписьХранилища
string ContainerName = ИмяКонтейнераВКоторомХранятсяДанные;

//Клиент для работы с хранилищем
CloudBlobClient blobStorage;
//Строка подключения
Uri baseUri = new Uri(string.Format("http://{0}.blob.core.windows.net", AccountName));
//Данные пользователя
StorageCredentials cred = new StorageCredentials(AccountName, AccountKey);
blobStorage = new CloudBlobClient(baseUri, cred);
//Контейнер блобов
CloudBlobContainer blobContainer = blobStorage.GetContainerReference(ContainerName);
//Блоб и отправка данных в хранилище azure
CloudBlockBlob blobFromSASCredential = blobContainer.GetBlockBlobReference(isoVideoFileName);//Придумать имя файла
isoVideoFile = new IsolatedStorageFileStream(storageFile.Path,
FileMode.Open, FileAccess.Read,
IsolatedStorageFile.GetUserStoreForApplication());
byte[] fileContent = new byte[isoVideoFile.Length];
await isoVideoFile.ReadAsync(fileContent, 0, fileContent.Length);
HashSet<string> blocklist = new HashSet<string>();
var fileBlocks = GetFileBlocks(fileContent, ref countOfFileBlocks);
foreach (FileBlock block in fileBlocks)
{
await blobFromSASCredential.PutBlockAsync(
block.Id,
new MemoryStream(block.Content, true),
null);
blocklist.Add(block.Id);}
await blobFromSASCredential.PutBlockListAsync(blocklist);


Суть в том, что мы делим файлы на части и высылаем их, а потом склеиваем.
Тип FileBlock 
public class FileBlock
{
public string Id
{
get;
set;
}
public byte[] Content
{
get;
set;
}
}


Метод разбиения на блоки:
private IEnumerable<FileBlock> GetFileBlocks(byte[] fileContent, ref double count)
{
HashSet<FileBlock> hashSet = new HashSet<FileBlock>();
if (fileContent.Length == 0) return new HashSet<FileBlock>();
int blockId = 0;
int ix = 0;
int currentBlockSize = MaxBlockSize;
while (currentBlockSize == MaxBlockSize)
{
if ((ix + currentBlockSize) > fileContent.Length) currentBlockSize = fileContent.Length - ix;
byte[] chunk = new byte[currentBlockSize];
Array.Copy(fileContent, ix, chunk, 0, currentBlockSize);
hashSet.Add(
new FileBlock()
{
Content = chunk,
Id = Convert.ToBase64String(System.BitConverter.GetBytes(blockId))
});
ix += currentBlockSize;
blockId++;
}
count = blockId;
return hashSet;
}


Также были проведены клинические испытания приложения:


Прототипы


Для демонстрации всех возможностей нашего ARGUSa мы совместно с крутым дизайнером Андреем Васьковым разработали макеты двух устройств:
1. smartDS — док-станция для Мобильного устройства, это актуально для больных неврологическими заболеваниями и уже перенесших инсульт;
2. smartEYE — это устройство, позволяющее совершать полный обзор по всему помещению, где оно установлено. В него установлены сервы, плата и камера.
После этого мы напечатали все необходимы заготовки на 3D-принтере при поддержке компании CyberCom и начали собирать наши будущие прототипы. В сборке нам помогали конструкторы робота-снегоуборщика и робота-промоутера Promobot.
Прототип smartDS:
image
Готовый и работающий прототип smartEYE:


Imagine Cup 2014


Наша команда C4L решила участвовать в Imagine Cup 2014, чтобы показать, какого прогресса мы достигли с прошлого Imagine Cup, как мы смогли свою идею воплотить в работающий прототип, какие идеи вариантов использования появились и как это может более глобально повлиять на нашу главную цель – подарить шанс жить и радоваться этой жизни!
Наша команда заявилась на IC 2014 в феврале. Мы прошли заочный региональный этап и попали на Региональный финал, на котором заняли 2 место, но ввиду нашей крутой идеи, нас пригласили на Российский финал! С Российскими финалом мы отлично справились – мы выиграли в категории «Социальные проекты» и взяли спецприз от компании Intel!
image
Сейчас нам предстоит онлайн финал, где выберут команду, которая будет представлять нашу страну на Международном финале Imagine Cup 2014 в Сиэтле!
Мы делаем все возможное, чтобы to go The International final of Imagine Cup 2014 by Microsoft. We hope will become the winners online finals and go to U.S. Our slogan the same as the inscription on Imagine Cup 2014 badges – NEVER GIVE UP!
C4L — We give YOUR Chance 4 Life!
Tags: imcupimcup2014Imagine CupImagine Cup 2014#myimcupstoryargusc4lperm
Hubs: Development for Windows Phone
Total votes 21: ↑14 and ↓7 +7
Comments 6
Comments Comments 6

Popular right now