본문 바로가기

수치해석

PCA를 이용한 eigenface - 데이터 전처리

 

PCA는 고차원의 데이터를 저차원의 데이터로 표현하는 방법인데 이를 얼굴 이미지에 사용하여 공통적인 부분을 뽑아내고 인물 분류에 사용할 수 있다

수학적인 내용은 잘 정리된 블로그들이 많기 때문에 실제로 구현했던 방법 위주로 작성해보고자 한다

 

먼저 데이터는 해당 사이트에서 받아서 사용하였다

http://vis-www.cs.umass.edu/lfw/

 

LFW Face Database : Main

 

vis-www.cs.umass.edu

 

deep-funneling을 통해 정면으로 align된 데이터여서 좋았다

OpenCV를 사용하여 얼굴 부분만 32 x 32 사이즈로 저장하였다

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
= 0
 
for name in os.listdir(data_path):
    print(name)
    for file in os.listdir(data_path+'/'+ name):
        i = i+1
        
        img = cv2.imread(data_path+'/'+ name +'/'+file, cv2.IMREAD_GRAYSCALE)
        faces_detected = face_cascade.detectMultiScale(img, scaleFactor=1.1, minNeighbors=5)
        
        for (x, y, w, h) in faces_detected:
            r = max(w, h) / 2
            centerx = x + w / 2
            centery = y + h / 2
            nx = int(centerx - r)
            ny = int(centery - r)
            nr = int(r * 2)
 
            faceimg = img[ny:ny+nr, nx:nx+nr]
            
            # make 32 x 32 grayscale size
            lastimg = cv2.resize(faceimg, (3232))
            # display(Image.fromarray(lastimg))
            # print(save_path+'/'+str(i)+'.jpg')
            # cv2.imwrite(save_path+'/'+str(i)+'.jpg', lastimg)
        break
    break
cs

 

 

이렇게 데이터 처리를 하면 

 

 

이렇게 작은 얼굴만 있는 사진이 된다

 

사이즈는 더 크게 한다면 정확하겠지만 목표가 높은 정확도 보다는 PCA가 실제로 어떻게 사용되는지에 대한 이해였기 때문에 적당히 컨셉만 공부하면서 넘어갔다

'수치해석' 카테고리의 다른 글

PCA를 이용한 eigenface - test data로 확인해보기  (0) 2021.12.05
PCA를 이용한 eigenface - eigenface 만들기  (0) 2021.12.05
System equations  (0) 2020.10.02
Finding roots  (0) 2020.10.02