파이썬 AI 라이브러리 zAI 사용기 -AI이미지 추출 (2/5)

목차

    2018. 8. 21. 06:00

    알파고가 바둑에서 이세돌을 이긴 이후로 인공지능에 대한 관심이 뜨겁다. 인공지능과 관련된 기술과 알고리즘은 일반인들이 이해하기도 어렵고 실체를 파악하기도 쉽지 않다. 하지만 많은 IT기업들에서 AI기술들을 API형태로 제공하고 있으며, 이를 활용하여 테스트해보고 결과를 얻을 수 있다. 하지만 이마저도 어렵다고 생각한 걸까. AI기술을 더 쉽게 접할 수 있는 zAI라이브러리가 만들어졌다. 불과 4~5줄이면 테스트가 가능하다.

    오늘은 zAI를 이용하여 이미지에서 얼굴을 찾고, 특징을 추출해내는 작업을 해보고자 한다.


    제목



    zAI를 사용하기 위해서는 구글이나 마이크로소프트 애저의 API KEY가 있어야 한다. 애져 API KEY를 받는 방법은 아래 포스팅을 참조해보자.

    (참조: 마이크로소프트 애저 가입과 API KEY 발급)

    이전 포스팅에서는 이미지에서 글씨를 추출하는 작업을 해 보았다. 자세한 내용이 궁금하다면 아래 포스팅을 참조해보자.

    (참조: 파이썬 AI 라이브러리 zAI 사용기 -문자인식 (1/5))



    이미지에서 얼굴을 찾는 작업은 local에서 작업이 가능했다. 단, tensorflow가 라이브러리가 설치돼 있어야 한다. 아나콘다를 사용하고 있다면 'conda install tensorflow'를 커맨드창에서 입력하여 라이브러리를 설치하도록 한다. 아니면 'pip install tensorflow'로 설치하자


    해당 라이브러리에서 제공하는 sample이미지를 이용하여 사진을 추출해보도록 하자. 도날드 트럼프의 사진이다.


    샘플사진

    (원본 사진)


    1
    myPhoto = zImage('./zAI/samples/Donald_Trump_8566730507.jpg')
    cs


    이미지를 zImage함수를 이용해서 등록한다. 이후 find_faces 함수를 실행하면 얼굴을 처리하는데 필요한 메타 이미지를 다운받는다. 다음으로 extract_face를 통해 얼굴 이미지를 추출한다. display() 함수를 실행하면 추출한 이미지를 바로 확인할 수 있다.


    1
    2
    3
    4
    5
    6
    7
    myPhoto.find_faces(backend='local')
     
    myCloseup = myPhoto.extract_face(margin=15# margin is the number of pixels we will expand
                                                    # the tight face rentangle around the face
    myCloseup.display()
    myCloseup.save("./face.jpg")
     
    cs



    얼굴추출

    (추출한 얼굴 이미지)


    위와 같이 얼굴이 잘 추출됐다. 추출한 이미지는 save()함수를 이용해 저장할 수 있다.


    label()함수를 이용하면 이미지에서 특징이 되는 단어들을 추출해준다.  위의 사진을 테스트 해 본 결과 아래와 같은 답을 얻을 수 있었다.


    ['person', 'suit', 'man', 'outdoor', 'standing', 'wearing', 'business']


    추출된 단어들을 보니 사진의 특징을 제법 잘 추출해 냈다고 생각된다.



    추천포스트


    다음으로 사람이 여러명인 사진을 어떻게 될 지 시도해봤다.


    테스트이미지

    (테스트 이미지)


    휴가 때 찍은 사진을 테스트 해 본 결과, 인식이 잘 됐다. 글자보다 사람 얼굴 인식이 더 잘 되는 듯 하다. 사람이 3명인 것을 정확히 인식했으며, 얼굴도 정확히 추출됐다.


    find_faces()함수를 호출한 후 '.faces'를 통해 추출된 얼굴 정보를 확인할 수 있었다. len을 통해서 갯수를 확인할 수 있는데 정확히 3개가 나온다.


    이후 얼굴 추출은 n에 값을 할당하여 원하는 얼굴을 추출할 수 있었다. 아래와 같이 0번째 얼굴을 추출해 보았다.


    1
    2
    3
    4
    len(myPhoto.faces)
     
    myCloseup = myPhoto.extract_face(n=0,margin=15)
     
    cs


    얼굴추출

    (추출된 얼굴)


    아래로 약간 숙인 이미지임에도 불구하고 잘 추출됐다. label()함수를 이용해서 어떤 특징들이 추출되는지 보았다.


    ['sky', 'outdoor', 'water', 'person', 'child', 'little', 'girl',  'young', 'nature', 'shore']


    어떤가? 제법 사진의 특징들을 잘 추출했다고 생각한다. 얼굴인식보다 사진의 특징을 추출하는 부분도 꽤 만족스러운 결과가 나온다.


    오늘은 파이썬 AI라이브러리 zAI를 통해서 이미지를 추출해 보았다. 얼굴 인식과 사진의 특성을 추출해봤는데, 이전 포스팅에서 글자를 인식하는 것보다 더 정확하게 잘 추출됐다. 


    다음 포스팅에서는 딥러닝을 하면서 많이 소개되는 사진을 특정 화풍의 그림으로 변환하는 작업을 해 보도록 하겠다. 자세한 내용은 아래 링크를 참조하도록 하자.
    (참조: 파이썬 인공지능AI 라이브러리 사용 - 사진 변환 (3/5) )



    오픈API를 사용하면 다양한 재미있는 일들을 해 볼 수 있다. 파이썬을 활용한 오픈API 사용이 궁금하다면 아래 글을 참조해보자.

    (참조: 오픈API를 활용한 사례는 어떤 것들이 있을까?)



    이 글 공유하기