본문 바로가기
Study/Android

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

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

예제소스 다운로드



이번에는 Face Tracker예제로 테스트 하였습니다.



바로 FaceTracker입니다.


이 예제는 얼굴에서 눈을 얼마나 떴는지, 웃고있는지를 카메라 프리뷰를 통해 알려줍니다.


앞서 했던 photo_demo 예제는 눈코입등을 찾아주는 Landmark였고,


이번꺼는 Classification입니다.


Classification은 눈을 얼만큼 뜨고있는지, 얼마나 웃고있는지를 보여줍니다.


FaceGraphic.java에서


draw함수에 보면 위 사진과 같이 글자를 나타냅니다.


1
2
3
4
5
6
7
float x = translateX(face.getPosition().x + face.getWidth() / 2);
float y = translateY(face.getPosition().y + face.getHeight() / 2);
canvas.drawCircle(face.getPosition().x, face.getPosition().y, FACE_POSITION_RADIUS, mFacePositionPaint);
canvas.drawText("id: " + mFaceId, x + ID_X_OFFSET, y + ID_Y_OFFSET, mIdPaint);
canvas.drawText("happiness: " + String.format("%.2f", face.getIsSmilingProbability()), x - ID_X_OFFSET, y - ID_Y_OFFSET, mIdPaint);
canvas.drawText("right eye: " + String.format("%.2f", face.getIsRightEyeOpenProbability()), x + ID_X_OFFSET * 2, y + ID_Y_OFFSET * 2, mIdPaint);
canvas.drawText("left eye: " + String.format("%.2f", face.getIsLeftEyeOpenProbability()), x - ID_X_OFFSET*2, y - ID_Y_OFFSET*2, mIdPaint);
cs


Line 1~2, : 글자를 디스플레이할 위치를 지정합니다.



face.getPosition()은 얼굴의 왼쪽 위 좌표입니다.


그리고 getWidth()는 얼굴의 폭이고, getHeight()는 높이입니다.


값을 더해서 2로 나눠주면 얼굴의 중앙에 오게됩니다.


Line 3 : 제일 위 사진에서 원의 위치입니다.(위에서 계산된 값을 바탕으로 원을 그립니다.)


Line 4 : id값을 디스플레이 합니다. OFFSET은 미리 정의되어 있습니다.




Line 5 : 얼마나 웃고있는지 값이고,


Line 6 : 오른쪽 눈을 얼마나 뜨고있는지


Line 7 : 왼쪽눈을 얼마나 뜨고있는지를 알려줍니다.



리턴값은 0.0~1.0값을 반환합니다.


헌데 위의 사진을 보면 마이너스 값이 있네요.


다시 코드를 보니 버그가 있는것 같습니다.



요런식으로...


근데 이건 로컬설정이라 별 도움은 안되고, Math함수로 수정합니다.


1
2
3
canvas.drawText("happiness: " + Math.round(face.getIsSmilingProbability()*100d)/100d, x - ID_X_OFFSET, y - ID_Y_OFFSET, mIdPaint);
canvas.drawText("right eye: " + Math.round( face.getIsRightEyeOpenProbability()*100d)/100d, x + ID_X_OFFSET * 2, y + ID_Y_OFFSET * 2, mIdPaint);
canvas.drawText("left eye: " + Math.round(face.getIsLeftEyeOpenProbability()*100d)/100d, x - ID_X_OFFSET*2, y - ID_Y_OFFSET*2, mIdPaint);Colored by Color Scripter
cs


코드를 위와 같이 수정하고 실행합니다.



마이너스값이 나오지 않습니다.

반응형

인기글