ja kirjoita siihen
conda install -c menpo opencv
Nyt toimii.
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ä
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.
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ä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.
täydentyy syksyn 2019 aikana