Commit b88d6d32 by Иван Кубота

better detection, skin tone subtract, tuning

parent 0bbd229b
......@@ -281,14 +281,48 @@ function hsvToRgb(h, s, v) {
return [ r * 255, g * 255, b * 255 ];
}
/**
* Converts an RGB color value to HSL. Conversion formula
* adapted from http://en.wikipedia.org/wiki/HSL_color_space.
* Assumes r, g, and b are contained in the set [0, 255] and
* returns h, s, and l in the set [0, 1].
*
* @param Number r The red color value
* @param Number g The green color value
* @param Number b The blue color value
* @return Array The HSL representation
*/
function rgbToHsl(r, g, b) {
r /= 255, g /= 255, b /= 255;
var extractColors = function( ctx, where, k, production){
var max = Math.max(r, g, b), min = Math.min(r, g, b);
var h, s, l = (max + min) / 2;
if (max === min) {
h = s = 0; // achromatic
} else {
var d = max - min;
s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
var points = [].concat.apply( [], where.map( function( polygon ){
return triangle.apply( null, polygon );
} ) );
switch (max) {
case r: h = (g - b) / d + (g < b ? 6 : 0); break;
case g: h = (b - r) / d + 2; break;
case b: h = (r - g) / d + 4; break;
}
h /= 6;
}
return [ h, s, l ];
}
var colorsFromPoints = function(points, ctx, where, k, production, notThis, partName) {
var deltaSkin = 15;
if(partName === 'blush')
deltaSkin = 8;
if(partName === 'eyes')
deltaSkin = 15;
var minX = Infinity, minY = Infinity,
maxX = -Infinity, maxY = -Infinity;
......@@ -305,13 +339,14 @@ var extractColors = function( ctx, where, k, production){
data = imageData.data;
var r, g, b;
var colors = [];
var colorsRaw = [];
if( !production ){
var debugPixels = document.getElementById( 'ccolors' ).getContext( '2d' );
var debugData = debugPixels.getImageData( 0, 0, 100, 480 ),
dd = debugData.data;
}
var pt = ( extracting * 100 * 120 * 4 )
var colors = [];
for( var i = 0, _i = points.length; i < _i; i++ ){
var p = points[ i ], pointer = ( p[ 0 ] - minX + ( p[ 1 ] - minY ) * w ) * 4;
......@@ -343,8 +378,50 @@ var extractColors = function( ctx, where, k, production){
//data[ pointer + 2 ] = 255
colors.push( rgbToLab( r, g, b ) );
if(notThis){
var near = false, lab = rgbToLab(r,g,b);
for( var j = 0, _j = notThis.length; j < _j; j++ ){
var notThi = notThis[ j ];
if(labDistance(notThi.hsv, lab)<deltaSkin){
near = true;
break;
}
}
if(near === false){
colorsRaw.push( { rgb: [ r, g, b ], hsl: rgbToHsl( r, g, b ) } );
}
}else{
colorsRaw.push( { rgb: [ r, g, b ], hsl: rgbToHsl( r, g, b ) } );
}
// colors.push(rgbToLab(r,g,b));
}
var bucketsCount = 100; var buckets = [];
for( var i = 0; i < bucketsCount; i++ ){
buckets.push(0);
}
var minL = Infinity, maxL = 0.8;
for( var i = 0, _i = colorsRaw.length; i < _i; i++ ){
var colorsRawElement = colorsRaw[ i ],
L = colorsRawElement.hsl[2];
(L < minL) && (minL = L);
(L > maxL) && (maxL = L);
buckets[L*bucketsCount|0]++;
}
var dL = maxL - minL, centerL = (maxL+minL)/2;
for( var i = 0, _i = colorsRaw.length; i < _i; i++ ){
var colorsRawElement = colorsRaw[ i ],
L = colorsRawElement.hsl[2];
if(buckets[L*bucketsCount|0]>_i/bucketsCount/2)
//if( L > minL+dL/5 && L < maxL - dL/3 && L < 0.75 )
colors.push( rgbToLab.apply( null, colorsRawElement.rgb ) );
}
//rgbToLab( r, g, b )
if( !production ){
debugPixels.putImageData( debugData, 0, 0 );
}
......@@ -434,6 +511,40 @@ var extractColors = function( ctx, where, k, production){
return delta < 0.0000001 || delta > 15;
} );
};
var extractColors = function( ctx, where, k, production, notThis, partName){
if(partName === 'skin'){
var colors = where.map( function( polygon ){
return colorsFromPoints(triangle.apply( null, polygon ), ctx, where, k, production, notThis, partName);
} );
var min = Infinity, max = -Infinity;
var colors = [].concat.apply([], colors);
for( var i = 0, _i = colors.length; i < _i; i++ ){
var color = colors[ i ].color;
min = Math.min(min, color[0]);
max = Math.max(max, color[0]);
}
var delta = max-min;
colors = colors.filter(function(c) {
return c.color[0] >= min + delta/10 && c.color[0] <= max + delta/10;
});
var l = 0, a = 0, b = 0;
for( var i = 0, _i = colors.length; i < _i; i++ ){
var color1 = colors[ i ].color;
l+=color1[0]; a+=color1[1]; b+=color1[2];
}
l/= _i; a /= _i; b /= _i;
return [{color: [l,a,b]}];
}
var points = [].concat.apply( [], where.map( function( polygon ){
return triangle.apply( null, polygon );
} ) );
return colorsFromPoints(points, ctx, where, k, production, notThis, partName);
};
var colorSort = function(a,b){return (-(a[2]-b[2]))+(-(a[1]-b[1])/2)};
var similarColor = 5;//0.05;
var abs = Math.abs, min = Math.min;
......@@ -458,9 +569,9 @@ function rgbToHex(r, g, b) {
return ((r << 16) | (g << 8) | b).toString(16);
}
var binds = [];
var extractor = function(partName, ctx, from, k, production) {
var extractor = function(partName, ctx, from, k, production, notThis) {
extracting++;
var colors = extractColors(ctx, from, k, production)
var colors = extractColors(ctx, from, k, production, notThis, partName)
.map(function(m) {
return {color: labToRgb.apply(null, m.color).map(function(a){return a|0}), hsv: m.color, distance: m.distance};
});
......@@ -471,18 +582,67 @@ var extractor = function(partName, ctx, from, k, production) {
binds = [];
if(production){
var mean = 0, count = colors.length;
for( var i = 0, _i = colors.length; i < _i; i++ ){
var color = colors[ i ];
mean+=color.hsv[0];//L
}
mean /= count;
if(partName === 'eyes' || partName === 'lips'){
if(mean>20){
colors = colors.filter(function(c) {
return c.hsv[0] > 10;
})
}
if(mean<88){
colors = colors.filter(function(c) {
return c.hsv[0] < 90;
})
}
}
if(partName === 'skin'){
colors = colors.filter(function(c) {
return c.hsv[0] > mean-10;
});
count = colors.length;
var mean = [0,0,0];
for( var i = 0, _i = colors.length; i < _i; i++ ){
var color = colors[ i ];
mean[0]+=color.hsv[0];//L
mean[1]+=color.hsv[1];//L
mean[2]+=color.hsv[2];//L
}
mean[0] /= count;
mean[1] /= count;
mean[2] /= count;
colors = [{color: labToRgb.apply(null, mean), hsv: mean}]
}
if(production !== 0 && production !== void 0){
var clrs = document.getElementById(partName+'-bg').querySelector('.colors');
clrs && clrs.parentNode.removeChild(clrs);
D.div({cls: 'colors', renderTo: document.getElementById(partName+'-bg') },
colors.map(function(m){
return D.div({style: 'background:rgb('+m.color.join(',')+');width:'+100/colors.length+'%', cls: 'color-preview'},
'L: '+Math.floor(m.hsv[0]),D.h('br'),
'A: '+Math.round(m.hsv[1]), D.h('br'),
'B: '+Math.round(m.hsv[2])
'B: '+Math.round(m.hsv[2]), D.h('br'),
(notThis||[]).map(function(c) {
return labDistance(c.hsv, m.hsv).toFixed(2);
}).join('~')
);
})
);
loadJSONcollection(partName, colors);
if(production === 2){
return colors;
}
if(partName[0] !== '_'){
loadJSONcollection( partName, colors );
}
return;
}
......@@ -493,7 +653,11 @@ var extractor = function(partName, ctx, from, k, production) {
'L: '+Math.floor(m.hsv[0]),D.h('br'),
'A: '+Math.round(m.hsv[1]), D.h('br'),
'B: '+Math.round(m.hsv[2])
'B: '+Math.round(m.hsv[2]), D.h('br'),
(notThis||[]).map(function(c) {
debugger
return labDistance(c, m.hsv);
})
/*'H: '+Math.floor(m.hsv[0]*360),D.h('br'),
'S: '+Math.round(m.hsv[1]*100)+'%', D.h('br'),
'V: '+Math.round(m.hsv[2]*100)+'%'*/
......@@ -501,7 +665,8 @@ var extractor = function(partName, ctx, from, k, production) {
}),
function(draw) {
getData(partName, function(res){
if(!res)
return;
var b = store.sub( [ 'threshold', 'maxCount', 'maxThreshold' ], function( threshold, maxCount, maxThreshold ){
var list = [];
......
......@@ -17,41 +17,126 @@ var FaceMarks = function(landmarks) {
var marks = this.marks = {
cheek: {
left: {
},
right: {
}
left: {},
right: {}
},
lips: {
top: {
},
bottom: {
}
top: {},
bottom: {}
},
brows: {
left: {}, right: {}
},
eyes: {
left: {}, right: {}
},
skin: {
top: {},
underEye: {left: [], right: []},
underNose: {left: [], right: []},
chin: []
}
};
// CHEEKS
// CHEEKS
marks.cheek.left = this.cheek(nose[3], toPoint(jaw[0]).middle(toPoint(jaw[1])), mouth[0]);
marks.cheek.right = this.cheek(nose[3], toPoint(jaw[15]).middle(toPoint(jaw[16])), mouth[6]);
// LIPS
marks.lips.top = this.lip(mouth[2], mouth[4], mouth[13], mouth[15], true);
marks.lips.bottom = this.lip(mouth[10], mouth[8], mouth[19], mouth[17], true);
// EYES
marks.eyes.left = this.eye(leftBrow[0], leftBrow[3], leftEye[0], leftEye[2], leftEye[3], leftEye[4]);
marks.eyes.right = this.eye(rightBrow[4], rightBrow[1], rightEye[3], rightEye[1], rightEye[0], rightEye[5]);
// SKIN
marks.skin.top = this.topSkin(leftBrow[2], rightBrow[2], nose[0]);
marks.skin.underEye = this.underEyeSkin(nose[2], marks.eyes, marks.cheek );
marks.skin.underNose = this.undeNoseSkin(mouth[2], mouth[4], mouth[1], mouth[5], marks.eyes, marks.cheek );
marks.skin.chin = this.chinSkin(mouth[11], mouth[7], jaw[8] );
};
FaceMarks.prototype = {
chinSkin: function(m1, m2, j1) {
m1 = toPoint(m1);
m2 = toPoint(m2);
j1 = toPoint(j1);
var base = [
m1.lerp(j1,2/5),
m2.lerp(j1,2/5),
m1.lerp(m2,0.5).lerp(j1, 5/6),
];
return [base[0].lerp(base[1], 3/2), base[1].lerp(base[0], 3/2), base[2]]
},
undeNoseSkin: function(m1, m2, m3, m4, eye, cheek) {
m1 = toPoint(m1);
m2 = toPoint(m2);
m3 = toPoint(m3);
m4 = toPoint(m4);
return {
left: [
m1.lerp(cheek.left.bonus2[1], 2/3),
m1.lerp(cheek.left.bonus2[1], 1/3),
cheek.left.bonus2[2].lerp(m3, 0.5)
],
right: [
m2.lerp(cheek.right.bonus2[1], 2/3),
m2.lerp(cheek.right.bonus2[1], 1/3),
cheek.right.bonus2[2].lerp(m4, 0.5)
],
}
},
underEyeSkin: function(n1, eye, cheek) {
n1 = toPoint(n1);
var p0 = n1.lerp(eye.left.t3[1],0.5);
var p1 = n1.lerp(eye.right.t3[1],0.5);
return {
left: [
p0,
p0.lerp(cheek.left.bonus2[1], 0.5),
p0.lerp(cheek.left.bonus2[1], 0.5).add(
cheek.left.bonus2[1].subClone(cheek.left.bonus2[2]).mul(-0.5)
)
],
right: [
p1,
p1.lerp(cheek.right.bonus2[1], 0.5),
p1.lerp(cheek.right.bonus2[1], 0.5).add(
cheek.right.bonus2[1].subClone(cheek.right.bonus2[2]).mul(-0.5)
)
],
}
},
topSkin: function(b1,b2, n1) {
b1 = toPoint(b1);
b2 = toPoint(b2);
n1 = toPoint(n1);
var center = b1.middle(b2);
var upVector = n1.subClone(center);
return {
left: [
b1.subClone(upVector.mulClone(2/3)),
center.subClone(upVector.mulClone(17/30)).add(b1.lerp(b2,1).normalize().mul(-2)),
center
],
right: [
b2.subClone(upVector.mulClone(2/3)),
center.subClone(upVector.mulClone(17/30)).add(b1.lerp(b2,1).normalize().mul(2)),
center
],
}
},
eye: function(b1,b2, e1,e2,e3,e4) {
b1 = toPoint(b1),
b2 = toPoint(b2),
......@@ -59,29 +144,49 @@ FaceMarks.prototype = {
e2 = toPoint(e2),
e3 = toPoint(e3),
e4 = toPoint(e4);
return {
t1: [
var t1, t2, t3, t4;
var eyes = {
t1: t1 = [
b2.lerp(e2, 2/3),
b1.lerp(e1, 2/3),
b1.lerp(e1, 1/3)
],
t2: [
t2: t2 = [
b1.lerp(e1, 0.95/3),
b1.lerp(b2, 0.5).lerp(e1, 1/3),
b1.lerp(b2, 0.5).lerp(e1, 1.4/3)
],
t3: [
t3: t3 = [
e2.lerp(e3, 2),
e2.lerp(e4, 1.65),
e2.lerp(e4, 2.35)
e2.lerp(e4, 2.45)
],
t4: [
t4: t4 = [
e2.lerp(e4, 1.65),
e2.lerp(e4, 2.35),
e2.lerp(e4, 2.45),
b2.lerp(e1, 1.5)
]
}
};
eyes.t5 = [
t1[1].lerp(t1[0],4/5),
t1[2].lerp(t1[0],5/4),
e2.lerp(e4, 1.65).lerp(
e2.lerp(e3, 2), 1.3)
//t3[0].//lerp(t1[0],1/4)
];
eyes.t6 = [
t1[1].lerp(t1[2],1/2),
t1[0].lerp(t1[1],3/2),
t4[2].lerp(t1[1],2/3)
];
var p = t3[0].lerp(t3[2], 0.5);
eyes.t7 = [
p,
t3[1].lerp(p, 2),
t3[1].lerp(t3[0], 1.4)
];
return eyes;
},
cheek: function(nose, jaw, mouthSide) {
......
var store = new Store({
threshold: 75,
maxCount: 5
threshold: 0.25,
maxCount: 5,
maxThreshold: 15
});
var TINY_FACE_DETECTOR = 1;var SSD_MOBILENETV1 = 2
......@@ -50,15 +51,33 @@ img.onload = function() {
imgSizeFit(img, 480, 640);
}
}
//imgSizeFit(img, )
cc.drawImage(img, 0, 0, canvas.width, canvas.height);
doMatching(canvas, cc);
};
// set Image src that user chose.
img.src = localStorage.getItem("image_data");
var src = localStorage.getItem("image_data")
if(src){
img.src = src;
}
var dims = {width:640, height: 480};
var seq = [];
canvas.addEventListener('click', function(e) {
seq.push([e.layerX/canvas.width*4|0, e.layerY/canvas.height*4|0]);
if(seq.length>5){
seq = seq.slice( seq.length - 5 );
}
if(seq.map(function(s) {
return s.join(',')
}).join('|') === '3,3|3,0|3,3|0,0|0,3'){
document.body.classList.add( 'DEBUG_MODE' );
console.log('enter debug mode');
}
});
function imgSizeFit(img, maxWidth, maxHeight) {
var ratio = Math.min(
1,
......@@ -67,13 +86,13 @@ function imgSizeFit(img, maxWidth, maxHeight) {
);
var neww = img.naturalWidth * ratio;
var newh = img.naturalHeight * ratio;
canvas_container.style.width = `${neww}px`;
//canvas_container.style.width = `${neww}px`;
canvas.setAttribute("width", neww);
canvas.setAttribute("height", newh);
overlay.setAttribute("width", neww);
overlay.setAttribute("height", newh);
detection.setAttribute("width", neww);
detection.setAttribute("height", newh);
/*overlay.setAttribute("width", dims.width);
overlay.setAttribute("height", dims.height);
detection.setAttribute("width", dims.width);
detection.setAttribute("height", dims.height);*/
}
async function doMatching(el, ctx) {
var inputSize = s0;
......@@ -84,8 +103,10 @@ async function doMatching(el, ctx) {
await faceapi.loadFaceLandmarkModel(assetDir );
}
var options = new faceapi.TinyFaceDetectorOptions( { inputSize, scoreThreshold } );
var dims = {width:640, height: 480};
detection.setAttribute("width", dims.width);
detection.setAttribute("height", dims.height);
overlay.setAttribute("width", dims.width);
overlay.setAttribute("height", dims.height);
detectionCtx.clearRect(0,0,dims.width, dims.height);
if(img.width/dims.width*dims.height>img.height){
var h = img.height/(img.width/dims.width);
......@@ -133,7 +154,7 @@ async function doMatching(el, ctx) {
}
overlayCC.clearRect(0,0,dims.width, dims.height);
faceapi.draw.drawFaceLandmarks( overlay, faceapi.resizeResults( result, dims ) );
faceapi.draw.drawFaceLandmarks( overlayCC, faceapi.resizeResults( result, dims ) );
overlayCC.fillStyle='blue'; mouth.forEach(function(p, i) { overlayCC.fillText(i+'', p.x, p.y) });
overlayCC.fillStyle='red'; jaw.forEach(function(p, i) { overlayCC.fillText(i+'', p.x, p.y) });
......@@ -177,7 +198,8 @@ async function doMatching(el, ctx) {
]);
var eyes = [];
var eyes = [], skin;
if(ratio > bad){
cheek = [cheek.left.base, cheek.left.bonus1, cheek.left.bonus2];
browsSearchArea.pop();
......@@ -185,7 +207,17 @@ async function doMatching(el, ctx) {
faceMarks.marks.eyes.left.t1,
faceMarks.marks.eyes.left.t2,
faceMarks.marks.eyes.left.t3,
faceMarks.marks.eyes.left.t4
faceMarks.marks.eyes.left.t4,
faceMarks.marks.eyes.left.t5,
faceMarks.marks.eyes.left.t6,
faceMarks.marks.eyes.left.t7
];
skin = [
faceMarks.marks.skin.top.left,
faceMarks.marks.skin.underEye.left,
faceMarks.marks.skin.underNose.left,
faceMarks.marks.skin.chin
];
}else if(ratio < 1/bad){
cheek = [cheek.right.base, cheek.right.bonus1, cheek.right.bonus2];
......@@ -195,7 +227,17 @@ async function doMatching(el, ctx) {
faceMarks.marks.eyes.right.t1,
faceMarks.marks.eyes.right.t2,
faceMarks.marks.eyes.right.t3,
faceMarks.marks.eyes.right.t4
faceMarks.marks.eyes.right.t4,
faceMarks.marks.eyes.right.t5,
faceMarks.marks.eyes.right.t6,
faceMarks.marks.eyes.right.t7
];
skin = [
faceMarks.marks.skin.top.right,
faceMarks.marks.skin.underEye.right,
faceMarks.marks.skin.underNose.right,
faceMarks.marks.skin.chin
];
}else{
......@@ -214,33 +256,63 @@ async function doMatching(el, ctx) {
faceMarks.marks.eyes.left.t2,
faceMarks.marks.eyes.left.t3,
faceMarks.marks.eyes.left.t4,
faceMarks.marks.eyes.left.t5,
faceMarks.marks.eyes.left.t6,
// faceMarks.marks.eyes.left.t7,
faceMarks.marks.eyes.right.t1,
faceMarks.marks.eyes.right.t2,
faceMarks.marks.eyes.right.t3,
faceMarks.marks.eyes.right.t4
faceMarks.marks.eyes.right.t4,
faceMarks.marks.eyes.right.t5,
faceMarks.marks.eyes.right.t6//,
//faceMarks.marks.eyes.right.t7
];
}
skin = [
faceMarks.marks.skin.top.left,
faceMarks.marks.skin.top.right,
faceMarks.marks.skin.underEye.left,
faceMarks.marks.skin.underEye.right,
faceMarks.marks.skin.underNose.left,
faceMarks.marks.skin.underNose.right,
faceMarks.marks.skin.chin
];
}
var drawPoly = function(poly, p) {
var ctx = overlayCC;
ctx.fillStyle = 'rgba(200,0,100,1)';
var drawPoly = function(poly) {
for(var i = 0,_i = poly.length; i < _i; i++ ){
var point = poly[i];
ctx.fillText( i + '', point.x, point.y );
}
overlayCC.beginPath();
ctx.strokeStyle = 'rgba(200,0,100,0.6)';
ctx.beginPath();
for(var i = 0,_i = poly.length; i <= _i; i++ ){
if(i === 0){
overlayCC.moveTo( poly[ i ].x, poly[ i ].y );
ctx.moveTo( poly[ i ].x, poly[ i ].y );
}else{
overlayCC.lineTo( poly[ i % _i ].x, poly[ i % _i ].y );
ctx.lineTo( poly[ i % _i ].x, poly[ i % _i ].y );
}
}
overlayCC.stroke();
ctx.stroke();
var point = poly[0].addClone(poly[1]).add(poly[2]).div(3);
ctx.fillStyle = '#3ce6f5';
ctx.fillText( p, point.x-2, point.y+4 );
};
cheek.forEach(drawPoly);
lips.forEach(drawPoly);
browsSearchArea.forEach(drawPoly);
eyes.forEach(drawPoly);
skin.forEach(drawPoly);
......@@ -249,14 +321,22 @@ async function doMatching(el, ctx) {
extracting = -1;
extractor('lips', detectionCtx, lips, 5,1);
extractor('blush', detectionCtx, cheek, 3,1);
extractor('brows', detectionCtx, browsSearchArea, 2,1);
extractor('eyes', detectionCtx, eyes, 6, 1);
}
var notThis = extractor('skin', detectionCtx, skin, 6, 2);
extractor('lips', detectionCtx, lips, 5,1, notThis);
extractor('blush', detectionCtx, cheek, 3,1, notThis);
extractor('brows', detectionCtx, browsSearchArea, 2,1, notThis);
extractor('eyes', detectionCtx, eyes, 6, 1, notThis);
extractor('_lips', detectionCtx, lips, 5,1);
extractor('_blush', detectionCtx, cheek, 3,1);
extractor('_brows', detectionCtx, browsSearchArea, 2,1);
extractor('_eyes', detectionCtx, eyes, 6, 1);
}
document.getElementById("loading").classList.add("d-none"); // make loading gif disappear
document.getElementById("color_matching_products-container").style.display = 'block';
document.getElementById("color_results_holder").style.visibility = 'visible';
}
......@@ -266,7 +346,7 @@ function matchingProductsFormat(product, index) {
var out_put = "";
out_put = `<div id="color_matching_${product.pid}" class="grid__item grid-product small--one-half cd-medium-up--one-third grid-product__has-quick-shop aos-init aos-animate" data-aos="row-of-3">
<div class="grid-product__content">
<a class="grid-product__link " href="/products/${product.p.handle}" target="_blank">
<a class="grid-product__link " href="/products/${product.p.handle}?variant=${product.vid}" target="_blank">
<div class="grid-product__image-mask">
<div class="grid__image-ratio grid__image-ratio--portrait lazyloaded" data-bgset="${product.img}" style="background-image: url(${product.img});"">
</div>
......@@ -289,7 +369,7 @@ function matchingProductsFormat(product, index) {
</div>
<!-- end of add wishlist -->
<div aria-expanded class="quick-product__btn js-modal-open-quick-modal-${product.pid} d-flex quick-product__icon-bg quick-product__view" data-product-id="${product.pid}">
<a href="/products/${product.p.handle}" target="_blank" class="w-100 h-100">
<a href="/products/${product.p.handle}?variant=${product.vid}" target="_blank" class="w-100 h-100">
<span class="quick-product__label d-flex align-self-center quick-try-on w-100 h-100"></span>
</a>
</div>
......@@ -362,7 +442,8 @@ function miloAnswer(bool) {
document.getElementById("color_results_holder").classList.add("d-none");
}
}
function loadJSONcollection(fpart, colors) {//}, html_cl, showSameColorName) {
function _makeRequest(fpart, cb) {
var xmlhttp = new XMLHttpRequest();
var url = `/collections/cd-${fpart}-results/products.json?limit=250?page=1`;
......@@ -373,105 +454,127 @@ function loadJSONcollection(fpart, colors) {//}, html_cl, showSameColorName) {
xmlhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
var products = JSON.parse(this.responseText);
colorMatchProductChecker(products, fpart, colors);
miloAnswer(true);
cb(products);
}
};
} catch (err) {
// instead of onerror
alert("Ajax Error. Please check your Internet connection.");
}
}
function loadJSONcollection(fpart, colors) {//}, html_cl, showSameColorName) {
_makeRequest(fpart, function(products) {
colorMatchProductChecker(products, fpart, colors);
miloAnswer(true);
});
function colorMatchProductChecker(res, fp, colors) {
var threshold = 75, maxCount = 5;
var list = [];
res.products.forEach( function( product ){
product.variants.forEach( function( variant ){
var color = variant.option2.substr( 1 ),
r = parseInt( color[ 0 ] + color[ 1 ], 16 ),
g = parseInt( color[ 2 ] + color[ 3 ], 16 ),
b = parseInt( color[ 4 ] + color[ 4 ], 16 );
list.push( {
v: variant,
p: product,
pid: product.id,
vid: variant.id,
description: product.body_html,
title: product.title,
color: variant.option2,
colorName: variant.option1,
img: variant.featured_image && variant.featured_image.src || ( product.images[ 0 ] || {} ).src || "https://cdn.shopify.com/s/files/1/0275/8036/6900/files/2_Main_Vertical_Transparent.png?v=1575867010",
sku: variant.option3,
hsv: rgbToHsv( r, g, b )
if(!res)
return;
var count;
var b = store.sub( [ 'threshold', 'maxCount', 'maxThreshold' ], function( threshold, maxCount, maxThreshold ){
var list = [];
res.products.forEach( function( product ){
product.variants.forEach( function( variant ){
var color = variant.option2.substr( 1 ),
r = parseInt( color[ 0 ] + color[ 1 ], 16 ),
g = parseInt( color[ 2 ] + color[ 3 ], 16 ),
b = parseInt( color[ 4 ] + color[ 4 ], 16 );
list.push( {
p: product, v: variant,
pid: product.id,
vid: variant.id,
description: product.body_html,
title: product.title,
color: variant.option2,
colorName: variant.option1,
img: variant.featured_image && variant.featured_image.src || ( product.images[ 0 ] || {} ).src,
sku: variant.option3,
hsv: rgbToLab( r, g, b )
} );
} );
} );
} );
var used = {};
var all = [].concat.apply( [],
colors.map( function( clr ){
var epsilon = threshold;
var matched = list.map( function( i ){
return { i: i, d: hsvDistance( i.hsv, clr.hsv ), c: clr };
} )
.filter( function( i ){
return Math.max( 0, Math.min( 100, ( 1 - i.d*3 ) * 100 ) ) >= threshold;
var used = {};
var all = [].concat.apply( [],
colors.map( function( clr ){
var epsilon = threshold;
var matched = list.map( function( i ){
return { i: i, d: labDistance( i.hsv, clr.hsv ), c: clr };
} )
.sort( function( a, b ){
return a.d - b.d;
.filter( function( i ){
return i.d <= maxThreshold;
} )
.sort( function( a, b ){
return a.d - b.d;
} );
var allMatched = matched.slice();
if( maxCount === 0 )
return matched;
matched = allMatched.filter( function( a ){
return a.d <= threshold;
} );
if(maxCount === 0)
return matched;
var lastMatched = matched;
while( matched.length > maxCount ){
epsilon = 100-(100-epsilon) / 3 * 2;
var lastMatched = matched;
var m = 0, step = 0;
while( matched.length < maxCount ){
step++;
epsilon = epsilon + 0.25;
matched = matched.filter( function( i ){
return Math.max( 0, Math.min( 100, ( 1 - i.d*3 ) * 100 ) ) >= epsilon;
} );
if( matched.length === 0 ){
matched = lastMatched.slice(0,maxCount);
break;
if( epsilon > maxThreshold )
break;
if( m * step / 5 + epsilon > maxThreshold )
break;
if( matched.length && epsilon > ( threshold + maxThreshold ) / 2 )
break;
matched = allMatched.filter( function( i ){
return i.d <= epsilon;
} );
m = Math.max( m, matched.length );
lastMatched = matched;
}
lastMatched = matched;
/*if(!matched.length>3){
matched = matched.f;
return matched;
}*/
/*if(matched[0].d<0.02){
return matched.slice( 0, 1 )
}else{
return matched.slice(0, 2);
}*/
return matched.slice( 0, maxCount );
} ) ).filter( function( item ){
if( !( item.i.vid in used ) ){
used[ item.i.vid ] = true;
return true;
}
/*if(!matched.length>3){
matched = matched.f;
return matched;
}*/
/*if(matched[0].d<0.02){
return matched.slice( 0, 1 )
}else{
return matched.slice(0, 2);
}*/
return matched;
} ) ).filter( function( item ){
if( !( item.i.vid in used ) ){
used[ item.i.vid ] = true;
return true;
}
return false;
} );
return false;
} );
var count = all.length;
all.map( function( item ){
document
.getElementById(`${fp}-result`)
.insertAdjacentHTML(
"beforeend",
matchingProductsFormat(item.i)
);
/*document.getElementById(
`color_squares_container-${product.id}`
).innerHTML = colorSquareFormat(
product,
cl,
showSameColorName
);*/
} );
count = all.length;
all.map( function( item ){
document
.getElementById( `${fp}-result` )
.insertAdjacentHTML(
"beforeend",
matchingProductsFormat( item.i )
);
} );
});
binds.push(b);
/*
var count = 0;
// reset
......
......@@ -34,6 +34,7 @@ app.get('/bbt_face_recognition', (req, res) => res.sendFile(path.join(viewsDir,
app.get('/batch_face_landmarks', (req, res) => res.sendFile(path.join(viewsDir, 'batchFaceLandmarks.html')))
app.get('/batch_face_recognition', (req, res) => res.sendFile(path.join(viewsDir, 'batchFaceRecognition.html')))
app.get('/demo', (req, res) => res.sendFile(path.join(viewsDir, 'demo.html')));
app.get('/demo2', (req, res) => res.sendFile(path.join(viewsDir, 'demo2.html')));
app.get('/all', (req, res) => res.sendFile(path.join(viewsDir, 'all.html')));
app.post('/fetch_external_image', async (req, res) => {
......
......@@ -177,11 +177,29 @@ window.s0 = 224;
//ctx.drawImage(img, 0, 0);
f();
};
/*
const toBase64 = file => new Promise((resolve, reject) => {
const reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = () => resolve(reader.result);
reader.onerror = error => reject(error);
});
async function Main() {
const file = e.target.files[0];
var bas = await toBase64(file);
debugger
console.log(bas);
}
Main();*/
img.src = url;
}
img.src = "data:image/jpeg;base64,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";
var input = document.getElementById('input');
var cb = document.getElementById('cb');
......@@ -200,7 +218,7 @@ window.s0 = 224;
var ctx2 = playback.getContext('2d');
var canvas = overlay;
var dims = {width:640, height: 480};
window.useTiny = false;
canvas.width = playback.width = dims.width;
canvas.height = playback.height = dims.height;
var f = async function(){
......@@ -235,7 +253,23 @@ var videoEl = inputVideo;
}
let result = await faceapi.detectSingleFace( playback, options ).withFaceLandmarks();//.withFaceDescriptor();
let result = await faceapi.detectSingleFace( playback, options ).withFaceLandmarks(useTiny);//.withFaceDescriptor();
if(!result){
console.log('No landmarks matched');
result = await faceapi.detectSingleFace( playback, options );
if(!result){
console.log( 'Even no face matched' );
}
result = await faceapi.detectAllFaces( playback, options ).withFaceLandmarks(useTiny);//.withFaceDescriptor();
if(!result){
console.log('can not detect multiple faces')
}
result = false;
}
if(result){
......@@ -323,7 +357,8 @@ var videoEl = inputVideo;
]);
var eyes = [];
var eyes = [], skin;
if(ratio > bad){
cheek = [cheek.left.base, cheek.left.bonus1, cheek.left.bonus2];
browsSearchArea.pop();
......@@ -333,6 +368,13 @@ var videoEl = inputVideo;
faceMarks.marks.eyes.left.t3,
faceMarks.marks.eyes.left.t4
];
skin = [
faceMarks.marks.skin.top.left,
faceMarks.marks.skin.underEye.left,
faceMarks.marks.skin.underNose.left,
faceMarks.marks.skin.chin
];
}else if(ratio < 1/bad){
cheek = [cheek.right.base, cheek.right.bonus1, cheek.right.bonus2];
browsSearchArea.shift();
......@@ -344,6 +386,13 @@ var videoEl = inputVideo;
faceMarks.marks.eyes.right.t4
];
skin = [
faceMarks.marks.skin.top.right,
faceMarks.marks.skin.underEye.right,
faceMarks.marks.skin.underNose.right,
faceMarks.marks.skin.chin
];
}else{
cheek = [
cheek.left.base,
......@@ -366,14 +415,32 @@ var videoEl = inputVideo;
faceMarks.marks.eyes.right.t3,
faceMarks.marks.eyes.right.t4
];
skin = [
faceMarks.marks.skin.top.left,
faceMarks.marks.skin.top.right,
faceMarks.marks.skin.underEye.left,
faceMarks.marks.skin.underEye.right,
faceMarks.marks.skin.underNose.left,
faceMarks.marks.skin.underNose.right,
faceMarks.marks.skin.chin
];
}
var drawPoly = function(poly) {
var drawPoly = function(poly, p) {
ctx.fillStyle = 'rgba(200,0,100,1)';
for(var i = 0,_i = poly.length; i < _i; i++ ){
var point = poly[i];
ctx.fillText( i + '', point.x, point.y );
}
ctx.beginPath();
ctx.strokeStyle = 'rgba(200,0,100,0.6)';
ctx.beginPath();
for(var i = 0,_i = poly.length; i <= _i; i++ ){
if(i === 0){
ctx.moveTo( poly[ i ].x, poly[ i ].y );
......@@ -382,11 +449,20 @@ var videoEl = inputVideo;
}
}
ctx.stroke();
var point = poly[0].addClone(poly[1]).add(poly[2]).div(3);
ctx.fillStyle = '#3ce6f5';
ctx.fillText( p, point.x-2, point.y+4 );
};
cheek.forEach(drawPoly);
lips.forEach(drawPoly);
browsSearchArea.forEach(drawPoly);
eyes.forEach(drawPoly);
skin.forEach(drawPoly);
......@@ -395,22 +471,28 @@ var videoEl = inputVideo;
extracting = -1;
var notThis = extractor('skin', ctx2, skin, 5, 2)
extracting = -1;
updateColors([
block(
'Lips',
extractor('lips',ctx2, lips, 5)
extractor('lips',ctx2, lips, 5,0,notThis)
),
block(
'Blush',
extractor('blush', ctx2, cheek, 3)
extractor('blush', ctx2, cheek, 3,0,notThis)
),
block(
'Brows',
extractor('brows', ctx2, browsSearchArea, 2)
extractor('brows', ctx2, browsSearchArea, 2,0,notThis)
),
block(
'Eyes',
extractor('eyes', ctx2, eyes, 6)
extractor('eyes', ctx2, eyes, 6,0,notThis)
),
block(
'Skin',
extractor('skin', ctx2, skin, 5)
)
]);
......@@ -471,10 +553,10 @@ var videoEl = inputVideo;
D.div({cls: 'settings', renderTo: document.getElementById('settings')},
D.h('label', {},
'Max count: ', D.h(Input, {bind: store.bind('maxCount')})
),
)/*,
D.h('label', {},
'Threshold: ', D.h(Input, {bind: store.bind('threshold')})
),
)*/,
D.h('label', {},
'maxThreshold: ', D.h(Input, {bind: store.bind('maxThreshold')})
)
......@@ -482,5 +564,8 @@ var videoEl = inputVideo;
</script>
</body>
</html>
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment