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