๋”ฅ ๋Ÿฌ๋‹ ์ ์šฉ ์ด๋ฏธ์ง€ ๋ถ„์„ ์ ˆ์ฐจ

STEP 01

Data Crawling (Selenium) ์ด๋ฏธ์ง€ ์ž๋ฃŒ ์ˆ˜์ง‘

 

STEP 02

1) Face Detection (dlib) ์–ผ๊ตด ์ธ์‹

HOG (Histogram of Gradient Face Detection) : ์ด๋ฏธ์ง€์—์„œ face ๊ฐ์ง€ ์•Œ๊ณ ๋ฆฌ์ฆ˜

* HOG : ๋Œ€์ƒ ์˜์—ญ์„ ์ผ์ • ํฌ๊ธฐ์˜ ์…€๋กœ ๋ถ„ํ• ํ•˜๊ณ , ๊ฐ ์…€๋งˆ๋‹ค edge ํ”ฝ์…€ (gradient magnitude๊ฐ€ ์ผ์ • ๊ฐ’ ์ด์ƒ์ธ ํ”ฝ์…€)๋“ค์˜ ๋ฐฉํ–ฅ์— ๋Œ€ํ•œ ํžˆ์Šคํ† ๊ทธ๋žจ์„ ๊ตฌํ•œ ํ›„ ์ด๋“ค ํžˆ์Šคํ† ๊ทธ๋žจ bin ๊ฐ’๋“ค์„ ์ผ๋ ฌ๋กœ ์—ฐ๊ฒฐํ•œ ๋ฒกํ„ฐ

 

2) ์–ผ๊ตด ์ •๋ ฌ(Face Alignment)

 

68 LandMark Centralization

 

3) API Install

python3.8์˜ ๊ฐ€์ƒํ™˜๊ฒฝ์—์„œ cmake ์„ค์น˜

(base) > conda activate tensorfow

(tensorflow) >pip install cmake

 

dlib ์„ค์น˜ : 68 ๋žœ๋“œ๋งˆํฌ ์ธ์‹(์–ผ๊ตด์ธ์‹)

(tensorflow)> pip install C:\ITWILL\5_Tensorflow\tools\dlib-19.19.0-cp38-cp38-win_amd64.whl

 

scikit-image ์„ค์น˜ : image read/save

* openCV library ๋Œ€์ฒด ๊ฐ€๋Šฅ

(tensorflow) > pip install scikit-image

 

4) 68 landmark ๋ฐ์ดํ„ฐ์…‹ ๋‹ค์šด๋กœ๋“œ/์••์ถ•ํ’€๊ธฐ

http://dlib.net/files์—์„œ shape_predictor_68_face_landmarks.dat.bz2 ๋‹ค์šด๋กœ๋“œ

ํ˜„์žฌ ์ž‘์—… ์œ„์น˜์— ์••์ถ• ํ’€๊ธฐ

 

 

STEP 03 Deep Learning (Tensorflow)

CNN ๋ชจ๋ธ ๊ตฌ์กฐ

ํ›ˆ๋ จ ๋ฐ์ดํ„ฐ ์…‹(Training Dataset) : ๋ชจ๋ธ์„ ํ›ˆ๋ จํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ ์…‹(์‹ ๊ฒฝ๋ง : ๊ฐ€์ค‘์น˜, ๋ฐ”์ด์–ด์Šค)

์œ ํšจ์„ฑ ๋ฐ์ดํ„ฐ ์…‹(Validation Dataset) : ๋ชจ๋ธ์˜ Hyper Parameter๋ฅผ ํŠœ๋‹ ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ ์…‹(๋ชจ๋ธ ์ตœ์ ํ™”)

๊ฒ€์ • ๋ฐ์ดํ„ฐ ์…‹(Test Dataset) : ๋ชจ๋ธ์ด ์™„์ „ํžˆ ํ›ˆ๋ จ ๋œ ํ›„์— ๋งŒ ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ ์…‹(์‹ค์ œ ์—…๋ฌด ๋ฐ์ดํ„ฐ)

 

 

 

 

 

