Exemple #1
0
        private async void InitCameraAndInspector()
        {
            if (MachineConfig.MV_SimulationAcquisitionEnabled)
            {
                _camera = new SimCamera(MachineConfigProvider.MachineConfig.MV_SimulationImageFileNames);
            }
            else
            {
                _camera = new JaiCamera();
            }

            if (!MachineConfig.MV_SimulationInspectorEnabled)
            {
                _inspectionSchema     = InspectionController.GetInspectionSchema();
                _inspectionController = new InspectionController();
            }

            bool isSuccessful;

            isSuccessful = await Task.Run(() => _camera.Init());

            if (!isSuccessful)
            {
                throw new Exception("Camera cannot init");
            }
        }
        private void StartButton_OnClick(object sender, RoutedEventArgs e)
        {
            Save();

            var ret = MessageBox.Show("Are you sure to start? ", "Warning", MessageBoxButton.YesNo);

            if (ret != MessageBoxResult.Yes)
            {
                return;
            }



            List <string> workedDir = new List <string>();

            foreach (var directory in Directories)
            {
                if (string.IsNullOrEmpty(directory.DirectoryPath))
                {
                    //MessageBox.Show("ImageDir is null: " + directory.DirectoryPath);
                    continue;
                }

                workedDir.Add(directory.DirectoryPath);

                // Init
                InspectionSchema schema = null;

                try
                {
                    if (!File.Exists(InspectionSchemaTextBox.Text))
                    {
                        MessageBox.Show("InspectionSchema file is not exist!");
                        return;
                    }

                    //                schema = InspectionSchemaTextBox.Text.LoadFromFile();
                    //schema = InspectionSchemaExtensions.LoadFromFile(InspectionSchemaTextBox.Text);
                    schema = InspectionController.GetInspectionSchema();
                }
                catch (Exception exception)
                {
                    MessageBox.Show("InspectionSchema loading error!");
                    return;
                }

                Run(directory.DirectoryPath, schema.DeepClone());
            }

            string dirs = string.Empty;

            foreach (var dir in workedDir)
            {
                dirs += dir + "\n";
            }

            MessageBox.Show("Directories exported:\n\n" + dirs);
        }
