Explorar el Código

推理工具加入标定功能

MainC
CPL hace 1 año
padre
commit
1bdb56afaf
Se han modificado 3 ficheros con 1208 adiciones y 35 borrados
  1. +11
    -0
      halftoneproject-master/DefectInferTool/DefectInferTool.csproj
  2. +1017
    -34
      halftoneproject-master/DefectInferTool/Form1.Designer.cs
  3. +180
    -1
      halftoneproject-master/DefectInferTool/Form1.cs

+ 11
- 0
halftoneproject-master/DefectInferTool/DefectInferTool.csproj Ver fichero

@@ -37,6 +37,17 @@
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="CalTools">
<HintPath>..\..\..\..\开发文件\标定\CalTools.dll</HintPath>
</Reference>
<Reference Include="halcondotnet, Version=21.5.0.0, Culture=neutral, PublicKeyToken=4973bed59ddbf2b8, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\BanBoShi\Dlls\halcondotnet.dll</HintPath>
</Reference>
<Reference Include="hdevenginedotnet, Version=21.5.0.0, Culture=neutral, PublicKeyToken=4973bed59ddbf2b8, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\BanBoShi\Dlls\hdevenginedotnet.dll</HintPath>
</Reference>
<Reference Include="Microsoft.ML.OnnxRuntime">
<HintPath>..\AssistClient\bin\Debug\Microsoft.ML.OnnxRuntime.dll</HintPath>
</Reference>


+ 1017
- 34
halftoneproject-master/DefectInferTool/Form1.Designer.cs
La diferencia del archivo ha sido suprimido porque es demasiado grande
Ver fichero


+ 180
- 1
halftoneproject-master/DefectInferTool/Form1.cs Ver fichero

