Android, Retrofit2, 네이버 얼굴인식 API 만들기 2
CFR API 레퍼런스
CFR API는 다음과 같은 API를 제공합니다.
2. 얼굴 감지 API
=> 두가지 API가 있다!
1. 유명인 얼굴 인식 API
입력받은 이미지로부터 얼굴을 감지하고 감지한 얼굴이 어떤 유명인과 닮았는지 분석하여 그 결과를 반환하는 REST API입니다.
이미지에서 다음과 같은 정보를 분석합니다.
- 감지된 얼굴의 수
- 감지된 각 얼굴을 분석한 정보 : 닮은 유명인 이름 , 해당 유명인을 닮은 정도
2. 얼굴 감지 API
입력받은 이미지로부터 얼굴을 감지하고 입력된 이미지에서 얼마나 많은 얼굴이 감지되었고 각 얼굴이 어디에 어떤 크기로 위치하며 어떤 모습을 하고 있는지 반환하는 REST API입니다. 이미지에서 다음과 같은 정보를 분석합니다.
- 감지된 얼굴의 수
- 감지된 각 얼굴을 분석한 정보 : 감지된 각 얼굴의 좌표 및 크기, 눈, 코, 입의 좌표, 추정 성별 및 추정치, 추정 나이 및 추정치, 감정, 얼굴의 방향
이 두가지 API를 사용해보도록 하겠습니다.
1. Retrofit2 를 사용하기 위해 build.gradle (Module: app) 에 라이브러리 추가
1 2 3 4 5 6 7 | dependencies { ... compile 'com.squareup.retrofit2:retrofit:2.1.0' compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta3' ... } | cs |
2. 인터페이스 만들기
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | public interface NaverApiInterface { @Multipart @POST("/v1/vision/celebrity") Call<NaverRepo> naverRepo(@Header("X-Naver-Client-Id") String id ,@Header("X-Naver-Client-Secret") String secret ,@Part MultipartBody.Part file); @Multipart @POST("/v1/vision/face") Call<NaverRepo> naverRepo2(@Header("X-Naver-Client-Id") String id ,@Header("X-Naver-Client-Secret") String secret ,@Part MultipartBody.Part file); } | cs |
NaverApiIntereface를 만들었습니다.
지난 글에서
=> HTTP 요청, Client ID와 Client Secret 정보를 헤더에 포함시켜야한다.
=> multipart형식으로 보내고 이름은 image
라고 하였습니다.
naverRepo는 유명인 얼굴 인식 API @POST("/v1/vision/celebrity")
naverRepo2는 얼굴 감지 API용 인터페이스 입니다. @POST("/v1/vision/face")
3. Model class 만들기
네이버 API가이드를 예시
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | // 닮은 유명인을 찾은 경우 { "info": { "size": { "width": 900, "height": 675 }, "faceCount": 2 }, "faces": [{ "celebrity": { "value": "안도하루카", "confidence": 0.266675 } }, { "celebrity": { "value": "서효림", "confidence": 0.304959 } }] } // 닮은 유명인을 찾지 못한 경우 { "info": { "size": { "width": 768, "height": 1280 }, "faceCount": 0 }, "faces": [] } | cs |
이를 사용할 수 있는 모델 클레스를 만듭니다. (Info, Faces 클래스는 접어두었습니다.)
1 2 3 4 5 6 7 8 9 10 11 12 | public class NaverRepo { Info info; Faces[] faces; public Info getInfo() { return info; } public Faces[] getFaces() { return faces; } } | cs |
4. Retrofit 객체 생성, 인터페이스 서비스 생성, 호출
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | String clientId = "클라이언트키"; String clientSecret = "클라이언트시크릿"; Retrofit client = new Retrofit.Builder() .baseUrl("https://openapi.naver.com") .addConverterFactory(GsonConverterFactory.create()) .build(); NaverApiInterface service = client.create(NaverApiInterface.class); RequestBody reBody = RequestBody.create(MediaType.parse("image/jpeg"), file); MultipartBody.Part body = MultipartBody.Part.createFormData("image", file.getName(), reBody); Call<NaverRepo> call = service.naverRepo(clientId,clientSecret,body); | cs |
5. API CALL
유명인 얼굴인식 API , 얼굴 감지 API 가 같은 데이터클레스를 사용하기에 Annotation만 다른 naverRepo, naverRepo2 인터페이스를 호출하여 사용합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | //유명인 얼굴 인식 API CALL Call<NaverRepo> call = service.naverRepo(clientId,clientSecret,body); call.enqueue(new Callback<NaverRepo>() { @Override public void onResponse(Call<NaverRepo> call, Response<NaverRepo> response) { if (response.isSuccessful()) { ... } else { ... } } @Override public void onFailure(Call<NaverRepo> call, Throwable t) { ... } }); | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | //얼굴 감지 API CALL Call<NaverRepo> call2 = service.naverRepo2(clientId,clientSecret,body); call2.enqueue(new Callback<NaverRepo>() { @Override public void onResponse(Call<NaverRepo> call, Response<NaverRepo> response) { if (response.isSuccessful()) { ... } else { ... } } @Override public void onFailure(Call<NaverRepo> call, Throwable t) { ... } }); | cs |
이상으로 안드로이드 레트로핏 사용을 간단하게 정리해보았습니다.
감사합니다.
'개발 > 안드로이드' 카테고리의 다른 글
[Android] 안드로이드 4대 구성 요소 (0) | 2017.11.20 |
---|---|
[Android] 안드로이드 이벤트리스너 onClickListener 구현 (0) | 2017.08.21 |
[Android] 안드로이드 레트로핏2 Retrofit2, 네이버 얼굴인식 API 만들기 1 (0) | 2017.08.01 |
[Android] 안드로이드 Retrofit2 (레트로핏2) (0) | 2017.08.01 |