Exemple #3
0
        public bool Init()
        {
            _schema = GetInspectionSchema();

            switch (_schema.InspectorName)
            {
            case "Sim":
            {
                var sim = new SimGeneralInspector();
                GeneralInspector = sim;
            }
            break;

            case "Mil":
            {
                var mi          = new MilGeneralInspector();
                int imageWidth  = MachineConfig.MV_LineScanFrameWidth;
                int imageHeight = MachineConfig.MV_LineScanFrameHeight * MachineConfig.MV_LineScanMosaicCount;

                mi.Init(imageWidth, imageHeight);

                GeneralInspector = mi;
            }
            break;

            case "Hal":
            {
                var hi = new HalconGeneralInspector();
                GeneralInspector = hi;
            }
            break;

            default:
                throw new NotSupportedException("InspectionSchema.InspectorName not be set!");
            }


            return(true);
        }
        public InspectionResult Inspect(InspectionSchema inspectionSchema)
        {
            var inspectionResult = new InspectionResult();

            Debug.WriteLine("MilGeneralInspector.Inspect in");

            int errorCode;

            InteropApi.CleanDefinitions();

            Debug.WriteLine("InteropApi.Calculate begin");
            errorCode = InteropApi.Calculate(_imageInfo);
            Debug.WriteLine("InteropApi.Calculate end");

            if (errorCode != 0)
            {
                Debug.WriteLine("InteropApi.Calculate error");
                throw new MilInteropException("Calculate", errorCode);
            }

            Debug.WriteLine("MilGeneralInspector.Inspect out");

            return(inspectionResult);
        }
        private void Inspect(InspectionSchema schema)
        {
            //IndicatorViewer.Loaded += (sender, args) => IndicatorViewer.ZoomFit();
            //                        IndicatorViewer.Loaded += (sender, args) => IndicatorViewer.ZoomOut();

            RegionIndicators.Clear();
            LineIndicators.Clear();
            CircleIndicators.Clear();
            DefectIndicators.Clear();
            ObjectIndicators.Clear();

            BitmapSource bs;

            try
            {
                bs = new BitmapImage(new Uri(schema.TestImageFilePath, UriKind.RelativeOrAbsolute));
            }
            catch (FileNotFoundException e)
            {
                throw new HalconInspectorException("Image file not exist", e);
            }

            if (Math.Abs(bs.DpiX - 96) > 0.00001 || Math.Abs(bs.DpiY - 96) > 0.00001)
            {
                var sw1 = new NotifyStopwatch("BitmapSource convert to Dpi96");
                BitmapSourceInfo bsi = bs.ToGray8BppBitmapSourceInfo();
                bsi.DpiX = 96;
                bsi.DpiY = 96;
                var bitmapSourceDpi96 = bsi.GetBitmapSource();
                bs = bitmapSourceDpi96;
                sw1.Stop();
                sw1.Dispose();
            }

            IndicatorViewer.BitmapSource = bs;

            var sw2    = new NotifyStopwatch("BitmapSource.ToHImage()");
            var hImage = bs.ToHImage();

            sw2.Stop();
            sw2.Dispose();


            try
            {
                var sw = new NotifyStopwatch("InspectionController.Inspect()");
                InspectionController
                .SetInspectionSchema()
                .SetImage(hImage)
                .CreateCoordinate()
                .Inspect()
                ;
                sw.Stop();
                sw.Dispose();

                // CoordinateCircles
                Show_CircleSearchingDefinitions(
                    InspectionController.InspectionResult.GetCoordinateCircleSearchingDefinitions());
                Show_CircleSearchingResults(InspectionController.InspectionResult.CoordinateCircles);

                // Circles
                Show_CircleSearchingDefinitions(
                    InspectionController.InspectionResult.GetCircleSearchingDefinitions(), Brushes.Orange);
                Show_CircleSearchingResults(InspectionController.InspectionResult.Circles, Brushes.DodgerBlue);

                // CoordinateEdges
                Show_EdgeSearchingDefinitions(InspectionController.InspectionResult.GetCoordinateEdges());
                Show_EdgeSearchingResults(InspectionController.InspectionResult.CoordinateEdges);

                // Edges
                Show_EdgeSearchingDefinitions(InspectionController.InspectionResult.GetEdgeSearchingDefinitions());
                Show_EdgeSearchingResults(InspectionController.InspectionResult.Edges);

                // DistanceBetweenPoints
                Show_DistanceBetweenPointsResults(InspectionController.InspectionResult.DistanceBetweenPointsResults);

                // Defects
                Show_DefectResults(InspectionController.InspectionResult.RegionDefectResults);

                // Parts
                Show_PartSearchingDefinitions(InspectionController.InspectionResult.GetPartSearchingDefinitions());
                Show_PartSearchingResults(InspectionController.InspectionResult.Parts);

                // RegionTargets
                Show_RegionTargetDefinitions(InspectionController.InspectionResult.GetRegionTargetDefinitions());
                Show_RegionTargetResults(InspectionController.InspectionResult.RegionTargets);
            }
            catch (CreateCoordinateFailedException e)
            {
                Show_CircleSearchingDefinitions(
                    InspectionController.InspectionResult.GetCoordinateCircleSearchingDefinitions());
                Show_CircleSearchingResults(InspectionController.InspectionResult.CoordinateCircles);

                Show_EdgeSearchingDefinitions(InspectionController.InspectionResult.GetCoordinateEdges());
                Show_EdgeSearchingResults(InspectionController.InspectionResult.CoordinateEdges);

                MessageBox.Show(e.Message);
            }
        }
 public InspectionResult Inspect(HImage imageInfo, InspectionSchema inspectionSchema)
 {
     SetImageInfo(imageInfo);
     return(Inspect(inspectionSchema));
 }
 public InspectionResult SearchEdges(ImageInfo imageInfo, InspectionSchema inspectionSchema)
 {
     throw new NotImplementedException();
 }
        public void Run(string imageDir, InspectionSchema schema)
        {
            IList <string> fileNames;

            try
            {
                var strings = Directory.GetFiles(imageDir).ToList();

                fileNames = strings.Where(x =>
                {
                    if (x.EndsWith(".bmp"))
                    {
                        return(true);
                    }

                    if (x.EndsWith(".tif"))
                    {
                        return(true);
                    }

                    if (x.EndsWith(".jpg"))
                    {
                        return(true);
                    }

                    return(false);
                }).ToList();
            }
            catch (Exception)
            {
                MessageBox.Show("Image directory cannot load files! " + imageDir);
                return;
            }


            // Inspect
            IList <InspectionResult> inspectionResults = new List <InspectionResult>();

//            IList<ImageInfo> imageInfos = new List<ImageInfo>();
            IList <HImage> images = new List <HImage>();

            foreach (var fileName in fileNames)
            {
                string name = fileName;

                var fn = (string)name;
                Debug.WriteLine("Task.Started: " + fn);

//                BitmapImage bi = null;
//                try
//                {
//                    Debug.WriteLine("BitmapImage() begin");
//                    bi = new BitmapImage(new Uri(fn, UriKind.RelativeOrAbsolute));
//                    Debug.WriteLine("BitmapImage() end");
//                }
//                catch (Exception e2)
//                {
//                    MessageBox.Show("BitmapImage loading error: " + fn);
//                }
//
//                Debug.WriteLine("ToImageInfoWith8Bpp() begin");
//                var imageInfo = bi.ToImageInfoWith8Bpp();
//                Debug.WriteLine("ToImageInfoWith8Bpp() end");
//
//                imageInfos.Add(imageInfo);

                images.Add(new HImage(name));
            }

            IList <Task> tasks = new List <Task>();

            foreach (var imageInfo in images)
            {
//                string name = fileName;
                var imageInfo2 = imageInfo;
                var task       = new Task(
                    (x) =>
                {
                    HImage imageInfo3 = (HImage)imageInfo2;
//                        Debug.WriteLine("Task.Started: " + fn);
//
//                        BitmapImage bi = null;
//                        try
//                        {
//                            Debug.WriteLine("BitmapImage() begin");
//                            bi = new BitmapImage(new Uri(fn, UriKind.RelativeOrAbsolute));
//                            Debug.WriteLine("BitmapImage() end");
//                        }
//                        catch (Exception e2)
//                        {
//                            MessageBox.Show("BitmapImage loading error: " + fn);
//                        }
//
//                        Debug.WriteLine("ToImageInfoWith8Bpp() begin");
//                        var imageInfo = bi.ToImageInfoWith8Bpp();
//                        Debug.WriteLine("ToImageInfoWith8Bpp() end");

                    using (var inspectionController = new InspectionController())
                    {
                        inspectionController
                        .SetInspectionSchema(schema.DeepClone())
                        .SetImage(imageInfo3)
                        .CreateCoordinate()
                        .Inspect()
                        ;

                        inspectionController.InspectionResult.Comment = "";

                        inspectionResults.Add(inspectionController.InspectionResult);
                    }

                    //                var targetTask = new SearchingTask();
                    //                foreach (var csd in schema.CircleSearchingDefinitions)
                    //                {
                    //                    var relativeVector = new Vector(csd.BaselineX*1000.0/16.0, csd.BaselineY*1000.0/16.0);
                    //                    var originalVector = coord.GetOriginalVector(relativeVector);
                    //                    csd.CenterX = originalVector.X;
                    //                    csd.CenterY = originalVector.Y;
                    //                }
                    //                targetTask.CircleDefinitions.AddRange(schema.CircleSearchingDefinitions);
                    //
                    //
                    //                var targetResult = inspector.Search(imageInfo, targetTask);
                    //
                    //                targetResult.CircleSearchingResults.UpdateRelativeCoordinate(coord);
                }, imageInfo);
                tasks.Add(task);
                task.Start();
            }

            Task.WaitAll(tasks.ToArray());

            var coordinateResultGroups = inspectionResults.Select(x => x.CoordinateCircles).ToList();
            List <CircleSearchingResultCollection> objectsResultGroups = inspectionResults.Select(x => x.Circles).ToList();

            foreach (var task in objectsResultGroups)
            {
                foreach (var t in task)
                {
                    Debug.WriteLine("objectsResultGroups Circle " + t.Index + " X: " + t.Definition.CenterX);
                    Debug.WriteLine("objectsResultGroups Circle " + t.Index + " Y: " + t.Definition.CenterY);
                }
            }

            DateTime dateTime  = DateTime.Now;
            string   reportDir = "_reports" + dateTime.ToString("_yyyy-MM-dd_HH.mm.ss");
            var      exportDir = Path.Combine(imageDir, reportDir);

            Directory.CreateDirectory(exportDir);

            // SaveToCSV
            ReportManager.SaveToCSV(coordinateResultGroups, exportDir, "Coordinate");
            ReportManager.SaveToCSV(objectsResultGroups, exportDir, "Objects");
            Debug.WriteLine("SaveToCSV() end");


            var distGroups = inspectionResults.Select(x => x.DistanceBetweenPointsResults).ToList();

            ReportManager.SaveCsvGroupByEdge(distGroups, exportDir, "Edges");
            Debug.WriteLine("SaveCsvGroupByEdge() end");


            List <RegionDefectResult> defectsGroups = inspectionResults.SelectMany(x => x.RegionDefectResults).ToList();
            var dgs = defectsGroups.Select(x => x.DefectResults).ToList();

            ReportManager.SaveDefectResultsToCsvGroupByWorkpiece(dgs, exportDir, "Defects");
            Debug.WriteLine("SaveDefectResultsToCsvGroupByWorkpiece() end");

            // SaveToXaml
            ReportManager.SaveToXaml(coordinateResultGroups, exportDir, "Coordinate");
            ReportManager.SaveToXaml(objectsResultGroups, exportDir, "Objects");
            ReportManager.SaveToXaml(inspectionResults, exportDir, "All");
            Debug.WriteLine("SaveToXaml() end");


            var cs = CoordinateCircleCalculator.Calculate(inspectionResults);


            //            var allResultGroup = new List<CircleSearchingResultCollection>();
            //            allResultGroup.AddRange(coordinateResultGroups);
            //            allResultGroup.AddRange(objectsResultGroups);
            //            ReportManager.SaveToCSV(allResultGroup, exportDir, "All");
            //            ReportManager.SaveToXaml(allResultGroup, exportDir, "All");
        }