@@ -1,4 +1,5 @@
using MaiMuAOI.ImageProcessing;
using CalTools;
using MaiMuAOI.ImageProcessing;
using Newtonsoft.Json;
using OpenCvSharp;
using ProductionControl.UIExtend;
@@ -609,6 +610,184 @@ namespace DefectInferTool
return;
}
#endregion
#region 标定
/// <summary>
/// 选择文件
/// </summary>
/// <param name="filter">如 图像文件|*.jpg|图像文件|*.png|所有文件|*.*</param>
/// <returns></returns>
public static string SelectFile(string filter = "所有文件|*.*", string defaultPath = "")
{
OpenFileDialog fie = new OpenFileDialog();
fie.Title = "选择文件";
//fie.InitialDirectory = (defaultPath != "" ? defaultPath : Path.GetFullPath("."));
fie.Filter = filter; //设置文件类型
if (fie.ShowDialog() == DialogResult.OK)
return fie.FileName;
return "";
}
private void tbTZPath_Click(object sender, EventArgs e)
{
TextBox tb = (TextBox)sender;
string path = SelectFile("所有文件|*.*", Application.StartupPath);
if (!string.IsNullOrWhiteSpace(path))
{
tb.Text = path;
}
}
/// <summary>
/// 选择目录
/// </summary>
/// <returns></returns>
public static string SelectFolder(string defaultPath = "")
{
FolderBrowserDialog dlg = new FolderBrowserDialog();
dlg.SelectedPath = (defaultPath != "" ? defaultPath : Path.GetFullPath("."));
if (dlg.ShowDialog() == DialogResult.OK)
return dlg.SelectedPath;
return "";
}
private void tbSFPath_Click(object sender, EventArgs e)
{
TextBox tb = (TextBox)sender;
string path = SelectFolder(Application.StartupPath);
if (!string.IsNullOrWhiteSpace(path))
{
tb.Text = path;
}
}
private void btnMarkCal_Click(object sender, EventArgs e)
{
CalToolsClass calToolsClass = new CalToolsClass();
double[] sizeX = new double[4];
double[] sizeY = new double[4];
double[] defectX = new double[4];
double[] defectY = new double[4];
double zpos = (double)ZPos.Value;
sizeX[0] = (double)markX1.Value;
sizeX[1] = (double)markX2.Value;
sizeX[2] = (double)markX3.Value;
sizeX[3] = (double)markX4.Value;
sizeY[0] = (double)MarkY1.Value;
sizeY[1] = (double)MarkY2.Value;
sizeY[2] = (double)MarkY3.Value;
sizeY[3] = (double)MarkY4.Value;
defectX[0] = (double)qx_markX1.Value;
defectX[1] = (double)qx_markX2.Value;
defectX[2] = (double)qx_markX3.Value;
defectX[3] = (double)qx_markX4.Value;
defectY[0] = (double)qx_markY1.Value;
defectY[1] = (double)qx_markY2.Value;
defectY[2] = (double)qx_markY3.Value;
defectY[3] = (double)qx_markY4.Value;
HalconDotNet.HTuple GerBerPath = new HalconDotNet.HTuple(tbTZPath.Text);
HalconDotNet.HTuple FilePath = new HalconDotNet.HTuple(tbSFPath.Text);
HalconDotNet.HTuple hv_PoseMarkX_CCDSize = new HalconDotNet.HTuple(sizeX);
HalconDotNet.HTuple hv_PoseMarkY_CCDSize = new HalconDotNet.HTuple(sizeY);
HalconDotNet.HTuple hv_PoseMarkX_CCDDefect = new HalconDotNet.HTuple(defectX);
HalconDotNet.HTuple hv_PoseMarkY_CCDDefect = new HalconDotNet.HTuple(defectY);
HalconDotNet.HTuple hv_PoseZ_Size = new HalconDotNet.HTuple(zpos);
var ret = (bool)calToolsClass.CCDPoseCal_Mark(GerBerPath, FilePath, hv_PoseMarkX_CCDSize, hv_PoseMarkY_CCDSize,
hv_PoseMarkX_CCDDefect, hv_PoseMarkY_CCDDefect, hv_PoseZ_Size);
if(ret)
{
MessageBox.Show("主机台标定成功!", "标定");
}
else
{
MessageBox.Show("主机台标定失败!", "标定", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void btnNoMarkCal_Click(object sender, EventArgs e)
{
CalToolsClass calToolsClass = new CalToolsClass();
double[] sizeX = new double[4];
double[] sizeY = new double[4];
double[] defectX = new double[4];
double[] defectY = new double[4];
double zpos = (double)ZPos.Value;
sizeX[0] = (double)markX1.Value;
sizeX[1] = (double)markX2.Value;
sizeX[2] = (double)markX3.Value;
sizeX[3] = (double)markX4.Value;
sizeY[0] = (double)MarkY1.Value;
sizeY[1] = (double)MarkY2.Value;
sizeY[2] = (double)MarkY3.Value;
sizeY[3] = (double)MarkY4.Value;
defectX[0] = (double)qx_markX1.Value;
defectX[1] = (double)qx_markX2.Value;
defectX[2] = (double)qx_markX3.Value;
defectX[3] = (double)qx_markX4.Value;
defectY[0] = (double)qx_markY1.Value;
defectY[1] = (double)qx_markY2.Value;
defectY[2] = (double)qx_markY3.Value;
defectY[3] = (double)qx_markY4.Value;
HalconDotNet.HTuple GerBerPath = new HalconDotNet.HTuple(tbTZPath.Text);
HalconDotNet.HTuple FilePath = new HalconDotNet.HTuple(tbSFPath.Text);
HalconDotNet.HTuple hv_PoseMarkX_CCDSize = new HalconDotNet.HTuple(sizeX);
HalconDotNet.HTuple hv_PoseMarkY_CCDSize = new HalconDotNet.HTuple(sizeY);
HalconDotNet.HTuple hv_PoseMarkX_CCDDefect = new HalconDotNet.HTuple(defectX);
HalconDotNet.HTuple hv_PoseMarkY_CCDDefect = new HalconDotNet.HTuple(defectY);
HalconDotNet.HTuple hv_PoseZ_Size = new HalconDotNet.HTuple(zpos);
var ret = (bool)calToolsClass.CCDPoseCal_Corner(GerBerPath, FilePath, hv_PoseMarkX_CCDSize, hv_PoseMarkY_CCDSize,
hv_PoseMarkX_CCDDefect, hv_PoseMarkY_CCDDefect, hv_PoseZ_Size);
if (ret)
{
MessageBox.Show("主机台无Mark标定成功!", "标定");
}
else
{
MessageBox.Show("主机台无Mark标定失败!", "标定", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void btnCal_Click(object sender, EventArgs e)
{
CalToolsClass calToolsClass = new CalToolsClass();
double BeforeX = (double)bX1.Value;
double BeforeY = (double)bY1.Value;
double AfterX = (double)aX1.Value;
double AfterY = (double)aY1.Value;
HalconDotNet.HTuple hv_BeforeX = new HalconDotNet.HTuple(BeforeX);
HalconDotNet.HTuple hv_BeforeY = new HalconDotNet.HTuple(BeforeY);
HalconDotNet.HTuple hv_AfterX = new HalconDotNet.HTuple(AfterX);
HalconDotNet.HTuple hv_AfterY = new HalconDotNet.HTuple(AfterY);
var ret = (bool)calToolsClass.RepairCal_1();
if (ret)
{
ret = (bool)calToolsClass.RepairCal_2(hv_BeforeX, hv_BeforeY, hv_AfterX, hv_AfterY);
if (ret)
{
MessageBox.Show("修复台标定成功!", "标定");
}
else
{
MessageBox.Show("修复台标定失败!", "标定", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
else
{
MessageBox.Show("修复台关联标定失败!", "标定", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
#endregion
}
public class DefectCntInfo
{


Cargando…
Cancelar
Guardar