You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native集成ML Kit PoseDetection遇Detector访问失败编译错误

React Native集成ML Kit姿态检测编译错误:找不到Detector类

编译时出现如下错误:

error: cannot access Detector
      poseDetector.process(image)
                  ^
  class file for com.google.mlkit.vision.common.internal.Detector not found

调用poseDetector.process(image)触发该错误,已尝试添加多个依赖包和导入语句,但问题未解决。

现有代码实现

import android.graphics.PointF;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;

import androidx.annotation.NonNull;

import com.facebook.react.ReactPackage;
import com.facebook.react.bridge.NativeModule;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.uimanager.ViewManager;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.Promise;

import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.mlkit.vision.common.InputImage;
import com.google.mlkit.vision.common.PointF3D;
import com.google.mlkit.vision.common.Triangle;


import com.google.mlkit.vision.pose.accurate.AccuratePoseDetectorOptions;
import com.google.mlkit.vision.interfaces.Detector;
import com.google.mlkit.vision.pose.Pose;
import com.google.mlkit.vision.pose.PoseDetector;
import com.google.mlkit.vision.pose.PoseDetection;
import com.google.mlkit.vision.pose.PoseDetectorOptionsBase;
import com.google.mlkit.vision.pose.PoseLandmark;
import com.google.mlkit.vision.pose.defaults.PoseDetectorOptions;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class PoseDetectionModule extends ReactContextBaseJavaModule {

    private static ReactApplicationContext reactContext;

    PoseDetectionModule(ReactApplicationContext context) {
        super(context);
        reactContext = context;
    }

    @Override
    public String getName() {
        return "PoseDetection";
    }

  @ReactMethod
  public void findPose(String imagePath, Promise promise) {
    try {
      Bitmap bitmap = BitmapFactory.decodeFile(imagePath);
      InputImage image = InputImage.fromBitmap(bitmap, 0);
      
      PoseDetectorOptions options =
          new PoseDetectorOptions.Builder()
              .setDetectorMode(PoseDetectorOptions.STREAM_MODE)
              .build();

      PoseDetector poseDetector = PoseDetection.getClient(options);
      poseDetector.process(image)
          .addOnSuccessListener(
              pose -> {
                Map<String, Map<String, Float>> landmarks = new HashMap<>();
                pose.getAllPoseLandmarks().forEach(landmark -> {
                  Map<String, Float> position = new HashMap<>();
                  position.put("x", landmark.getPosition().x);
                  position.put("y", landmark.getPosition().y);
                  landmarks.put(landmark.getLandmarkType().name(), position);
                });
                promise.resolve(landmarks);
              })
          .addOnFailureListener(
              e -> promise.reject("Pose detection failed", e));
    } catch (Exception e) {
      promise.reject("Pose detection failed", e);
    }
  }
}

注:部分导入语句为尝试解决问题时添加,未实际使用。

当前build.gradle依赖配置

dependencies {
    implementation("com.facebook.react:react-android")
    implementation("com.facebook.react:react-native:+")
    implementation("com.facebook.soloader:soloader:0.10.3")
    implementation 'com.google.mlkit:pose-detection:17.0.1-beta3'
    implementation 'com.google.mlkit:pose-detection-accurate:17.0.1-beta3'
    implementation 'com.google.mlkit:vision-common:17.0.0'
    implementation 'com.google.mlkit:vision-interfaces:16.0.0'
    implementation 'androidx.annotation:annotation:1.3.0'
    implementation 'com.google.android.gms:play-services-tasks:18.0.0'
    implementation 'com.android.support:multidex:1.0.3'
}

解决方案

1. 清理冲突依赖

  • 移除com.google.mlkit:vision-interfaces:16.0.0:该旧版本接口包与新版ML Kit姿态检测库存在冲突,PoseDetector接口已内置在姿态检测依赖中,无需单独引入
  • 二选一保留姿态检测依赖:不要同时引入pose-detection和pose-detection-accurate,根据需求选择基础版或高精度版

2. 统一ML Kit依赖版本

确保所有ML Kit相关依赖版本一致,避免版本不兼容问题。建议使用稳定版而非beta版,示例如下:

dependencies {
    implementation("com.facebook.react:react-android")
    implementation("com.facebook.react:react-native:+")
    implementation("com.facebook.soloader:soloader:0.10.3")
    // 选择其一:基础姿态检测库
    implementation 'com.google.mlkit:pose-detection:18.0.0'
    // 或高精度姿态检测库
    // implementation 'com.google.mlkit:pose-detection-accurate:18.0.0'
    implementation 'com.google.mlkit:vision-common:18.0.0'
    implementation 'androidx.annotation:annotation:1.3.0'
    implementation 'com.google.android.gms:play-services-tasks:18.0.0'
    implementation 'com.android.support:multidex:1.0.3'
}

3. 移除无用导入语句

删除代码中未使用的导入,减少潜在冲突,修正后的导入部分如下:

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;

import androidx.annotation.NonNull;

import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.Promise;

import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.mlkit.vision.common.InputImage;
import com.google.mlkit.vision.pose.Pose;
import com.google.mlkit.vision.pose.PoseDetector;
import com.google.mlkit.vision.pose.PoseDetection;
import com.google.mlkit.vision.pose.PoseLandmark;
import com.google.mlkit.vision.pose.defaults.PoseDetectorOptions;

import java.util.HashMap;
import java.util.Map;

4. 清理缓存并重新编译

执行以下命令清理项目缓存,然后重新构建:

./gradlew clean
./gradlew assembleDebug

内容的提问来源于stack exchange,提问作者SetchFrank

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 12:37:33