Primjer kojeg smo implementirali služi za detekciju prometnih znakova. Primjer koji je napravljen detektira znak stop. Da bi se koristila kamera uređaja u projektu se koriste klase: BaseLoaderCallback, JavaCameraView i OpenCVLoader. Detaljnije upute nalaze se u sljedećem videu:
Početna aktivnost (MainActivity) implementira CvCameraViewListener2 interface koji sadrži metode: CvCameraViewListenerAdapter, onCameraViewStarted, onCameraFrame, itd. onCameraFrame metodu koristimo kako bi se na svaki frame dobiven kamerom primjenio filter za detekciju slike.
Filter koji detektira znakove implementira interface Filter koji ima metodu apply(final Mat src, final Mat dest).
Klasa za detekciju slike radi na način da konstruktor klase prima dva parametra, context i id slike koja služi za usporedbu sa svim frameovima. U konstruktoru se slika učita u varijablu tipa Mat, te se slika se pretvori u grayscale. Iz dobivene slike se pomoću star algoritma detektiraju „keypoint-ovi“, te se iz dobivenih keypoint-ova izračunavaju deskriptori pomoću Freak algoritma.
Kod svakog dobivenog frame-a kamere gore navedeni postupak se ponovi, ali za dobiveni frame. Te se nakon toga računaju podudarnosti između slika algoritmom „bruteforce hamming“. Problem koji se javlja je pojava mnogo podudarnosti koje ustvari nisu dobre. Kako bismo eliminirali loše podudarnosti uspoređuju se udaljenosti („distance“) između elementa.
for(int i = 0; i < listOfMatches.size()-1; i++){
if(listOfMatches.get(i).distance < 0.6*listOfMatches.get(i+1).distance){
goodMatchesList.add(listOfMatches.get(i));
}
}
Količnik (ratio) koji je uzet iznosi 0.6, a dobiven je testiranjem.
Slika 13: Filtrirane podudarnosti
Slika 14: Nefiltrirane podudarnosti
Testiranjem je utvrđeno da ukoliko je lista filtriranih podudarnosti veća od 19 objekt stop je pronađen, te se na zaslonu uređaja prikaže slika traženog objekta. Za potrebe testiranja kreirana je metoda saveImage() koja sprema slike na memoriju uređaja na lokaciju: ../Pictures/Projekt.
Project source code:
Skini eclipse projekt (opencv library uključen)