Pan / Tilt ansiktsspårning med raspberry pi (6 / 6 steg)

Steg 6: Reflektera och lära sig



Ser ut om källkoden, det är väl kommenterade att förklara hur allt fungerar, men i princip ser det ut för en frontal ansikte, sedan en rätt profil ansikte, sedan en vänster profil ansikte. Det loopar tills den hittar en. Om den hittar, till exempel en vänster profil ansikte, slutar det söka för höger och fram och håller looping och söka efter vänster (att påskynda detection). Om det någonsin inte kan hitta den vänstra sida, går det tillbaka till söka för alla tre igen. När den hittar ett ansikte, det blir center koordinaterna för det ansiktet och använder den information för att besluta vilken väg / om att flytta servomotorer-- och hur långt du vill flytta dem-- och hur snabbt att flytta dem:

Ja, hur snabbt det skapar två delprocesser en för varje servo, när en servo berättas att flytta, en överföringshastighet. Underprocess loopar och ökar den servo positionen med en med varje pass - tills den når önskad position. Hur snabbt det loopar är baserad på medföljande speed-parametern. Detta kan du flytta servomotorer vid olika hastigheter även om motorisk hastighet inte är justerbar. Jag genomfört detta ursprungligen med trådar, men python visat sig ha mycket dålig hantering av trådar på hög CPU belastning.

Precis som ganska mycket alla öppen källkod ansiktsigenkänning program använder vi Opencv's haar-klassificeraren cascade för att söka efter mönster på de som finns i den medföljande FrontalFace.xml. Men det verkar det vara några dåligt förstådd och dokumenterade aspekter av parametrarna för funktionen cvHaarDetectObjects som har en stor inverkan på prestanda för programmet.

Den första parametern är ju bilden. Du passerar funktionen bilden du vill söka efter ansikten inom, det verkar vara viss förvirring även i detta steg - folk verkar tro att bearbetning av först konverterar bilden till gråskala, kommer att bli snabbare. Ett enkelt riktmärke visar att detta är osant - faktiskt det gör processen långsammare eftersom du utför ett extra steg. Folk verkar också tro att först skala bilden kommer göra saker snabbare - detta är intuitivt rimligt, eftersom det finns nu en mindre bild söka efter ett ansikte inom, men detta är inte den effektivaste metoden, vilket leder mig till nästa parameter,

ScaleFactor--forum invånare verkar ge förslag om vad denna ska anges till utan att ge mycket förklaring om vad det är. För att fullt förstå, behöver du veta hur OpenCV upptäcker ansikten:

OpenCV Face Detection: visualiseras från Adam HarveyVimeo.

Titta på video och särskild uppmärksamhet mot slutet. Observera att en kvadrat flyttas från övre vänstra till nedre rätt. Varje gång det rör sig, det ser för ett mönster inom det - i detta fall en ansikte, men med OpenCV att mönstret kan vara allt. Se hur det gör en gång och blir större, då går på det igen? Det belopp som den ökar i storlek med varje pass är scalefactor. Om du ställer in det till 1.1 kommer det att skulle få 1,1 gånger större (10%) med varje pass. 1.3 göra det blir 1,3 gånger större med varje pass--30%. Uppenbarligen desto fortare den växer i storlek, desto snabbare kommer det komplett, men på bekostnad av eventuellt saknas ett ansikte som var där.

Nästa parameter har ingen inverkan på prestanda så längt som jag kanna berätta. MinNeighbors berättar hur kräsen om vad den anser en match programmet. Funktionen söker mönster och kontrollerar om dessa mönster matchar dess mönster databas - en XML-fil. Jag tror att standard det 3--vilket innebär att om det finns 3 mönster inuti är torget där det är ute, som matchar mönster finns i XML-filen, sedan överväga det en match. Jag sätta min till 4. Ju högre du ställer in det, desto mer säker kan du vara att när det säger att det finns en match är det rätt. Dock ställa in den för lågt och det tycker allt man ser är ett ansikte. Ställa in den för hög och det kommer att ha problem att fånga faktiska ansikten.

