Автоматически украшайте людей лепреконами на своем веб-сайте ко Дню Святого Патрика.

!!! - ВНИМАНИЕ - !!!

Некоторые китайцы считают, что дать человеку зеленую шляпу Оскорбительно, так как в отношениях это означает то же самое, что и измена. Поэтому используйте это ВНИМАТЕЛЬНО, когда обслуживаете китайскую базу пользователей.

!!! - ВНИМАНИЕ - !!!

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

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

1. Первоначальная настройка

Прежде чем мы начнем это руководство, нам нужно сначала выполнить некоторую настройку.

Прежде всего, мы используем tracking.js, чтобы помочь нам в этом проекте, и поэтому нам необходимо загрузить и извлечь необходимые файлы для tracking.js из здесь .

В этом руководстве мы начнем с шаблона веб-сайта, который я взял у нашей команды WiX, который представляет собой систему управления контентом (CMS), позволяющую создавать веб-сайты с гораздо меньшими усилиями. Шаблон можно скачать здесь. Распакуйте файлы в папку tracking.js-master из предыдущего шага.

Для того, чтобы все работало, нам еще нужен сервер. В этом руководстве мы будем использовать простой сервер Python. Если у вас нет Python или Homebrew (которые помогают установить Python), вы можете использовать следующие команды bash для их установки.

Установка Homebrew:

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Установка Python:

brew install python

Теперь, когда все готово, мы запустим приведенную ниже команду под нашим «tracking.js-master», чтобы запустить сервер Python.

python -m SimpleHTTPServer

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

2. Создание шляпы.

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

Я нашел шляпу лепрекона от kisspng, и ее можно найти здесь. Сохраните изображение в корневую папку нашего сайта. Добавив следующий код в конец над </html>, мы сможем просмотреть изображение на нашем примере веб-сайта после сохранения и перезагрузки.

<body>
  <img id = "hat" class = "leprechaunhat" src = "./leprechaunhat_kisspng.png" >
</body>

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

<style>
 @keyframes shake {
  0% {
   transform : translateY(-30px);
  }
  40% {
   transform : rotate(10deg);
  }
  60% {
   transform : rotate(-10deg);
  }
  80% {
   transform : rotate(10deg);
  }
  100% {
   transform : rotate(0deg);
  }
 }
 .leprechaunhat {
  animation : shake 1s ease-in;
 }
</style>

3. Снимайте шляпы на портретах.

Теперь перейдем к тому, чтобы сбрасывать шляпы именно на портреты. Во-первых, мы должны сослаться на файлы JavaScript из «tracking.js» с помощью следующего кода.

<script src = "build/tracking-min.js" type = "text/javascript" ></script>
<script src = "build/data/face-min.js" type = "text/javascript" ></script>

Код предоставляет нам Tracker класс, в который мы можем загружать изображения. Затем мы можем услышать ответ, указывающий на прямоугольник, очерчивающий лица внутри изображения.

Начнем с определения функции, которая выполняется при загрузке страницы. При необходимости эту функцию можно прикрепить к любому другому месту. yOffsetValue - это смещение, выравнивающее шляпу в более подходящее положение.

const yOffsetValue = 10;
window.onload = function() {
};

Внутри мы определяем нашу функцию создания шляп, позволяющую создавать шляпы произвольных размеров и положений.

function placeHat(x, y, w, h, image, count) {
 hats[count] = hat.cloneNode(true);
 hats[count].style.display = "inline";
 hats[count].style.position = "absolute";
 hats[count].style.left = x + "px";
 hats[count].style.top = y + "px";
 hats[count].style.width = w + "px";
 hats[count].style.height = h + "px";
 image.parentNode.parentNode.appendChild(hats[count]);
}

Мы также должны немного повернуть наш скрипт объявления изображения, чтобы он скрывал изображение, как мы сейчас показываем его с помощью JavaScript.

<img id = "hat" class = "leprechaunhat" src = "./leprechaunhat_kisspng.png" style = "display : none" >

Затем мы добавляем следующий код для создания шляп поверх лиц с размером, соответствующим лицу.

var hat = document.getElementById("hat");
var images = document.getElementsByTagName('img');
var trackers = [];
var hats = [];
for(i = 0; i < images.length; i++)
{
 (function(img)
 {
  trackers[i] = new tracking.ObjectTracker('face');
  tracking.track(img, trackers[i]);
  trackers[i].on('track', function(event) {
   event.data.forEach(function(rect) {
    var bcr = img.getBoundingClientRect();
    placeHat(rect.x, rect.y + yOffsetValue - rect.height, rect.width, rect.height, img, i);
   });
  });
 })(images[i]);
}

Теперь, пока наш сервер Python все еще работает, вызов по следующему адресу должен показать нам, как шляпы лепреконов падают на портреты.

http://localhost:8000/TEAM%20MEMBERS%20_%20Teamwebsite.html

Поздравляю! Вы только что узнали, как накинуть шляпу лепрекона на все портреты на веб-сайте с компьютерным зрением. Желаю вам, вашим друзьям и публике удачного Дня Святого Патрика !!!

В конце концов

Я связал некоторые из предыдущих руководств ниже по аналогичным проектам. Я считаю, что во фронтенд-дизайне есть определенные тенденции. Несмотря на недавно появившиеся фреймворки .js и обновления ES, компьютерная анимация и искусственный интеллект могут творить чудеса в будущем для интерфейсной части, улучшая взаимодействие с пользователем с элегантностью и эффективностью.

Новичок:

Дополнительно:

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

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