Počeli smo s učenjem osnova OpenCV-a, a zatim smo izveli neke osnovne obrade slika i manipulacije slikama, nakon čega su slijedile segmentacije slika i mnoge druge operacije koristeći OpenCV i jezik python. Ovdje ćemo u ovom odjeljku izvesti nekoliko jednostavnih tehnika otkrivanja objekata pomoću podudaranja predložaka. Pronaći ćemo objekt na slici, a zatim ćemo opisati njegove značajke. Značajke su uobičajeni atributi slike kao što su uglovi, rubovi itd. Također ćemo pogledati neke uobičajene i popularne algoritme za otkrivanje objekata kao što su SIFT, SURF, FAST, BREIF & ORB.
Kao što je rečeno u prethodnim vodičima, OpenCV je Open Source Commuter Vision Library koja ima C ++, Python i Java sučelja i podržava Windows, Linux, Mac OS, iOS i Android. Tako se može lako instalirati u Raspberry Pi s Pythonom i Linux okruženjem. A Raspberry Pi s OpenCV-om i priključenom kamerom može se koristiti za stvaranje mnogih aplikacija za obradu slika u stvarnom vremenu poput otkrivanja lica, zaključavanja lica, praćenja predmeta, otkrivanja pločica automobila, kućnog sigurnosnog sustava itd.
Otkrivanje i prepoznavanje predmeta najvažniji je slučaj računalnog vida, oni se koriste za snažne stvari kao što su
- Označavanje scena
- Navigacija robota
- Samovozeći automobili
- Prepoznavanje tijela (Microsoft Kinect)
- Otkrivanje bolesti i raka
- Prepoznavanje lica
- Prepoznavanje rukopisa
- Prepoznavanje objekata na satelitskim snimkama
Otkrivanje objekata VS prepoznavanje
Prepoznavanje predmeta je druga razina otkrivanja predmeta u kojoj računalo može prepoznati objekt iz više objekata na slici i možda će ga moći prepoznati.
Sada ćemo izvršiti neke funkcije obrade slike kako bismo pronašli objekt sa slike.
Pronalaženje predmeta sa slike
Ovdje ćemo upotrijebiti podudaranje predloška za pronalaženje lika / objekta na slici, koristiti OpenCV- ovu funkciju cv2.matchTemplate () za pronalaženje tog objekta
uvoz cv2 uvoz numpy kao np
Učitajte ulaznu sliku i pretvorite je u sivu
image = cv2.imread ('WaldoBeach.jpg') cv2.imshow ('ljudi', slika) cv2.waitKey (0) grey = cv2.cvtColor (slika, cv2.COLOR_BGR2GREY)
Učitajte sliku predloška
template = cv2.imread ('waldo.jpg', 0) # rezultat podudaranja predloška objekta preko rezultata slike = cv2.matchTemplate (siva, predložak, cv2.TM_CCOEFF) sin_val, max_val, min_loc, max_loc = cv2.minMaxLoc (proizlaziti)
Stvorite granični okvir
top_left = max_loc # povećanje veličine ograničenog pravokutnika za 50 piksela bottom_right = (top_left + 50, top_left + 50) cv2.rectangle (slika, top_left, bottom_right, (0,255,0), 5) cv2.imshow ('objekt pronađen', slika) cv2.waitKey (0) cv2.destroyAllWindows ()


U cv2.matchTemplate (siva, predložak, cv2.TM_CCOEFF) unesite sivu sliku da biste pronašli objekt i predložak. Zatim primijenite metodu podudaranja predloška za pronalaženje objekata sa slike, ovdje se koristi cv2.TM_CCOEFF .
Cijela funkcija vraća niz koji se unosi u rezultat, koji je rezultat postupka podudaranja predloška.
A zatim koristimo cv2.minMaxLoc (rezultat) , koji daje koordinate ili ograničavajući okvir u kojem je objekt pronađen na slici, a kada dobijemo te koordinate, nacrtajte pravokutnik preko njega i razvucite male dimenzije okvira tako da objekt se lako može smjestiti unutar pravokutnika.
Postoje razne metode za izvođenje podudaranja predložaka i u ovom slučaju koristimo cv2.TM_CCOEFF koji označava koeficijent korelacije.

