Förra veckan implementerade jag en GUI-modul till Wawo-modulen. Jag tittade även på OpenBR, men hade problem med att installera den på Ubuntu 12.04. Den verkar i ett ganska tidigt utvecklingsstadium och är kanske inte lämplig att användas i en kommersiell produkt pga det. Däremot hittade jag en object tracking-algoritm, CAMSHIFT, implementerad i OpenCV, som utvecklades specifikt för att tracka människor och ansikten och som fungerar i realtid. Den följer objektet baserat på distributionen av färger i den initiala regionen och därmed är den vara relativt robust mot förändringar i orientation hos det följda ansiktet. Preliminära tester med webcam tyder på att den fungerar väldigt bra i det här hänseendet. Jag har en idé till en utbyggnad av de existerande metoderna som utnyttjar object tracking för att identifiera ansiktet även i vissa frames där de grundläggande detektions- och igenkänningsalgoritmerna inte klarar av det pga orientationsförändringar. Jag ska försöka implementera och testa den nu i veckan. Idén fungerar i princip både för att tracka objekt framåt och bakåt i tiden, men det finns ett stort praktiskt problem med att tracka objekt bakåt, vilket är de vanligaste videoformaten. Eftersom de inte lagrar hela frames i sekvens, utan endast vissa nyckelframes samt skillnaderna mellan nyckelframes och frames som följer efter dem innebär det att man snabbt och lätt kan hämta nästa frame, men inte den föregående. Det är t. ex. mycket svårare att spela en videofil baklänges än framlänges. Såvitt jag kan avgöra så är det enda rimliga sättet att göra det på att helt enkelt buffra alla frames medan filen spelas framlänges. Problemet med detta är att det kräver extremt mycket arbetsminne. En minut video i 720p kräver t. ex. okomprimerat ca 4.7 Gb. Det skulle kanske fungera att buffra hela videon i RAM för kortare lågupplösta filmer, men helt orealistiskt för längre klipp. En lösning skulle kunna vara att lagra bufferten på disk, men det kommer då å andra sidan bli betydligt långsammare. Jag ska försöka implementera och testa alla varianter förutsatt att tid finns.
I veckan har jag lärt mig mer om OpenBR samt hur CAMSHIFT-algoritmen fungerar, och hur man använder dess implementation i OpenCV. Jag följer tidsplanen till den utsträckning jag pratade om förra veckan. Träffade Petter i tisdags.
Inga kommentarer:
Skicka en kommentar