修复问题
This commit is contained in:
@@ -369,8 +369,11 @@ public class MediaTransferFlvByJavacv extends MediaTransfer implements Runnable
|
|||||||
long lastDetectionTime = 0;
|
long lastDetectionTime = 0;
|
||||||
List<Detection> currentDetections = Collections.emptyList(); // 当前显示的检测结果
|
List<Detection> currentDetections = Collections.emptyList(); // 当前显示的检测结果
|
||||||
|
|
||||||
// 避免递归和栈溢出的关键:不使用递归调用,使用循环
|
// 检测计数器和性能统计
|
||||||
// 避免过深的方法调用链
|
int totalDetections = 0;
|
||||||
|
int successfulDetections = 0;
|
||||||
|
long totalDetectionTime = 0;
|
||||||
|
|
||||||
for (; running && grabberStatus && recorderStatus; ) {
|
for (; running && grabberStatus && recorderStatus; ) {
|
||||||
try {
|
try {
|
||||||
if (transferFlag) {
|
if (transferFlag) {
|
||||||
@@ -428,10 +431,52 @@ public class MediaTransferFlvByJavacv extends MediaTransfer implements Runnable
|
|||||||
if (detectionMat != null && !detectionMat.empty()) {
|
if (detectionMat != null && !detectionMat.empty()) {
|
||||||
// 执行检测
|
// 执行检测
|
||||||
try {
|
try {
|
||||||
|
// 打印检测开始信息
|
||||||
|
log.info("===== 开始执行检测 [{}] =====", new java.text.SimpleDateFormat("HH:mm:ss.SSS").format(new java.util.Date()));
|
||||||
|
totalDetections++;
|
||||||
|
|
||||||
|
// 记录检测开始时间
|
||||||
|
long detectionStartTime = System.currentTimeMillis();
|
||||||
|
|
||||||
|
// 执行检测
|
||||||
currentDetections = detector.detect(detectionMat);
|
currentDetections = detector.detect(detectionMat);
|
||||||
|
|
||||||
|
// 计算检测耗时
|
||||||
|
long detectionTime = System.currentTimeMillis() - detectionStartTime;
|
||||||
|
totalDetectionTime += detectionTime;
|
||||||
|
successfulDetections++;
|
||||||
|
|
||||||
|
// 更新最后检测时间
|
||||||
lastDetectionTime = currentTime;
|
lastDetectionTime = currentTime;
|
||||||
latestDetections.set(currentDetections);
|
latestDetections.set(currentDetections);
|
||||||
|
|
||||||
|
// 打印检测结果
|
||||||
|
StringBuilder detectionInfo = new StringBuilder();
|
||||||
|
detectionInfo.append("\n===== 检测结果 =====\n");
|
||||||
|
detectionInfo.append("检测耗时: ").append(detectionTime).append("ms\n");
|
||||||
|
detectionInfo.append("检测目标数: ").append(currentDetections == null ? 0 : currentDetections.size()).append("\n");
|
||||||
|
|
||||||
|
if (currentDetections != null && !currentDetections.isEmpty()) {
|
||||||
|
detectionInfo.append("检测到的目标:\n");
|
||||||
|
for (int i = 0; i < currentDetections.size(); i++) {
|
||||||
|
Detection det = currentDetections.get(i);
|
||||||
|
detectionInfo.append(" ").append(i+1).append(". ");
|
||||||
|
detectionInfo.append("类型: ").append(det.cls());
|
||||||
|
detectionInfo.append(", 置信度: ").append(String.format("%.2f", det.conf()));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
detectionInfo.append("未检测到目标\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 打印检测统计
|
||||||
|
detectionInfo.append("\n检测统计:\n");
|
||||||
|
detectionInfo.append("总检测次数: ").append(totalDetections).append("\n");
|
||||||
|
detectionInfo.append("成功检测次数: ").append(successfulDetections).append("\n");
|
||||||
|
detectionInfo.append("平均检测时间: ").append(successfulDetections > 0 ? (totalDetectionTime / successfulDetections) : 0).append("ms\n");
|
||||||
|
detectionInfo.append("===== 检测结束 =====\n");
|
||||||
|
|
||||||
|
log.info(detectionInfo.toString());
|
||||||
|
|
||||||
// 窗口巡检回调
|
// 窗口巡检回调
|
||||||
if (windowMode && detectionListener != null &&
|
if (windowMode && detectionListener != null &&
|
||||||
currentJobId != null && currentDeviceId != null) {
|
currentJobId != null && currentDeviceId != null) {
|
||||||
@@ -443,7 +488,7 @@ public class MediaTransferFlvByJavacv extends MediaTransfer implements Runnable
|
|||||||
} catch (Exception ignore) {}
|
} catch (Exception ignore) {}
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.debug("检测异常: {}", e.getMessage());
|
log.error("检测异常: {}", e.getMessage(), e);
|
||||||
} finally {
|
} finally {
|
||||||
// 确保释放Mat
|
// 确保释放Mat
|
||||||
try {
|
try {
|
||||||
@@ -453,7 +498,7 @@ public class MediaTransferFlvByJavacv extends MediaTransfer implements Runnable
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.debug("检测流程异常: {}", e.getMessage());
|
log.error("检测流程异常: {}", e.getMessage(), e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user