Jelajahi Sumber

fix bug-修改分辨率的问题,添加日志

ZIM 1 tahun lalu
induk
melakukan
29f03152ef

+ 4 - 1
Assets/BowArrow/Scripts/Expand/SB_EventSystem.cs

@@ -31,7 +31,10 @@ public class SB_EventSystem : MonoBehaviour
 
     void Update() {
         //mouseTest.Update();
-        UpdateMoveSimulateMouse();
+        if (!(ScreenLocate.Main != null && ScreenLocate.Main.DebugOnZIMDemo))
+        {
+            UpdateMoveSimulateMouse();
+        }
     }
 
     [SerializeField] public MouseConfirm mouseConfirm;

+ 12 - 12
Assets/InfraredProject/WebCamera/Script/ZIM/InfraredLocate/ScreenIdentification.cs

@@ -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

+ 1 - 1
Assets/InfraredProject/WebCamera/Script/ZIM/InfraredLocate/ScreenMap.cs

@@ -59,7 +59,7 @@ namespace ZIM.Unity
 
                 var aabb = quad.AABBRect();
                 QuadRect = new Rect(aabb.Item1.x, aabb.Item1.y, aabb.Item2.x - aabb.Item1.x, aabb.Item2.y - aabb.Item1.y);
-                Debug.Log("Complete Screen Identification");
+                Debug.Log("[ScreenMap] 应用屏幕识别数据");
                 //Debug.Log("QuadRect:" + QuadRect);
 
                 Active = true;

+ 1 - 0
Assets/InfraredProject/WebCamera/Script/ZIM/Other/QuadrilateralInCamera.cs

@@ -49,6 +49,7 @@ namespace ZIM.Unity
 
         public string SizeString => $"({CameraSize.x}, {CameraSize.y})";
         public string QuadString => $"[({Quad.A.x}, {Quad.A.y}), ({Quad.B.x}, {Quad.B.y}), ({Quad.C.x}, {Quad.C.y}), ({Quad.D.x}, {Quad.D.y})]";
+        public override string ToString() => $"CameraSize: {SizeString}, Vertices: {QuadString}";
 
         // 需要标准化的坐标(即数值范围0-1)时使用,会自动根据当前的CameraSize转换
         private List<Vector> ScreenVertexListNormalized

+ 25 - 2
Assets/InfraredProject/WebCamera/Script/ZIM/ScreenLocate.cs

@@ -714,7 +714,15 @@ public partial class ScreenLocate : MonoBehaviour
         //}
         //UpdateInputs();
 
-
+        if (DebugOnZIMDemo)
+        {
+            if (Input.GetKeyDown(KeyCode.Z))
+                SelectScreenAfterLocate(ScreenIdentificationTag.Manual);
+            if (Input.GetKeyDown(KeyCode.X))
+                SelectScreenAfterLocate(ScreenIdentificationTag.SemiAuto);
+            if (Input.GetKeyDown(KeyCode.C))
+                SelectScreenAfterLocate(ScreenIdentificationTag.Auto);
+        }
     }
 
     private bool RefreshCameraSize()
@@ -722,7 +730,7 @@ public partial class ScreenLocate : MonoBehaviour
         var sizeNew = new o0.Geometry2D.Vector<int>((int)getUVCCameraInfoSize.x, (int)getUVCCameraInfoSize.y);
         if (sizeNew != CameraSize) 
         {
-            Debug.Log($"<color=aqua>[ScreenLocate] 分辨率变化,刷新分辨率\r\n是否有屏幕数据: {screenIdentification.Screen.QuadInCamera != null}\r\n是否有手动数据: {screenIdentification.QuadManual != null}</color>");
+            Debug.Log($"<color=aqua>[ScreenLocate] 分辨率变化,刷新分辨率(from {CameraSize.x}×{CameraSize.y} to {sizeNew.x}×{sizeNew.y}), 是否有屏幕数据: {screenIdentification.Screen.QuadInCamera != null}, 是否有手动数据: {screenIdentification.QuadManual != null}</color>");
             // 同步相机分辨率
             CameraSize = sizeNew;
             var sizeNewFloat = getUVCCameraInfoSize.o0Vector();
@@ -815,6 +823,13 @@ public partial class ScreenLocate : MonoBehaviour
         //CreateUVCTexture2DIfNeeded();
         // log1 = true;
         // log2 = true;
+
+        if (DebugOnZIMDemo)
+        {
+            var webCam = GetComponent<ZIMWebCamera>();
+            webCam.AdjustResolution(1920, 1080);
+            mUVCCameraInfo.SetSize(webCam.webCamTexture.width, webCam.webCamTexture.height);
+        }
     }
 
     public void OnLocateScreenEnd()
@@ -823,6 +838,14 @@ public partial class ScreenLocate : MonoBehaviour
         // 记录本次屏幕识别的分辨率(目前采用高分辨率做识别,识别结束后调回低分辨率)
         //InfraredDemoMain?.SetResolutionNew(DefaultResolutionIndex);
         Resize((int)EnterResolution.x, (int)EnterResolution.y);
+
+        if (DebugOnZIMDemo)
+        {
+            var webCam = GetComponent<ZIMWebCamera>();
+            GetComponent<ZIMWebCamera>().AdjustResolution(160, 120);
+            mUVCCameraInfo.SetSize(webCam.webCamTexture.width, webCam.webCamTexture.height);
+        }
+
     }
 
     /**

+ 8 - 0
Assets/InfraredProject/WebCamera/Script/ZIM/ZIMUnity/ZIMWebCamera.cs

@@ -65,6 +65,14 @@ public class ZIMWebCamera : MonoBehaviour
         return y * width + x;
     }
 
+    public void AdjustResolution(int width, int height)
+    {
+        _webCamTexture.Stop();
+        _webCamTexture = new WebCamTexture(_webCamTexture.deviceName, width, height);
+        _webCamTexture.Play();
+        Debug.Log("[ZIMWebCamera] 分辨率调整: " + _webCamTexture.width + "×" + _webCamTexture.height);
+    }
+
     public void OnClick_Open()
     {
 

+ 2 - 2
Assets/InfraredProject/WebCamera/zimWebCamera.unity

@@ -5605,8 +5605,8 @@ MonoBehaviour:
   m_Name: 
   m_EditorClassIdentifier: 
   cameraIndex: 0
-  width: 1080
-  height: 720
+  width: 100
+  height: 100
   fps: 30
   rawImage: {fileID: 2101632897}
   rawImageSize: {fileID: 681002959}

File diff ditekan karena terlalu besar
+ 852 - 852
Assets/SmartBow/Unity-Logs-Viewer/Reporter/Reporter.cs


Beberapa file tidak ditampilkan karena terlalu banyak file yang berubah dalam diff ini