diff --git a/src/Models/Hit.php b/src/Models/Hit.php
index 55f9670..ef7505e 100644
--- a/src/Models/Hit.php
+++ b/src/Models/Hit.php
@@ -143,7 +143,7 @@ class Hit
/**
* Gets the value of points.
*
- * @return mixed
+ * @return Points
*/
public function getPoints()
{
@@ -196,7 +196,7 @@ class Hit
/**
* @param string $feature
- * @return string
+ * @return string|false false if not exists
* @throws \Exception
*/
public function getFeatureFilename(string $feature) {
@@ -1327,6 +1327,55 @@ class Points{
$this->{"point".$nr} = new Point($x, $y);
}
return $this;
+
+ $a = $this->getNormalisedPoints();
+
+ }
+
+ /**
+ * @return array[Point]
+ */
+ public function getAsArray() {
+ $points = [];
+ foreach(range(0, 33) as $i) {
+ $points[$i] = $this->{"point$i"};
+ }
+ return $points;
+ }
+
+ /**
+ * Fits points within a 100x100 scale
+ * @return array[Point]
+ */
+ public function getNormalisedPoints() {
+ $points = $this->getAsArray();
+ $xs = array_map(function(Point $a){return $a->getX();}, $points);
+ $ys = array_map(function(Point $a){return $a->getX();}, $points);
+
+ $minx = min($xs);
+ $maxx = max($xs);
+
+ $miny = min($ys);
+ $maxy = max($ys);
+
+ $sizex = $maxx-$minx;
+ $sizey = $maxy-$miny;
+
+ $scale = max($sizex, $sizey); // divide by largest diff.
+
+ //used to center the face within the square:
+ $diffx = ($scale - $sizex)/2;
+ $diffy = ($scale - $sizey)/2;
+
+ $normalised_points = [];
+ foreach($points as $i => $point) {
+ $x = (($point->getX() - $minx) / $scale) + $diffx;
+ $y = (($point->getY() - $miny) / $scale) + $diffy;
+
+ $normalised_points[$i] = new Point($x, $y);
+ }
+
+ return $normalised_points;
}
}
@@ -1350,4 +1399,18 @@ class Point{
$this->x = $x;
$this->y = $y;
}
+
+ /**
+ * @return float
+ */
+ public function getX() {
+ return $this->x;
+ }
+
+ /**
+ * @return float
+ */
+ public function getY() {
+ return $this->y;
+ }
}
\ No newline at end of file
diff --git a/www/faces.php b/www/faces.php
index 023959f..04c6329 100644
--- a/www/faces.php
+++ b/www/faces.php
@@ -5,9 +5,28 @@ error_reporting(E_ALL);ini_set('display_errors', true);
$em = \EmotionHero\Application::getInstance()->getEm();
$hitRepo = $em->getRepository(\EmotionHero\Models\Hit::class);
-$currentEmotion = 'anger';
+/* @var $currentHit \EmotionHero\Models\Hit */
+$currentHit = $hitRepo->findOneBy(['hasImage'=>true], ['id'=>'DESC']);
+
+$printEmoBlocks = function($emotion, $feature, $steps = 6) use($em) {
+ foreach(range(0, 100, 100/($steps-1)) as $i) {
+ /* @var $hitRepo EmotionHero\Models\HitRepository */
+ $hitRepo = $em->getRepository(EmotionHero\Models\Hit::class);
+ $hit = $hitRepo->getClosestHitWithImage($emotion, $i);
+ $img = $hit->getFeatureImgAsString($feature);
+ $score = $hit->getEmotions()->getEmotionScore($emotion);
+
+ $percentage = sprintf("%.0f %%",$score);
+ echo <<< EOSNIPPET
+
+
+
+
$percentage
+
+EOSNIPPET;
+ }
+};
-$hits = $hitRepo->findBy([], ["emotions.$currentEmotion"=>'ASC']);
?>
@@ -20,42 +39,130 @@ $hits = $hitRepo->findBy([], ["emotions.$currentEmotion"=>'ASC']);
font-family:"Unifont";
font-weight:bold;
}
+
+ .block{
+ width:150px;
+ }
+ img{
+ width:100%;
+ filter:saturate(0%);
+ mix-blend-mode: multiply;
+ /*mix-blend-mode: exclusion;*/
+ }
+
+ .nose .block{
+ width:70px;
+ }
+ .perc{
+ display:block;
+ width:100%;
+text-align:center;
+ }
+
+ .emo-block{
+ float:left;
+ margin-right:10px;
+text-align:center;
+
+
+ }
+.emo-block-emos{
+position:relative;
+}
+
+ .emo{
+ text-align:center;
+
+ }
+ .brows{
+ width:650px;
+ }
+ .nose{
+ width:240px;
+ }
+
+ .current{
+width:200px;
+margin:0 auto;
+}
+ img.curImg{
+ position:absolute;
+ left:0;
+ mix-blend-mode:difference;
+ }
+
getRepository(EmotionHero\Models\Hit::class);
- $hit = $hitRepo->getClosestHitWithImage("anger", $i);
- $img = $hit->getFeatureImgAsString("brows");
- $score = $hit->getEmotions()->getEmotionScore("anger");
-
- $percentage = sprintf("%.4f %%",$score);
- echo <<< EOSNIPPET
-
-
$percentage
-
-
-EOSNIPPET;
+echo "";
+echo "
getFeatureImgAsString("brows")}\" title=\"{$currentHit->getId()}\">";
+echo "
";
+foreach(EmotionHero\Models\Emotions::$EMOTIONS as $emotion) {
+ echo "- $emotion
- " . sprintf("$.2f", $currentHit->getEmotions()->getEmotionScore($emotion)) . "
";
+}
+echo "
";
+echo "
";
+
+echo "eye brows
";
+echo "
anger
";
+$printEmoBlocks('anger','brows');
+echo "
getFeatureImgAsString("brows")}\" title=\"{$currentHit->getId()}\" style=\"top:{$currentHit->getEmotions()->getAnger()}%\">";
+echo "
";
+
+echo "
joy
";
+$printEmoBlocks('joy','brows');
+echo "
getFeatureImgAsString("brows")}\" title=\"{$currentHit->getId()}\" style=\"top:{$currentHit->getEmotions()->getJoy()}%\">";
+echo "
";
+
+echo "
sadness
";
+$printEmoBlocks('sadness','brows');
+echo "
getFeatureImgAsString("brows")}\" title=\"{$currentHit->getId()}\" style=\"top:{$currentHit->getEmotions()->getSadness()}%\">";
+echo "
";
+
+echo "
surprise
";
+$printEmoBlocks('surprise','brows');
+echo "
getFeatureImgAsString("brows")}\" title=\"{$currentHit->getId()}\" style=\"top:{$currentHit->getEmotions()->getSurprise()}%\">";
+echo "
";
+echo "
"; // .brows
+
+
+echo "nose
";
+echo "
anger";
+$printEmoBlocks('joy','nose');
+echo "
";
+
+echo "
joy";
+$printEmoBlocks('disgust','nose');
+echo "
";
+
+echo "
sadness";
+$printEmoBlocks('sadness','nose');
+echo "
";
+echo "
"; // .nose
+
+$circles = "";
+foreach($currentHit->getPoints()->getNormalisedPoints() as $i => $point) {
+ $circles .= '';
}
-/* @var $hit EmotionHero\Models\Hit */
-foreach($hits as $hit) {
- $filename = __DIR__ . '/../files/hits/brows/'. $hit->getId() . '.jpg';
- if(!file_exists($filename))
- continue;
-
- $img = file_get_contents($filename);
- $data = base64_encode($img);
- $percentage = sprintf("%.4f %%",$hit->getEmotions()->getEmotionScore($currentEmotion));
- echo <<< EOSNIPPET
-
-
$percentage
-
-
-EOSNIPPET;
-}
+echo <<< EOSVG
+
+EOSVG;
?>
\ No newline at end of file