메뉴 건너뛰기

프로그래밍


Android에서 MS FACE API SDK의 최신버전을 사용하려면,  minSDKVersion 이 22 이상이 되어야 합니다. 이걸 억지로 올리기 싫어서 해당 기능을 Rest API로 호출해 보았고 그 방법을 공유해 드립니다.

(If you are using the latest MS Face API on Android, "minSDKVersion" must be at least 22. I did not want to set it to 22 or higher, so I tried another method- Rest API !) 


현재 MS나 인터넷에 있는 예제 대부분은 특정 서버상에 올라가 있는 얼굴 이미지의 경로를 파라메터로 전달합니다.

(Most examples set the parameters of the cloud to the path of the face image.)


이 예제는 로컬에 있는 이미지를 업로드 하여 그 결과를 가지고 오는 방법입니다. 

(On the other hand, this example shows how to upload an image file to the Face API) 


얼굴을 촬영한 JPG이미지를 octect-stream 으로 업로드 하고, 기타 필요한 파라메터를 추가하여 호출합니다.

(A method of uploading a JPG image with face shots to an octet stream, adding other required parameters, and then calling the API.)


import java.io.File;
import java.io.IOException;
import java.util.concurrent.TimeUnit;

import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;

public class FaceAPISupport extends Thread {

    private String finURL;
    private String handler_keyname;
    private RequestBody body;
    private String apikey;

    //로컬에 저장되어 있는 얼굴을 촬영한 이미지 파일의 경로를 파라메터로 전달합니다.
    public FaceAPISupport(String filepath) {
        body = RequestBody.create(MediaType.parse("application/octet-stream"), new File(filepath));

        handler_keyname = "Ocp-Apim-Subscription-Key"; //API 키를 위한 헤더 파라메터 이름
        apikey = "<API 키 입력>";
        String url = "https://westcentralus.api.cognitive.microsoft.com/face/v1.0/detect"; //REST API 주소

        /*
            얻어오고 싶은 파라메터를 설정합니다. 자세한 내용은 아래링크를 참고하세요.
            https://westus.dev.cognitive.microsoft.com/docs/services/563879b61984550e40cbbe8d/operations/563879b61984550f30395236
        */
        finURL = url
                + "?returnFaceAttributes=age,gender,headPose,smile,facialHair,glasses,emotion,hair,makeup,occlusion,accessories,blur,exposure,noise";

    }

    public Response callPost(String apikeyName, String apikey, String contentHeader, String url, RequestBody body) throws IOException {
        Request request = new Request.Builder()
                .url(url)
                .addHeader(apikeyName, apikey)
                .addHeader("Content-Type", contentHeader)
                .post(body)
                .build();

        OkHttpClient client = new OkHttpClient.Builder()
                .connectTimeout(30, TimeUnit.SECONDS)
                .readTimeout(30, TimeUnit.SECONDS)
                .writeTimeout(30, TimeUnit.SECONDS)
                .build();
        return client.newCall(request).execute();
    }


    @Override
    public void run() {
        try {
            Response response = callPost(handler_keyname, apikey, "application/octet-stream", finURL, body);

            if (response.isSuccessful()) {
                //결과는 아래 스트링에서 확인할 수 있습니다.
                String jSonString = response.body().string();
            }
        }
        catch (IOException e) {

        }
    }
}


//사용법
new FaceAPISupport(filePath).start();



건투를 빕니다!








번호 제목 글쓴이 날짜 조회 수
공지 [TIP] PYTHON 에서 "UnicodeDecodeError: 'cp949' codec can't decode byte 0xe2 in position 6987: illegal multibyte sequence" 오류 날때... [22] 파이팅건맨 2016.02.20 57813
공지 [TIP] TensorFlow를 윈도우에서 사용하기 (A way to use TensorFlow on Windows) [3] 파이팅건맨 2016.04.16 8908
공지 [TIP] JQuery와 PHP로 이미지 파일을 업로드 하는 간단한 소스 (How to upload image file on PHP server by using JQuery) 파이팅건맨 2015.04.03 8602
163 [TIP] Node.js 에서 현재 기상정보 API 호출하기 파이팅건맨 2020.02.22 6
162 [TIP] gcc 빌드중에 /usr/bin/ld: errno: TLS definition in /lib64/libc.so.6 section .tbss mismatches non-TLS reference in ... 와 같은 오류를 만났을 때 파이팅건맨 2019.11.25 73
161 [TIP] Windows UWP에서 시리얼 포트가 열리지 않을때 파이팅건맨 2019.11.08 220
160 [TIP] 화면 스크롤시 HTML Element가 화면의 중간에 위치하면 감지하기 파이팅건맨 2019.10.03 281
159 [TIP] Visual Studio 2019 에서 (배포용)설치파일 만들기 파이팅건맨 2019.09.30 883
» [TIP] Android에서 MS의 Face Rest API사용하기 (How to use the MS Face API on Android) 파이팅건맨 2019.07.16 344
157 [TIP] Xcode에서 boost 사용하는 방법 파이팅건맨 2019.06.28 141
156 [TIP] 아두이노에서 두근두근 Open API 호출하기 파이팅건맨 2019.06.04 449
155 [TIP] AWS Lambda, API Gateway 를 이용하여 S3에 파일 업로드 하기 파이팅건맨 2018.06.12 1577
154 [TIP] 파이선에서 AWS Lambda API 호출시 Cognito 사용자 토큰으로 권한 확인하기 파이팅건맨 2018.06.11 565
153 [TIP] 파이선에서 AWS Cognito 에 Sign-up, Sign-in 하는 예제 파이팅건맨 2018.06.08 597
152 [TIP] Ajax에서 AWS Lambda Rest API CALL 하기 (How to call AWS Lambda API from Ajax) 파이팅건맨 2018.02.12 687
151 [TIP] 나만의 OpenAPI 배포 플랫폼 만들기 [6] 파이팅건맨 2018.01.30 892
150 [TIP] 파이선에서 AWS Lambda로 만든 Restful API 호출하기 (How to call AWS Lambda Restful API from Python) 파이팅건맨 2018.01.23 498
149 [TIP] 파이선에서 서브프로세스를 실행시키고 출력되는 내용을 얻어오기 파이팅건맨 2018.01.22 2086
148 [TIP] 아두이노에서 AWS Lambda로 제작한 Restful API 호출하기 (The way how to call AWS Lambda Restful API from Arduino) 파이팅건맨 2018.01.18 601
147 [TIP] 파이선에서 Redis 이벤트 받기 파이팅건맨 2017.10.12 641
146 [TIP] 파이선에서 SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position ... 오류 해결 방법 파이팅건맨 2017.09.29 1556
145 [TIP] The function size must be used with a prefix when a default namespace is not specified 오류 해결하기 파이팅건맨 2017.08.02 1561
144 [TIP] 페이스북 개인 담벼락의 좋아요수 크롤링하기 파이팅건맨 2017.07.15 1117
위로