Nästa parameter flaggor; dessa är booleska värden som du kan aktivera för att justera saker:
en är CV_HAAR_DO_CANNY_PRUNING. Denna flagga var avsedd bara för ansikten; den berättar funktionen att hoppa över söka över områden med vassa kanter... eftersom ansikten generellt inte har några vassa kanter. (Se bifogad bild, ibland de kanske...) Detta påskyndar saker beroende på bakgrund.
en annan är HAAR_FIND_BIGGEST_OBJECT detta säger att funktionen endast retur den största objekt det finns.
en annan är CV_HAAR_DO_ROUGH_SEARCH som anger för funktionen att sluta titta när den hittar något, det är tänkt att användas med HAAR_FIND_BIGGEST_OBJECT och avsevärt förbättrar prestanda när du bara försöker hitta ett ansikte.

De sista två parametrarna är viktiga, eller åtminstone en av dem är - de är minstorlek och MaxSize. En vanlig metod för att påskynda sökandet verkar vara att skala ner bilderna, om du vill fördubbla hastigheten på upptäckt av ett ansikte i en bild 800 x 600, skala upp det till 400 x 300. Problemet med denna logik är du krymper potentiella ansikten, som haar inte tillförlitligt hittar ansikten mindre än 20 x 20 pixlar. Inte bara det, nu du använder datorresurser för att krympa den bilden. Du kan få samma hastighetsökning genom att ange en minstorlek för ansiktet. 20 x 20 är standard, men 40 x 40 ska gå galet snabbt i jämförelse. Ju högre du går, desto snabbare blir sökningen, men du får börja saknas mindre ansikten.

Ville bara klart att...

Jag hoppas att detta hjälper, och jag hoppas alla tycker om att arbeta med Raspberry Pi och OpenCV så mycket som jag gjorde.
Detta är min första instructable. Jag skulle älska att se dina kommentarer.
Tack
Chris

Se Steg
Relaterade Ämnen

Maskininlärning med Raspberry Pi

HejDetta är min första Instructable och dessutom min engelska är inte bra. Så du inte har något emot om det inte är bra skrivet.Bakgrund:Djup lärande är ett nytt hett ämne inom Machine Learning, som visar lovande resultat att uppnå artificiell intell...

Ansiktsigenkänning och spårning med Arduino och OpenCV

uppdateringar20 feb 2013: Som svar på en fråga från student Hala Abuhasna om du vill använda klassen .NET seriell, använda namnkonventionen "\\\.\\COMn" och ersätt n med en nummer > 9 definiera com-porten för COM-portar över 9 som COM10, COM1...

IoT: Raspberry Pi Robot med Video Streamer och Pan/Tilt kamera fjärrkontroll över internet

(Om du gillar detta Instructable, glöm inte att rösta på den - ovan: högra hörnet flaggan. Det tävlar om SAKERNAS INTERNET och AUTOMATION tävlingar. Tack så mycket! ;-)Detta är en andra del av min föregående Intructable: IoT - kontrollera en Raspberr...

Hacka en $30 WiFi Pan-Tilt kamera - Video, ljud och Motor control med Python

I detta Instructable lär du dig att fånga upp den video, mikrofon och kontroller av $30 Kaicong SIP1602 trådlös pan-tilt kamera på Windows, Linux eller OSX! Allt rullas prydligt i python skript; Du kan använda utdata för saker som röst transkription,...

Actobotics pan & tilt övervakningskamera med Arduino

Hej allaDetta är en stekpanna & tilt säkerhet kameran projekt baserat på ServocIty/Actobotics pan & luta systemet. Jag använder systemet för att övervaka mitt hus och den spindelväv kameran är ansluten till en dator. Detta projekt kombinerar robot...

Bygga en 3D tryckt Pan Tilt fallet för en Raspberry Pi

Detta instructable beskriver byggnaden av ett fall för en Raspberry Pi som innefattar en pan-tilt församling för Pi kameran.Mitt mål var att utforma ett 3D utskrivbara fall som prydligt skulle omfatta Raspberry Pi samtidigt ge utrymme för att konvert...

Kullager Jib Arm med motoriserad Pan & Tilt

