Was ist der billigste / einfachste Weg, eine Person zu erkennen?

15

Ich möchte wissen, ob jemand erfolgreich einen Säuger mit warmem Körper (dh einen Menschen) mit handelsüblichen, kostengünstigen Sensoren entdeckt hat.

Idealerweise möchte ich einen kostengünstigen Sensor oder eine Kombination von Sensoren verwenden, um eine Person in einem Raum zu erkennen und diese Person zu lokalisieren. Ich möchte, dass der Roboter einen Raum betritt, erkennt, ob ein oder mehrere Menschen anwesend sind, und sich dann zu dem erkannten Menschen bewegt. Die Genauigkeit muss nicht 100% betragen, da die Kosten eine größere Rolle spielen. Ich möchte, dass die Rechenanforderungen für einen solchen Sensor so sind, dass er auf einem Arduino ausgeführt werden kann. Wenn dies jedoch nicht möglich ist, wäre ich bereit, etwas mit mehr Pferdestärke zu verwenden, z. B. einen Raspberry Pi oder einen BeagleBone Black. Ich habe ein paar Gedanken; Keiner von ihnen ist jedoch ideal:

  1. PIR-Sensor - Kann Bewegungen innerhalb eines großen Sichtfelds (dh normalerweise 120 Grad oder mehr) erfassen. Könnte die nächste Sache zu einem "menschlichen" Detektor sein, der mir bewusst ist; es erfordert jedoch Bewegung und das Lokalisieren / Triangulieren, wo sich eine Person befindet, was mit einem so großen Sichtfeld sehr schwierig (unmöglich?) wäre.
  2. Ultraschall - Kann Objekte mit guter Präzision erfassen. Hat ein viel engeres Sichtfeld; ist jedoch nicht in der Lage, zwischen einem statischen nicht lebenden Objekt und einem Menschen zu unterscheiden.
  3. IR-Detektoren - (dh Sensoren für scharfe Entfernungen) Können wieder Objekte mit hoher Präzision und sehr engem Sichtfeld erfassen. Es ist jedoch wieder nicht möglich, Objekte zu unterscheiden.
  4. Webcam + OpenCV - Verwenden Sie möglicherweise die Gesichtserkennung, um Personen in einem Raum zu erkennen. Dies ist möglicherweise die beste Option. OpenCV ist jedoch rechenintensiv und erfordert viel mehr als ein Arduino. Sogar auf einem Raspberry Pi kann es langsam sein.
  5. Kinect - Mit den Funktionen zur Funktionserkennung von Kinect ist es relativ einfach, Menschen in einem Gebiet zu identifizieren. Allerdings ist der Kinect zu teuer und ich würde ihn nicht als "billige" Lösung betrachten.

Vielleicht ist jemandem ein kostengünstiger "Wärmemelder" bekannt, der auf Körperwärme abgestimmt ist, und / oder er hat mit einer der oben genannten Kombinationen von (Nr. 1-4) Erfolg gehabt und möchte seine Ergebnisse mitteilen?

Yahma
quelle
Ist es auf Menschen beschränkt oder sollte es auch Mr. Ed erkennen?
ott--
Jedes Säugetier mit warmem Körper. Es wird drinnen benutzt, also sollte Mr. Ed nicht da sein. Wenn er es wäre, würde er jedoch entdeckt werden. =)
Yahma
Mir wurde klar (als ich etwas Ähnliches suchte), dass der Kinect eigentlich nicht so teuer ist. Es muss jedoch ein Mindestabstand eingehalten werden, um ordnungsgemäß zu funktionieren. Trotzdem könnte es für Ihre Anforderungen funktionieren und ich bin sicher, dass es eine Menge Code dafür gibt.
Galahad II,
Mit welcher Lösung sind Sie gegangen? Haben Sie zufällig etwas mit größerer Reichweite gefunden?
Crashalot
Eigentlich habe ich eine Frage. Können wir die menschliche Pulsfrequenz mithilfe eines IR-Sensors in analogen Pins von Audrino erkennen? wenn ja, wie dann? Bitte hilf mir raus
Sapana

Antworten:

7

Eine Kombination aus einem Passiv-Infrarot-Detektor (PIR) und einem Sonar-Entfernungsmesser (SRF) sollte dies tun.

