PCA는 고차원의 데이터를 저차원의 데이터로 표현하는 방법인데 이를 얼굴 이미지에 사용하여 공통적인 부분을 뽑아내고 인물 분류에 사용할 수 있다
수학적인 내용은 잘 정리된 블로그들이 많기 때문에 실제로 구현했던 방법 위주로 작성해보고자 한다
먼저 데이터는 해당 사이트에서 받아서 사용하였다
http://vis-www.cs.umass.edu/lfw/
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
|
i = 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, (32, 32))
# 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 |