패키지, 저장소 및 앱 카테고리 검색

패키지 상세v0.0.7

flutter_mediapipe

flutter mediapipe 플러그인 프로젝트입니다.

AndroidiOS
30일 다운로드
64
좋아요
29
Pub 점수
120

패키지 설치

flutter pub add flutter_mediapipe

패키지 개요

공개 정보를 바탕으로 생성한 선택 가이드입니다.

Flutter MediaPipe는 모바일 플랫폼에서 실시간 머신러닝 작업을 위한 Google의 MediaPipe 프레임워크를 통합할 수 있도록 해주는 Flutter 플러그인입니다. 컴퓨터 비전 및 제스처 인식을 지원하며, 얼굴 감지, 손 추적, 자세 추정과 같은 기능을 Flutter 앱 내에서 직접 구현할 수 있습니다. 플러그인은 플랫폼 채널을 통해 네이티브 Android 및 iOS 기능을 활용하여 높은 성능과 낮은 지연 시간을 보장합니다. 외부 종속성이 최소한으로 필요한 디바이스 기반 AI 처리가 필요한 애플리케이션에 적합합니다.

사용 사례

  • 실시간 얼굴 및 손 추적
  • 모바일 앱에서의 제스처 인식
  • 피트니스 또는 게임 앱을 위한 자세 추정
  • 장치 내 객체 탐지
  • 증강현실 경험

주요 기능

  • 플랫폼 채널을 통한 네이티브 성능
  • Android 및 iOS 지원
  • 일반적인 시각 작업을 위한 사전 훈련된 모델
  • 저지연 추론
  • Flutter UI와의 간편한 통합

적합한 대상

  • 모바일 앱 개발자들이 컴퓨터 비전과 함께 작업하고 있습니다
  • 기기 내 ML 처리가 필요한 프로젝트
  • 인터랙티브 AR 및 게임 애플리케이션
  • 피트니스 및 웰빙 추적 앱

고려 사항

  • MediaPipe 개념에 대한 지식이 필요합니다
  • Android 및 iOS 플랫폼에 제한됨
  • 모델 포함으로 인해 앱 크기가 증가할 수 있습니다
  • 성능은 기기 하드웨어에 따라 달라집니다

원본 README

연결된 소스 저장소의 README 원문 스냅샷입니다. 최신 내용은 저장소에서 확인하세요.

flutter_mediapipe

Flutter plugin with mediapipe facemesh.

Devices

Currently, it runs on below devices with "OK".

Android

There are Mediapipe Manual Build for Android flutter plugin.

There are mobile_calculators list to run on Mobile.

Choose one. This plugin choose face_mesh.

  • face_detection
  • face_mesh
  • object_detection
  • hand_tracking
Docker
git clone https://github.com/google/mediapipe.git
cd mediapipe
docker build --tag=mediapipe .
docker run -it --name mediapipe mediapipe:latest

When enter docker again:

docker start [your container ID] 
docker exec -i -t mediapipe bash

Run below commands on the container.

Setup
apt update
apt install vim
apt install zip
bash ./setup_android_sdk_and_ndk.sh
Prepare
mkdir mediapipe/examples/android/src/java/com/google/mediapipe/apps/flutter_mediapipe
vi mediapipe/examples/android/src/java/com/google/mediapipe/apps/flutter_mediapipe/BUILD 
  • "BUILD" file content.
load("//mediapipe/java/com/google/mediapipe:mediapipe_aar.bzl", "mediapipe_aar")

mediapipe_aar(
    name = "flutter_mediapipe",
    calculators = ["//mediapipe/graphs/face_mesh:mobile_calculators"],
)
Build
  • jniLibs
bazel build -c opt --host_crosstool_top=@bazel_tools//tools/cpp:toolchain --fat_apk_cpu=arm64-v8a,armeabi-v7a --strip=ALWAYS //mediapipe/examples/android/src/java/com/google/mediapipe/apps/flutter_mediapipe:BUILD --linkopt="-s"
bazel build -c opt --host_crosstool_top=@bazel_tools//tools/cpp:toolchain --fat_apk_cpu=arm64-v8a,armeabi-v7a //mediapipe/examples/android/src/java/com/google/mediapipe/apps/flutter_mediapipe:flutter_mediapipe --linkopt="-s"
  • binary graph
