cam0 to camOCR
This commit is contained in:
@@ -112,7 +112,7 @@ namespace TetraPackOCR
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 相机对象 1和2
|
/// 相机对象 1和2
|
||||||
/// </summary>
|
/// </summary>
|
||||||
IDevice m_dev_cam0, m_dev_cam1;
|
IDevice m_dev_cam_ocr, m_dev_cam1;
|
||||||
List<IDeviceInfo> DeviceList;
|
List<IDeviceInfo> DeviceList;
|
||||||
public string ImagePixelFormat = ""; //图像格式设置
|
public string ImagePixelFormat = ""; //图像格式设置
|
||||||
|
|
||||||
@@ -143,7 +143,7 @@ namespace TetraPackOCR
|
|||||||
this.Enabled = false;
|
this.Enabled = false;
|
||||||
Action action = (() =>
|
Action action = (() =>
|
||||||
{
|
{
|
||||||
InitializeCamer1();
|
InitializeCamerOCR();
|
||||||
InitializeCamer2();
|
InitializeCamer2();
|
||||||
InitializePaddleOCR();
|
InitializePaddleOCR();
|
||||||
|
|
||||||
@@ -263,31 +263,29 @@ namespace TetraPackOCR
|
|||||||
#region 相机初始化
|
#region 相机初始化
|
||||||
|
|
||||||
#region 相机1 定义为OCR相机
|
#region 相机1 定义为OCR相机
|
||||||
private void InitializeCamer1()
|
private void InitializeCamerOCR()
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
cam0Opened = false;
|
camOCROpened = false;
|
||||||
DeviceList = Enumerator.EnumerateDevices(); //发现设备,搜索所有大华相机
|
DeviceList = Enumerator.EnumerateDevices(); //发现设备,搜索所有大华相机
|
||||||
|
m_dev_cam_ocr = Enumerator.GetDeviceByKey("Machine Vision:CK21686DAK00001");//通过"设备厂商名:设备序列号"获取
|
||||||
// m_dev_cam0 = Enumerator.GetDeviceByIndex(0);//通过索引获取
|
if (m_dev_cam_ocr == null)
|
||||||
m_dev_cam0 = Enumerator.GetDeviceByKey("Machine Vision:CK21686DAK00001");//通过"设备厂商名:设备序列号"获取
|
|
||||||
if (m_dev_cam0 == null)
|
|
||||||
{
|
{
|
||||||
log.Error("未发现OCR相机,请检查相机连接");
|
log.Error("未发现OCR相机,请检查相机连接");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
m_dev_cam0.CameraOpened += m_dev0_CameraOpened;
|
m_dev_cam_ocr.CameraOpened += m_dev_cam_ocr_CameraOpened;
|
||||||
m_dev_cam0.CameraClosed += m_dev0_CameraClosed;
|
m_dev_cam_ocr.CameraClosed += m_dev_cam_ocr_CameraClosed;
|
||||||
m_dev_cam0.ConnectionLost += m_dev0_ConnectionLost;
|
m_dev_cam_ocr.ConnectionLost += m_dev_cam_ocr_ConnectionLost;
|
||||||
|
|
||||||
if (!m_dev_cam0.Open())
|
if (!m_dev_cam_ocr.Open())
|
||||||
{
|
{
|
||||||
MessageBox.Show("OCR相机打开失败");
|
MessageBox.Show("OCR相机打开失败");
|
||||||
}
|
}
|
||||||
// 设置图像格式
|
// 设置图像格式
|
||||||
// set PixelFormat
|
// set PixelFormat
|
||||||
using (IEnumParameter p = m_dev_cam0.ParameterCollection[ParametrizeNameSet.ImagePixelFormat])
|
using (IEnumParameter p = m_dev_cam_ocr.ParameterCollection[ParametrizeNameSet.ImagePixelFormat])
|
||||||
{
|
{
|
||||||
ImagePixelFormat = "BayerRG8";
|
ImagePixelFormat = "BayerRG8";
|
||||||
//ImagePixelFormat = "Mono8";
|
//ImagePixelFormat = "Mono8";
|
||||||
@@ -296,73 +294,68 @@ namespace TetraPackOCR
|
|||||||
|
|
||||||
// 设置曝光
|
// 设置曝光
|
||||||
|
|
||||||
using (IFloatParameter p = m_dev_cam0.ParameterCollection[ParametrizeNameSet.ExposureTime])
|
using (IFloatParameter p = m_dev_cam_ocr.ParameterCollection[ParametrizeNameSet.ExposureTime])
|
||||||
{
|
{
|
||||||
p.SetValue(800000);
|
p.SetValue(800000);
|
||||||
}
|
}
|
||||||
// 设置增益
|
// 设置增益
|
||||||
|
|
||||||
using (IFloatParameter p = m_dev_cam0.ParameterCollection[ParametrizeNameSet.GainRaw])
|
using (IFloatParameter p = m_dev_cam_ocr.ParameterCollection[ParametrizeNameSet.GainRaw])
|
||||||
{
|
{
|
||||||
p.SetValue(2.5);
|
p.SetValue(2.5);
|
||||||
}
|
}
|
||||||
using (IEnumParameter p = m_dev_cam0.ParameterCollection[ParametrizeNameSet.AcquisitionMode])
|
using (IEnumParameter p = m_dev_cam_ocr.ParameterCollection[ParametrizeNameSet.AcquisitionMode])
|
||||||
{
|
{
|
||||||
p.SetValue("Continuous");
|
p.SetValue("Continuous");
|
||||||
}
|
}
|
||||||
using (IEnumParameter p = m_dev_cam0.ParameterCollection[ParametrizeNameSet.TriggerMode])
|
using (IEnumParameter p = m_dev_cam_ocr.ParameterCollection[ParametrizeNameSet.TriggerMode])
|
||||||
{
|
{
|
||||||
p.SetValue("On");
|
p.SetValue("On");
|
||||||
}
|
}
|
||||||
|
|
||||||
//if (!m_dev_cam0.Open())
|
m_dev_cam_ocr.StreamGrabber.ImageGrabbed += StreamGrabber_ImageGrabbed_OCR;
|
||||||
//{
|
m_dev_cam_ocr.StreamGrabber.GrabStarted += StreamGrabber_GrabStarted_OCR;
|
||||||
// MessageBox.Show(@"OCR相机连接失败");
|
|
||||||
// return;
|
|
||||||
//}
|
|
||||||
m_dev_cam0.StreamGrabber.ImageGrabbed += StreamGrabber_ImageGrabbed_0;
|
|
||||||
m_dev_cam0.StreamGrabber.GrabStarted += StreamGrabber_GrabStarted_0;
|
|
||||||
// 打开Software Trigger
|
// 打开Software Trigger
|
||||||
// Set Software Trigger
|
// Set Software Trigger
|
||||||
m_dev_cam0.TriggerSet.Open(TriggerSourceEnum.Software);
|
m_dev_cam_ocr.TriggerSet.Open(TriggerSourceEnum.Software);
|
||||||
if (!m_dev_cam0.GrabUsingGrabLoopThread())
|
if (!m_dev_cam_ocr.GrabUsingGrabLoopThread())
|
||||||
{
|
{
|
||||||
// 开启采集失败
|
// 开启采集失败
|
||||||
log.Error("开启采集失败");
|
log.Error("开启采集失败");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
cam0Opened = true;
|
camOCROpened = true;
|
||||||
log.Info("OCR相机加载完毕");
|
log.Info("OCR相机加载完毕");
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
cam0Opened = false;
|
camOCROpened = false;
|
||||||
log.Error("OCR相机加载失败");
|
log.Error("OCR相机加载失败");
|
||||||
m_dev_cam0 = null;
|
m_dev_cam_ocr = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private bool cam0Opened = false;
|
private bool camOCROpened = false;
|
||||||
private bool cam1Opened = false;
|
private bool cam1Opened = false;
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region 相机1事件响应
|
#region 相机1事件响应
|
||||||
|
|
||||||
void m_dev0_ConnectionLost(object sender, EventArgs e)
|
void m_dev_cam_ocr_ConnectionLost(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
MessageBox.Show(m_dev_cam0.DeviceInfo.Key + "OCR相机断线");
|
MessageBox.Show(m_dev_cam_ocr.DeviceInfo.Key + "OCR相机断线");
|
||||||
}
|
}
|
||||||
|
|
||||||
void m_dev0_CameraClosed(object sender, EventArgs e)
|
void m_dev_cam_ocr_CameraClosed(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
MessageBox.Show(m_dev_cam0.DeviceInfo.Key + "OCR相机关闭");
|
MessageBox.Show(m_dev_cam_ocr.DeviceInfo.Key + "OCR相机关闭");
|
||||||
}
|
}
|
||||||
|
|
||||||
void m_dev0_CameraOpened(object sender, EventArgs e)
|
void m_dev_cam_ocr_CameraOpened(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
// MessageBox.Show(m_dev_cam0.DeviceInfo.Key + "启动");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void StreamGrabber_GrabStarted_0(object sender, EventArgs e)
|
void StreamGrabber_GrabStarted_OCR(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
log.Info("OCR相机启动码流");
|
log.Info("OCR相机启动码流");
|
||||||
}
|
}
|
||||||
@@ -372,7 +365,7 @@ namespace TetraPackOCR
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="sender"></param>
|
/// <param name="sender"></param>
|
||||||
/// <param name="e"></param>
|
/// <param name="e"></param>
|
||||||
private void StreamGrabber_ImageGrabbed_0(object sender, GrabbedEventArgs e)
|
private void StreamGrabber_ImageGrabbed_OCR(object sender, GrabbedEventArgs e)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -442,11 +435,6 @@ namespace TetraPackOCR
|
|||||||
{
|
{
|
||||||
p.SetValue("On");
|
p.SetValue("On");
|
||||||
}
|
}
|
||||||
//if (!m_dev_cam1.Open())
|
|
||||||
//{
|
|
||||||
// MessageBox.Show(@"定位相机连接失败");
|
|
||||||
// return;
|
|
||||||
//}
|
|
||||||
m_dev_cam1.StreamGrabber.ImageGrabbed += StreamGrabber_ImageGrabbed_1;
|
m_dev_cam1.StreamGrabber.ImageGrabbed += StreamGrabber_ImageGrabbed_1;
|
||||||
m_dev_cam1.StreamGrabber.GrabStarted += StreamGrabber_GrabStarted_1;
|
m_dev_cam1.StreamGrabber.GrabStarted += StreamGrabber_GrabStarted_1;
|
||||||
// 打开Software Trigger
|
// 打开Software Trigger
|
||||||
@@ -485,7 +473,7 @@ namespace TetraPackOCR
|
|||||||
|
|
||||||
void m_dev1_CameraOpened(object sender, EventArgs e)
|
void m_dev1_CameraOpened(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
// MessageBox.Show(m_dev_cam0.DeviceInfo.Key + "启动");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void StreamGrabber_GrabStarted_1(object sender, EventArgs e)
|
void StreamGrabber_GrabStarted_1(object sender, EventArgs e)
|
||||||
@@ -564,14 +552,14 @@ namespace TetraPackOCR
|
|||||||
void ClossCam()
|
void ClossCam()
|
||||||
{
|
{
|
||||||
//注销相机事件
|
//注销相机事件
|
||||||
if (m_dev_cam0 != null)
|
if (m_dev_cam_ocr != null)
|
||||||
{
|
{
|
||||||
m_dev_cam0.CameraOpened -= m_dev0_CameraOpened;
|
m_dev_cam_ocr.CameraOpened -= m_dev_cam_ocr_CameraOpened;
|
||||||
m_dev_cam0.CameraClosed -= m_dev0_CameraClosed;
|
m_dev_cam_ocr.CameraClosed -= m_dev_cam_ocr_CameraClosed;
|
||||||
m_dev_cam0.ConnectionLost -= m_dev0_ConnectionLost;
|
m_dev_cam_ocr.ConnectionLost -= m_dev_cam_ocr_ConnectionLost;
|
||||||
m_dev_cam0.ShutdownGrab();
|
m_dev_cam_ocr.ShutdownGrab();
|
||||||
m_dev_cam0.Dispose();
|
m_dev_cam_ocr.Dispose();
|
||||||
m_dev_cam0 = null;
|
m_dev_cam_ocr = null;
|
||||||
}
|
}
|
||||||
if (m_dev_cam1 != null)
|
if (m_dev_cam1 != null)
|
||||||
{
|
{
|
||||||
@@ -952,145 +940,7 @@ namespace TetraPackOCR
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
///判断当前Lans决定结果显示数量
|
///判断当前Lans决定结果显示数量
|
||||||
switch (NumberOfLanes)
|
InitLableColumn();
|
||||||
{
|
|
||||||
case 1:
|
|
||||||
this.Invoke(new Action(() =>
|
|
||||||
{
|
|
||||||
this.lbl_L1_verOcrRs.Text = "启用";
|
|
||||||
this.lbl_L1_verOcrRs.BackColor = Color.Yellow;
|
|
||||||
}));
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
this.Invoke(new Action(() =>
|
|
||||||
{
|
|
||||||
this.lbl_L1_verOcrRs.Text = "启用";
|
|
||||||
this.lbl_L1_verOcrRs.BackColor = Color.Yellow;
|
|
||||||
this.lbl_L2_verOcrRs.Text = "启用";
|
|
||||||
this.lbl_L2_verOcrRs.BackColor = Color.Yellow;
|
|
||||||
}));
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
this.Invoke(new Action(() =>
|
|
||||||
{
|
|
||||||
this.lbl_L1_verOcrRs.Text = "启用";
|
|
||||||
this.lbl_L1_verOcrRs.BackColor = Color.Yellow;
|
|
||||||
this.lbl_L2_verOcrRs.Text = "启用";
|
|
||||||
this.lbl_L2_verOcrRs.BackColor = Color.Yellow;
|
|
||||||
this.lbl_L3_verOcrRs.Text = "启用";
|
|
||||||
this.lbl_L3_verOcrRs.BackColor = Color.Yellow;
|
|
||||||
}));
|
|
||||||
break;
|
|
||||||
case 4:
|
|
||||||
this.Invoke(new Action(() =>
|
|
||||||
{
|
|
||||||
this.lbl_L1_verOcrRs.Text = "启用";
|
|
||||||
this.lbl_L1_verOcrRs.BackColor = Color.Yellow;
|
|
||||||
this.lbl_L2_verOcrRs.Text = "启用";
|
|
||||||
this.lbl_L2_verOcrRs.BackColor = Color.Yellow;
|
|
||||||
this.lbl_L3_verOcrRs.Text = "启用";
|
|
||||||
this.lbl_L3_verOcrRs.BackColor = Color.Yellow;
|
|
||||||
this.lbl_L4_verOcrRs.Text = "启用";
|
|
||||||
this.lbl_L4_verOcrRs.BackColor = Color.Yellow;
|
|
||||||
}));
|
|
||||||
break;
|
|
||||||
case 5:
|
|
||||||
this.Invoke(new Action(() =>
|
|
||||||
{
|
|
||||||
this.lbl_L1_verOcrRs.Text = "启用";
|
|
||||||
this.lbl_L1_verOcrRs.BackColor = Color.Yellow;
|
|
||||||
this.lbl_L2_verOcrRs.Text = "启用";
|
|
||||||
this.lbl_L2_verOcrRs.BackColor = Color.Yellow;
|
|
||||||
this.lbl_L3_verOcrRs.Text = "启用";
|
|
||||||
this.lbl_L3_verOcrRs.BackColor = Color.Yellow;
|
|
||||||
this.lbl_L4_verOcrRs.Text = "启用";
|
|
||||||
this.lbl_L4_verOcrRs.BackColor = Color.Yellow;
|
|
||||||
this.lbl_L5_verOcrRs.Text = "启用";
|
|
||||||
this.lbl_L5_verOcrRs.BackColor = Color.Yellow;
|
|
||||||
}));
|
|
||||||
break;
|
|
||||||
case 6:
|
|
||||||
this.Invoke(new Action(() =>
|
|
||||||
{
|
|
||||||
this.lbl_L1_verOcrRs.Text = "启用";
|
|
||||||
this.lbl_L1_verOcrRs.BackColor = Color.Yellow;
|
|
||||||
this.lbl_L2_verOcrRs.Text = "启用";
|
|
||||||
this.lbl_L2_verOcrRs.BackColor = Color.Yellow;
|
|
||||||
this.lbl_L3_verOcrRs.Text = "启用";
|
|
||||||
this.lbl_L3_verOcrRs.BackColor = Color.Yellow;
|
|
||||||
this.lbl_L4_verOcrRs.Text = "启用";
|
|
||||||
this.lbl_L4_verOcrRs.BackColor = Color.Yellow;
|
|
||||||
this.lbl_L5_verOcrRs.Text = "启用";
|
|
||||||
this.lbl_L5_verOcrRs.BackColor = Color.Yellow;
|
|
||||||
this.lbl_L6_verOcrRs.Text = "启用";
|
|
||||||
this.lbl_L6_verOcrRs.BackColor = Color.Yellow;
|
|
||||||
|
|
||||||
}));
|
|
||||||
break;
|
|
||||||
case 7:
|
|
||||||
this.Invoke(new Action(() =>
|
|
||||||
{
|
|
||||||
this.lbl_L1_verOcrRs.Text = "启用";
|
|
||||||
this.lbl_L1_verOcrRs.BackColor = Color.Yellow;
|
|
||||||
this.lbl_L2_verOcrRs.Text = "启用";
|
|
||||||
this.lbl_L2_verOcrRs.BackColor = Color.Yellow;
|
|
||||||
this.lbl_L3_verOcrRs.Text = "启用";
|
|
||||||
this.lbl_L3_verOcrRs.BackColor = Color.Yellow;
|
|
||||||
this.lbl_L4_verOcrRs.Text = "启用";
|
|
||||||
this.lbl_L4_verOcrRs.BackColor = Color.Yellow;
|
|
||||||
this.lbl_L5_verOcrRs.Text = "启用";
|
|
||||||
this.lbl_L5_verOcrRs.BackColor = Color.Yellow;
|
|
||||||
this.lbl_L6_verOcrRs.Text = "启用";
|
|
||||||
this.lbl_L6_verOcrRs.BackColor = Color.Yellow;
|
|
||||||
this.lbl_L7_verOcrRs.Text = "启用";
|
|
||||||
this.lbl_L7_verOcrRs.BackColor = Color.Yellow;
|
|
||||||
}));
|
|
||||||
break;
|
|
||||||
case 8:
|
|
||||||
this.Invoke(new Action(() =>
|
|
||||||
{
|
|
||||||
this.lbl_L1_verOcrRs.Text = "启用";
|
|
||||||
this.lbl_L1_verOcrRs.BackColor = Color.Yellow;
|
|
||||||
this.lbl_L2_verOcrRs.Text = "启用";
|
|
||||||
this.lbl_L2_verOcrRs.BackColor = Color.Yellow;
|
|
||||||
this.lbl_L3_verOcrRs.Text = "启用";
|
|
||||||
this.lbl_L3_verOcrRs.BackColor = Color.Yellow;
|
|
||||||
this.lbl_L4_verOcrRs.Text = "启用";
|
|
||||||
this.lbl_L4_verOcrRs.BackColor = Color.Yellow;
|
|
||||||
this.lbl_L5_verOcrRs.Text = "启用";
|
|
||||||
this.lbl_L5_verOcrRs.BackColor = Color.Yellow;
|
|
||||||
this.lbl_L6_verOcrRs.Text = "启用";
|
|
||||||
this.lbl_L6_verOcrRs.BackColor = Color.Yellow;
|
|
||||||
this.lbl_L7_verOcrRs.Text = "启用";
|
|
||||||
this.lbl_L7_verOcrRs.BackColor = Color.Yellow;
|
|
||||||
this.lbl_L8_verOcrRs.Text = "启用";
|
|
||||||
this.lbl_L8_verOcrRs.BackColor = Color.Yellow;
|
|
||||||
}));
|
|
||||||
break;
|
|
||||||
case 9:
|
|
||||||
this.Invoke(new Action(() =>
|
|
||||||
{
|
|
||||||
this.lbl_L1_verOcrRs.Text = "启用";
|
|
||||||
this.lbl_L1_verOcrRs.BackColor = Color.Yellow;
|
|
||||||
this.lbl_L2_verOcrRs.Text = "启用";
|
|
||||||
this.lbl_L2_verOcrRs.BackColor = Color.Yellow;
|
|
||||||
this.lbl_L3_verOcrRs.Text = "启用";
|
|
||||||
this.lbl_L3_verOcrRs.BackColor = Color.Yellow;
|
|
||||||
this.lbl_L4_verOcrRs.Text = "启用";
|
|
||||||
this.lbl_L4_verOcrRs.BackColor = Color.Yellow;
|
|
||||||
this.lbl_L5_verOcrRs.Text = "启用";
|
|
||||||
this.lbl_L5_verOcrRs.BackColor = Color.Yellow;
|
|
||||||
this.lbl_L6_verOcrRs.Text = "启用";
|
|
||||||
this.lbl_L6_verOcrRs.BackColor = Color.Yellow;
|
|
||||||
this.lbl_L7_verOcrRs.Text = "启用";
|
|
||||||
this.lbl_L7_verOcrRs.BackColor = Color.Yellow;
|
|
||||||
this.lbl_L8_verOcrRs.Text = "启用";
|
|
||||||
this.lbl_L8_verOcrRs.BackColor = Color.Yellow;
|
|
||||||
this.lbl_L9_verOcrRs.Text = "启用";
|
|
||||||
this.lbl_L9_verOcrRs.BackColor = Color.Yellow;
|
|
||||||
}));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.btn_OrderNum.Enabled = true;
|
this.btn_OrderNum.Enabled = true;
|
||||||
btn_OrderNum.BackColor = Color.DeepSkyBlue;
|
btn_OrderNum.BackColor = Color.DeepSkyBlue;
|
||||||
@@ -1105,6 +955,148 @@ namespace TetraPackOCR
|
|||||||
btn_OrderNum.BackColor = Color.DeepSkyBlue;
|
btn_OrderNum.BackColor = Color.DeepSkyBlue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
private void InitLableColumn()
|
||||||
|
{
|
||||||
|
switch (NumberOfLanes)
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
this.Invoke(new Action(() =>
|
||||||
|
{
|
||||||
|
this.lbl_L1_verOcrRs.Text = "启用";
|
||||||
|
this.lbl_L1_verOcrRs.BackColor = Color.Yellow;
|
||||||
|
}));
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
this.Invoke(new Action(() =>
|
||||||
|
{
|
||||||
|
this.lbl_L1_verOcrRs.Text = "启用";
|
||||||
|
this.lbl_L1_verOcrRs.BackColor = Color.Yellow;
|
||||||
|
this.lbl_L2_verOcrRs.Text = "启用";
|
||||||
|
this.lbl_L2_verOcrRs.BackColor = Color.Yellow;
|
||||||
|
}));
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
this.Invoke(new Action(() =>
|
||||||
|
{
|
||||||
|
this.lbl_L1_verOcrRs.Text = "启用";
|
||||||
|
this.lbl_L1_verOcrRs.BackColor = Color.Yellow;
|
||||||
|
this.lbl_L2_verOcrRs.Text = "启用";
|
||||||
|
this.lbl_L2_verOcrRs.BackColor = Color.Yellow;
|
||||||
|
this.lbl_L3_verOcrRs.Text = "启用";
|
||||||
|
this.lbl_L3_verOcrRs.BackColor = Color.Yellow;
|
||||||
|
}));
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
this.Invoke(new Action(() =>
|
||||||
|
{
|
||||||
|
this.lbl_L1_verOcrRs.Text = "启用";
|
||||||
|
this.lbl_L1_verOcrRs.BackColor = Color.Yellow;
|
||||||
|
this.lbl_L2_verOcrRs.Text = "启用";
|
||||||
|
this.lbl_L2_verOcrRs.BackColor = Color.Yellow;
|
||||||
|
this.lbl_L3_verOcrRs.Text = "启用";
|
||||||
|
this.lbl_L3_verOcrRs.BackColor = Color.Yellow;
|
||||||
|
this.lbl_L4_verOcrRs.Text = "启用";
|
||||||
|
this.lbl_L4_verOcrRs.BackColor = Color.Yellow;
|
||||||
|
}));
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
this.Invoke(new Action(() =>
|
||||||
|
{
|
||||||
|
this.lbl_L1_verOcrRs.Text = "启用";
|
||||||
|
this.lbl_L1_verOcrRs.BackColor = Color.Yellow;
|
||||||
|
this.lbl_L2_verOcrRs.Text = "启用";
|
||||||
|
this.lbl_L2_verOcrRs.BackColor = Color.Yellow;
|
||||||
|
this.lbl_L3_verOcrRs.Text = "启用";
|
||||||
|
this.lbl_L3_verOcrRs.BackColor = Color.Yellow;
|
||||||
|
this.lbl_L4_verOcrRs.Text = "启用";
|
||||||
|
this.lbl_L4_verOcrRs.BackColor = Color.Yellow;
|
||||||
|
this.lbl_L5_verOcrRs.Text = "启用";
|
||||||
|
this.lbl_L5_verOcrRs.BackColor = Color.Yellow;
|
||||||
|
}));
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
this.Invoke(new Action(() =>
|
||||||
|
{
|
||||||
|
this.lbl_L1_verOcrRs.Text = "启用";
|
||||||
|
this.lbl_L1_verOcrRs.BackColor = Color.Yellow;
|
||||||
|
this.lbl_L2_verOcrRs.Text = "启用";
|
||||||
|
this.lbl_L2_verOcrRs.BackColor = Color.Yellow;
|
||||||
|
this.lbl_L3_verOcrRs.Text = "启用";
|
||||||
|
this.lbl_L3_verOcrRs.BackColor = Color.Yellow;
|
||||||
|
this.lbl_L4_verOcrRs.Text = "启用";
|
||||||
|
this.lbl_L4_verOcrRs.BackColor = Color.Yellow;
|
||||||
|
this.lbl_L5_verOcrRs.Text = "启用";
|
||||||
|
this.lbl_L5_verOcrRs.BackColor = Color.Yellow;
|
||||||
|
this.lbl_L6_verOcrRs.Text = "启用";
|
||||||
|
this.lbl_L6_verOcrRs.BackColor = Color.Yellow;
|
||||||
|
|
||||||
|
}));
|
||||||
|
break;
|
||||||
|
case 7:
|
||||||
|
this.Invoke(new Action(() =>
|
||||||
|
{
|
||||||
|
this.lbl_L1_verOcrRs.Text = "启用";
|
||||||
|
this.lbl_L1_verOcrRs.BackColor = Color.Yellow;
|
||||||
|
this.lbl_L2_verOcrRs.Text = "启用";
|
||||||
|
this.lbl_L2_verOcrRs.BackColor = Color.Yellow;
|
||||||
|
this.lbl_L3_verOcrRs.Text = "启用";
|
||||||
|
this.lbl_L3_verOcrRs.BackColor = Color.Yellow;
|
||||||
|
this.lbl_L4_verOcrRs.Text = "启用";
|
||||||
|
this.lbl_L4_verOcrRs.BackColor = Color.Yellow;
|
||||||
|
this.lbl_L5_verOcrRs.Text = "启用";
|
||||||
|
this.lbl_L5_verOcrRs.BackColor = Color.Yellow;
|
||||||
|
this.lbl_L6_verOcrRs.Text = "启用";
|
||||||
|
this.lbl_L6_verOcrRs.BackColor = Color.Yellow;
|
||||||
|
this.lbl_L7_verOcrRs.Text = "启用";
|
||||||
|
this.lbl_L7_verOcrRs.BackColor = Color.Yellow;
|
||||||
|
}));
|
||||||
|
break;
|
||||||
|
case 8:
|
||||||
|
this.Invoke(new Action(() =>
|
||||||
|
{
|
||||||
|
this.lbl_L1_verOcrRs.Text = "启用";
|
||||||
|
this.lbl_L1_verOcrRs.BackColor = Color.Yellow;
|
||||||
|
this.lbl_L2_verOcrRs.Text = "启用";
|
||||||
|
this.lbl_L2_verOcrRs.BackColor = Color.Yellow;
|
||||||
|
this.lbl_L3_verOcrRs.Text = "启用";
|
||||||
|
this.lbl_L3_verOcrRs.BackColor = Color.Yellow;
|
||||||
|
this.lbl_L4_verOcrRs.Text = "启用";
|
||||||
|
this.lbl_L4_verOcrRs.BackColor = Color.Yellow;
|
||||||
|
this.lbl_L5_verOcrRs.Text = "启用";
|
||||||
|
this.lbl_L5_verOcrRs.BackColor = Color.Yellow;
|
||||||
|
this.lbl_L6_verOcrRs.Text = "启用";
|
||||||
|
this.lbl_L6_verOcrRs.BackColor = Color.Yellow;
|
||||||
|
this.lbl_L7_verOcrRs.Text = "启用";
|
||||||
|
this.lbl_L7_verOcrRs.BackColor = Color.Yellow;
|
||||||
|
this.lbl_L8_verOcrRs.Text = "启用";
|
||||||
|
this.lbl_L8_verOcrRs.BackColor = Color.Yellow;
|
||||||
|
}));
|
||||||
|
break;
|
||||||
|
case 9:
|
||||||
|
this.Invoke(new Action(() =>
|
||||||
|
{
|
||||||
|
this.lbl_L1_verOcrRs.Text = "启用";
|
||||||
|
this.lbl_L1_verOcrRs.BackColor = Color.Yellow;
|
||||||
|
this.lbl_L2_verOcrRs.Text = "启用";
|
||||||
|
this.lbl_L2_verOcrRs.BackColor = Color.Yellow;
|
||||||
|
this.lbl_L3_verOcrRs.Text = "启用";
|
||||||
|
this.lbl_L3_verOcrRs.BackColor = Color.Yellow;
|
||||||
|
this.lbl_L4_verOcrRs.Text = "启用";
|
||||||
|
this.lbl_L4_verOcrRs.BackColor = Color.Yellow;
|
||||||
|
this.lbl_L5_verOcrRs.Text = "启用";
|
||||||
|
this.lbl_L5_verOcrRs.BackColor = Color.Yellow;
|
||||||
|
this.lbl_L6_verOcrRs.Text = "启用";
|
||||||
|
this.lbl_L6_verOcrRs.BackColor = Color.Yellow;
|
||||||
|
this.lbl_L7_verOcrRs.Text = "启用";
|
||||||
|
this.lbl_L7_verOcrRs.BackColor = Color.Yellow;
|
||||||
|
this.lbl_L8_verOcrRs.Text = "启用";
|
||||||
|
this.lbl_L8_verOcrRs.BackColor = Color.Yellow;
|
||||||
|
this.lbl_L9_verOcrRs.Text = "启用";
|
||||||
|
this.lbl_L9_verOcrRs.BackColor = Color.Yellow;
|
||||||
|
}));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 手动ocr
|
/// 手动ocr
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -1112,7 +1104,7 @@ namespace TetraPackOCR
|
|||||||
/// <param name="e"></param>
|
/// <param name="e"></param>
|
||||||
private void btn_manualOcr_Click(object sender, EventArgs e)
|
private void btn_manualOcr_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
m_dev_cam0.ExecuteSoftwareTrigger();//相机1触发 = OCR拍照
|
m_dev_cam_ocr.ExecuteSoftwareTrigger();//相机1触发 = OCR拍照
|
||||||
log.Info("手动触发OCR");
|
log.Info("手动触发OCR");
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -1128,7 +1120,7 @@ namespace TetraPackOCR
|
|||||||
private bool autorunFlag = false;
|
private bool autorunFlag = false;
|
||||||
private void btn_StarDet_manual_Click(object sender, EventArgs e)
|
private void btn_StarDet_manual_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
if (cam0Opened == false || cam1Opened == false)
|
if (camOCROpened == false || cam1Opened == false)
|
||||||
{
|
{
|
||||||
MessageBox.Show("相机未打开,无法进行检测,请检查相机连接及状态!");
|
MessageBox.Show("相机未打开,无法进行检测,请检查相机连接及状态!");
|
||||||
return;
|
return;
|
||||||
@@ -1140,27 +1132,12 @@ namespace TetraPackOCR
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.Invoke(new Action(() =>
|
if (MessageBox.Show("确认OCR相机处于零点位置?", "提示", MessageBoxButtons.YesNo) == DialogResult.No)
|
||||||
{
|
{
|
||||||
this.lbl_L1_verOcrRs.Text = "未启用";
|
return;
|
||||||
this.lbl_L1_verOcrRs.BackColor = Color.Gray;
|
}
|
||||||
this.lbl_L2_verOcrRs.Text = "未启用";
|
|
||||||
this.lbl_L2_verOcrRs.BackColor = Color.Gray;
|
InitLableColumn();
|
||||||
this.lbl_L3_verOcrRs.Text = "未启用";
|
|
||||||
this.lbl_L3_verOcrRs.BackColor = Color.Gray;
|
|
||||||
this.lbl_L4_verOcrRs.Text = "未启用";
|
|
||||||
this.lbl_L4_verOcrRs.BackColor = Color.Gray;
|
|
||||||
this.lbl_L5_verOcrRs.Text = "未启用";
|
|
||||||
this.lbl_L5_verOcrRs.BackColor = Color.Gray;
|
|
||||||
this.lbl_L6_verOcrRs.Text = "未启用";
|
|
||||||
this.lbl_L6_verOcrRs.BackColor = Color.Gray;
|
|
||||||
this.lbl_L7_verOcrRs.Text = "未启用";
|
|
||||||
this.lbl_L7_verOcrRs.BackColor = Color.Gray;
|
|
||||||
this.lbl_L8_verOcrRs.Text = "未启用";
|
|
||||||
this.lbl_L8_verOcrRs.BackColor = Color.Gray;
|
|
||||||
this.lbl_L9_verOcrRs.Text = "未启用";
|
|
||||||
this.lbl_L9_verOcrRs.BackColor = Color.Gray;
|
|
||||||
}));
|
|
||||||
|
|
||||||
autorunFlag = check_Autorun.Checked;
|
autorunFlag = check_Autorun.Checked;
|
||||||
btn_StarDet_manual.Enabled = false;
|
btn_StarDet_manual.Enabled = false;
|
||||||
@@ -1171,32 +1148,7 @@ namespace TetraPackOCR
|
|||||||
list_Log.Clear();
|
list_Log.Clear();
|
||||||
log.Info("手动触发开始");
|
log.Info("手动触发开始");
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 字符排序
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="d">设计</param>
|
|
||||||
/// <param name="l"></param>
|
|
||||||
/// <param name="c"></param>
|
|
||||||
/// <returns></returns>
|
|
||||||
private string ExecelGetOcrDealWithForShow(string d, string l)
|
|
||||||
{
|
|
||||||
string rescult = "";
|
|
||||||
string[] dd = d.Split('-');
|
|
||||||
//for (int i = 0; i < dd.Length-1; i++)
|
|
||||||
//{
|
|
||||||
// rescult = rescult + dd[0];
|
|
||||||
//}
|
|
||||||
//rescult = dd[0].Remove(0, 1);
|
|
||||||
string[] ll = l.Split(',');
|
|
||||||
for (int i = 0; i < ll.Length; i++)
|
|
||||||
{
|
|
||||||
ll[i] = ll[i].Replace(" ", ""); ll[i] = ll[i].Replace("[", ""); ll[i] = ll[i].Replace("]", "");
|
|
||||||
string[] str = ll[i].Split('-');
|
|
||||||
rescult = rescult + dd[1] + str[1] + str[0];
|
|
||||||
}
|
|
||||||
return rescult;
|
|
||||||
}
|
|
||||||
private List<string> ExecelGetOcrText(string design, string layer)
|
private List<string> ExecelGetOcrText(string design, string layer)
|
||||||
{
|
{
|
||||||
List<string> result = new List<string>();
|
List<string> result = new List<string>();
|
||||||
@@ -1281,7 +1233,7 @@ namespace TetraPackOCR
|
|||||||
log.Info("PLC触发OCR相机,正在拍照计算...");
|
log.Info("PLC触发OCR相机,正在拍照计算...");
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
m_dev_cam0.ExecuteSoftwareTrigger();
|
m_dev_cam_ocr.ExecuteSoftwareTrigger();
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
@@ -1599,66 +1551,6 @@ namespace TetraPackOCR
|
|||||||
ShowTheLansRs(mMatchingStr, (float)m1 / (float)ocrTextResult.Count);
|
ShowTheLansRs(mMatchingStr, (float)m1 / (float)ocrTextResult.Count);
|
||||||
}
|
}
|
||||||
|
|
||||||
//byte[] ocrimagebyte = File.ReadAllBytes(file.FileName);
|
|
||||||
//Bitmap Bmp = new Bitmap(new MemoryStream(ocrimagebyte));
|
|
||||||
//List<string> lastocr = new List<string>();
|
|
||||||
//OCRResult ocrResult = Engine.DetectText(ocrimagebyte);
|
|
||||||
|
|
||||||
//// log.Debug("读取原始数据1:" + ocrResult.JsonText);
|
|
||||||
//List<Point> pointsList = new List<Point>();
|
|
||||||
|
|
||||||
//string[] sd = Design.Split('-');
|
|
||||||
//foreach (var item in ocrResult.TextBlocks) //将检测框绘制在图片上
|
|
||||||
//{
|
|
||||||
// if (item.Text.Contains(sd[1]))
|
|
||||||
// {
|
|
||||||
// using (Graphics g = Graphics.FromImage(Bmp))
|
|
||||||
// {
|
|
||||||
// g.DrawPolygon(new Pen(Brushes.Red, 2), item.BoxPoints.Select(x => new PointF() { X = x.X, Y = x.Y }).ToArray());
|
|
||||||
// }
|
|
||||||
// //lastocr.Add(item.Text);
|
|
||||||
|
|
||||||
// pointsList.Add(new Point(item.BoxPoints[0].X, item.BoxPoints[0].Y, item.Text));
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
|
|
||||||
//List<Point> paixujeguo = paixu(pointsList);
|
|
||||||
//foreach (var it in paixujeguo)
|
|
||||||
//{
|
|
||||||
// lastocr.Add(it.txt);
|
|
||||||
//}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
////对图像显示区更新
|
|
||||||
//Ocr_picBox.BackgroundImage = null;
|
|
||||||
//Ocr_picBox.BackgroundImage = Bmp;
|
|
||||||
|
|
||||||
//txt_readOcrResultShow.Clear();
|
|
||||||
|
|
||||||
//if (!Coprinted_ordeFlag) //判断是否为共印订单
|
|
||||||
//{
|
|
||||||
// txt_readOcrResultShow.Text = GETOCR(lastocr, Design);
|
|
||||||
// log.Info("字符读取结果:" + GETOCR(lastocr, Design));
|
|
||||||
|
|
||||||
// int distance = CalculateAcc(ExecelGetOcrDealWithForShow(Design, Layers), GETOCR(lastocr, Design));
|
|
||||||
// float maxLength = Math.Max(ExecelGetOcrDealWithForShow(Design, Layers).Length, GETOCR(lastocr, Design).Length);
|
|
||||||
// float strSimilarity = (maxLength - distance) / maxLength;
|
|
||||||
// ShowTheLansRs(mMatchingStr, strSimilarity);
|
|
||||||
//}
|
|
||||||
//else
|
|
||||||
//{
|
|
||||||
// txt_readOcrResultShow.Text = GETOCR(lastocr, Design);
|
|
||||||
// log.Info("字符读取结果:" + GETOCR(lastocr, Design));
|
|
||||||
|
|
||||||
// int distance = CalculateAcc(verocr[mMatchingStr], GETOCR(lastocr, Design));
|
|
||||||
// float maxLength = Math.Max(verocr[mMatchingStr].Length, GETOCR(lastocr, Design).Length);
|
|
||||||
// float strSimilarity = (maxLength - distance) / maxLength;
|
|
||||||
|
|
||||||
// ShowTheLansRs(mMatchingStr, strSimilarity);
|
|
||||||
|
|
||||||
//}
|
|
||||||
|
|
||||||
NoticePLCCompleteOCR();
|
NoticePLCCompleteOCR();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1809,51 +1701,7 @@ namespace TetraPackOCR
|
|||||||
{
|
{
|
||||||
return "未能匹配到对应字符请查看产品是否超标,或订单号是否正确";
|
return "未能匹配到对应字符请查看产品是否超标,或订单号是否正确";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/// <summary>
|
|
||||||
/// 使用Levenshtein Distance计算字符串相似度
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="readocr">excel取到的验证字符</param>
|
|
||||||
/// <param name="getocr">读取到的字符</param>
|
|
||||||
int CalculateAcc(string readocr, string getocr)
|
|
||||||
{
|
|
||||||
int columnSize = getocr.Length;
|
|
||||||
int rowSize = readocr.Length;
|
|
||||||
if (columnSize == 0)
|
|
||||||
{
|
|
||||||
return rowSize;
|
|
||||||
}
|
|
||||||
if (rowSize == 0)
|
|
||||||
{
|
|
||||||
return columnSize;
|
|
||||||
}
|
|
||||||
int[,] matrix = new int[rowSize + 1, columnSize + 1];
|
|
||||||
for (int i = 0; i <= columnSize; i++)
|
|
||||||
{
|
|
||||||
matrix[0, 1] = i;//ai提示此处应为matrix[0,i]=i;
|
|
||||||
}
|
|
||||||
for (int j = 1; j <= rowSize; j++)//ai提示此处应为j=0
|
|
||||||
{
|
|
||||||
matrix[j, 0] = j;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i = 0; i < rowSize; i++)
|
|
||||||
{
|
|
||||||
for (int j = 0; j < columnSize; j++)
|
|
||||||
{
|
|
||||||
int sign;
|
|
||||||
if (getocr[j].Equals(readocr[i]))
|
|
||||||
sign = 0;
|
|
||||||
else
|
|
||||||
sign = 1;
|
|
||||||
matrix[i + 1, j + 1] = Math.Min(Math.Min(matrix[i, j] + sign, matrix[i + 1, j] + 1), matrix[i, j + 1] + 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return matrix[rowSize, columnSize];
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private void button1_Click(object sender, EventArgs e)
|
private void button1_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
btn_StarDet_manual.Enabled = true;
|
btn_StarDet_manual.Enabled = true;
|
||||||
|
|||||||
Reference in New Issue
Block a user