Обнаружение глаз с использованием JavaScript и HTML5
У кого-нибудь есть идеи, шаги или алгоритмы для обнаружения глаз на 2d изображениях с использованием javascript и HTML5?
Я уже сделал преобразование цветового пространства RGB в YCbCr
Теперь мне нужна помощь по удалению глаз
function hellow(e)
{
var r,g,b,a,gray;
var imageData = ctxBg.createImageData(gameWidth,gameHeight);
var das =imageData.data;
for(var i=0;i<=800;i++)
{
for(var j=0;j<=640;j++)
{
var d = (j*imageData.width+i)*4;
var helow = ctxBg.getImageData(i,j,1,1);
r=helow.data[0];
g=helow.data[1];
b=helow.data[2];
a=helow.data[3];
das[d]=Math.round((0.299 *r) - (0.168935*g) + (0.499813*b));
das[d+1]=Math.round((0.587 *r) - (0.331665*g) + (0.418531*b));
das[d+2]=Math.round((0.114 *r) - (0.50059*g) + (0.081282*b));
das[d+3]=a;
console.log(das[d]+":"+das[d+1]+":"+das[d+2]);
}
}
ctxBg.putImageData(imageData,0,0);
//console.log('c');
e.preventDefault();
}
Это мой код для преобразования цветового пространства rgb в YCbCr.
Пожалуйста, помогите мне также улучшить код для более быстрого выполнения.
5 ответов
В последнее время я пытался решить ту же проблему:
Уменьшите обработанное изображение для достижения достойной производительности (я уменьшил все до ширины 320 пикселей)
Обнаружение лица на изображении с помощью библиотеки Core Computer Vision - https://github.com/liuliu/ccv
На основании обнаруженной информации о прямоугольнике лица определяют глаза с помощью детектора объектов HAAR (он имеет каскад для обнаружения только глаз - https://github.com/inspirit/jsfeat
Для шага 2 я также использовал "оттенки серого" и "equize_histogram" из библиотеки JSFEAT.
Также, если шаг 3 не пройден, вы можете попытаться угадать положение глаз (зависит от того, насколько высокой точности вы собираетесь достичь).
Этот рабочий процесс дал мне удовлетворительные результаты и производительность. Он тестировал его как на настольном компьютере (~500 мс на iMac), так и на мобильных устройствах (~3000 мс на iphone 4 с использованием изображения с веб-камеры). К сожалению, на данный момент я не могу опубликовать ссылку на рабочий пример, но я опубликую ссылку на github, как только у меня там что-то будет.
Вы можете использовать tracking.js для обнаружения глаз, используя различные приемы из реальной сцены, снятой камерой.
После того, как вы импортируете скрипт с библиотекой и добавляете холст в HTML, вы можете сделать что-то вроде:
var videoCamera = new tracking.VideoCamera().hide().render().renderVideoCanvas(),
ctx = videoCamera.canvas.context;
videoCamera.track({
type: 'human',
data: 'eye',
onFound: function(track) {
for (var i = 0, len = track.length; i < len; i++) {
var rect = track[i];
ctx.strokeStyle = "rgb(0,255,0)";
ctx.strokeRect(rect.x, rect.y, rect.size, rect.size);
}
}
});
Код выше взят из одного из примеров в библиотеке. Надеюсь, что это поможет вам
Я на самом деле не знаю, реализовано ли что-то конкретное только для обнаружения глаз, но для обнаружения лица вы должны искать библиотеку с именем Core Computer Vision Library, которая размещена на github: https://github.com/liuliu/ccv,
Другой возможностью будет https://github.com/inspirit/jsfeat, где обнаружение лица и края пикселя будет реализовано с использованием различных алгоритмов, таких как оптический поток Лукаса-Канаде и детектор объекта HAAR.
Пожалуйста, прочитайте этот пост для дальнейших методов: Обнаружение лица javascript/html5/flash
Я осмелюсь сказать, что только яркости может быть достаточно для определения положения глаз / лица - так что вы можете сделать свой код быстрее, просто вычисляя CbCr. Обычно ищут лица / лица, используя каскад Хаара:
Существует пример обнаружения глаз (с пользовательскими каскадами openCV для глаза) в чистом javascript/html5 с использованием библиотеки HAAR.js (ps я автор).
Проект остановлен, новые функции не добавлены, но он делает то, что заявляет.
Для обнаружения глаз используйте OpenCV.js, проверьте это обнаружение человеческого глаза с помощью Javascript и OpenCV
let faceCascadeFile = 'haarcascade_frontalface_default.xml';
let eyeCascadeFile = 'haarcascade_eye.xml';
utils.createFileFromUrl(faceCascadeFile, faceCascadeFile, () => {
utils.createFileFromUrl(eyeCascadeFile, eyeCascadeFile, () => {
console.log('eye cascade ready');
})
})
пример