Processing 홈페이지에 가보시면 Library 페이지에 face detect library가 있지만 PC전용 library이기 때문에 mac에서는

사용할 수 가 없습니다

다행히 아래의 링크로 가시면 mac용 library를 구할 수가 있는데요,

사이트에 설명이 잘 되어 있지만, 그래도 아직 익숙하지 않은 분들을 위해서

 이 library의 설치 및 사용방법에 대해서 알아보겠습니다.

(원래 이 사이트도 processing 홈페이지에 link가 되어 있었는데, 언제부턴가 없어졌더군요)

 http://tokage.cafe24.com/facedetect/index.htm



1. 위에 링크된 사이트로 가보시면 설치 방법이 쓰여 있는데,
    Face detect library를 설치하기 전에 먼저 openCV Framework를 설치하라고 되어 있습니다.
    openCV는 Open Source Computer Vision 의 약자로 실시간으로 computer영상을 처리할 수 있게 해주는
    library라고 보시면 될 것 같습니다.
   
    아래 화면에 보시면  openCV사이트 링크가 있습니다.
   

  
   위의 링크를 따라 가면  openCV 페이지 아래쪽 링크에서 OpenCV-Private-Framework-1.1.dmg을 다운 받을 수
   있습니다.(아래 사진에서 빨갛게 표시된 부분)
   




2. 파일을 받아서 열면 아래 그림처럼 폴더가 들어 있는데 openCV.framework 폴더만
    ~/System/Library/Frameworks 폴더로 옮깁니다.

   


   



3. 이제 Face Detect library를 다운 받습니다.
   

   
    library를 다운 받아 열어보면 두 개의 폴더가 있는데, FaceDetect 폴더는 processing의 library폴더에 넣어주시고,
    data폴더는 그 안에 있는 파일들을 이 library를 사용해 작업할 sketch 폴더의 data 폴더에 넣어주세요.
   




4. 이제 설치는 다되었으니 Face Detect 사이트에 링크 되어 있는 예제 파일을 실행에 봅니다.
   

    두 개의 예제 중 face_example.pde(processing video library)를 클릭하면 소스 코드가 나오는데, 그것을 카피하여
    processing 창에 가져다 붙여보세요.
     *여기서 주의할 점은 3번에서 설명했던 것처럼 현재 sketch 폴더의 data폴더에, 다운 받은 library 파일에 들어있는
      data폴더의 파일들을 반드시 옮겨 주어야 합니다.

    실행하기 전에 code에서 size(320,240,P3D)의 P3D를 지워주세요. 그래야 실제 캠화면이 나옵니다.

    실행하게 되면 아래의 그림처럼 나오게 됩니다. 즉, 얼굴을 인식해서 얼굴위에 원을 그리는 코드 입니다.
    (아래 실행화면의 경우 fill 값을 준 것입니다.)
   
   




5. 예제 코드에서 중요한 부분만 간단히 설명하면 아래와 같습니다.



import processing.video.*;     //   video library와 FaceDetect library를 불러옵니다.
import FaceDetect.*;

FaceDetect fd;                     //   FaceDetect data type인 fd 와 카메라로 캡쳐된 것을 저장하는 Capture data type인 cam
Capture cam;

int MAX = 10;                       //   최대 10개까지 화면 안의 얼굴을 인식합니다.

int[] x = new int[MAX];
int[] y = new int[MAX];
int[] r = new int[MAX];
int[][] Faces = new int[MAX][3];    // 인식된 얼굴의 갯수와 얼굴의 화면상의 위치, 크기를 저장할 int type의 array

void setup(){

  size(320,240);
  cam = new Capture(this, 320, 240);
  fd = new FaceDetect(this);
  fd.start("haarcascade_frontalface_alt.xml", width,height,30);
  stroke(255,200,0);
  fill(255,200,0);
  //noFill();
}


void draw(){
  if (cam.available()) {
    cam.read();
    image(cam,0,0);

    Faces = fd.face(cam);              
    int count = Faces.length;      // 화면 상에서 인식된 얼굴의 갯수   
    //    println(count);
    if (count>0) {
      for (int i = 0;i<count;i++) {
        x[i] = Faces[i][0];            // 얼굴 중심의 x좌표
        y[i] = Faces[i][1];            // 얼굴 중심의 y좌표
        r[i] = Faces[i][2] * 2;       //  얼굴의 크기
        ellipse(x[i],y[i],r[i],r[i]);    //  위의 데이터를 이용하여 얼굴 위에 원을 그림
      }
    }
  }
}


사실상 중요한 부분은 빨갛게 표시된 부분입니다.
얼굴의 화면 상에서의 좌표값과 크기값을 넘겨주는 부분으로
이 데이터를 이용하여 뭔가 재밌는 것을 해보면 되겠지요^^



Posted by 알 수 없는 사용자