Példa
A következőkben megnézzük, hogy hogyan lehet OpenCV-ben arcot detektálni. Ehhez a CascadeClassifier osztályt használjuk. Az arc detektáláshoz szükséges jellemzőleírás a haarcascade_frontalface_alt.xml fájlban található, amely az OpenCV data könyvtárában van.
Az arcdetektáláshoz az alábbi lépéseket kell végrehajtani:
- Kép megnyitása.
- Kép szürkeárnyalatossá konvertálása
- A CascadeClassifier létrehozása.
- Detekció lefuttatása.
- Ellenőrizni kell, hogy a képen található-e arc.
- Ha található arc, akkor minden arc köré kirajzolunk egy zöld téglalapot, ha nem, akkor kiírjuk, hogy "Nem találtunk arcot a képen.".
A példában az alábbi képekkel dolgozunk (külön-külön):
import cv2
import numpy as np
## kép megnyitása
INPUT_IMAGE = "../NemethGabor_magyaraz.jpg"
#INPUT_IMAGE = "../wieliczkai_szobor.jpg"
img = cv2.imread(INPUT_IMAGE)
gray_img= cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
## Haar-cascade leíró fájl
HAAR_CASCADE_FACE = "haarcascade_frontalface_alt.xml"
## detektor készítése és megnyitása
cascade = cv2.CascadeClassifier(HAAR_CASCADE_FACE)
## detekció
rects = cascade.detectMultiScale(gray_img, scaleFactor=1.3, minNeighbors=4, minSize=(30,30), flags=cv2.CASCADE_SCALE_IMAGE)
rects[:,2:] += rects[:,:2]
## van-e találat?
if len(rects) == 0: ## nem találtunk arcot
print("Nem találtunk arcot a képen.")
for x1, y1, x2, y2 in rects:
cv2.rectangle(img, (x1, y1), (x2, y2), (0,255,0), 10)
cv2.imwrite("detected_faces.png", img)