Ich konnte die Pupillen und die Augenecken bisher genau erkennen. Sie können ein paar Schnappschüsse sehen, die ich in meiner Antwort auf meine eigene Frage hochgeladen habe:
Erkennung einer stabilen Augenecke durchführen
Das habe ich bisher gemacht. Ich kalibrierte den Blick des Benutzers, indem ich auf TLCP, TRCP und BLCP schaute wo
%Vor%Und die entsprechenden Blickpunkte, die ich bekomme, wenn ich diese CPs ansehe, heißen GPs
Berechnung eines Blickpunktes GP:
Ich subtrahiere die Werte der TLGP-Koordinaten von der Position der aktuellen Pupillenmitte, weil der Blickpunkt in das hypothetische Rechteck fallen muss, dessen ich hoffe du verstehst es, es ist wirklich sehr einfach.
Ich habe die aus der Mitte der Pupillenmitte berechneten Blickpunkte linear auf Bildschirmpunkte gemappt, wobei ich ein einfaches Skalierungssystem verwende, in dem die Skalen wie folgt berechnet werden:
%Vor%Und für jeden Blickpunkt P (x, y) berechne ich den entsprechenden Rasterpunkt Q (m, n) als:
%Vor%Aber das Problem ist, nach sogar fast perfekter Pupillenerkennung (fast, weil bei schlechter Beleuchtung es falsche Positive gibt. Aber ich beabsichtige, das unter Beschränkungen zu stellen, weil ich nicht daran arbeiten kann, habe ich nicht genug Zeit) , bekomme ich immer noch schlechte Blickweite und Blickhöhe.
Hier ist ein Testlaufprotokoll:
%Vor%Betrachte einfach die Blickpunkte und die entsprechenden Blickpunkte (unter ihnen). Die großen Unterschiede in den Werten von x, y-Ordinaten nervt mich. Montag ist die Abschlusspräsentation.
Nach diesem Ansatz theoretisierte ich einen anderen:
Die Kalibrierung erfolgt wie in der ersten Methode. Ich würde die Bewegung des Blicks und seine Richtung erkennen. Angenommen, es gibt zwei Punkte der Pupillenmitte, P und Q, wobei P der erste Blickpunkt ist, Q ist der zweite, dann berechnen wir die Richtung und die Länge der Linie PQ.
Nehmen wir an, dass die Länge dieses Liniensegments L ist. Wir skalieren dann L auf den Bildschirm Proportionen, sagen wir, L ist D im Bildschirm Maßstab, und gegeben die Richtung der Blickbewegung, wir Bewegen Sie den Cursor auf dem Bildschirm von seinem letzten Ruhepunkt, sagen wir R, D Abstand, zu einem neuen Punkt S, der als Endpunkt des Liniensegments mit der Länge D berechnet wird, und Startpunkt S. Die figürliche Darstellung ist in der Figur angegeben. Im Grunde genommen karge ich keine Blickdaten auf den Bildschirmpunkt, ich verfolge den Blick im Grunde und wandle ihn in einen "Push" um, der auf den Cursor auf dem Bildschirm angewendet wird. Aber ich habe es noch nicht implementiert. Weil es den Blick tatsächlich nicht auf Bildschirmkoordinaten abbildet und daher möglicherweise fehlerhaft ist. Motivationen für diese Theorie wurden vom eViacam-Projekt auf Sourceforge abgeleitet - sie verfolgen im Grunde Ihr Gesicht und bewegen die Maus entsprechend. Bei der Kalibrierung berechnen sie nur, wie stark sich Ihr Gesicht entlang der Achsen bewegt.
Untere Zeile : Wenn jemand von Ihnen Ideen hat, wie Sie den Blick eines Benutzers aus einem perfekt verarbeiteten Augenbild erkennen können - mit einer erkannten Pupillenmitte und Augenecken Bitte sag es! Ich habe nur einen Tag, und ich weiß es spät, aber ich brauche nur eine magische Idee, die mir helfen kann.
Dies ist keine Antwort, aber es ist unmöglich, als Kommentar zu posten. Ich werde es nach Ihrer Antwort löschen.
Sind Sie sicher, dass Sie alle notwendigen Parameter haben?
Betrachten Sie das folgende Diagramm:
Wenn Ihre Kamera die Ecken und Pupillen bei {K, J, Q} erkennt, wie können Sie dann von einem anderen Tripel {F, E, O} unterscheiden? Beachten Sie, dass die Maße gleich sind, aber die Blickrichtungen, die durch die schwarzen Pfeile dargestellt werden, sind völlig unterschiedlich.
Hinweis: Die beiden schwarzen und roten Linien wurden von einem einzelnen Kamerapunkt außerhalb des sichtbaren Bereichs gezeichnet.
Tags und Links opencv image-processing computer-vision human-computer-interface eye-tracking