Skip to content

[OpenAPI] face.com and Facial Recognition(얼굴인식)

2012/02/20

Face.com

Face.com은 facial recognition(얼굴인식) platform을 개발하고 있는 회사입니다.

그들은 현재 자신들이 개발한 얼굴인식 플랫폼을 이용하여 facebook application과 KLIK 라는 아이폰용 app, 그리고 OpenAPI service를 제공하고 있으며 이를 통해 통해 매달 수십억개의 사진을 스캔하고, 수백만의 얼굴을 tag하는데 도움을 주고 있다고 합니다.

About API Service..

Overview

  • 사진을 업로드 받아 사진에서 얼굴들을 찾아 인식하고 얼굴들에 tag를 추가하거나, 이미 저장된 tag를 표시해 줍니다.
  • Rest API 로 무료로 사용이 가능하며 rate limit가 있지만, 원한다면 whitelisting도 가능합니다.
  • private namespace를 통해 자신만의 사용자 그룹을 인덱스에 학습시킬수 있습니다.
  • 안정적이긴 하지만 아직 open beta 단계입니다.

Rate Limiting

  • 기본적으로 REST API는 계정(per API Key)을 바탕으로 아래 4개 API에 대한 호출을 최대 한시간에 사진 5000장으로 제한을 두고 있습니다.
    1. faces.detect (사진에서 얼굴을 찾는 API)
    2. face.recognize(사진에서 얼굴을 인식해서 tag를 찾는 API)
    3. face.group(사진에서 얼굴을 인식해서 uid 그룹으로 리턴해주는 API )
    4. facebook.get( user id 들에 해당하는 facebook tag를 리턴해주는 API)
  • private namespaces 에 1,000의 사용자를 추가할 수 있습니다. 제한을 늘리기 위해서는 whitelisting 을 요청해야 합니다.
  • 한 계정(email)당 2개의 private namespace를 만들수 있습니다.

Client Library

REST API

제공해주고 있는 API 는 아래와 같이 총 13개로 구성되어 있습니다. 리턴 결과는 json과 xml 두가지 형식입니다.

faces.detect

detect는 사진에서 얼굴들을 찾아 사진상에서의 얼굴 위치, 눈, 코, 입, 성별, 안경 착용여부, 분위기 등을 리턴해 줍니다.

detect는 또한 사진상에 각 얼굴들에 대해 임시 아이디(tid)를 발급해주기 때문에 해당 tid를 통해 얼굴에 tag를 저장하게 됩니다.

faces.recognize

recognize는 사진에서 얼굴을 찾아 기본적인 정보와 함께 요청시 지정한 사용자 리스트 중에서 사진과 비슷하다고 판단되는 uid들을 리턴해 줍니다.

사용자 리스트는 페이스북 친구(friends@facebook.com), private namespace의 모든 사용자(all@namespace), namespace의 특정 사용자(<user>@namespace)로 구성될 수 있습니다.

face.group

group은 recognize와 비슷한 결과를 주지만 다른 점은 uid에 매치되는 사진을 그룹으로 묶어서 리턴해 줍니다. uid에 매치되지 않는 사진은 uid와 gid가 null 입니다.

face.train

train 은 tags.save를 통해 저장된 사진과 tag에 대해 시스템이 학습하도록 하여 recognize 호출시 자동으로 비슷한 얼굴의 사진에 대해 판단할 수 있도록 해줍니다.

face.status

status는 uid 별로 학습(train)된 사진 수와 마지막 학습된 시간, 학습이 현재 진행 여부 를 리턴해 줍니다.

tag.get

uid 에 해당하는 사진과 사진에 달린 tag들을 리턴해 줍니다.

tag.save

사진에 대해 face.detect 로 받은 결과중 tid와 uid 를 입력하여 저장합니다.

tag.remove

tid를 입력받아 해당하는 tag를 지웁니다.

Example Code

public class FaceClientTest{
	private static final String API_KEY = "발급받은 API Key";
	private static final String API_SEC = "발급받은 API Secret Key";

	private static final String NAMESPACE = "생성한 Private Namespace";
	private static final String ALL = "all@" + NAMESPACE;

	/**
	 * Comment : 로컬 이미지 파일을 불러와 uid로 등록한다.
	*/
	@Test
	public final void registFromFile() throws FaceClientException,
			FaceServerException {
		//사용자 아이디
		String uid = "yuri@" + NAMESPACE;
		com.github.mhendred.face4j.FaceClient faceClient = new DefaultFaceClient(
				API_KEY, API_SEC);
		File imageFile = new File(new File("d:\\down"), "K-20120202-632710.jpg");
		//이미지 파일을 face.com에 업로드해서 detect 한다.
		Photo photo = faceClient.detect(imageFile);

		//photo.getFaces()를 이용하면 사진에서 detect된 List를 리턴한다.
		for (Face face : photo.getFaces()) {
			//detect시 임시 할당된 face.getTID()에 tag(uid와 label)을 저장한다.
			faceClient.saveTags(face.getTID(), uid, "유리");
			//uid에 해당하는 사진들을 학습시킨다
			faceClient.train(uid);
		}
	}

	@Test
	public final void recognize() throws FaceClientException,
			FaceServerException {
		com.github.mhendred.face4j.FaceClient faceClient = new DefaultFaceClient(
				API_KEY, API_SEC);
		String[] urls = { "http://cfs7.blog.daum.net/image/10/blog/2008/02/15/21/28/47b58572eba5c&filename=123.jpg" };
		for (String url : urls) {
			//private namespace에 해당하는 모든 uid와 url에 있는 얼굴들을 비교해서 매치되는 결과를 얻어온다.
			List photos = faceClient.recognize(url, ALL);

			if (photos != null && !photos.isEmpty()) {
				System.out.println(photos.toString());
				for (Photo photo : photos) {
					System.out.println("URL : " + photo.getURL());

					for (Face face : photo.getFaces()) {
						//매치되는 uid와 confidence
						System.out.println("Guesses : " + face.getGuesses());
					}
				}
			}
		}
	}
}

자세히 읽어볼 것 : Recognition How-To : http://developers.face.com/docs/recognition-howto/

 

댓글 2개 leave one →
  1. 2012/02/20 3:31 오후

    오호~~~ 혹시 사진에서 얼굴찾는데 걸리는 시간은 얼마나 걸려요?

    • 2012/02/21 1:49 오후

      데이터를 많이 넣지 않아서 어떻게 변할지는 모르겠지만 비교하고 결과를 주는데 까지 보통 1~2초정도 걸리는것 같아요. 간단하게 테스트 해서 새로 포스트 올렸습니다.http://goo.gl/qPhvB

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중

%d 블로거가 이것을 좋아합니다: