cam0 to camOCR

This commit is contained in:
2025-11-05 10:37:51 +08:00
parent 3173e91d95
commit 299502b23c

View File

@@ -112,7 +112,7 @@ namespace TetraPackOCR
/// <summary>
/// 相机对象 1和2
/// </summary>
IDevice m_dev_cam0, m_dev_cam1;
IDevice m_dev_cam_ocr, m_dev_cam1;
List<IDeviceInfo> DeviceList;
public string ImagePixelFormat = ""; //图像格式设置
@@ -143,7 +143,7 @@ namespace TetraPackOCR
this.Enabled = false;
Action action = (() =>
{
InitializeCamer1();
InitializeCamerOCR();
InitializeCamer2();
InitializePaddleOCR();
@@ -263,31 +263,29 @@ namespace TetraPackOCR
#region
#region 1 OCR相机
private void InitializeCamer1()
private void InitializeCamerOCR()
{
try
{
cam0Opened = false;
camOCROpened = false;
DeviceList = Enumerator.EnumerateDevices(); //发现设备,搜索所有大华相机
// m_dev_cam0 = Enumerator.GetDeviceByIndex(0);//通过索引获取
m_dev_cam0 = Enumerator.GetDeviceByKey("Machine Vision:CK21686DAK00001");//通过"设备厂商名:设备序列号"获取
if (m_dev_cam0 == null)
m_dev_cam_ocr = Enumerator.GetDeviceByKey("Machine Vision:CK21686DAK00001");//通过"设备厂商名:设备序列号"获取
if (m_dev_cam_ocr == null)
{
log.Error("未发现OCR相机请检查相机连接");
return;
}
m_dev_cam0.CameraOpened += m_dev0_CameraOpened;
m_dev_cam0.CameraClosed += m_dev0_CameraClosed;
m_dev_cam0.ConnectionLost += m_dev0_ConnectionLost;
m_dev_cam_ocr.CameraOpened += m_dev_cam_ocr_CameraOpened;
m_dev_cam_ocr.CameraClosed += m_dev_cam_ocr_CameraClosed;
m_dev_cam_ocr.ConnectionLost += m_dev_cam_ocr_ConnectionLost;
if (!m_dev_cam0.Open())
if (!m_dev_cam_ocr.Open())
{
MessageBox.Show("OCR相机打开失败");
}
// 设置图像格式
// set PixelFormat
using (IEnumParameter p = m_dev_cam0.ParameterCollection[ParametrizeNameSet.ImagePixelFormat])
using (IEnumParameter p = m_dev_cam_ocr.ParameterCollection[ParametrizeNameSet.ImagePixelFormat])
{
ImagePixelFormat = "BayerRG8";
//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);
}
// 设置增益
using (IFloatParameter p = m_dev_cam0.ParameterCollection[ParametrizeNameSet.GainRaw])
using (IFloatParameter p = m_dev_cam_ocr.ParameterCollection[ParametrizeNameSet.GainRaw])
{
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");
}
using (IEnumParameter p = m_dev_cam0.ParameterCollection[ParametrizeNameSet.TriggerMode])
using (IEnumParameter p = m_dev_cam_ocr.ParameterCollection[ParametrizeNameSet.TriggerMode])
{
p.SetValue("On");
}
//if (!m_dev_cam0.Open())
//{
// MessageBox.Show(@"OCR相机连接失败");
// return;
//}
m_dev_cam0.StreamGrabber.ImageGrabbed += StreamGrabber_ImageGrabbed_0;
m_dev_cam0.StreamGrabber.GrabStarted += StreamGrabber_GrabStarted_0;
m_dev_cam_ocr.StreamGrabber.ImageGrabbed += StreamGrabber_ImageGrabbed_OCR;
m_dev_cam_ocr.StreamGrabber.GrabStarted += StreamGrabber_GrabStarted_OCR;
// 打开Software Trigger
// Set Software Trigger
m_dev_cam0.TriggerSet.Open(TriggerSourceEnum.Software);
if (!m_dev_cam0.GrabUsingGrabLoopThread())
m_dev_cam_ocr.TriggerSet.Open(TriggerSourceEnum.Software);
if (!m_dev_cam_ocr.GrabUsingGrabLoopThread())
{
// 开启采集失败
log.Error("开启采集失败");
return;
}
cam0Opened = true;
camOCROpened = true;
log.Info("OCR相机加载完毕");
}
catch (Exception ex)
{
cam0Opened = false;
camOCROpened = false;
log.Error("OCR相机加载失败");
m_dev_cam0 = null;
m_dev_cam_ocr = null;
}
}
private bool cam0Opened = false;
private bool camOCROpened = false;
private bool cam1Opened = false;
#endregion
#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相机启动码流");
}
@@ -372,7 +365,7 @@ namespace TetraPackOCR
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void StreamGrabber_ImageGrabbed_0(object sender, GrabbedEventArgs e)
private void StreamGrabber_ImageGrabbed_OCR(object sender, GrabbedEventArgs e)
{
try
{
@@ -442,11 +435,6 @@ namespace TetraPackOCR
{
p.SetValue("On");
}
//if (!m_dev_cam1.Open())
//{
// MessageBox.Show(@"定位相机连接失败");
// return;
//}
m_dev_cam1.StreamGrabber.ImageGrabbed += StreamGrabber_ImageGrabbed_1;
m_dev_cam1.StreamGrabber.GrabStarted += StreamGrabber_GrabStarted_1;
// 打开Software Trigger
@@ -485,7 +473,7 @@ namespace TetraPackOCR
void m_dev1_CameraOpened(object sender, EventArgs e)
{
// MessageBox.Show(m_dev_cam0.DeviceInfo.Key + "启动");
}
void StreamGrabber_GrabStarted_1(object sender, EventArgs e)
@@ -564,14 +552,14 @@ namespace TetraPackOCR
void ClossCam()
{
//注销相机事件
if (m_dev_cam0 != null)
if (m_dev_cam_ocr != null)
{
m_dev_cam0.CameraOpened -= m_dev0_CameraOpened;
m_dev_cam0.CameraClosed -= m_dev0_CameraClosed;
m_dev_cam0.ConnectionLost -= m_dev0_ConnectionLost;
m_dev_cam0.ShutdownGrab();
m_dev_cam0.Dispose();
m_dev_cam0 = null;
m_dev_cam_ocr.CameraOpened -= m_dev_cam_ocr_CameraOpened;
m_dev_cam_ocr.CameraClosed -= m_dev_cam_ocr_CameraClosed;
m_dev_cam_ocr.ConnectionLost -= m_dev_cam_ocr_ConnectionLost;
m_dev_cam_ocr.ShutdownGrab();
m_dev_cam_ocr.Dispose();
m_dev_cam_ocr = null;
}
if (m_dev_cam1 != null)
{
@@ -952,145 +940,7 @@ namespace TetraPackOCR
}
}
///判断当前Lans决定结果显示数量
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;
}
InitLableColumn();
this.btn_OrderNum.Enabled = true;
btn_OrderNum.BackColor = Color.DeepSkyBlue;
@@ -1105,6 +955,148 @@ namespace TetraPackOCR
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>
/// 手动ocr
/// </summary>
@@ -1112,7 +1104,7 @@ namespace TetraPackOCR
/// <param name="e"></param>
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");
}
/// <summary>
@@ -1128,7 +1120,7 @@ namespace TetraPackOCR
private bool autorunFlag = false;
private void btn_StarDet_manual_Click(object sender, EventArgs e)
{
if (cam0Opened == false || cam1Opened == false)
if (camOCROpened == false || cam1Opened == false)
{
MessageBox.Show("相机未打开,无法进行检测,请检查相机连接及状态!");
return;
@@ -1140,27 +1132,12 @@ namespace TetraPackOCR
return;
}
this.Invoke(new Action(() =>
if (MessageBox.Show("确认OCR相机处于零点位置", "提示", MessageBoxButtons.YesNo) == DialogResult.No)
{
this.lbl_L1_verOcrRs.Text = "未启用";
this.lbl_L1_verOcrRs.BackColor = Color.Gray;
this.lbl_L2_verOcrRs.Text = "未启用";
this.lbl_L2_verOcrRs.BackColor = Color.Gray;
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;
}));
return;
}
InitLableColumn();
autorunFlag = check_Autorun.Checked;
btn_StarDet_manual.Enabled = false;
@@ -1171,32 +1148,7 @@ namespace TetraPackOCR
list_Log.Clear();
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)
{
List<string> result = new List<string>();
@@ -1281,7 +1233,7 @@ namespace TetraPackOCR
log.Info("PLC触发OCR相机正在拍照计算...");
try
{
m_dev_cam0.ExecuteSoftwareTrigger();
m_dev_cam_ocr.ExecuteSoftwareTrigger();
}
catch (Exception ex)
{
@@ -1599,66 +1551,6 @@ namespace TetraPackOCR
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();
}
}
@@ -1809,51 +1701,7 @@ namespace TetraPackOCR
{
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)
{
btn_StarDet_manual.Enabled = true;