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
相关产品推荐
相关产品推荐

