[Flutter] PoseNet(Pose Estimation) With TensorFlow Lite Model
🤺 PoseNet 이란?
PoseNet은 주요 신체 관절의 위치를 예측하여 이미지 또는 비디오에서 사람의 포즈를 예측하는 데 사용할 수 있는 비전 모델이다.
코, 왼쪽 눈, 오른쪽 눈, 왼쪽 무릎, 오른쪽 무릎, 왼쪽 팔꿈치, 오른쪽 팔꿈치 등 신체의 관절 부위에 대한 17개의 point를 인식한다.
예제 역시 Tensorflow 홈페이지에서 확인이 가능하다.
❓ 수행 방법 ?
위 출처에 나온 홈페이지를 참고하였고, 이해하기 쉽게 그림을 첨부한다.
✏️ 구현
기존 tflite
모델을 flutter에 적용해보면, Accruacy가 상당히 낮고, 전처리가 부족하여 기대하는 output이 나오지 않는다는 것을 알 수 있었다.
또한, 기존 모델의 예제는 그림이 아닌 비디오로 진행이 되었기 때문에, 이미지를 input으로 받았을 때, output으로 posenet이 적용된 화면을 띄워주는 예제를 만들어 보았다.
pubspec.yaml
dependencies :
tflite: ^1.1.2
image_picker: ^0.7.4
assets:
- assets/posenet_mv1_075_float_from_checkpoints.tflite
- 기존 모델의 함수로 point를 추출한다.
- 기존 모델이 accuracy가 낮기 때문에, 전처리를 해주어야 했음.
- point들마다 score(accuracy)가 50% 이상인 것들만 취급을 해주고,
- 동일한 part(ex: 왼쪽 무릎)에 2개 이상의 point가 있을 경우, accruacy가 높은 경우만 살아남도록 해주고,
- 중복된 포인트가 있다면 없애준다.
- 이정도로도 model의 performance는 훌륭해졌다.
- 이제 뽑은 point들에 대해 line을 그려주고,
- 모든 위젯들을 stack으로 보여주면 posenet이 완성된다.
🌻 결과
소스코드 : 여기
Leave a comment