轮胎外观检测添加思谋语义分割模型检测工具
LB_SmartVisionCameraDevice/PHM6000/PHM6000Sensor.cs
@@ -692,25 +692,9 @@
            var config = GetConfig();
            PARAM_BAR pARAM_BAR = new PARAM_BAR()
            {
                Height = config.BarHeight,
                Width = config.BarWidth,
                HoleCount = config.BarHoleCount,
                HoleDiameter = config.BarHoleDiameter,
                HoleDistance = config.BarHoleDistance,
                DOF = config.BarDOF,
            };
            SENSOR_POSITION stPosition = new SENSOR_POSITION
            {
                IsReverse = config.IsReverse,
                IsOpposite = config.IsOpposite,
                fStdDistance = config.fStdDistance,
                fXCenter = config.fXCenter,
                x = config.x,
                y = config.y,
                z = config.z,
                xAngle = config.xAngle,
                yAngle = config.yAngle,
                zAngle = config.zAngle
            };
            SysCalibration.SetSensorPosition(CaliEntry, Index, stPosition);
            var roi = GetROICaliThkiness(roiTxt, config);
@@ -728,25 +712,9 @@
            var config = GetConfig();
            PARAM_BAR param_bar = new PARAM_BAR()
            {
                Height = config.BarHeight,
                Width = config.BarWidth,
                HoleCount = config.BarHoleCount,
                HoleDiameter = config.BarHoleDiameter,
                HoleDistance = config.BarHoleDistance,
                DOF = config.BarDOF,
            };
            SENSOR_POSITION stPosition = new SENSOR_POSITION
            {
                IsReverse = config.IsReverse,
                IsOpposite = config.IsOpposite,
                fStdDistance = config.fStdDistance,
                fXCenter = config.fXCenter,
                x = config.x,
                y = config.y,
                z = config.z,
                xAngle = config.xAngle,
                yAngle = config.yAngle,
                zAngle = config.zAngle
            };
            SysCalibration.SetSensorPosition(CaliEntry, Index, stPosition);
            var roi = GetROICaliThkiness(roiTxt, config);
@@ -767,16 +735,6 @@
            var config = GetConfig();
            SENSOR_POSITION sENSOR_POSITION = new SENSOR_POSITION
            {
                IsReverse = config.IsReverse,
                IsOpposite = config.IsOpposite,
                fStdDistance = config.fStdDistance,
                fXCenter = config.fXCenter,
                x = config.x,
                y = config.y,
                z = config.z,
                xAngle = config.xAngle,
                yAngle = config.yAngle,
                zAngle = config.zAngle
            };
            SysCalibration.SetSensorPosition(CaliEntry, Index, sENSOR_POSITION);//设置传感器位置
            SysCalibration.SetRate(CaliEntry, Index, config.XAxisResolution / 1000, config.YResolution / 1000);
