In [22]:
%matplotlib inline

from glob import glob
from PIL import Image
import cv2
import numpy as np
import pandas as pd
np.random.seed(0)

import matplotlib
matplotlib.style.use('ggplot')

In [23]:
labelled_paths = [(s, s.split('/')[1][1:]) for s in glob('orl_faces/*/*')]
labelled_paths


Out[23]:
[('orl_faces/s1/1.pgm', '1'),
 ('orl_faces/s1/10.pgm', '1'),
 ('orl_faces/s1/2.pgm', '1'),
 ('orl_faces/s1/3.pgm', '1'),
 ('orl_faces/s1/4.pgm', '1'),
 ('orl_faces/s1/5.pgm', '1'),
 ('orl_faces/s1/6.pgm', '1'),
 ('orl_faces/s1/7.pgm', '1'),
 ('orl_faces/s1/8.pgm', '1'),
 ('orl_faces/s1/9.pgm', '1'),
 ('orl_faces/s10/1.pgm', '10'),
 ('orl_faces/s10/10.pgm', '10'),
 ('orl_faces/s10/2.pgm', '10'),
 ('orl_faces/s10/3.pgm', '10'),
 ('orl_faces/s10/4.pgm', '10'),
 ('orl_faces/s10/5.pgm', '10'),
 ('orl_faces/s10/6.pgm', '10'),
 ('orl_faces/s10/7.pgm', '10'),
 ('orl_faces/s10/8.pgm', '10'),
 ('orl_faces/s10/9.pgm', '10'),
 ('orl_faces/s11/1.pgm', '11'),
 ('orl_faces/s11/10.pgm', '11'),
 ('orl_faces/s11/2.pgm', '11'),
 ('orl_faces/s11/3.pgm', '11'),
 ('orl_faces/s11/4.pgm', '11'),
 ('orl_faces/s11/5.pgm', '11'),
 ('orl_faces/s11/6.pgm', '11'),
 ('orl_faces/s11/7.pgm', '11'),
 ('orl_faces/s11/8.pgm', '11'),
 ('orl_faces/s11/9.pgm', '11'),
 ('orl_faces/s12/1.pgm', '12'),
 ('orl_faces/s12/10.pgm', '12'),
 ('orl_faces/s12/2.pgm', '12'),
 ('orl_faces/s12/3.pgm', '12'),
 ('orl_faces/s12/4.pgm', '12'),
 ('orl_faces/s12/5.pgm', '12'),
 ('orl_faces/s12/6.pgm', '12'),
 ('orl_faces/s12/7.pgm', '12'),
 ('orl_faces/s12/8.pgm', '12'),
 ('orl_faces/s12/9.pgm', '12'),
 ('orl_faces/s13/1.pgm', '13'),
 ('orl_faces/s13/10.pgm', '13'),
 ('orl_faces/s13/2.pgm', '13'),
 ('orl_faces/s13/3.pgm', '13'),
 ('orl_faces/s13/4.pgm', '13'),
 ('orl_faces/s13/5.pgm', '13'),
 ('orl_faces/s13/6.pgm', '13'),
 ('orl_faces/s13/7.pgm', '13'),
 ('orl_faces/s13/8.pgm', '13'),
 ('orl_faces/s13/9.pgm', '13'),
 ('orl_faces/s14/1.pgm', '14'),
 ('orl_faces/s14/10.pgm', '14'),
 ('orl_faces/s14/2.pgm', '14'),
 ('orl_faces/s14/3.pgm', '14'),
 ('orl_faces/s14/4.pgm', '14'),
 ('orl_faces/s14/5.pgm', '14'),
 ('orl_faces/s14/6.pgm', '14'),
 ('orl_faces/s14/7.pgm', '14'),
 ('orl_faces/s14/8.pgm', '14'),
 ('orl_faces/s14/9.pgm', '14'),
 ('orl_faces/s15/1.pgm', '15'),
 ('orl_faces/s15/10.pgm', '15'),
 ('orl_faces/s15/2.pgm', '15'),
 ('orl_faces/s15/3.pgm', '15'),
 ('orl_faces/s15/4.pgm', '15'),
 ('orl_faces/s15/5.pgm', '15'),
 ('orl_faces/s15/6.pgm', '15'),
 ('orl_faces/s15/7.pgm', '15'),
 ('orl_faces/s15/8.pgm', '15'),
 ('orl_faces/s15/9.pgm', '15'),
 ('orl_faces/s16/1.pgm', '16'),
 ('orl_faces/s16/10.pgm', '16'),
 ('orl_faces/s16/2.pgm', '16'),
 ('orl_faces/s16/3.pgm', '16'),
 ('orl_faces/s16/4.pgm', '16'),
 ('orl_faces/s16/5.pgm', '16'),
 ('orl_faces/s16/6.pgm', '16'),
 ('orl_faces/s16/7.pgm', '16'),
 ('orl_faces/s16/8.pgm', '16'),
 ('orl_faces/s16/9.pgm', '16'),
 ('orl_faces/s17/1.pgm', '17'),
 ('orl_faces/s17/10.pgm', '17'),
 ('orl_faces/s17/2.pgm', '17'),
 ('orl_faces/s17/3.pgm', '17'),
 ('orl_faces/s17/4.pgm', '17'),
 ('orl_faces/s17/5.pgm', '17'),
 ('orl_faces/s17/6.pgm', '17'),
 ('orl_faces/s17/7.pgm', '17'),
 ('orl_faces/s17/8.pgm', '17'),
 ('orl_faces/s17/9.pgm', '17'),
 ('orl_faces/s18/1.pgm', '18'),
 ('orl_faces/s18/10.pgm', '18'),
 ('orl_faces/s18/2.pgm', '18'),
 ('orl_faces/s18/3.pgm', '18'),
 ('orl_faces/s18/4.pgm', '18'),
 ('orl_faces/s18/5.pgm', '18'),
 ('orl_faces/s18/6.pgm', '18'),
 ('orl_faces/s18/7.pgm', '18'),
 ('orl_faces/s18/8.pgm', '18'),
 ('orl_faces/s18/9.pgm', '18'),
 ('orl_faces/s19/1.pgm', '19'),
 ('orl_faces/s19/10.pgm', '19'),
 ('orl_faces/s19/2.pgm', '19'),
 ('orl_faces/s19/3.pgm', '19'),
 ('orl_faces/s19/4.pgm', '19'),
 ('orl_faces/s19/5.pgm', '19'),
 ('orl_faces/s19/6.pgm', '19'),
 ('orl_faces/s19/7.pgm', '19'),
 ('orl_faces/s19/8.pgm', '19'),
 ('orl_faces/s19/9.pgm', '19'),
 ('orl_faces/s2/1.pgm', '2'),
 ('orl_faces/s2/10.pgm', '2'),
 ('orl_faces/s2/2.pgm', '2'),
 ('orl_faces/s2/3.pgm', '2'),
 ('orl_faces/s2/4.pgm', '2'),
 ('orl_faces/s2/5.pgm', '2'),
 ('orl_faces/s2/6.pgm', '2'),
 ('orl_faces/s2/7.pgm', '2'),
 ('orl_faces/s2/8.pgm', '2'),
 ('orl_faces/s2/9.pgm', '2'),
 ('orl_faces/s20/1.pgm', '20'),
 ('orl_faces/s20/10.pgm', '20'),
 ('orl_faces/s20/2.pgm', '20'),
 ('orl_faces/s20/3.pgm', '20'),
 ('orl_faces/s20/4.pgm', '20'),
 ('orl_faces/s20/5.pgm', '20'),
 ('orl_faces/s20/6.pgm', '20'),
 ('orl_faces/s20/7.pgm', '20'),
 ('orl_faces/s20/8.pgm', '20'),
 ('orl_faces/s20/9.pgm', '20'),
 ('orl_faces/s21/1.pgm', '21'),
 ('orl_faces/s21/10.pgm', '21'),
 ('orl_faces/s21/2.pgm', '21'),
 ('orl_faces/s21/3.pgm', '21'),
 ('orl_faces/s21/4.pgm', '21'),
 ('orl_faces/s21/5.pgm', '21'),
 ('orl_faces/s21/6.pgm', '21'),
 ('orl_faces/s21/7.pgm', '21'),
 ('orl_faces/s21/8.pgm', '21'),
 ('orl_faces/s21/9.pgm', '21'),
 ('orl_faces/s22/1.pgm', '22'),
 ('orl_faces/s22/10.pgm', '22'),
 ('orl_faces/s22/2.pgm', '22'),
 ('orl_faces/s22/3.pgm', '22'),
 ('orl_faces/s22/4.pgm', '22'),
 ('orl_faces/s22/5.pgm', '22'),
 ('orl_faces/s22/6.pgm', '22'),
 ('orl_faces/s22/7.pgm', '22'),
 ('orl_faces/s22/8.pgm', '22'),
 ('orl_faces/s22/9.pgm', '22'),
 ('orl_faces/s23/1.pgm', '23'),
 ('orl_faces/s23/10.pgm', '23'),
 ('orl_faces/s23/2.pgm', '23'),
 ('orl_faces/s23/3.pgm', '23'),
 ('orl_faces/s23/4.pgm', '23'),
 ('orl_faces/s23/5.pgm', '23'),
 ('orl_faces/s23/6.pgm', '23'),
 ('orl_faces/s23/7.pgm', '23'),
 ('orl_faces/s23/8.pgm', '23'),
 ('orl_faces/s23/9.pgm', '23'),
 ('orl_faces/s24/1.pgm', '24'),
 ('orl_faces/s24/10.pgm', '24'),
 ('orl_faces/s24/2.pgm', '24'),
 ('orl_faces/s24/3.pgm', '24'),
 ('orl_faces/s24/4.pgm', '24'),
 ('orl_faces/s24/5.pgm', '24'),
 ('orl_faces/s24/6.pgm', '24'),
 ('orl_faces/s24/7.pgm', '24'),
 ('orl_faces/s24/8.pgm', '24'),
 ('orl_faces/s24/9.pgm', '24'),
 ('orl_faces/s25/1.pgm', '25'),
 ('orl_faces/s25/10.pgm', '25'),
 ('orl_faces/s25/2.pgm', '25'),
 ('orl_faces/s25/3.pgm', '25'),
 ('orl_faces/s25/4.pgm', '25'),
 ('orl_faces/s25/5.pgm', '25'),
 ('orl_faces/s25/6.pgm', '25'),
 ('orl_faces/s25/7.pgm', '25'),
 ('orl_faces/s25/8.pgm', '25'),
 ('orl_faces/s25/9.pgm', '25'),
 ('orl_faces/s26/1.pgm', '26'),
 ('orl_faces/s26/10.pgm', '26'),
 ('orl_faces/s26/2.pgm', '26'),
 ('orl_faces/s26/3.pgm', '26'),
 ('orl_faces/s26/4.pgm', '26'),
 ('orl_faces/s26/5.pgm', '26'),
 ('orl_faces/s26/6.pgm', '26'),
 ('orl_faces/s26/7.pgm', '26'),
 ('orl_faces/s26/8.pgm', '26'),
 ('orl_faces/s26/9.pgm', '26'),
 ('orl_faces/s27/1.pgm', '27'),
 ('orl_faces/s27/10.pgm', '27'),
 ('orl_faces/s27/2.pgm', '27'),
 ('orl_faces/s27/3.pgm', '27'),
 ('orl_faces/s27/4.pgm', '27'),
 ('orl_faces/s27/5.pgm', '27'),
 ('orl_faces/s27/6.pgm', '27'),
 ('orl_faces/s27/7.pgm', '27'),
 ('orl_faces/s27/8.pgm', '27'),
 ('orl_faces/s27/9.pgm', '27'),
 ('orl_faces/s28/1.pgm', '28'),
 ('orl_faces/s28/10.pgm', '28'),
 ('orl_faces/s28/2.pgm', '28'),
 ('orl_faces/s28/3.pgm', '28'),
 ('orl_faces/s28/4.pgm', '28'),
 ('orl_faces/s28/5.pgm', '28'),
 ('orl_faces/s28/6.pgm', '28'),
 ('orl_faces/s28/7.pgm', '28'),
 ('orl_faces/s28/8.pgm', '28'),
 ('orl_faces/s28/9.pgm', '28'),
 ('orl_faces/s29/1.pgm', '29'),
 ('orl_faces/s29/10.pgm', '29'),
 ('orl_faces/s29/2.pgm', '29'),
 ('orl_faces/s29/3.pgm', '29'),
 ('orl_faces/s29/4.pgm', '29'),
 ('orl_faces/s29/5.pgm', '29'),
 ('orl_faces/s29/6.pgm', '29'),
 ('orl_faces/s29/7.pgm', '29'),
 ('orl_faces/s29/8.pgm', '29'),
 ('orl_faces/s29/9.pgm', '29'),
 ('orl_faces/s3/1.pgm', '3'),
 ('orl_faces/s3/10.pgm', '3'),
 ('orl_faces/s3/2.pgm', '3'),
 ('orl_faces/s3/3.pgm', '3'),
 ('orl_faces/s3/4.pgm', '3'),
 ('orl_faces/s3/5.pgm', '3'),
 ('orl_faces/s3/6.pgm', '3'),
 ('orl_faces/s3/7.pgm', '3'),
 ('orl_faces/s3/8.pgm', '3'),
 ('orl_faces/s3/9.pgm', '3'),
 ('orl_faces/s30/1.pgm', '30'),
 ('orl_faces/s30/10.pgm', '30'),
 ('orl_faces/s30/2.pgm', '30'),
 ('orl_faces/s30/3.pgm', '30'),
 ('orl_faces/s30/4.pgm', '30'),
 ('orl_faces/s30/5.pgm', '30'),
 ('orl_faces/s30/6.pgm', '30'),
 ('orl_faces/s30/7.pgm', '30'),
 ('orl_faces/s30/8.pgm', '30'),
 ('orl_faces/s30/9.pgm', '30'),
 ('orl_faces/s31/1.pgm', '31'),
 ('orl_faces/s31/10.pgm', '31'),
 ('orl_faces/s31/2.pgm', '31'),
 ('orl_faces/s31/3.pgm', '31'),
 ('orl_faces/s31/4.pgm', '31'),
 ('orl_faces/s31/5.pgm', '31'),
 ('orl_faces/s31/6.pgm', '31'),
 ('orl_faces/s31/7.pgm', '31'),
 ('orl_faces/s31/8.pgm', '31'),
 ('orl_faces/s31/9.pgm', '31'),
 ('orl_faces/s32/1.pgm', '32'),
 ('orl_faces/s32/10.pgm', '32'),
 ('orl_faces/s32/2.pgm', '32'),
 ('orl_faces/s32/3.pgm', '32'),
 ('orl_faces/s32/4.pgm', '32'),
 ('orl_faces/s32/5.pgm', '32'),
 ('orl_faces/s32/6.pgm', '32'),
 ('orl_faces/s32/7.pgm', '32'),
 ('orl_faces/s32/8.pgm', '32'),
 ('orl_faces/s32/9.pgm', '32'),
 ('orl_faces/s33/1.pgm', '33'),
 ('orl_faces/s33/10.pgm', '33'),
 ('orl_faces/s33/2.pgm', '33'),
 ('orl_faces/s33/3.pgm', '33'),
 ('orl_faces/s33/4.pgm', '33'),
 ('orl_faces/s33/5.pgm', '33'),
 ('orl_faces/s33/6.pgm', '33'),
 ('orl_faces/s33/7.pgm', '33'),
 ('orl_faces/s33/8.pgm', '33'),
 ('orl_faces/s33/9.pgm', '33'),
 ('orl_faces/s34/1.pgm', '34'),
 ('orl_faces/s34/10.pgm', '34'),
 ('orl_faces/s34/2.pgm', '34'),
 ('orl_faces/s34/3.pgm', '34'),
 ('orl_faces/s34/4.pgm', '34'),
 ('orl_faces/s34/5.pgm', '34'),
 ('orl_faces/s34/6.pgm', '34'),
 ('orl_faces/s34/7.pgm', '34'),
 ('orl_faces/s34/8.pgm', '34'),
 ('orl_faces/s34/9.pgm', '34'),
 ('orl_faces/s35/1.pgm', '35'),
 ('orl_faces/s35/10.pgm', '35'),
 ('orl_faces/s35/2.pgm', '35'),
 ('orl_faces/s35/3.pgm', '35'),
 ('orl_faces/s35/4.pgm', '35'),
 ('orl_faces/s35/5.pgm', '35'),
 ('orl_faces/s35/6.pgm', '35'),
 ('orl_faces/s35/7.pgm', '35'),
 ('orl_faces/s35/8.pgm', '35'),
 ('orl_faces/s35/9.pgm', '35'),
 ('orl_faces/s36/1.pgm', '36'),
 ('orl_faces/s36/10.pgm', '36'),
 ('orl_faces/s36/2.pgm', '36'),
 ('orl_faces/s36/3.pgm', '36'),
 ('orl_faces/s36/4.pgm', '36'),
 ('orl_faces/s36/5.pgm', '36'),
 ('orl_faces/s36/6.pgm', '36'),
 ('orl_faces/s36/7.pgm', '36'),
 ('orl_faces/s36/8.pgm', '36'),
 ('orl_faces/s36/9.pgm', '36'),
 ('orl_faces/s37/1.pgm', '37'),
 ('orl_faces/s37/10.pgm', '37'),
 ('orl_faces/s37/2.pgm', '37'),
 ('orl_faces/s37/3.pgm', '37'),
 ('orl_faces/s37/4.pgm', '37'),
 ('orl_faces/s37/5.pgm', '37'),
 ('orl_faces/s37/6.pgm', '37'),
 ('orl_faces/s37/7.pgm', '37'),
 ('orl_faces/s37/8.pgm', '37'),
 ('orl_faces/s37/9.pgm', '37'),
 ('orl_faces/s38/1.pgm', '38'),
 ('orl_faces/s38/10.pgm', '38'),
 ('orl_faces/s38/2.pgm', '38'),
 ('orl_faces/s38/3.pgm', '38'),
 ('orl_faces/s38/4.pgm', '38'),
 ('orl_faces/s38/5.pgm', '38'),
 ('orl_faces/s38/6.pgm', '38'),
 ('orl_faces/s38/7.pgm', '38'),
 ('orl_faces/s38/8.pgm', '38'),
 ('orl_faces/s38/9.pgm', '38'),
 ('orl_faces/s39/1.pgm', '39'),
 ('orl_faces/s39/10.pgm', '39'),
 ('orl_faces/s39/2.pgm', '39'),
 ('orl_faces/s39/3.pgm', '39'),
 ('orl_faces/s39/4.pgm', '39'),
 ('orl_faces/s39/5.pgm', '39'),
 ('orl_faces/s39/6.pgm', '39'),
 ('orl_faces/s39/7.pgm', '39'),
 ('orl_faces/s39/8.pgm', '39'),
 ('orl_faces/s39/9.pgm', '39'),
 ('orl_faces/s4/1.pgm', '4'),
 ('orl_faces/s4/10.pgm', '4'),
 ('orl_faces/s4/2.pgm', '4'),
 ('orl_faces/s4/3.pgm', '4'),
 ('orl_faces/s4/4.pgm', '4'),
 ('orl_faces/s4/5.pgm', '4'),
 ('orl_faces/s4/6.pgm', '4'),
 ('orl_faces/s4/7.pgm', '4'),
 ('orl_faces/s4/8.pgm', '4'),
 ('orl_faces/s4/9.pgm', '4'),
 ('orl_faces/s40/1.pgm', '40'),
 ('orl_faces/s40/10.pgm', '40'),
 ('orl_faces/s40/2.pgm', '40'),
 ('orl_faces/s40/3.pgm', '40'),
 ('orl_faces/s40/4.pgm', '40'),
 ('orl_faces/s40/5.pgm', '40'),
 ('orl_faces/s40/6.pgm', '40'),
 ('orl_faces/s40/7.pgm', '40'),
 ('orl_faces/s40/8.pgm', '40'),
 ('orl_faces/s40/9.pgm', '40'),
 ('orl_faces/s5/1.pgm', '5'),
 ('orl_faces/s5/10.pgm', '5'),
 ('orl_faces/s5/2.pgm', '5'),
 ('orl_faces/s5/3.pgm', '5'),
 ('orl_faces/s5/4.pgm', '5'),
 ('orl_faces/s5/5.pgm', '5'),
 ('orl_faces/s5/6.pgm', '5'),
 ('orl_faces/s5/7.pgm', '5'),
 ('orl_faces/s5/8.pgm', '5'),
 ('orl_faces/s5/9.pgm', '5'),
 ('orl_faces/s6/1.pgm', '6'),
 ('orl_faces/s6/10.pgm', '6'),
 ('orl_faces/s6/2.pgm', '6'),
 ('orl_faces/s6/3.pgm', '6'),
 ('orl_faces/s6/4.pgm', '6'),
 ('orl_faces/s6/5.pgm', '6'),
 ('orl_faces/s6/6.pgm', '6'),
 ('orl_faces/s6/7.pgm', '6'),
 ('orl_faces/s6/8.pgm', '6'),
 ('orl_faces/s6/9.pgm', '6'),
 ('orl_faces/s7/1.pgm', '7'),
 ('orl_faces/s7/10.pgm', '7'),
 ('orl_faces/s7/2.pgm', '7'),
 ('orl_faces/s7/3.pgm', '7'),
 ('orl_faces/s7/4.pgm', '7'),
 ('orl_faces/s7/5.pgm', '7'),
 ('orl_faces/s7/6.pgm', '7'),
 ('orl_faces/s7/7.pgm', '7'),
 ('orl_faces/s7/8.pgm', '7'),
 ('orl_faces/s7/9.pgm', '7'),
 ('orl_faces/s8/1.pgm', '8'),
 ('orl_faces/s8/10.pgm', '8'),
 ('orl_faces/s8/2.pgm', '8'),
 ('orl_faces/s8/3.pgm', '8'),
 ('orl_faces/s8/4.pgm', '8'),
 ('orl_faces/s8/5.pgm', '8'),
 ('orl_faces/s8/6.pgm', '8'),
 ('orl_faces/s8/7.pgm', '8'),
 ('orl_faces/s8/8.pgm', '8'),
 ('orl_faces/s8/9.pgm', '8'),
 ('orl_faces/s9/1.pgm', '9'),
 ('orl_faces/s9/10.pgm', '9'),
 ('orl_faces/s9/2.pgm', '9'),
 ('orl_faces/s9/3.pgm', '9'),
 ('orl_faces/s9/4.pgm', '9'),
 ('orl_faces/s9/5.pgm', '9'),
 ('orl_faces/s9/6.pgm', '9'),
 ('orl_faces/s9/7.pgm', '9'),
 ('orl_faces/s9/8.pgm', '9'),
 ('orl_faces/s9/9.pgm', '9')]

