본문 바로가기
Study/Android

Face detection(얼굴인식) in Android Using Mobile Vision API - 2

by Answer Choi 2018. 6. 1.
반응형

예제소스코드 다운로드


지난 포스팅에서는 API설치방법과 sample예제 실행만 했었습니다.


샘플예제가 이미지를 지정해서 하는거라 좀 불편해서


이번포스팅에서는 카메라를 찍거나 갤러리에서 가져오는 방법으로 변경해 봤습니다.



레이아웃은 이런 구조입니다.


아래쪽에 버튼 2개를 만들어 gallery를 불러오거나


Camera로 사진을 촬영하도록 하였습니다.


카메라와 갤러리접근을 위한  권한을  추가하고 코드도 추가해줘야 합니다.



manifest에 위의 권한을 등록해 줍니다.


1
2
3
4
5
6
7
8
9
10
11
switch (v.getId()){
    case R.id.camera:
        intent=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        startActivityForResult(intent, getCamera);
        break;
    case R.id.gallery:
        intent.setAction(Intent.ACTION_GET_CONTENT);
        intent.setType("image/*");
        startActivityForResult(intent, getGallery);
        break;
}
cs


위 코드는 버튼에 대한 코드입니다.


Line 2~5 : 카메라로 촬영하여 미리보기 사진을 가져옵니다.


Line 6~10 : 내부 저장공간에서 사진파일을 가져옵니다.




앱을 실행하여 Gallery 버튼을 클릭합니다.



이미지 위치를 선택하라고 하는데 갤러리를 선택해 줍니다.



그리고 사진을 가져오면 얼굴이 인식됩니다.


이제 Camera 버튼을 클릭합니다.



카메라가 실행됩니다.


사진을 찍습니다.



찍은사진을 보여줍니다.


확인을 누르면~



찍은 사진에서 얼굴들을 찾아 인식을 해줍니다.


물론 일부 인식이 안되는 것도 있긴합니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
case getCamera:
    bm=(Bitmap) data.getExtras().get("data");
    run(bm);
    break;
case getGallery:
    try {
        bm = MediaStore.Images.Media.getBitmap( getContentResolver(), data.getData());
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }catch(OutOfMemoryError e){
        Toast.makeText(getApplicationContext(), "이미지 용량이 너무 큽니다.", Toast.LENGTH_SHORT).show();
    }
    run(bm);
    break;
cs


사진을 찍거나 갤러리에서 가져오면 onActivityResult가 호출됩니다.


그안에 위의 코드가 있습니다.


run(bm) 부분이 얼굴을 인식하는 부분입니다.



반응형

인기글