From 98c0775fe3b61a37d90dd5756287f385a311adf0 Mon Sep 17 00:00:00 2001
From: C3204 <zhengyabo@lanpucloud.cn>
Date: 星期三, 15 四月 2026 20:09:49 +0800
Subject: [PATCH] 验证3D相机亮度图无法获取
---
LB_VisionProcesses/Processes/TyreCounter/TyreStatistics.cs | 266 +++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 266 insertions(+), 0 deletions(-)
diff --git a/LB_VisionProcesses/Processes/TyreCounter/TyreStatistics.cs b/LB_VisionProcesses/Processes/TyreCounter/TyreStatistics.cs
new file mode 100644
index 0000000..6e1950c
--- /dev/null
+++ b/LB_VisionProcesses/Processes/TyreCounter/TyreStatistics.cs
@@ -0,0 +1,266 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+
+namespace LB_VisionProcesses.Processes
+{
+ /// <summary>
+ /// 杞儙鍒ゅ畾瑙勫垯
+ /// </summary>
+ public enum TyreJudgeRule
+ {
+ /// <summary>
+ /// 浠讳竴NG鍒欐暣鑳嶯G
+ /// </summary>
+ AnyNG,
+
+ /// <summary>
+ /// 鍏ㄩ儴OK鎵嶆暣鑳嶰K
+ /// </summary>
+ AllOK,
+
+ /// <summary>
+ /// 澶氭暟琛ㄥ喅锛堣秴杩囧崐鏁癘K鍒橭K锛�
+ /// </summary>
+ MajorityVote
+ }
+
+ /// <summary>
+ /// 杞儙璁℃暟缁撴灉
+ /// </summary>
+ public class TyreCountResult
+ {
+ /// <summary>
+ /// 鏄惁瀹屾垚涓�涓疆鑳�
+ /// </summary>
+ public bool IsTyreComplete { get; set; }
+
+ /// <summary>
+ /// 杞儙ID
+ /// </summary>
+ public int TyreID { get; set; }
+
+ /// <summary>
+ /// 杞儙鏁翠綋缁撴灉
+ /// </summary>
+ public bool TyreResult { get; set; }
+
+ /// <summary>
+ /// 鍚勫浘鍍忕粨鏋滃垪琛�
+ /// </summary>
+ public List<bool> ImageResults { get; set; } = new List<bool>();
+
+ /// <summary>
+ /// 褰撳墠鍥惧儚搴忓彿锛�1~n锛�
+ /// </summary>
+ public int CurrentImageIndex { get; set; }
+
+ /// <summary>
+ /// 娑堟伅
+ /// </summary>
+ public string Message { get; set; }
+ }
+
+ /// <summary>
+ /// 杞儙缁熻鍣� - 鐢ㄤ簬绠$悊杞儙绾у埆鐨勮鏁板拰缁熻
+ /// </summary>
+ public class TyreStatistics
+ {
+ #region 閰嶇疆鍙傛暟
+
+ /// <summary>
+ /// 姣忓紶杞儙鎵�闇�鍥惧儚鏁帮紙榛樿8寮狅級
+ /// </summary>
+ public int ImagesPerTyre { get; set; } = 8;
+
+ /// <summary>
+ /// 鍒ゅ畾瑙勫垯
+ /// </summary>
+ public TyreJudgeRule JudgeRule { get; set; } = TyreJudgeRule.AnyNG;
+
+ #endregion
+
+ #region 缁熻鏁版嵁
+
+ /// <summary>
+ /// 杞儙鎬绘暟
+ /// </summary>
+ public int TyreTotal => TyreOK + TyreNG;
+
+ /// <summary>
+ /// 杞儙OK璁℃暟
+ /// </summary>
+ public int TyreOK { get; set; }
+
+ /// <summary>
+ /// 杞儙NG璁℃暟
+ /// </summary>
+ public int TyreNG { get; set; }
+
+ /// <summary>
+ /// 褰撳墠杞儙ID锛堜粠1寮�濮嬶級
+ /// </summary>
+ public int CurrentTyreID { get; set; } = 1;
+
+ /// <summary>
+ /// 褰撳墠杞儙鐨勫浘鍍忓簭鍙凤紙0~ImagesPerTyre-1锛�
+ /// </summary>
+ public int CurrentImageIndex { get; set; } = 0;
+
+ /// <summary>
+ /// 褰撳墠杞儙鐨勫悇鍥惧儚缁撴灉
+ /// </summary>
+ public List<bool> CurrentTyreResults { get; set; } = new List<bool>();
+
+ /// <summary>
+ /// 褰撳墠杞儙鐨勫悇鍥惧儚SN
+ /// </summary>
+ public List<string> CurrentTyreImageSNs { get; set; } = new List<string>();
+
+ /// <summary>
+ /// 杞儙鑹搧鐜�
+ /// </summary>
+ public double TyreRateOK => TyreTotal > 0 ? (TyreOK / (double)TyreTotal) * 100 : 0;
+
+ #endregion
+
+ #region 鏋勯�犳柟娉�
+
+ public TyreStatistics() { }
+
+ public TyreStatistics(int imagesPerTyre, TyreJudgeRule judgeRule = TyreJudgeRule.AnyNG)
+ {
+ ImagesPerTyre = imagesPerTyre;
+ JudgeRule = judgeRule;
+ }
+
+ #endregion
+
+ #region 鏍稿績鏂规硶
+
+ /// <summary>
+ /// 娣诲姞鍥惧儚妫�娴嬬粨鏋�
+ /// </summary>
+ /// <param name="isOK">鍥惧儚妫�娴嬬粨鏋�</param>
+ /// <param name="imageSN">鍥惧儚搴忓垪鍙凤紙鍙�夛級</param>
+ /// <returns>杞儙璁℃暟缁撴灉</returns>
+ public TyreCountResult AddImageResult(bool isOK, string imageSN = null)
+ {
+ // 娣诲姞鍒板綋鍓嶈疆鑳庣粨鏋滃垪琛�
+ CurrentTyreResults.Add(isOK);
+ CurrentTyreImageSNs.Add(imageSN);
+ CurrentImageIndex++;
+
+ var result = new TyreCountResult
+ {
+ CurrentImageIndex = CurrentImageIndex,
+ IsTyreComplete = false,
+ Message = $"褰撳墠杞儙绗� {CurrentImageIndex}/{ImagesPerTyre} 寮犲浘鍍�"
+ };
+
+ // 妫�鏌ユ槸鍚﹀畬鎴愪竴涓疆鑳�
+ if (CurrentImageIndex >= ImagesPerTyre)
+ {
+ // 璁$畻杞儙鏁翠綋缁撴灉
+ bool tyreResult = CalculateTyreResult();
+
+ // 鏇存柊缁熻
+ if (tyreResult)
+ TyreOK++;
+ else
+ TyreNG++;
+
+ // 鏋勫缓瀹屾垚缁撴灉
+ result.IsTyreComplete = true;
+ result.TyreID = CurrentTyreID;
+ result.TyreResult = tyreResult;
+ result.ImageResults = new List<bool>(CurrentTyreResults);
+ result.Message = $"瀹屾垚杞儙 #{CurrentTyreID}锛岀粨鏋�: {(tyreResult ? "OK" : "NG")}";
+
+ // 閲嶇疆褰撳墠杞儙鏁版嵁
+ ResetCurrentTyre();
+ }
+
+ return result;
+ }
+
+ /// <summary>
+ /// 璁$畻杞儙鏁翠綋缁撴灉
+ /// </summary>
+ private bool CalculateTyreResult()
+ {
+ if (CurrentTyreResults.Count == 0)
+ return true;
+
+ switch (JudgeRule)
+ {
+ case TyreJudgeRule.AnyNG:
+ // n寮犱腑浠讳竴NG鍒欐暣鑳嶯G
+ return !CurrentTyreResults.Any(r => !r);
+
+ case TyreJudgeRule.AllOK:
+ // 鍏ㄩ儴OK鎵嶆暣鑳嶰K锛堜笌AnyNG鐩稿悓锛�
+ return CurrentTyreResults.All(r => r);
+
+ case TyreJudgeRule.MajorityVote:
+ // 澶氭暟琛ㄥ喅锛氳秴杩囧崐鏁癘K鍒橭K
+ int okCount = CurrentTyreResults.Count(r => r);
+ return okCount > (CurrentTyreResults.Count / 2.0);
+
+ default:
+ return !CurrentTyreResults.Any(r => !r);
+ }
+ }
+
+ /// <summary>
+ /// 閲嶇疆褰撳墠杞儙鏁版嵁
+ /// </summary>
+ private void ResetCurrentTyre()
+ {
+ CurrentTyreID++;
+ CurrentImageIndex = 0;
+ CurrentTyreResults.Clear();
+ CurrentTyreImageSNs.Clear();
+ }
+
+ /// <summary>
+ /// 閲嶇疆鎵�鏈夌粺璁�
+ /// </summary>
+ public void Reset()
+ {
+ TyreOK = 0;
+ TyreNG = 0;
+ CurrentTyreID = 1;
+ ResetCurrentTyre();
+ }
+
+ /// <summary>
+ /// 娓呯┖褰撳墠杞儙锛堢敤浜庡紓甯告儏鍐碉級
+ /// </summary>
+ public void ClearCurrentTyre()
+ {
+ ResetCurrentTyre();
+ }
+
+ /// <summary>
+ /// 鑾峰彇褰撳墠杩涘害淇℃伅
+ /// </summary>
+ public string GetProgressInfo()
+ {
+ if (ImagesPerTyre <= 1)
+ return $"杞儙 #{CurrentTyreID} (3D妯″紡)";
+
+ return $"杞儙 #{CurrentTyreID} - 绗� {CurrentImageIndex}/{ImagesPerTyre} 寮�";
+ }
+
+ /// <summary>
+ /// 鑾峰彇缁熻淇℃伅瀛楃涓�
+ /// </summary>
+ public string GetStatisticsInfo()
+ {
+ return $"杞儙鎬绘暟: {TyreTotal}, OK: {TyreOK}, NG: {TyreNG}, 鑹搧鐜�: {TyreRateOK:F2}%";
+ }
+
+ #endregion
+ }
+}
--
Gitblit v1.9.3