In [24]:
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')

I've run face cropping, then calculated averages and standard deviations of widths/heights. Outcomes: cascades detect square "faces", the average size is 78.6px with standard deviation of 6px. Based on this I will resize all cropped images to 80px sized square for analysis.


In [25]:
faceshape = (80,80)
ws = []
hs = []
data = []

for (path, label) in labelled_paths:
    im = cv2.imread(path, 0)
    faces = face_cascade.detectMultiScale(im, 1.3, 5)
    if faces == ():
        #print 'missed a face'
        continue
    else:
        (x,y,w,h) = faces.tolist()[0]
        cropped = im[y:y+h, x:x+w]
        reshaped = cv2.resize(cropped, faceshape, interpolation=cv2.INTER_LINEAR)
        data.append(reshaped.flatten())
        #labels.append(label)
        #ws.append(w)
        #hs.append(h)
        
#(np.mean(ws), np.std(ws), np.mean(hs), np.std(hs))
labels0 = np.zeros(len(data))
df0 = pd.DataFrame(data)


/Users/giedrius/Projects/hackference2015/cv-testing/env/lib/python2.7/site-packages/ipykernel/__main__.py:9: DeprecationWarning: elementwise comparison failed; this will raise the error in the future.

In [29]:
# test!
im = Image.fromarray(reshaped)
#im.show()
reshaped.flatten()


