MELD: Мой проект HackGT 2016

В эти выходные я посетил HackGT — официальный хакатон Технологического института Джорджии. Ко мне присоединились более 1000 (согласно их сайту) других, чтобы провести выходные, занимаясь взломом, едой (#snackgt) и другими способами, теряя сон.

ХакГТ

У меня не было идеи проекта (хотя она у меня всегда есть в холодильнике), поэтому в первый день я потратил некоторое время на изучение вакансий команды/проекта, чтобы посмотреть, не бросится ли что-нибудь в голову. Я осмотрелся (даже посещая микшер команды), но не наткнулся ни на одну команду/проект, кричащую «СТРОЙТЕ МЕНЯ!».

Итак, я решил использовать выходные, чтобы проверить свои силы и потратить немного времени на разработку одного из моих проектов в замороженном виде. Я также провел много времени, разговаривая с компаниями, съедая огромное количество еды и пытаясь выиграть в лотереях.

МЕЛД

MELD — это концепция, о которой я думал уже довольно давно. Суть примерно такая:

Каждый физический объект имеет большое количество данных, относящихся к нему. Как мы можем лучше всего связать эти данные?

Это довольно сложный вопрос, поэтому со временем я уменьшил его до чего-то более удобоваримого с учетом моих навыков и бюджета времени/усилий. Вместо того, чтобы связывать все соответствующие данные с физическим объектом, я просто хочу связать с ним некоторые данные.

Мое основное решение: QR-код без QR-кода.

Знаю, знаю. Вы, вероятно, спросите: «Что не так с текущим QR-кодом?» Ты прав. Это хорошо адаптировано и работает.

Моя проблема с этим такова:

  1. Процесс создания новых раздражает (часто приходится пользоваться принтером) и
  2. уродство самого кода (это белое пятно на нетронутой рекламе).

Если бы я мог создать что-то, что создает код из простого изображения объекта и мог бы надежно извлекать эти данные из другого изображения указанного объекта, то я мог бы решить обе проблемы одним махом.

Случаи применения

Вот некоторые из вариантов использования, которые я придумал в процессе разработки.

Реклама

Компании платят большие деньги за создание красивой рекламы. Уродливые QR-коды умаляют эстетику (в большинстве случаев). Моя система может повысить эффективность их рекламы.

Кроме того, если бы я добавил какую-то систему управления, я мог бы позволить рекламодателям пересылать ссылки на старые объявления на текущие кампании, позволяя устаревшим материалам сохранять некоторую ценность.

Быстрые ссылки

Компании

На хакатоне у многих компаний были опросы, которые они хотели, чтобы вы заполнили. Это включало ввод длинного URL-адреса в телефон. Я ненавижу вводить длинные URL-адреса в свой телефон. С моей системой можно было просто сделать снимок и попасть на опрос.

Кандидаты

У меня куча наклеек на бутылке с водой. Было бы здорово, если бы я мог сфотографировать своего кота на GitHub (с тегом, указывающим, что он должен перейти по моей ссылке, а не чьей-то еще) и отправить меня в мой профиль на GitHub? Было бы здорово, если бы этим занимался рекрутер?

А как насчет вашего резюме/портфолио?

Как это работает

Создать MELD

  1. Найдите объект в реальном мире, который будет служить якорем, и некоторые данные, на которые вы хотите, чтобы он указывал.
  2. Сфотографируйте указанный объект.
  3. Затем это изображение отправляется на сервер, который преобразует и нормализует изображение, прежде чем выдать обратно хэшированное значение изображения, по сути, суммируя его.
  4. Хешированное значение соединяется с вашей полезной нагрузкой (данными, которые вы пытаетесь связать с объектом) и отправляется на сервер для хранения.
  5. Вуаля, теперь у вас есть ссылка.

Получить свой MELD

  1. Сфотографируйте MELDed объект.
  2. Это изображение снова отправляется на сервер для преобразования и нормализации. Теоретически этапы преобразования и нормализации могут полагаться на известный тег MELD для определения ориентации, размера и формы. Он возвращает хешированное значение конечного изображения.
  3. Этот хэш отправляется обратно на сервер для извлечения полезной нагрузки, хранящейся за изображением, в пределах определенного порога разницы. Мы не хотим проверять точные совпадения, потому что маловероятно, что любые две картинки будут абсолютно одинаковыми. При этом мы можем быть достаточно уверены, что похожие изображения будут иметь похожие хэши, поэтому мы можем проверять диапазоны хэшей, чтобы найти совпадения.

Одна проблема с этим подходом заключается в том, что он тратит много места и увеличивает вероятность получения ложных срабатываний. Хотя это проблема, я бы сказал, что это не ломает игру. Если мы сможем получить правильную полезную нагрузку в 85% случаев, я бы поспорил, что это все же быстрее и удобнее, чем вводить что-то самостоятельно, особенно если ошибки можно исправить простым повторным сканированием.

Что я сделал

Из-за нехватки времени, моих ограниченных личных возможностей разработчика и отвлечения внимания от других мероприятий хакатона я не удосужился создать интерфейс для своего проекта. Как вы можете себе представить, это чрезвычайно усложняло демонстрацию. В конце концов, я продемонстрировал грубый набросок дизайна системы и свои запросы Postman к бэкэнду, чтобы доказать функциональность.

  1. Хеширующий сервер

Я построил сервер хеширования на Python, потому что лучшая библиотека хеширования, которую я смог найти, была написана на Python. Серьезно, это единственная причина.

  • Языки: Python
  • Фреймворки/библиотеки: Flask, ImageHash, Virtualenv
  • Платформа: Digital Ocean, Ubuntu.
  • GitHub: ХЭШ-ВРЕМЯ

2. ImageHashDB

Это сервер + хранилище данных, в котором хранится все

  • Языки: JavaScript
  • Фреймворки/библиотеки: NodeJS, SailsJS
  • Платформа: обслуживается локально
  • GitHub:MELD-ЭФИР

Будущая работа

Между учебой, работой и поиском работы на полный рабочий день у меня много дел в этом семестре. Я бы хотел, чтобы система работала хотя бы до пригодного для использования, если не до производственного (читай: альфа) уровня, прежде чем она подойдет к концу, но прогресс зависит от имеющегося времени/энергии.