30 라인으로 얼굴 인식 (OpenCV)하여 파일 출력!

할 일



  • 마지막 기사 에서 Google 이미지 검색 결과를 스크래핑하고 이미지 데이터를 다운로드했습니다.
  • 이번은, 인물의 화상 데이터를 다운로드해 두고, 그 인물의 얼굴 부분을 OpenCV로 인식시켜, 얼굴 화상의 데이터를 작성하고 싶습니다.

  • 절차 개요


  • 캐스케이드 파일 준비
  • 이미지 데이터 준비
  • 얼굴 인식 & 파일 출력

  • 운영 환경


  • macOS Catalina 10.15 beta
  • anaconda 4.6.14
  • Python 3.6.8
  • opencv 3.4.2

  • 1. 캐스케이드 파일 준비


  • 내 경우에는 anaconda로 환경 구축을하고 있기 때문에, "anaconda3/pkgs/.../haarcascades/"안에 "haarcascade_frontalface_default.xml"이 있습니다. (Finder 등으로 검색해보십시오)
    그것을 복사하여 실행 파일과 동일한 디렉토리에 저장했습니다.
  • 파일이 없으면 GitHub 위에서 다운로드하십시오.

  • 1.cascade 파일 준비
    import os
    import cv2
    
    HAAR_FILE = "./haarcascade_frontalface_default.xml"
    face_cascade = cv2.CascadeClassifier(HAAR_FILE)
    

    2. 이미지 데이터 준비


  • 소스 파일과 출력 파일을 저장하는 폴더 (input/output)를 작성하고 입력 소스에 여러 이미지 데이터 (.jpg)를 저장하십시오.

  • 2. 이미지 데이터 준비
    IN_PATH = './input/'
    OUT_PATH = './output/'
    
    def get_file(dir_path):
        file_names = os.listdir(dir_path)
        return file_names
    
    images = get_file(IN_PATH)
    

    3. 얼굴 인식 & 파일 출력


  • 이미지 데이터 로드(imread)
  • 이미지를 쉽게 감지 할 수 있도록 회색조로 변환합니다 (cvtColor)
  • 얼굴 인식을 실행하기 위해, 1.로 읽어들인 cascade를 이용합니다
    detectMultiScale의 반환 값은 아래 목록입니다.
  • x 좌표
  • y 좌표
  • 가로 폭
  • 세로 폭

  • 얼굴 범위를 추출하거나 범위를 빨간색 테두리 (OpenCV의 imread는 BGR 순서)로 묶고 각 파일을 출력합니다.
  • rectangle은 사각형을 그립니다.
  • rectangle (이미지, 왼쪽 위 좌표, 오른쪽 아래 좌표, 색, 선 두께)


  • 3. 얼굴 인식 및 파일 출력
    for i in images:
    
        # read image
        img = cv2.imread(IN_PATH + i)
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    
        # face detection
        face = face_cascade.detectMultiScale(gray)
    
        # get face area
        for x,y,w,h in face:
            face_cut = img[y:y+h, x:x+w]
        # wrap in red frame
        for x,y,w,h in face:
            cv2.rectangle(img, (x,y), (x+w, y+h), (0, 0, 255), 2)
    
        cv2.imwrite(OUT_PATH + '{}_face_cut.jpg'.format(i.replace('.jpg', '')), face_cut)
        cv2.imwrite(OUT_PATH + '{}_face_rectangle.jpg'.format(i.replace('.jpg', '')), img)
    

    실행 결과


  • 실행 전후의 화상 데이터는 다음과 같습니다.

  • 【실행 전】



    1. 001.jpg





    2. 002.jpg





    3. 003.jpg





    【실행 후】



    1.



    001_face_cut.jpg





    001_face_rectangle.jpg





    2.



    002_face_cut.jpg





    002_face_rectangle.jpg





    3.



    003_face_cut.jpg





    003_face_rectangle.jpg





    소스 코드



    참고문헌


  • OpenCV에서 얼굴 인증을 수행하고 자르고 저장
  • 좋은 웹페이지 즐겨찾기