完成新模型输入,发延时优化版本。
This commit is contained in:
@@ -104,7 +104,8 @@ class FaceLandmarkerHelper(
|
|||||||
.setMinTrackingConfidence(minFaceTrackingConfidence)
|
.setMinTrackingConfidence(minFaceTrackingConfidence)
|
||||||
.setMinFacePresenceConfidence(minFacePresenceConfidence)
|
.setMinFacePresenceConfidence(minFacePresenceConfidence)
|
||||||
.setNumFaces(maxNumFaces)
|
.setNumFaces(maxNumFaces)
|
||||||
.setOutputFaceBlendshapes(true)
|
.setOutputFaceBlendshapes(false)
|
||||||
|
.setOutputFacialTransformationMatrixes(false)
|
||||||
.setRunningMode(runningMode)
|
.setRunningMode(runningMode)
|
||||||
|
|
||||||
// The ResultListener and ErrorListener only use for LIVE_STREAM mode.
|
// The ResultListener and ErrorListener only use for LIVE_STREAM mode.
|
||||||
@@ -270,7 +271,7 @@ class FaceLandmarkerHelper(
|
|||||||
val detectionLatency = resultTime - timings.detectionStartTime
|
val detectionLatency = resultTime - timings.detectionStartTime
|
||||||
val captureToDetectionLatency = timings.detectionStartTime - timings.captureTime
|
val captureToDetectionLatency = timings.detectionStartTime - timings.captureTime
|
||||||
|
|
||||||
Log.d("TimeLatency",
|
Log.i("TimeLatency",
|
||||||
"总延时: ${totalLatency}ms | " +
|
"总延时: ${totalLatency}ms | " +
|
||||||
"预处理: ${preprocessLatency}ms | " +
|
"预处理: ${preprocessLatency}ms | " +
|
||||||
"检测: ${detectionLatency}ms | " +
|
"检测: ${detectionLatency}ms | " +
|
||||||
@@ -291,6 +292,9 @@ class FaceLandmarkerHelper(
|
|||||||
} else {
|
} else {
|
||||||
val finishTimeMs = SystemClock.uptimeMillis()
|
val finishTimeMs = SystemClock.uptimeMillis()
|
||||||
val inferenceTime = finishTimeMs - result.timestampMs()
|
val inferenceTime = finishTimeMs - result.timestampMs()
|
||||||
|
Log.i("TimeLatency",
|
||||||
|
"总延时: ${inferenceTime}ms | "
|
||||||
|
)
|
||||||
faceLandmarkerHelperListener?.onResults(
|
faceLandmarkerHelperListener?.onResults(
|
||||||
ResultBundle(
|
ResultBundle(
|
||||||
result,
|
result,
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ 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;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
public class MainActivity extends GameActivity implements FaceLandmarkerHelper.LandmarkerListener, CameraDataFetcher.CameraDataCallback {
|
public class MainActivity extends GameActivity implements FaceLandmarkerHelper.LandmarkerListener, CameraDataFetcher.CameraDataCallback {
|
||||||
private ProcessCameraProvider cameraProvider;
|
private ProcessCameraProvider cameraProvider;
|
||||||
@@ -179,19 +180,45 @@ public class MainActivity extends GameActivity implements FaceLandmarkerHelper.L
|
|||||||
|
|
||||||
|
|
||||||
imageAnalyzer.setAnalyzer(backgroundExecutor, new ImageAnalysis.Analyzer() {
|
imageAnalyzer.setAnalyzer(backgroundExecutor, new ImageAnalysis.Analyzer() {
|
||||||
|
private long lastCaptureTime = 0;
|
||||||
|
private int frameCount = 0;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void analyze(@NonNull ImageProxy image) {
|
public void analyze(@NonNull ImageProxy image) {
|
||||||
|
frameCount++;
|
||||||
|
long currentTime = System.currentTimeMillis();
|
||||||
try {
|
try {
|
||||||
long analyzeTime = SystemClock.elapsedRealtimeNanos();
|
long captureTimeNs = image.getImageInfo().getTimestamp();
|
||||||
long captureTime = image.getImageInfo().getTimestamp();
|
long analyzeTime = System.currentTimeMillis();
|
||||||
long latencyNs = analyzeTime - captureTime;
|
|
||||||
double latencyMs = latencyNs / 1_000_000.0;
|
// 简单直接的计算方法
|
||||||
|
long captureTimeMs = TimeUnit.NANOSECONDS.toMillis(captureTimeNs);
|
||||||
|
long latency = analyzeTime - captureTimeMs;
|
||||||
|
|
||||||
|
// 帧率计算
|
||||||
|
if (lastCaptureTime > 0) {
|
||||||
|
long frameInterval = captureTimeMs - lastCaptureTime;
|
||||||
|
double fps = 1000.0 / frameInterval;
|
||||||
|
|
||||||
|
if (frameCount % 10 == 0) { // 每30帧打印一次
|
||||||
|
Log.i("TimeLatency", String.format(
|
||||||
|
"Frame %d - Latency: %d ms, FPS: %.1f",
|
||||||
|
frameCount, latency, fps
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
lastCaptureTime = captureTimeMs;
|
||||||
|
|
||||||
Log.d("CameraLatency", String.format("Image capture to analyze latency: %.2f ms", latencyMs));
|
|
||||||
//Log.d("Camera", "Received image: " + image.getWidth() + "x" + image.getHeight());
|
|
||||||
processImageForVulkan(image);
|
processImageForVulkan(image);
|
||||||
|
if(frameCount %2 == 0)
|
||||||
|
{
|
||||||
detectFace(image);
|
detectFace(image);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
image.close();
|
||||||
|
}
|
||||||
} finally {
|
} finally {
|
||||||
//image.close(); // 确保在这里关闭
|
//image.close(); // 确保在这里关闭
|
||||||
//Log.d("Camera", "Image closed, ready for next frame");
|
//Log.d("Camera", "Image closed, ready for next frame");
|
||||||
|
|||||||
Reference in New Issue
Block a user