Ovdje su ključne točke (X, Y) koordinate izvučene pomoću detektora prosijavanja i iscrtane preko slike pomoću funkcije ključne točke cv2 draw.
SURFATI
import cv2 import numpy as np image = cv2.imread ('paris.jpg') grey = cv2.cvtColor (image, cv2.COLOR_BGR2GREY)
Stvorite objekt SURF Feature Detector, ovdje postavljamo hessov prag na 500
surf = cv2.xfeatures2d.SURF_create (500) ključne točke, deskriptori = surf.detectAndCompute (sivo, nijedno) print ("Broj otkrivenih ključnih točaka:", len (ključne točke))
Na ulaznoj slici nacrtajte bogate ključne točke
image = cv2.drawKeypoints (slika, ključne točke, Ništa, zastave = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Metoda značajke - SURF', slika) cv2.waitKey () cv2.destroyAllWindows ()
Izlaz konzole:

BRZO
import cv2 import numpy as np image = cv2.imread ('paris.jpg') grey = cv2.cvtColor (image, cv2.COLOR_BGR2GREY)
Stvorite objekt FAST Detector
fast = cv2.FastFeatureDetector_create () # Dobivanje ključnih točaka, prema zadanim postavkama suzbijanje ne maksimalno je Uključeno # za isključenje postavite fast.setBool ('nonmaxSuppression', False) keypoints = fast.detect (sivo, Nijedno) print ("Broj ključnih točaka Otkriveno: ", len (ključne točke))
Na ulaznoj slici nacrtajte bogate ključne točke
image = cv2.drawKeypoints (slika, ključne točke, Ništa, zastave = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Metoda značajke - BRZO', slika) cv2.waitKey () cv2.destroyAllWindows ()
Izlaz konzole:

KRATAK
import cv2 import numpy as np image = cv2.imread ('paris.jpg') grey = cv2.cvtColor (image, cv2.COLOR_BGR2GREY)
Stvorite FAST objekt detektora
kratko = cv2.xfeatures2d.BriefDescriptorExtractor_create ()
Stvorite KRATKI objekt za izvlačenje
#brief = cv2.DescriptorExtractor_create ("KRATKO") # Odredite ključne točke ključnih točaka = fast.detect (sivo, Nijedno)
Nabavite deskriptore i nove konačne ključne točke pomoću BRIEF-a
ključne točke, deskriptori = kratko.comračunanje (sivo, ključne točke) ispis ("Broj otkrivenih ključnih točaka:", len (ključne točke))
Na ulaznoj slici nacrtajte bogate ključne točke
image = cv2.drawKeypoints (slika, ključne točke, Ništa, zastave = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Način značajke - KRATKO', slika) cv2.waitKey () cv2.destroyAllWindows ()
Izlaz konzole:

ORB
import cv2 import numpy as np image = cv2.imread ('paris.jpg') grey = cv2.cvtColor (image, cv2.COLOR_BGR2GREY)
Stvorite ORB objekt, možemo odrediti broj ključnih točaka koje želimo
orb = cv2.ORB_create () # Odredite ključne točke ključnih točaka = orb.detect (sivo, Nijedno)
Nabavite deskriptore
ključne točke, deskriptori = orb.compute (sivo, ključne točke) print ("Broj otkrivenih ključnih točaka:", len (ključne točke))
Na ulaznoj slici nacrtajte bogate ključne točke
image = cv2.drawKeypoints (slika, ključne točke, Ništa, zastave = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Metoda značajke - ORB', slika) cv2.waitKey () cv2.destroyAllWindows ()
Izlaz konzole:

Možemo odrediti broj ključnih točaka koji ima maksimalno ograničenje 5000, međutim zadana vrijednost je 500, tj. ORB će automatski otkriti najboljih 500 ključnih točaka ako nije navedena za bilo koju vrijednost ključnih točaka.
Dakle, ovo je način kako se otkrivanje objekata odvija u OpenCV-u, isti se programi mogu pokretati i u OpenCV-u instaliranom Raspberry Pi i mogu se koristiti kao prijenosni uređaj poput pametnih telefona koji imaju Google Lens.
Ovaj se članak odnosi na Master Computer Vision ™ OpenCV4 u Pythonu s tečajem dubokog učenja na Udemyju, koji je stvorio Rajeev Ratan, pretplatite se da biste saznali više o Computer Visionu i Pythonu.