bazel build -c opt --host_crosstool_top=@bazel_tools//tools/cpp:toolchain --fat_apk_cpu=arm64-v8a,armeabi-v7a --strip=ALWAYS //mediapipe/examples/android/src/java/com/google/mediapipe/apps/facemeshgpu:BUILD
bazel build -c opt --host_crosstool_top=@bazel_tools//tools/cpp:toolchain --fat_apk_cpu=arm64-v8a,armeabi-v7a //mediapipe/examples/android/src/java/com/google/mediapipe/apps/facemeshgpu:facemeshgpu
mkdir
mkdir flutter_mediapipe/
mkdir flutter_mediapipe/android
mkdir flutter_mediapipe/android/libs
mkdir flutter_mediapipe/android/src
mkdir flutter_mediapipe/android/src/main
mkdir flutter_mediapipe/android/src/main/assets
mkdir flutter_mediapipe/android/src/main/jniLibs
mkdir flutter_mediapipe/protos
libs
cp bazel-bin/mediapipe/examples/android/src/java/com/google/mediapipe/apps/flutter_mediapipe/libflutter_mediapipe_android_lib.jar flutter_mediapipe/android/libs
assets
cp mediapipe/modules/face_detection/face_detection_front.tflite flutter_mediapipe/android/src/main/assets
cp mediapipe/modules/face_landmark/face_landmark.tflite flutter_mediapipe/android/src/main/assets
cp bazel-out/k8-opt/bin/mediapipe/graphs/face_mesh/face_mesh_mobile_gpu.binarypb flutter_mediapipe/android/src/main/assets

jniLibs
mkdir work
cp bazel-bin/mediapipe/examples/android/src/java/com/google/mediapipe/apps/flutter_mediapipe/flutter_mediapipe.aar work/aar.zip
cd work/
unzip aar.zip
cd ..
cp -r work/jni/* flutter_mediapipe/android/src/main/jniLibs/
protos
cp mediapipe/framework/formats/landmark.proto flutter_mediapipe/protos/

See regenerate.md

Zip
zip -r flutter_mediapipe.zip flutter_mediapipe

And then, exit from the container.

Copy

Change "3730fdc4d319" to your container ID.

docker cp 3730fdc4d319:/mediapipe/flutter_mediapipe.zip .
unzip flutter_mediapipe.zip

Then copy "flutter_mediapipe" to flutter plugin projects.

APK
flutter build apk --split-per-abi
Refferences

iOS

Not implemented. Help me to develop.

Custormize mediapipe

Graph

When editing graphs or subgraphs, Build again.

  • graphs: binary graph
  • subgraphs: jniLibs
vi mediapipe/graphs/face_mesh/subgraphs/face_renderer_gpu.pbtxt

It is a sample to comment out of lines from 92 to 94 for hiding rectangles and landmarks.

# Draws annotations and overlays them on top of the input images.
node {
  calculator: "AnnotationOverlayCalculator"
  input_stream: "IMAGE_GPU:input_image"
#  input_stream: "detections_render_data"
#  input_stream: "VECTOR:0:multi_face_landmarks_render_data"
#  input_stream: "rects_render_data"
  output_stream: "IMAGE_GPU:output_image"
}
Calculator

When editing c++ calculator source, Build again.

  • c++ source: jniLibs
vi mediapipe/graphs/face_mesh/calculators/face_landmarks_to_render_data_calculator.cc

It is a sample to comment out the lines(31 and 45) for hiding Left eyebrow connections.

constexpr int kNumFaceLandmarkConnections = 116; // (124 - (16/2))  c.f. l.93
// Pairs of landmark indices to be rendered with connections.
constexpr int kFaceLandmarkConnections[] = {
  :
    133,
    // Left eyebrow.
//    46, 53, 53, 52, 52, 65, 65, 55, 70, 63, 63, 105, 105, 66, 66, 107,
    // Right eye.
  :
  for (int i = 0; i < kNumFaceLandmarkConnections; ++i) {
    landmark_connections_.push_back(kFaceLandmarkConnections[i * 2]);
    landmark_connections_.push_back(kFaceLandmarkConnections[i * 2 + 1]);
  }

카테고리

의존성

의존성 목록 1 개

소스 저장소

이 패키지를 사용하는 프로젝트

아직 데이터가 없습니다.