image ์–ผ๊ตด์ธ์‹๊ณผ 68 point landmark ์ธ์‹ 

1. dlib + scikit-image ์„ค์น˜ : ๊ฐ€์ƒํ™˜๊ฒฝ(tensorflow)

๋‹จ๊ณ„1 : ํŒจํ‚ค์ง€ ์„ค์น˜ 
(base) > conda activate tensorfow

(1) cmake ์„ค์น˜ : dlib ์˜์กด์„ฑ ํŒจํ‚ค์ง€ ์„ค์น˜ 
(tensorflow) >pip install cmake

(2) dlib ์„ค์น˜ : 68 ๋žœ๋“œ๋งˆํฌ ์ธ์‹(์–ผ๊ตด์ธ์‹)
(tensorflow) >conda install ํŒŒ์ผ๊ฒฝ๋กœ/dlib
   
(3) scikit-image ์„ค์น˜ : image read/save
(tensorflow) >pip install scikit-image

๋‹จ๊ณ„2 : 68 ํฌ์ธํŠธ ๋žœ๋“œ๋งˆํฌ data ๋‹ค์šด๋กœ๋“œ 
(1) ๋‹ค์šด๋กœ๋“œ :http://dlib.net/files
    shape_predictor_68_face_landmarks.dat.bz2
(2) lecture01 ์••์ถ•ํ’€๊ธฐ 
(3) images ํด๋” ์ œ๊ณต 


import dlib #face detection/face landmark
from skimage import io #image read/save
from glob import glob #dir ํŒจํ„ด๊ฒ€์ƒ‰(*jpg)
import os #๊ฒฝ๋กœ์„ค์ •, ํด๋”์ด๋™


ํด๋” ์ด๋™ 

os.chdir(r'C:\ITWILL\5_Tensorflow\workspace\chap07_Face_detection\lecture01_face_landmark')  
path = os.getcwd() #ํ˜„์žฌ ๊ฒฝ๋กœ  
fpath = path + "/images" #celeb image ์œ„์น˜ 
fpath2 = path + "/croped_images" #croped image ์ €์žฅ ์œ„์น˜


hog ์–ผ๊ตด ์ธ์‹๊ธฐ(์•Œ๊ณ ๋ฆฌ์ฆ˜)

face_detector = dlib.get_frontal_face_detector()


hog ์–ผ๊ตด ์ธ์‹๊ธฐ ์ด์šฉ - 68 point landmark ๊ฐ์ฒด ์ƒ์„ฑ 

face_68_landmark = dlib.shape_predictor('shape_predictor_68_face_landmarks.dat')



