Python

Asenna cv2

Anacondassa Open CV2 -kirjastoa ei ole, joten asennetaan se. Ensin avaa Anaconda prompt tai Anaconda Poweshell prompt:

ja kirjoita siihen

conda install -c menpo opencv

Nyt toimii.

Kameran kuva ruudulle

Suoraan opencv:n tutoriaaleista
import cv2

cap = cv2.VideoCapture(0)

while(True):
    #Lue kuva kamerasta
    ret, frame = cap.read()

    # Muutetaan harmaasävyksi
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    # Näytä ruudulla
    cv2.imshow('frame',gray)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# Lopetetaan
cap.release()
cv2.destroyAllWindows()

Kuva harmaasävyinä

Kasvontunnistus openCV:lla

Lataa muutama Haarin kaskadi nettisivulta: Haar cascades. Eli lataa se xml-tiedosto, mikä ladataan Python-koodin alussa.

import cv2

haar_cascade_face = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
cap = cv2.VideoCapture(0)

while(True):
    #Lue kuva kamerasta
    ret, frame = cap.read()

    # Muutetaan harmaasävyksi
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    #Kasvontunnistus
    faces_rects = haar_cascade_face.detectMultiScale(gray, scaleFactor = 1.2, minNeighbors = 5);
    print('Faces found: ', len(faces_rects))

	#Piirrä suorakaide
    for (x,y,w,h) in faces_rects:
        cv2.rectangle(gray, (x, y), (x+w, y+h), (0, 255, 0), 2)

    cv2.imshow('frame',gray)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# Lopetetaan
cap.release()
cv2.destroyAllWindows()

Aika helppoa, kuitenkin. Ohjeet löytyivät Datacampin sivuilta, mutta niitä on netti täynnä.

Haarin kaskaadit ovat mielenkiintoinen tapa etsiä kuvasta tunnistettavia piirteitä. Videolta voit katsoa, miten se toimii.

Kasvonvaihto

Vaihdetaan kameran löytämä naama alussa ladattuun kuvaan. Huomaa, että älpinäkyyyttä eli alpha-kanavaa ei ole harmaasävykuvissa (määritelmän perusteella). Nyt ei leikitä väreillä, vaikka aika helppoa sekin olisi. Harjoitustehtävänä.

import cv2

haar_cascade_face = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')

hymio = cv2.imread('naamahymio.png',-1)
hymio_g = cv2.cvtColor( hymio, cv2.COLOR_BGR2GRAY)
cap = cv2.VideoCapture(0)

while(True):
    #Lue kuva kamerasta
    ret, frame = cap.read()

    # Muutetaan harmaasävyksi
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    #Kasvontunnistus
    faces_rects = haar_cascade_face.detectMultiScale(gray, scaleFactor =2.5, minNeighbors = 5);
    print('Faces found: ', len(faces_rects))

    for (x,y,w,h) in faces_rects:
        cv2.rectangle(gray, (x, y), (x+w, y+h), (0, 255, 0), 2)

        resized = cv2.resize(hymio_g, (w,h),interpolation = cv2.INTER_AREA)

        y1, y2 = y, y + resized.shape[0]
        x1, x2 = x, x + resized.shape[1]

        gray[y1:y2, x1:x2] = resized
 
    cv2.imshow('frame',gray)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# Lopetetaan
cap.release()
cv2.destroyAllWindows()

Käytetään resize-funktiota, joka interpoloi kuvan eri kokoiseksi. Shape-käsky ottaa kuvan koon ja gray[y1:y2, x1:x2] -komennolla talletetaan resized-kuva oikeaan paikkaan.

Tehtäviä

Tehtävä 1. Käännä naamaa eri asentoihin. Kokeile käskyjä gray = cv2.flip( gray, 0 ), gray = cv2.flip( gray, 1 ) ja gray = cv2.flip( gray, -1 )

Tehtävä 2. Tee kuvasta negatiivi. Mustavalkokuvassa pikselien arvot ovat välillä 0...1, joten vähennetään se ykkösestä. Lisää koodiin oikeaan paikkaan käsky gray = 1 - gray ja saat negativiin.

Tehtävä 1. Tunnista silmä. Lataa koneellesi Haarin kaskadi silmälle aiemmin mainitusta sivustosta ja vaihda silmä-kaskaadi naaman tilalle. Muutin vielä scaleFactorya arvoon 2.5. Kokeile.

Tehtävä 2. Etsi kameran kuvasta reunat Sobelin algoritmilla:

sobel_x=cv2.Sobel(gray,cv2.CV_64F,0,1,ksize=5)
sobel_y=cv2.Sobel(gray,cv2.CV_64F,1,0,ksize=5)
cv2.imshow('sobelx',sobel_x)

Muitakin algoritmeja löytyy. Kokeile etsiä niitä ja tutkia niitä.

Tehtava 3. Lisää kasvoihin piirretyt nenä ja korvat.

Tehtava 4.