Was bisher für mich gut funktioniert hat (Menschen nicht zu finden, aber sehr ähnlich), war, dass zwei PIRs auf der linken und rechten Seite zugespitzt waren, sodass sie sich in der Mitte ein wenig überlappten.
Sie können dann herausfinden, ob sich der Mensch links, rechts oder vorne befindet (wenn beide eingeschaltet sind). Sie stapeln dies dann im Grunde genommen auf die SRF, die Ihnen den Bereich usw. anzeigt. Es ist ein bisschen schmutzig und Sie müssen einige Annahmen treffen, aber es funktioniert gut für seine Einfachheit.

Der Pseudocode für die 2 PIRs könnte so einfach sein wie:

amount = 60; //degrees
while (notCloseEnough)
{
  if (bothActive)
    forward;
  else 
  {
    if (leftActive)  
      turnLeftByAmount(amount);
    else
      turnRightByAmount(amount);
    amount = amount - 5;

    //recalibrate
    if (amount <= 0)
      amount = 60;
  }

  checkIfCloseEnough();
}

Die Idee ist, dass Sie sich viel zur Seite drehen (60 Grad), wenn Sie etwas in diesem Bereich sehen. Wenn sie sich nach dem Abbiegen nicht vor Ihnen befinden, drehen Sie sich etwas weniger zu der Seite, auf der Sie sie sehen. Wiederholen und verringern Sie die Anzahl der Runden, bis sie vor Ihnen liegen, und gehen Sie dann weiter. Denken Sie daran, dass Sie nicht so viel drehen (den Winkel neu einstellen), wenn sie vorne sind, da sich die Kamera nicht so schnell aus dem Spielfeld herausbewegt.

Ich war wirklich erstaunt, wie gut dieser Algorithmus tatsächlich funktioniert (wir haben ihn für automatisierte Verfolgungsjagden verwendet und mussten ihn verlangsamen / dummen, weil er einen von Menschen kontrollierten Roboter zu leicht schlagen / fangen würde).

Beide Sensoren sind bei Pololu erhältlich (keine Zugehörigkeit):

Passiver Infrarotdetektor
Sonar-Entfernungsmesser

profMamba
quelle
Können Sie einen Pseudocode veröffentlichen oder weitere Informationen darüber, wie mit einem PIR-Sensor und einem Sonar eine Person erkannt und lokalisiert werden kann?
Yahma
Welche Reichweite hätte diese Lösung? Könnte es angepasst werden, um Personen zu verfolgen, die bis zu 300 Fuß entfernt sind? Und für ein Sichtfeld von 180 Grad ohne bewegliche Teile ausgelegt? Danke für diesen Vorschlag!
Crashalot
Das PIR-Datenblatt listet keinen Bereich auf ( pololu.com/file/0J250/SE-10.pdf ), aber basierend auf der Sensorgröße scheint der Bereich begrenzt zu sein und sicherlich nicht etwas, das Menschen erkennen kann Bewegung 100-300 Fuß entfernt?
Crashalot
Dies funktionierte gut für kleine Entfernungen, vielleicht 2 - 3 Meter (6 - 9 Fuß). Ich würde auch denken, dass dieser Algorithmus nicht gut auf größere Entfernungen skaliert werden kann, da es zum Beispiel wirklich darauf ankommt, dass selbst ein großer „Fehler“ oder eine große Schwankung korrigiert werden kann, bevor der Roboter oder das Objekt zu stark voneinander getrennt werden.
ProfMamba
1

Ein neuerer Sensortyp, der verwendet werden kann, sind MEMS-basierte Temperatur-Arrays von Omron (D6T-Serie) oder Excelitas (DigiPile). Diese messen im Gegensatz zu PIR-Elementen absolute Temperaturen und ermöglichen so die Unterscheidung zwischen Hintergrund- und Vordergrundtemperaturen sowie die Erkennung von Bewegungen und statischen Anzeichen von Temperaturquellen.

kjyv
quelle
Wissen Sie, ob diese Sensoren Personen bis zu einer Entfernung von 300 Fuß verfolgen können?
Crashalot
Ich denke nicht, dass das funktionieren würde. Ich würde maximal 5-10m sagen. Die Auflösung ist ziemlich niedrig, so dass eine Person in dieser Entfernung nur einen kleinen Punkt innerhalb eines Pixels hat.
kjyv
Danke für die Antwort! Gibt es neben hochauflösendem Computer-Sehen etwas, das für 300 Fuß funktionieren würde? Könnten Sie, da CV so rechenintensiv ist, die Rechenkosten senken, indem Sie CV mit anderen Sensoren wie PIR (oder Thermal) koppeln, um Personen in einer Entfernung von 100 bis 300 Fuß zu verfolgen?
Crashalot
0

