加入渲染点的代码

This commit is contained in:
xsl
2025-09-17 22:49:40 +08:00
parent ea602c4f8f
commit 0d90c33380
@@ -18,11 +18,16 @@ import androidx.core.content.ContextCompat;
import com.google.androidgamesdk.GameActivity; import com.google.androidgamesdk.GameActivity;
import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.ListenableFuture;
import com.google.mediapipe.tasks.components.containers.NormalizedLandmark;
import com.google.mediapipe.tasks.vision.core.RunningMode; import com.google.mediapipe.tasks.vision.core.RunningMode;
import com.google.mediapipe.tasks.vision.facelandmarker.FaceLandmarkerResult;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.FloatBuffer;
import java.util.List;
import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
@@ -202,8 +207,46 @@ public class MainActivity extends GameActivity implements FaceLandmarkerHelper.L
Log.e(TAG, "onError: Face Error"); Log.e(TAG, "onError: Face Error");
} }
private ByteBuffer nativeBuffer = null;
float[] points = new float[480 * 3];
@Override @Override
public void onResults(FaceLandmarkerHelper.@NotNull ResultBundle resultBundle) { public void onResults(FaceLandmarkerHelper.@NotNull ResultBundle resultBundle) {
Log.e(TAG, "On Face Result"); FaceLandmarkerResult faceLandmarkerResult = resultBundle.getResult();
int height = resultBundle.getInputImageHeight();
int width = resultBundle.getInputImageWidth();
int bufferSize = 480 * 3 * 4;
if(nativeBuffer == null)
{
// 创建直接ByteBuffer(在native内存中)
nativeBuffer = ByteBuffer.allocateDirect(bufferSize);
nativeBuffer.order(ByteOrder.nativeOrder());
}
int index = 0;
// Iterate through each detected face
for (List<NormalizedLandmark> faceLandmarks : faceLandmarkerResult.faceLandmarks()) {
//should be 1
int arrayIndex = 0;
for (NormalizedLandmark p : faceLandmarks)
{
//Log.i(TAG, "Index" + index + " x:"+p.x() + " y:"+p.y() + " z:"+p.z());
points[arrayIndex++] = p.x();
points[arrayIndex++] = p.y();
points[arrayIndex++] = p.z();
index++;
}
}
// 转换为FloatBuffer并填充数据
FloatBuffer floatBuffer = nativeBuffer.asFloatBuffer();
floatBuffer.put(points);
floatBuffer.position(0);
passDataToNative(nativeBuffer, index, width, height);
} }
public native void passDataToNative(ByteBuffer buffer, int pointCount, int width, int height);
} }