Рубріки: Решения

API-интерфейс для распознавания лиц на JavaScript

Богдан Мирченко

Разработчик Крис Бонгерс поделился в блоге на dev.to методом создания детектора лиц на JavaScript. 

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

  • Введите в адресной строке браузера: chrome://flags;
  • В открывшемся окне включите Experimental Web Platform features#enable-experimental-web-platform-features.

Конечным результатом будет API-интерфейс для обнаружения лиц на картинке. 

Создание интерфейса распознавания лиц

  • Чтобы создать API-интерфейс распознавания лиц выполните следующие команды:
const faceDetector = new FaceDetector();

// Pass options:
const faceDetector = new FaceDetector({
  maxDetectedFaces: 5,
  fastMode: false
});

#С помощью команды maxDetectedFaces можно устанавливать количество лиц для обнаружения. 

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

  • Далее вызываем функцию распознавания и передаем ей информацию об источнике, в нашем случае это будет картинка (image).
try {
  const faces = await faceDetector.detect(image);
  faces.forEach(face => doSomething(face));
} catch (e) {
  console.error('Face detection failed:', e);
}
  • Загружаем изображение.
<img
  src="https://images.unsplash.com/photo-1531545514256-b1400bc00f31?ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&ixlib=rb-1.2.1&auto=format&fit=crop&w=1567&q=80"
  crossorigin
  alt="Group of people"
/>
  • С помощью кода ниже можно заставить функцию загрузки окна ждать, пока все компоненты загрузятся.
window.onload = () => {
  detect();
};
  • Вызываем функцию обнаружения. Она будет асинхронной.
async function detect() {
  const image = document.querySelector('img');
  const faceDetector = new FaceDetector({fastMode: true});

  try {
    const faces = await faceDetector.detect(image);
    faces.forEach(face => {
      console.log(face);
    });
  } catch (e) {
    console.error('Face detection failed:', e);
  }
}

#Функция вызывает выбранное изображение и запускает детектор в быстром режиме. 

  • Добавляем рамки поверх лиц, чтобы было видно, на что смотреть и оборачиваем изображение в относительный держатель (relative holder).
<div id="holder">
  <img
    src="https://images.unsplash.com/photo-1531545514256-b1400bc00f31?ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&ixlib=rb-1.2.1&auto=format&fit=crop&w=1567&q=80"
    crossorigin
    alt="Group of people"
  />
</div>
  • Держатель будет относительным элементом, а изображение — абсолютно позиционированным.
img {
  position: absolute;
}
#holder {
  position: relative;
}
  • При захвате лиц можно получить значения ширины, высоты, вершины и левого края каждой рамки.
const faces = await faceDetector.detect(image);
faces.forEach(face => {
  const {top, left, width, height} = face.boundingBox;
  const faceDiv = document.createElement('div');
  faceDiv.className = 'face';
  Object.assign(faceDiv.style, {
    width: `${width}px`,
    height: `${height}px`,
    left: `${left}px`,
    top: `${top}px`
  });
  holder.appendChild(faceDiv);
});
  • Создаем div-элемент со свойством className face, устанавливаем для него стили и добавляем его в держатель div.
.face {
  position: absolute;
  border: 2px solid yellow;
}

Вот и все. Конечный результат автор разместил в онлайн-редакторе кода CodePen здесь

Останні статті

Обучение Power BI – какие онлайн курсы аналитики выбрать

Сегодня мы поговорим о том, как выбрать лучшие курсы Power BI в Украине, особенно для…

13.01.2024

Work.ua назвал самые конкурентные вакансии в IТ за 2023 год

В 2023 году во всех крупнейших регионах конкуренция за вакансию выросла на 5–12%. Не исключением…

08.12.2023

Украинская IT-рекрутерка создала бесплатный трекер поиска работы

Unicorn Hunter/Talent Manager Лина Калиш создала бесплатный трекер поиска работы в Notion, систематизирующий все этапы…

07.12.2023

Mate academy отправит работников в 10-дневный оплачиваемый отпуск

Edtech-стартап Mate academy принял решение отправить своих работников в десятидневный отпуск – с 25 декабря…

07.12.2023

Переписки, фото, история браузера: киевский программист зарабатывал на шпионаже

Служба безопасности Украины задержала в Киеве 46-летнего программиста, который за деньги устанавливал шпионские программы и…

07.12.2023

Как вырасти до сеньйора? Девелопер создал популярную подборку на Github

IT-специалист Джордан Катлер создал и выложил на Github подборку разнообразных ресурсов, которые помогут достичь уровня…

07.12.2023