Improve face scoring
parent
b805339c3f
commit
4b390f5ba4
|
@ -128,8 +128,8 @@ trait TimelineQueryFaces
|
||||||
// Get actual pixel size of face
|
// Get actual pixel size of face
|
||||||
$iw = min((int) ($p['image_width'] ?: 512), 2048);
|
$iw = min((int) ($p['image_width'] ?: 512), 2048);
|
||||||
$ih = min((int) ($p['image_height'] ?: 512), 2048);
|
$ih = min((int) ($p['image_height'] ?: 512), 2048);
|
||||||
$w = (float) $p['width'] * $iw;
|
$w = (float) $p['width'];
|
||||||
$h = (float) $p['height'] * $ih;
|
$h = (float) $p['height'];
|
||||||
|
|
||||||
// Get center of face
|
// Get center of face
|
||||||
$x = (float) $p['x'] + (float) $p['width'] / 2;
|
$x = (float) $p['x'] + (float) $p['width'] / 2;
|
||||||
|
@ -138,12 +138,15 @@ trait TimelineQueryFaces
|
||||||
// 3D normal distribution - if the face is closer to the center, it's better
|
// 3D normal distribution - if the face is closer to the center, it's better
|
||||||
$positionScore = exp(-($x - 0.5) ** 2 * 4) * exp(-($y - 0.5) ** 2 * 4);
|
$positionScore = exp(-($x - 0.5) ** 2 * 4) * exp(-($y - 0.5) ** 2 * 4);
|
||||||
|
|
||||||
// Root size distribution - if the face is bigger, it's better,
|
// Root size distribution - if the image is bigger, it's better,
|
||||||
// but it doesn't matter beyond a certain point, especially 256px ;)
|
// but it doesn't matter beyond a certain point
|
||||||
$sizeScore = ($w * 100) ** (1 / 4) * ($h * 100) ** (1 / 4);
|
$imgSizeScore = ($iw * 100) ** (1 / 2) * ($ih * 100) ** (1 / 2);
|
||||||
|
|
||||||
|
// Faces occupying too much of the image don't look particularly good
|
||||||
|
$faceSizeScore = (-pow($w, 2) + $w) * (-pow($h, 2) + $h);
|
||||||
|
|
||||||
// Combine scores
|
// Combine scores
|
||||||
$p['score'] = $positionScore * $sizeScore;
|
$p['score'] = $positionScore * $imgSizeScore * $faceSizeScore;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sort previews by score descending
|
// Sort previews by score descending
|
||||||
|
|
Loading…
Reference in New Issue