Out[29]:
array([104,  60,  30, ...,  62,  46,  40], dtype=uint8)

Now load my face into the thingie!


In [30]:
data = []
for path in glob('gedfaces/*'):
    imc = cv2.imread(path, 1)
    im = cv2.cvtColor(imc, cv2.COLOR_BGR2GRAY)
    faces = face_cascade.detectMultiScale(im, 1.3, 5)
    if faces == ():
        print 'missed a face'
        continue
    else:
        (x,y,w,h) = faces.tolist()[0]
        cropped = im[y:y+h, x:x+w]
        reshaped = cv2.resize(cropped, faceshape, interpolation=cv2.INTER_LINEAR)
        data.append(reshaped.flatten())
        #labels.append(label)

labels1 = np.ones(len(data))
df1 = pd.DataFrame(data)


/Users/giedrius/Projects/hackference2015/cv-testing/env/lib/python2.7/site-packages/ipykernel/__main__.py:6: DeprecationWarning: elementwise comparison failed; this will raise the error in the future.

In [31]:
data = []
for path in glob('other_faces/*'):
    imc = cv2.imread(path, 1)
    im = cv2.cvtColor(imc, cv2.COLOR_BGR2GRAY)
    faces = face_cascade.detectMultiScale(im, 1.3, 5)
    if faces == ():
        print 'missed a face'
        continue
    else:
        (x,y,w,h) = faces.tolist()[0]
        cropped = im[y:y+h, x:x+w]
        reshaped = cv2.resize(cropped, faceshape, interpolation=cv2.INTER_LINEAR)
        data.append(reshaped.flatten())
        #labels.append(label)