Ein kapazitiver Sensor könnte funktionieren, es ist sehr billig, nur Aluminiumfolie und ein paar Widerstände herzustellen. Er kann Fleisch erkennen, aber ich bin mir nicht sicher, ob ich nur Fleisch erkennen kann. Sie können 3 zum Triangulieren verwenden

user1477
quelle
Huh? Welche Reichweite hätte das? Millimeter?
RoboKaren
0

Ich kann nicht sagen, ob dies am einfachsten ist, aber möglicherweise können Sie die Eulerian Video Magnification-Bibliothek verwenden , um den Puls einer Person zu erfassen.

In diesem Fall würden Sie nach einer Schwankung im Video suchen, die dem erwarteten Bereich menschlicher Impulse entspricht. Sie benötigen außerdem ein klares Bild eines Körperteils, das den sichtbaren Puls aufweist.

Es gab auch einige Arbeiten ( Beispiel 1 , Beispiel 2 ) zur hardwarebasierten Gesichtserkennung. Digitalkameras von vor ein paar Jahren verfügten über diese Funktion, die im Wesentlichen ein hochoptimiertes neuronales Netzwerk war, mit dem Ziel "Enthält dieses Quadrat ein Gesicht oder nicht" ... dann iterieren Sie einfach über eine Reihe vordefinierter Quadrate im aufgenommenen Bild.

Ian
quelle
Oh, du hast dasselbe vorgeschlagen, was ich getan habe, als ich meine geschrieben habe! Hast du den Film Screamers (1995) auch gesehen? = P
jzx
Ich habe den Trailer gesehen, aber nie den Film ... gut zu wissen, dass ich vielleicht bei etwas bin. Aber was macht Yahma? :)
Ian
0

Ich habe versucht, PIR zu verwenden, aber es hat Probleme mit der Handhabung und Verzögerungen. Um ehrlich zu sein, ist es keine effiziente Wahl für die Erkennung von Menschen. Sie können die kapazitive Sensortechnik verwenden, da sie die kostengünstigste und einfachste Methode zur Erkennung von Menschen darstellt (eine clevere Wahl) und auch weniger komplex ist. Sie können einen Sensor zu sehr geringen Kosten für sich selbst herstellen und er eignet sich für kleine Projekte. Ich habe einen in meinem "Human Detection Robot" -Projekt verwendet. Sie können mein Video unter folgender Adresse ansehen: Kapazitive Erkennung von Menschen

Muhammad Yamman
quelle
0

Eine Nicht-Bare-Metal-Lösung, die in den nächsten Jahren wahrscheinlich immer beliebter wird, ist die Verlagerung Ihrer umfangreichen Datenverarbeitungsaufgabe (z. B. Erkennen eines Menschen in einem Bild) in einen Cloud-Dienst. Dies setzt voraus, dass Ihr Gerät mit dem Internet verbunden ist. Hier ein Beispiel mit dem Raspberry Pi und der Google Cloud Vision-API: https://www.dexterindustries.com/howto/use-google-cloud-vision-on-the-raspberry-pi/ . Beachten Sie, dass ein Abonnement erforderlich ist, damit Google Cloud über einen Testzeitraum hinaus verwendet werden kann. Einige andere Cloud Vision-APIs (Amazon, Microsoft Azure, ...?) Bieten ihre Dienste möglicherweise sogar kostenlos an, wenn Sie weniger als N Anfragen pro Monat an ihre Server senden .

Eine weitere Lösung für die Verarbeitung schwerer Daten auf kleinen Plattformen besteht darin, die Arbeit auf ein thumbdrive-ähnliches Gerät Ihres Roboters mit einer dedizierten Prozessoreinheit zum Ausführen bereits trainierter maschineller Lernmodelle (z. B. Movidius Neural Compute Stick mit dem Raspberry PI: https : //medium.com/deep-learning-turkey/a-brief-guide-to-intel-movidius-neural-compute-stick-with-raspberry-pi-3-f60bf7683d40 ). Dies funktioniert auch offline. Sie sind immer noch ein bisschen teuer für Hobbyprojekte, aber ich gehe davon aus, dass ihre Kosten wie alles sinken werden.

al-dev
quelle