complete config for reading excel data
This commit is contained in:
@@ -39,6 +39,7 @@ using System.Windows.Documents;
|
||||
using System.Windows.Forms;
|
||||
using ThridLibray;
|
||||
using LibDataBase;
|
||||
using LibReadTetraExcel;
|
||||
|
||||
namespace TetraPackOCR
|
||||
{
|
||||
@@ -63,34 +64,11 @@ namespace TetraPackOCR
|
||||
/// 声明一个PaddleOCR对象
|
||||
/// </summary>
|
||||
PaddleOCREngine Engine;
|
||||
|
||||
/// <summary>
|
||||
///对应表格"P2生成数据"这一页
|
||||
/// </summary>
|
||||
ExcelWorksheet sheet1;
|
||||
/// <summary>
|
||||
/// 对应表格"QSV对应产品规格和梯度"这一页
|
||||
/// </summary>
|
||||
ExcelWorksheet sheet2;
|
||||
/// <summary>
|
||||
/// 对应"产品规格对应排布方式"这一页
|
||||
/// </summary>
|
||||
ExcelWorksheet sheet3;
|
||||
/// <summary>
|
||||
/// 表格路径
|
||||
/// </summary>
|
||||
string execlFileName = AppDomain.CurrentDomain.BaseDirectory + "Data\\Excle\\OCR文件0602.xlsx";
|
||||
|
||||
/// <summary>
|
||||
/// 共印依据 QSV Design, Layers, Colours,产品规格
|
||||
/// </summary>
|
||||
string m_ProductStandard;
|
||||
/// <summary>
|
||||
/// 幅数 包材宽 梯度 X距离 Y距离
|
||||
/// </summary>
|
||||
int NumberOfLanes;
|
||||
double m_width, m_Gradient, m_DistX, m_DistY, m_height;
|
||||
int m_ColorMax = 0;
|
||||
OrderConfig config = null;
|
||||
/// <summary>
|
||||
/// 定位Vpp文件
|
||||
/// </summary>
|
||||
@@ -666,131 +644,65 @@ namespace TetraPackOCR
|
||||
}
|
||||
|
||||
log.Info("当前订单号为:" + order);
|
||||
//读取表格内容
|
||||
ExcelPackage.License.SetNonCommercialOrganization("My Noncommercial organization");
|
||||
using (ExcelPackage package = new ExcelPackage(execlFileName))
|
||||
config = ExcelHelper.ReadOCROrder(execlFileName, order);
|
||||
if (config.ParseQSV)
|
||||
{
|
||||
sheet1 = package.Workbook.Worksheets["P2生成数据"];
|
||||
sheet2 = package.Workbook.Worksheets["QSV对应产品规格和梯度"];
|
||||
sheet3 = package.Workbook.Worksheets["产品规格对应排布方式"];
|
||||
//根据订单遍历sheet1 找Sequence QSV NumOFLanes 字符
|
||||
string currentQSV = "";
|
||||
for (int i = 1; i < sheet1.Dimension.Rows; i++)
|
||||
lbl_QSV.Text = config.QSV;
|
||||
log.Info("当前订单QSV:" + config.QSV);
|
||||
log.Info("当前订单Number Of Lanes:" + config.NumberOfLanes);
|
||||
lbl_NO.Text = config.NumberOfLanes.ToString();
|
||||
|
||||
var result = config.OCRDesign
|
||||
.GroupBy(kvp => kvp.Value, kvp => kvp.Key)
|
||||
.ToDictionary(g => g.Key, g => g.ToList());
|
||||
foreach (var kvp in result)
|
||||
{
|
||||
if (sheet1.GetValue(i, 3) != null)
|
||||
{
|
||||
if (sheet1.Cells[i, 3].Value.ToString() == order)
|
||||
{
|
||||
currentQSV = sheet1.Cells[i, 4].Value.ToString();
|
||||
lbl_QSV.Text = currentQSV;
|
||||
log.Info("当前订单QSV:" + currentQSV);
|
||||
NumberOfLanes = Convert.ToInt32(sheet1.Cells[i, 5].Value.ToString());
|
||||
log.Info("当前订单Number Of Lanes:" + NumberOfLanes);
|
||||
lbl_NO.Text = sheet1.Cells[i, 5].Value.ToString();
|
||||
|
||||
int num = 0;
|
||||
for (int k = 0; k < 10; k++)
|
||||
{
|
||||
string lanes = sheet1.Cells[i + k, 6].Value.ToString();
|
||||
string design = sheet1.Cells[i + k, 7].Value.ToString().Split('-')[1];
|
||||
lanes = lanes.Substring(1, lanes.Length - 2);
|
||||
string[] tmp = lanes.Split(',');
|
||||
num += tmp.Length;
|
||||
List<string> textOCR = ExecelGetOcrText(design, sheet1.Cells[i + k, 8].Value.ToString());
|
||||
foreach (string lan in tmp)
|
||||
{
|
||||
int lanInt = Convert.ToInt32(lan);
|
||||
ocrTextRequest[lanInt] = textOCR;
|
||||
ocrTextDesign[lanInt] = design;
|
||||
}
|
||||
listBox1.Items.Add(sheet1.Cells[i + k, 6].Value.ToString());
|
||||
listBox1.Items.Add(string.Join(",", textOCR));
|
||||
|
||||
if (num >= NumberOfLanes)
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(currentQSV))
|
||||
{
|
||||
string qsv;
|
||||
//根据得到的QSV遍历sheet2 找产品规格和宽度梯度
|
||||
for (int j = 1; j <= sheet2.Dimension.Rows; j++)
|
||||
{
|
||||
qsv = sheet2.Cells[j, 1].Value.ToString();
|
||||
if (qsv == currentQSV)
|
||||
{
|
||||
m_ProductStandard = sheet2.Cells[j, 2].Value.ToString();
|
||||
lbl_ProductStandard.Text = m_ProductStandard;
|
||||
log.Info("当前订单产品编号:" + m_ProductStandard);
|
||||
m_width = Convert.ToDouble(sheet2.Cells[j, 3].Value.ToString());
|
||||
lbl_width.Text = sheet2.Cells[j, 3].Value.ToString();
|
||||
log.Info("当前订单幅宽:" + m_width);
|
||||
m_height = Convert.ToDouble(sheet2.Cells[j, 4].Value.ToString());
|
||||
lbl_height.Text = sheet2.Cells[j, 4].Value.ToString();
|
||||
log.Info("当前订单幅高:" + m_height);
|
||||
m_Gradient = Convert.ToDouble(sheet2.Cells[j, 5].Value.ToString());
|
||||
lbl_Gradient.Text = sheet2.Cells[j, 5].Value.ToString();
|
||||
log.Info("当前订单梯度:" + m_Gradient);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (string.IsNullOrEmpty(m_ProductStandard))
|
||||
{
|
||||
log.Debug("ProductStandard未找到,请检查订单号是否正确");
|
||||
btn_OrderNum.Enabled = true;
|
||||
btn_OrderNum.BackColor = Color.DeepSkyBlue;
|
||||
return;
|
||||
}
|
||||
//根据产品规格获取距离坐标
|
||||
for (int n = 1; n < sheet3.Dimension.Rows; n++)
|
||||
{
|
||||
if (sheet3.GetValue(n, 1) != null)
|
||||
{
|
||||
if (sheet3.Cells[n, 1].Value.ToString() == m_ProductStandard)
|
||||
{
|
||||
string str = sheet3.Cells[n + ocrTextRequest[1].Count - 1, 4].Value.ToString();
|
||||
string[] x_y = str.Split(',');
|
||||
string[] X = x_y[0].Split(':');
|
||||
string[] Y = x_y[1].Split(':');
|
||||
m_DistX = Convert.ToDouble(X[1].Replace("mm", ""));
|
||||
lbl_DistX.Text = X[1].Replace("mm", "");
|
||||
log.Info("当前订单X偏移:" + m_DistX);
|
||||
m_DistY = Convert.ToDouble(Y[1].Replace("mm", ""));
|
||||
lbl_DistY.Text = Y[1].Replace("mm", "");
|
||||
log.Info("当前订单Y偏移:" + m_DistY);
|
||||
|
||||
string alignColor = sheet3.Cells[n + ocrTextRequest[1].Count - 1, 3].Value.ToString();
|
||||
if (alignColor.Contains("单排"))
|
||||
m_ColorMax = ocrTextRequest.Values.Select(x => x.Count).Max();// ocrTextRequest[1].Count;
|
||||
else
|
||||
m_ColorMax = alignColor.Replace("排布", "").Split(',').ToList().Select(int.Parse).Max();
|
||||
log.Info("当前排布方式:" + alignColor);
|
||||
log.Info("单行最大数量:" + m_ColorMax.ToString());
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (m_DistX == 0 || m_DistY == 0)
|
||||
{
|
||||
log.Debug("DistX,DistY未找到,请检查订单号是否正确");
|
||||
btn_OrderNum.Enabled = true;
|
||||
btn_OrderNum.BackColor = Color.DeepSkyBlue;
|
||||
return;
|
||||
}
|
||||
log.Info("相关数据已获取完成,且已显示在界面中,请查看。");
|
||||
}
|
||||
else
|
||||
{
|
||||
log.Debug("QSV未找到,请检查订单号是否正确");
|
||||
btn_OrderNum.Enabled = true;
|
||||
btn_OrderNum.BackColor = Color.DeepSkyBlue;
|
||||
return;
|
||||
listBox1.Items.Add(string.Join(",", kvp.Value));
|
||||
listBox1.Items.Add(string.Join(",", config.OCRRequest[kvp.Value[0]]));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
log.Debug("QSV未找到,请检查订单号是否正确");
|
||||
btn_OrderNum.Enabled = true;
|
||||
btn_OrderNum.BackColor = Color.DeepSkyBlue;
|
||||
return;
|
||||
}
|
||||
if (config.ParseProduct)
|
||||
{
|
||||
lbl_ProductStandard.Text = config.ProductStandard;
|
||||
log.Info("当前订单产品编号:" + config.ProductStandard);
|
||||
lbl_width.Text = config.Width.ToString();
|
||||
log.Info("当前订单幅宽:" + config.Width);
|
||||
lbl_height.Text = config.Height.ToString();
|
||||
log.Info("当前订单幅高:" + config.Height);
|
||||
lbl_Gradient.Text = config.Gradient.ToString();
|
||||
log.Info("当前订单梯度:" + config.Gradient);
|
||||
}
|
||||
else
|
||||
{
|
||||
log.Debug("ProductStandard未找到,请检查订单号是否正确");
|
||||
btn_OrderNum.Enabled = true;
|
||||
btn_OrderNum.BackColor = Color.DeepSkyBlue;
|
||||
return;
|
||||
}
|
||||
if (config.ParseArrange)
|
||||
{
|
||||
lbl_DistX.Text = config.DistX.ToString();
|
||||
log.Info("当前订单X偏移:" + config.DistX);
|
||||
lbl_DistY.Text = config.DistY.ToString();
|
||||
log.Info("当前订单Y偏移:" + config.DistY);
|
||||
log.Info("当前排布方式:" + config.ColorArray);
|
||||
log.Info("单行最大数量:" + config.ColorMax.ToString());
|
||||
}
|
||||
else
|
||||
{
|
||||
log.Debug("DistX,DistY未找到,请检查订单号是否正确");
|
||||
btn_OrderNum.Enabled = true;
|
||||
btn_OrderNum.BackColor = Color.DeepSkyBlue;
|
||||
return;
|
||||
}
|
||||
log.Info("相关数据已获取完成,且已显示在界面中,请查看。");
|
||||
|
||||
//判断当前Lans决定结果显示数量
|
||||
InitLableColumn();
|
||||
@@ -812,7 +724,7 @@ namespace TetraPackOCR
|
||||
}
|
||||
private void InitLableColumn()
|
||||
{
|
||||
switch (NumberOfLanes)
|
||||
switch (config.NumberOfLanes)
|
||||
{
|
||||
case 1:
|
||||
Invoke(new Action(() =>
|
||||
@@ -1004,7 +916,7 @@ namespace TetraPackOCR
|
||||
|
||||
m_GotoZero = false;
|
||||
m_startTime = DateTime.Now;
|
||||
m_textWidth = 18 - (NumberOfLanes - 5);
|
||||
m_textWidth = 18 - (config.NumberOfLanes - 5);
|
||||
//m_textWidth = Convert.ToDouble(textBox1.Text);
|
||||
ocrAcc.Clear();
|
||||
autorunFlag = check_Autorun.Checked;
|
||||
@@ -1039,9 +951,7 @@ namespace TetraPackOCR
|
||||
/// </summary>
|
||||
void ClearData()
|
||||
{
|
||||
m_ProductStandard = null;
|
||||
NumberOfLanes = 0; m_width = 0; m_Gradient = 0; m_DistX = 0; m_DistY = 0;
|
||||
m_height = 0;
|
||||
config = new OrderConfig();
|
||||
}
|
||||
/// <summary>
|
||||
/// 清空上次订单显示区
|
||||
@@ -1301,7 +1211,7 @@ namespace TetraPackOCR
|
||||
fs.Close();
|
||||
log.Info("OCR存图已完成");
|
||||
|
||||
CutPicture(savePath + '\\' + strTime + ".bmp", 400 + 200 * (6 - m_ColorMax), 2000, 3400 + 200 * m_ColorMax, 1600);
|
||||
CutPicture(savePath + '\\' + strTime + ".bmp", 400 + 200 * (6 - config.ColorMax), 2000, 3400 + 200 * config.ColorMax, 1600);
|
||||
if (Engine == null)
|
||||
{
|
||||
log.Error("Engine未初始化");
|
||||
@@ -1858,7 +1768,7 @@ namespace TetraPackOCR
|
||||
return;
|
||||
}
|
||||
|
||||
if (NumberOfLanes + 1 == mMatchingStr)
|
||||
if (config.NumberOfLanes + 1 == mMatchingStr)
|
||||
{
|
||||
Thread.Sleep(3000);
|
||||
EnableStartDetect();
|
||||
@@ -1964,27 +1874,27 @@ namespace TetraPackOCR
|
||||
if (ocrTextRequest[1].Count == 0)
|
||||
return;
|
||||
|
||||
double xx = x - (m_textWidth * m_ColorMax) / 2.0;
|
||||
double xx = x - (m_textWidth * config.ColorMax) / 2.0;
|
||||
double yy = y;
|
||||
double rr = r;
|
||||
|
||||
List<float> locationXY = new List<float>();
|
||||
double ocrx = 0, ocry = 0;
|
||||
locationXY.Add((float)NumberOfLanes);
|
||||
int nol = Convert.ToInt32(NumberOfLanes);
|
||||
locationXY.Add((float)config.NumberOfLanes);
|
||||
int nol = Convert.ToInt32(config.NumberOfLanes);
|
||||
log.Info("当前订单OCR区域共" + nol + "组:");
|
||||
double degree = (rr * Math.PI) / 180;
|
||||
for (int item = 0; item < nol; item++)
|
||||
{
|
||||
if (item == 0)
|
||||
{
|
||||
ocrx = xx - m_DistX * Math.Cos(degree) - m_DistY * Math.Sin(degree);
|
||||
ocry = yy + m_DistY * Math.Cos(degree) - m_DistX * Math.Sin(degree);
|
||||
ocrx = xx - config.DistX * Math.Cos(degree) - config.DistY * Math.Sin(degree);
|
||||
ocry = yy + config.DistY * Math.Cos(degree) - config.DistX * Math.Sin(degree);
|
||||
}
|
||||
else
|
||||
{
|
||||
ocrx = ocrx + m_width * Math.Cos(degree) + m_Gradient * Math.Sin(degree);
|
||||
ocry = ocry - m_Gradient * Math.Cos(degree) + m_width * Math.Sin(degree);
|
||||
ocrx = ocrx + config.Width * Math.Cos(degree) + config.Gradient * Math.Sin(degree);
|
||||
ocry = ocry - config.Gradient * Math.Cos(degree) + config.Width * Math.Sin(degree);
|
||||
}
|
||||
|
||||
log.Info("第" + (item + 1) + "组坐标为:X:" + ocrx + ",Y:" + ocry + "。");
|
||||
@@ -2001,14 +1911,14 @@ namespace TetraPackOCR
|
||||
|
||||
if (ocry < - 50)
|
||||
{
|
||||
ocrx = ocrx - m_height * Math.Sin(degree);
|
||||
ocry = ocry + m_height * Math.Cos(degree);
|
||||
ocrx = ocrx - config.Height * Math.Sin(degree);
|
||||
ocry = ocry + config.Height * Math.Cos(degree);
|
||||
log.Info("更新第" + (item + 1) + "组坐标为:X:" + ocrx + ",Y:" + ocry + "。");
|
||||
}
|
||||
else if (ocry > 400)
|
||||
{
|
||||
ocrx = ocrx + m_height * Math.Sin(degree);
|
||||
ocry = ocry - m_height * Math.Cos(degree);
|
||||
ocrx = ocrx + config.Height * Math.Sin(degree);
|
||||
ocry = ocry - config.Height * Math.Cos(degree);
|
||||
log.Info("更新第" + (item + 1) + "组坐标为:X:" + ocrx + ",Y:" + ocry + "。");
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user