labels2 = np.zeros(len(data))
df2 = pd.DataFrame(data)


missed a face
missed a face
missed a face
missed a face
missed a face
missed a face
/Users/giedrius/Projects/hackference2015/cv-testing/env/lib/python2.7/site-packages/ipykernel/__main__.py:6: DeprecationWarning: elementwise comparison failed; this will raise the error in the future.

Join the data.


In [32]:
labels = np.concatenate((labels0, labels1, labels2))
df = df0.append(df1).append(df2)

Training logistic regression


In [39]:
from sklearn.grid_search import GridSearchCV
from sklearn.learning_curve import learning_curve, validation_curve

In [40]:
from sklearn.linear_model import LogisticRegression
model = LogisticRegression()

In [41]:
# shuffle data!
indices = np.random.permutation(labels.shape[0])
labels_sh, df_sh = labels[indices], df.iloc[indices]
df_sh = df_sh.reset_index(drop=True)

In [44]:
%%time
c_range = np.logspace(-3, 3, 13)
train_scores, valid_scores = validation_curve(model, df_sh, labels_sh, "C", c_range, scoring='f1', cv=3, n_jobs=4)
vd = pd.DataFrame({'sc_train': train_scores.mean(1), 'sc_val': valid_scores.mean(1)}, index=c_range)
vd.plot(kind='line')


CPU times: user 1.84 s, sys: 1.83 s, total: 3.67 s
Wall time: 9.88 s

In [46]:
%%time
n_train, train_scores, valid_scores = learning_curve(model, df_sh, labels_sh, train_sizes=np.linspace(0.3,1,10), scoring='f1', cv=3, n_jobs=4)
ld = pd.DataFrame({'sc_train': train_scores.mean(1), 'sc_val': valid_scores.mean(1)}, index=n_train)
ld.plot(kind='line')


CPU times: user 1.45 s, sys: 1.39 s, total: 2.84 s
Wall time: 5.49 s

Fit and save final model


In [47]:
model.fit(df_sh, labels_sh)


Out[47]:
LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,
          intercept_scaling=1, max_iter=100, multi_class='ovr',
          penalty='l2', random_state=None, solver='liblinear', tol=0.0001,
          verbose=0)

In [48]:
import pickle
pickle.dump(model, open( "model_lgrg.p", "wb" ))

In [ ]:


In [ ]: