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); }
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"); }