| 
					
				 | 
			
			
				@@ -59,7 +59,7 @@ namespace o0.Project 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         float areaPercent => locateArea[locateIndex].size.x;         // 当前白色区域的占比 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         int areaSelected = -1;                                       // 选择哪个区域,顺序与Quadrilateral对应 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         readonly List<float> sumTemp = new List<float>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        readonly List<OrdinalQuadrilateral> quadTemp = new List<OrdinalQuadrilateral>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        readonly List<QuadrilateralInCamera> quadTemp = new List<QuadrilateralInCamera>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //public ScreenIdentification(WebCamTexture texture) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //{ 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -83,6 +83,7 @@ namespace o0.Project 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             Screen = new ScreenMap(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             OnLocateScreenEnter += () => Application.targetFrameRate = 30;      // 固定识别的帧率,确保摄像机拍到正确的画面 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             OnLocateScreenEnd += () => Application.targetFrameRate = 60; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            OnLocateScreenEnd += ScreenLocate.Main.OnLocateScreenEnd; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         public void SetScreenQuad(QuadrilateralInCamera quad) => Screen.QuadInCamera = quad; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -106,6 +107,7 @@ namespace o0.Project 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if (target == null) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 return false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Debug.Log($"<color=aqua>[ScreenIdentification] 选择已识别到的屏幕({Enum.GetName(typeof(ScreenLocate.ScreenIdentificationTag), tag)}), {target}</color>"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             SetScreenQuad(target); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             return true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -117,7 +119,7 @@ namespace o0.Project 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 ScreenLocate.Main.CameraSize = new Geometry2D.Vector<int>(ScreenLocate.Main.DebugScreenImages[0].width, ScreenLocate.Main.DebugScreenImages[0].height); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 DebugImage(ScreenLocate.Main.DebugScreenImages); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                Screen.QuadInCamera = new QuadrilateralInCamera(quadTemp[0], new Vector(ScreenLocate.Main.DebugScreenImages[0].width, ScreenLocate.Main.DebugScreenImages[0].height)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Screen.QuadInCamera = quadTemp[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 ScreenLocate.SetScreen(null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 ScreenLocate.Main.ShowScreen(ScreenLocate.Main.ScreenQuad, Screen.QuadInCamera); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 delay = 0; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -166,9 +168,7 @@ namespace o0.Project 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #endif 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if (quadTemp.Count > 0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                var quad = quadTemp[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                ScreenLocate.Main.ShowScreen(ScreenLocate.Main.outputRawImages[4].transform.GetChild(0) as RectTransform, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    new QuadrilateralInCamera(quad, images[0].Size().o0Vector())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ScreenLocate.Main.ShowScreen(ScreenLocate.Main.outputRawImages[4].transform.GetChild(0) as RectTransform, quadTemp[0]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 // 透视变换 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 //                var srcWidth = LocateLightedRedTex.width; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -319,8 +319,8 @@ namespace o0.Project 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 else if (quadTemp.Count == 1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    Screen.QuadInCamera = new QuadrilateralInCamera(quadTemp[0], new Vector(Size.x, Size.y)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    Debug.Log($"<color=aqua>[ScreenIdentification] 拟合成功,Quad: {Screen.QuadInCamera.QuadString}____{Screen.QuadInCamera.SizeString}</color>"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    Screen.QuadInCamera = quadTemp[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    Debug.Log($"<color=aqua>[ScreenIdentification] 拟合成功,识别数据: {Screen.QuadInCamera}</color>"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -335,7 +335,7 @@ namespace o0.Project 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         foreach (var q in quadTemp) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            baseVertex += q[areaSelected]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            baseVertex += q.Quad[areaSelected]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         baseVertex /= quadTemp.Count; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -351,7 +351,7 @@ namespace o0.Project 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             var yValue = new List<Vector>() { baseVertex }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             foreach (var q in quadTemp) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                yValue.Add(q[i]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                                yValue.Add(q.Quad[i]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             var lr = LinerRegression1D.Fit(2, xValue.ToArray(), yValue.ToArray()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                             rs += lr.RSquared / 3; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -786,17 +786,17 @@ namespace o0.Project 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if (QuadSemiAuto == null && QuadAuto == null && Screen.QuadInCamera != null)     // 如果可能,回退到上一个screen 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 Debug.Log("<color=aqua>[ScreenIdentification] 本次识别失败,回退到上次的识别结果</color>"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                quadTemp.Add(Screen.QuadInCamera.Quad); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                quadTemp.Add(Screen.QuadInCamera); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             else if (QuadSemiAuto != null) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 Debug.Log("<color=aqua>[ScreenIdentification] 识别到四边形</color>"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                quadTemp.Add(QuadSemiAuto.Quad); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                quadTemp.Add(QuadSemiAuto); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             else if (QuadAuto != null) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 Debug.Log("<color=aqua>[ScreenIdentification] 识别到四边形</color>"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                quadTemp.Add(QuadAuto.Quad); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                quadTemp.Add(QuadAuto); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             #region 绘制 output texture 
			 |