[Flutter] PoseNet(Pose Estimation) With TensorFlow Lite Model

🤺 PoseNet 이란?

PoseNet은 주요 신체 관절의 위치를 예측하여 이미지 또는 비디오에서 사람의 포즈를 예측하는 데 사용할 수 있는 비전 모델이다.

코, 왼쪽 눈, 오른쪽 눈, 왼쪽 무릎, 오른쪽 무릎, 왼쪽 팔꿈치, 오른쪽 팔꿈치 등 신체의 관절 부위에 대한 17개의 point를 인식한다.

예제 역시 Tensorflow 홈페이지에서 확인이 가능하다.

출처


❓ 수행 방법 ?

위 출처에 나온 홈페이지를 참고하였고, 이해하기 쉽게 그림을 첨부한다.

Real-time Human Pose Estimation with Tensorflow

output


✏️ 구현

기존 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  
  1. 기존 모델의 함수로 point를 추출한다.
  2. 기존 모델이 accuracy가 낮기 때문에, 전처리를 해주어야 했음.
    1. point들마다 score(accuracy)가 50% 이상인 것들만 취급을 해주고,
    2. 동일한 part(ex: 왼쪽 무릎)에 2개 이상의 point가 있을 경우, accruacy가 높은 경우만 살아남도록 해주고,
    3. 중복된 포인트가 있다면 없애준다.
  3. 이정도로도 model의 performance는 훌륭해졌다.
  4. 이제 뽑은 point들에 대해 line을 그려주고,
  5. 모든 위젯들을 stack으로 보여주면 posenet이 완성된다.

🌻 결과

output1

소스코드 : 여기

Leave a comment