uppdatering September 2013: det som började som en hobby har förvandlats till något ganska allvarligt. Vi förbereda lanseringen av en öppen filmiska rörelsekontroll riggen. Om du vill stanna uppe på futue av filmkonst "Gilla" oss på / / www.face...

Arduino - WEBCAM PAN TILT kontroll med servon & KY 023 Joystick

Hej världen! Gjorde idag jag en Pan tilt kontroll med en gammal webbkamera, Dont sinne dålig video, jag sa "Gamla" LoL! Dess ganska lätt att bygga du behöver 2 servon en joystick, schematiska, kod och lite kreativitet. Följ länken för Schematisk...

Pan-Tilt kamera med Arduino och Joystick

hur man gör en pan tilt kamerasystem använda gamla psx stick och arduino.Detta system kan du ange inställningen för exempel på en cam, laser eller vad du vill bifoga.Du kan hitta koden och beskrivningen (italienska) här:http://selfelectro.altervista....

Hur du sätter en USB-kamera med Raspberry Pi till en Onvif IP-kamera?

IntroduktionVid detta instructable, vi kommer att göra en ny intressant kamera lösning, som aldrig har sett förut! Jag skulle vilja visa dig hur kan du göra anslutning din USB-kamera och Raspberry Pi med kameran SDK. Målet är att förvandla din webbka...

Trådlös jul Light Timer med Raspberry Pi och Python

Uppdatera 1/14/2014: Tack till alla som röstade för det här projektet i hårdvara Hacking Contest! Ser fram emot min nya maker penna.Uppdatering 12/31/2013: Letar du efter en mer avancerad version av detta projekt? Kolla in min nya flerkanaligt röstst...

3D tryckt Pan Tilt iPad Mount

Jag är för närvarande en elektroteknik Undergraduate Student vid Washington State University. I vår sista året slutföra vi en kurs som heter senior design. För mitt lag projektkurs var vi uppdrag att skapa ett hjälpmedel för att se nedsatt.Vad som eg...

RC bil med Raspberry Pi

Detta Instructable är skriven för alla som är intresserade att göra en RC bil från vanliga tillbehör. Många av dessa material kan ersättas med andra som tjänar samma syfte.Erfarenhet krävs:Lödning erfarenhetLaser skärning erfarenhetDremel skärande er...

ImpBot: en Pan-Tilt elektriska Imp Robot

med styrenhet, har du en bra grundläggande enhet driver data till den elektriska Imp planner (och därmed till internet i stort, via HTTP ut nod), men hur är utdataenheter? Kontrollera lamporna är ett bra trick, som vi såg i går, men det räcker inte a...

Mycket grundläggande pan tilt genom att använda arduino

för detta instructable du kommer att lära grunderna i arduino och koder för arduino.video av pan/tilt arduino projekt (försiktig, denna video innehåller aweful intryck av batman)om någon vill ha mig att sätta upp fler bilder på detta projekt vänligen...

Time-Lapse Pan & Tilt Robot

Hej alla! Jag är tillbaka med några mer Lego Robotics. Denna Lego Mindstorms Robot kan automatiskt pan och tilt en iPhone i mycket små steg att fånga fantastiska tid-förfaller. Jag fick idén till detta efter att ha sett andra time-lapse robotar onlin...

Motoriserad panorama och timelapse pan tilt sytem

Detta är min andra motordrivna panorama och timelapse pan tilt system.Här är mer bärbar, Energispar och effektiv.Två 1:50 harmoniska inriktade stegmotorer antas som den drivandemekanism. På grund av låg motreaktion av harmoniskt redskap drive, vingla...

Pan tilt enhet för mobiltelefon

I denna instructible kommer jag förklara hur jag gjorde en pan tilt enhet för min telefon. Ursprungligen ville jag göra något som kunde ta foto sfärer (en typ av panorama) för mig med att trycka på en knapp som stod på toppen av ett stativ. I detta i...

Hur till sända SMS från en PHP-webbplats via HTTP med Raspberry Pi

Bakgrund av att skicka SMS från hemsida med Raspberry PiÄr du nyfiken på det enklaste sättet att skicka SMS från din webbplats? Numera, jag har blivit riktigt intresserad av området för Internet of Things (IoT), därför jag trodde det skulle vara häft...