i = 100 #[์ถ”๊ฐ€] image file 
for file in glob(fpath+"/*.jpg") : #ํด๋”์—์„œ ์ˆœ์„œ๋Œ€๋กœ jpg ํŒŒ์ผ ์ฝ๊ธฐ 
    image = io.imread(file) #image file ์ฝ๊ธฐ 
    print(image.shape) #image ๋ชจ์–‘ 
    
    #์œˆ๋„์— image ํ‘œ์‹œ 
    win = dlib.image_window()
    win.set_image(image) #1์ฐจ : ์›๋ณธ ์ด๋ฏธ์ง€ ํ‘œ์‹œ 
    
    #image์—์„œ ์–ผ๊ตด์ธ์‹     
    faces = face_detector(image, 1) #๋‘๋ฒˆ์งธ ์ธ์ˆ˜=1 : ์—…์ƒ˜ํ”Œ๋ง ํšŸ์ˆ˜ 
    print('์ธ์‹ํ•œ face size =', len(faces))
    '''
    ์—…์ƒ˜ํ”Œ๋ง ํšŸ์ˆ˜ : ๋” ๋งŽ์€ ์ด๋ฏธ์ง€๋ฅผ ์ธ์‹ํ•˜๊ฒŒํ•œ๋‹ค. ๋ณดํ†ต 1 ์ง€์ •
    '''    
    
    #image ํฌ๋กญ(crop) & file save : 68 point ๊ธฐ์ค€ ์ž๋ฅด๊ธฐ 
    for face in faces : # 1๋ช… -> 1ํšŒ ๋ฐ˜๋ณต     
        i += 1 #[์ถ”๊ฐ€]    
        print(face) #๊ฐ์ง€๋œ image ์‚ฌ๊ฐ์  ์ขŒํ‘œ       
        print(f'์™ผ์ชฝ : {face.left()}, ์œ„ : {face.top()}, ์˜ค๋ฅธ์ชฝ : {face.right()}, ์•„๋ž˜ : {face.bottom()}')
                
        #์œˆ๋„์— ์–ผ๊ตด ํ‘œ์‹œ : face ์‚ฌ๊ฐ์  ์ขŒํ‘œ ๊ฒน์น˜๊ธฐ 
        win.add_overlay(face) # 2์ฐจ : ์ด๋ฏธ์ง€ ์œ„์— ์–ผ๊ตด ๊ฒน์น˜๊ธฐ 
        
        #face ์‚ฌ๊ฐ์ ์•ˆ์— 68 point ๊ฒน์น˜๊ธฐ
        face_landmark = face_68_landmark(image, face)
        win.add_overlay(face_landmark) #3์ฐจ : 68 ํฌ์ธํŠธ ๊ฒน์น˜๊ธฐ
        
        #[์ถ”๊ฐ€] ํฌ๋กญ(crop) : ์–ผ๊ตด ๋ถ€๋ถ„๋งŒ ์ž๋ฅด๊ธฐ : image file save 
        crop = image[face.top():face.bottom(), face.left():face.right()] #image[h,w]
        
        #croped images svae 
        io.imsave(fpath2 + "/croped" + str(i) + ".jpg", crop)
        #croped101.jpg, croped102.jpg

 

 

 

 

 

croped image resize(100x100)
from glob import glob #file ํŒจํ„ด(*, ?)์œผ๋กœ ์กฐํšŒ : (*.jpg)
from PIL import Image #image file read : image resize 
from skimage import io #image save
import numpy as np #array ์ƒ์„ฑ 
import os #ํด๋” ๊ฒฝ๋กœ/์ด๋™


ํด๋” ์ด๋™ 

os.chdir(r'C:\ITWILL\5_Tensorflow\workspace\chap07_Face_detection\lecture01_face_landmark')  
path = os.getcwd() #ํ˜„์žฌ ๊ฒฝ๋กœ  
fpath = path + "/croped_images" #image path


croped image -> 100x100

def imgReshape() :     
    img_reshape = [] #image save 
    
    for file in glob(fpath + "/*.jpg") : #jpg file ์„ ํƒ 
        img = Image.open(file) #image read 
        
        #image ๊ทœ๊ฒฉํ™” 
        img = img.resize( (100, 100) ) #image resize  
        #PIL -> numpy
        img_data = np.array(img)
        print(img_data.shape)
        
        img_reshape.append(img_data)
    
    return np.array(img_reshape) #list -> numpy

 

ํ•จ์ˆ˜ ํ˜ธ์ถœ

img_reshape = imgReshape()    
print(img_reshape.shape) #(26, 100, 100, 3) - (size, h, w, c)

 

[์ถ”๊ฐ€] images show & save 

import matplotlib.pyplot as plt  

size = img_reshape.shape[0]

for i in range(size) : #0 ~ 25
    img = img_reshape[i]
    plt.imshow(img)
    plt.show()
    
    #image save 
    io.imsave(fpath + '/croped'+str(i+101)+"_resize"+".jpg", img)
    #croped101_resize.jpg, croped102_resize.jpg

'๋ฐ์ดํ„ฐ๋ถ„์„๊ฐ€ ๊ณผ์ • > Tensorflow' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

DAY72. Tensorflow Text Vectorizing RNN  (0) 2021.12.31
DAY71. Tensorflow Face detection (2)  (0) 2021.12.30
DAY69. Tensorflow Selenium Crawling  (0) 2021.12.28
DAY68. Tensorflow CNN model (2)ImageGenerator  (0) 2021.12.27
DAY67. Tensorflow CNN model  (0) 2021.12.24

+ Recent posts