@@ -823,272 +781,12 @@
            });
            return r;
        }
        public async Task<float[,]> MeasureOutLine​Thickness​()
        {
            var result = await Task.Run(() =>
            {
                var config = GetConfig();
                SetTargetParam(config);//设置目标测量参数
                float[,] datas = new float[config.nPartitionX, config.nPartitionY];
                data = new float[config.nPartitionX * config.nPartitionY];
                int number = 0;
                for (int i = 0; i < config.nPartitionX; i++)
                {
                    for (int j = 0; j < config.nPartitionY; j++)
                    {
                        number++;
                        float measuredValue = SysCalibration.MeasureRoiHigh(CaliEntry, Index, number);
                        // 保留3位小数
                        datas[i, j] = (float)Math.Round(measuredValue, 3);
                    }
                }
                //lBCMap = SysCalibration.GetDepthMap(CaliEntry, Index, 4);
                return datas;
            });
            return result;
        }
        //二维图标定
        public async Task StartLiaghtAndDeepCali(CaliModel caliModel)
        {
            //LBLineDataZA lBLineDataZA = new LBLineDataZA();
            SENSOR_POSITION sENSOR_POSITION = new SENSOR_POSITION
            {
                IsReverse = caliModel.IsReverse,
                IsOpposite = caliModel.IsOpposite,
                fStdDistance = caliModel.fStdDistance,
                fXCenter = caliModel.fXCenter,
                x = caliModel.x,
                y = caliModel.y,
                z = caliModel.z,
                xAngle = caliModel.xAngle,
                yAngle = caliModel.yAngle,
                zAngle = caliModel.zAngle,
            };
            var config = GetConfig();
            PARAM_BOARD pARAM_BOARD = new PARAM_BOARD()
            {
                //Height = config.Height,
                //Width = config.Width,
                //HoleDiameter = config.HoleDiameter,
                //HoleDistance = config.HoleDistance,
                //LocationHoleX1 = config.LocationHoleX1,
                //LocationHoleX2 = config.LocationHoleX2,
                //LocationHoleY1 = config.LocationHoleY1,
                //LocationHoleY2 = config.LocationHoleY2,
            };
            SysCalibration.SetSensorPosition(CaliEntry, Index, sENSOR_POSITION);//设置传感器位置
            var roi = caliModel.Plane.Split(',');
            var roi1 = GetROI(caliModel.Plane, config);
            var roi2 = GetROI(caliModel.Hole1, config);
            var roi3 = GetROI(caliModel.Hole2, config);
            var roi4 = GetROI(caliModel.Hole3, config);
            SysCalibration.SetRate(CaliEntry, Index, config.XAxisResolution / 1000, config.YResolution / 1000);
            SysCalibration.SetFlatROI(CaliEntry, Index, roi1, true);
            SysCalibration.SetHoleROI(CaliEntry, Index, 0, roi2, true);
            SysCalibration.SetHoleROI(CaliEntry, Index, 1, roi3, true);
            SysCalibration.SetHoleROI(CaliEntry, Index, 2, roi4, true);
            SysCalibration.SetBoardParameter(CaliEntry, pARAM_BOARD);
            SysCalibration.ClearData(CaliEntry, Index);//清除以前数据
            await Task.Run(() =>
            {
                //修改此段代码
                //foreach (var item in GetLineDatas())
                unsafe
                {
                    IntPtr pdata = IntPtr.Zero;
                    //if (sline + eline != 0 && eline > sline)
                    //{
                    //    for (ulong i = sline; i < eline; i++)
                    //    {
                    //        bool useEncoder = false;
                    //        if (config.LineScanTriggerSource == EnumLineScanTriggerSource.编码器) useEncoder = true;
                    //        //使用了引用,什么时候完成使用?如果长时间,代码会有内存风险
                    //        pdata = GetLineDataByIndex(Entry, i);
                    //        if (pdata == IntPtr.Zero)
                    //            break;
                    //        SysCalibration.AddLineDataArray(CaliEntry, Index, pdata, useEncoder, 1);//最后个参数是什么意思
                    //    }
                    //}
                    //else
                    {
                        ulong nindex = 0;
                        while ((pdata = PHM6000Profiler.GetLineDataByIndex(Entry, nindex)) != IntPtr.Zero)
                        {
                            bool useEncoder = false;
                            if (config.LineScanTriggerSource == EnumLineScanTriggerSource.编码器) useEncoder = true;
                            //使用了引用,什么时候完成使用?如果长时间,代码会有内存风险
                            SysCalibration.AddLineDataArray(CaliEntry, Index, pdata, useEncoder, 1);//最后个参数是什么意思
                            nindex++;
                        }
                    }
                }
                SysCalibration.AlignmentMovingFlat(CaliEntry, Index);//下次打开程序时可能会序号错误
                //SysCalibration.SystemCalibration(caliEntry);//error没有真实的孔,就会卡进程
            });
        }
        //测量厚度
        public async Task<float> MeasureDistance()
        {
            var config = GetConfig();
            SENSOR_POSITION sENSOR_POSITION = new SENSOR_POSITION
            {
                //IsReverse = CaliModel.IsReverse,
                //IsOpposite = CaliModel.IsOpposite,
                //fStdDistance = CaliModel.fStdDistance,
                //fXCenter = CaliModel.fXCenter,
                //x = CaliModel.x,
                //y = CaliModel.y,
                //z = CaliModel.z,
                //xAngle = CaliModel.xAngle,
                //yAngle = CaliModel.yAngle,
                //zAngle = CaliModel.zAngle,
            };
            SysCalibration.SetSensorPosition(CaliEntry, Index, sENSOR_POSITION);//设置传感器位置
            SysCalibration.SetRate(CaliEntry, Index, config.XAxisResolution / 1000, config.YResolution / 1000);
            SysCalibration.ClearData(CaliEntry, Index);//清除以前数据
            var r = await Task.Run<float>(() =>
            {
                //输入新数据
                unsafe
                {
                    IntPtr pdata = IntPtr.Zero;
                    if (sline + eline != 0 && eline > sline)
                    {
                        for (ulong i = sline; i < eline; i++)
                        {
                            bool useEncoder = false;
                            if (config.LineScanTriggerSource == EnumLineScanTriggerSource.编码器) useEncoder = true;
                            //使用了引用,什么时候完成使用?如果长时间,代码会有内存风险
                            pdata = PHM6000Profiler.GetLineDataByIndex(Entry, i);
                            if (pdata == IntPtr.Zero)
                                break;
                            SysCalibration.AddLineDataArray(CaliEntry, Index, pdata, useEncoder, 1);//最后个参数是什么意思
                        }
                    }
                    else
                    {
                        ulong nindex = 0;
                        while ((pdata = PHM6000Profiler.GetLineDataByIndex(Entry, nindex)) != IntPtr.Zero)
                        {
                            bool useEncoder = false;
                            if (config.LineScanTriggerSource == EnumLineScanTriggerSource.编码器) useEncoder = true;
                            //使用了引用,什么时候完成使用?如果长时间,代码会有内存风险
                            SysCalibration.AddLineDataArray(CaliEntry, Index, pdata, useEncoder, 1);//最后个参数是什么意思
                            nindex++;
                        }
                    }
                }
                SetTargetParam(config);//设置目标测量参数
                //var result = SysCalibration.MeasureDistance(CaliEntry);
                float measuredValue = SysCalibration.MeasureTargetHigh(CaliEntry, Index);
                var result = (float)Math.Round(measuredValue, 3);
                return result;
            });
            return r;
        }
        public static ulong sline = 0;
        public static ulong eline = 0;
        public static IntPtr lBCMap = IntPtr.Zero;
        public static float[] data = null;
        //测量凹凸
        public async Task<float[,]> Measure​Uneven​()
        {
            var result = await Task.Run(() =>
            {
                var config = GetConfig();
                //SENSOR_POSITION sENSOR_POSITION = new SENSOR_POSITION
                //{
                //    IsReverse = CaliModel.IsReverse,
                //    IsOpposite = CaliModel.IsOpposite,
                //    fStdDistance = CaliModel.fStdDistance,
                //    fXCenter = CaliModel.fXCenter,
                //    x = CaliModel.x,
                //    y = CaliModel.y,
                //    z = CaliModel.z,
                //    xAngle = CaliModel.xAngle,
                //    yAngle = CaliModel.yAngle,
                //    zAngle = CaliModel.zAngle,
                //};
                //SysCalibration.SetSensorPosition(CaliEntry, Index, sENSOR_POSITION);//设置传感器位置
                //SysCalibration.SetRate(CaliEntry, Index, config.XAxisResolution / 1000, config.YResolution / 1000);
                //SysCalibration.ClearData(CaliEntry, Index);//清除以前数据
                ////输入新数据
                //unsafe
                //{
                //    IntPtr pdata = IntPtr.Zero;
                //    if (sline + eline != 0 && eline > sline)
                //    {
                //        for (ulong i = sline; i < eline; i++)
                //        {
                //            bool useEncoder = false;
                //            if (config.LineScanTriggerSource == EnumLineScanTriggerSource.编码器) useEncoder = true;
                //            //使用了引用,什么时候完成使用?如果长时间,代码会有内存风险
                //            pdata = GetLineDataByIndex(Entry, i);
                //            if (pdata == IntPtr.Zero)
                //                break;
                //            SysCalibration.AddLineDataArray(CaliEntry, Index, pdata, useEncoder, 1);//最后个参数是什么意思
                //        }
                //    }
                //    else
                //    {
                //        ulong nindex = 0;
                //        while ((pdata = GetLineDataByIndex(Entry, nindex)) != IntPtr.Zero)
                //        {
                //            bool useEncoder = false;
                //            if (config.LineScanTriggerSource == EnumLineScanTriggerSource.编码器) useEncoder = true;
                //            //使用了引用,什么时候完成使用?如果长时间,代码会有内存风险
                //            SysCalibration.AddLineDataArray(CaliEntry, Index, pdata, useEncoder, 1);//最后个参数是什么意思
                //            nindex++;
                //        }
                //    }
                //}
                SetTargetParam(config);//设置目标测量参数
                float[,] datas = new float[config.nPartitionX, config.nPartitionY];
                data = new float[config.nPartitionX * config.nPartitionY];
                int number = 0;
                for (int i = 0; i < config.nPartitionX; i++)
                {
                    for (int j = 0; j < config.nPartitionY; j++)
                    {
                        number++;
                        float measuredValue = SysCalibration.MeasureRoiHigh(CaliEntry, Index, number);
                        // 保留3位小数
                        datas[i, j] = (float)Math.Round(measuredValue, 3);
                    }
                }
                //lBCMap = SysCalibration.GetDepthMap(CaliEntry, Index, 4);
                return datas;
            });
            return result;
        }
        LB_ROI GetROI(string s, PHM6000SensorConfig config)