Commit a291af67 张东亮

OCR识别结果放入条码一起

1 个父辈 01fa4104
...@@ -156,7 +156,7 @@ namespace BLL ...@@ -156,7 +156,7 @@ namespace BLL
//保存需要识别ocr的区域 //保存需要识别ocr的区域
CurrntBitmap?.Save(@"ocr.jpg", System.Drawing.Imaging.ImageFormat.Jpeg); CurrntBitmap?.Save(@"ocr.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
regOcrCodes = OcrRecognize("..\\ocr.jpg"); regOcrCodes = OcrRecognize("..\\ocr.jpg");
LogNet.log.Info($"OCR 识别结果:{string.Join(",", regOcrCodes)}"); LogNet.log.Info($"OCR 识别结果:{regOcrCodes}");
} }
//优先匹配 //优先匹配
...@@ -396,7 +396,7 @@ namespace BLL ...@@ -396,7 +396,7 @@ namespace BLL
isCodeUsed = new bool[code.Count]; isCodeUsed = new bool[code.Count];
int matchCount = 0; int matchCount = 0;
bool isMatch = false; bool isMatch = false;
List<MaterialCodeOCR> ocrlist = new List<MaterialCodeOCR>(); List<MaterialCode> ocrlist = new List<MaterialCode>();
List<BarcodeInfo> ocrcode = new List<BarcodeInfo>(); List<BarcodeInfo> ocrcode = new List<BarcodeInfo>();
//命中规则的条码索引 //命中规则的条码索引
List<int> MatchCodeIndex = new List<int>(); List<int> MatchCodeIndex = new List<int>();
...@@ -424,14 +424,6 @@ namespace BLL ...@@ -424,14 +424,6 @@ namespace BLL
} }
} }
//var ocrmatch = mateTemp[index].Ocr.FindAll(o => o.CodeID == codeMatch[0].CodeID);
//foreach (var o in ocrmatch)
//{
// ocrlist.Add(o);
// ocrcode.Add(code[j]);
//}
//break;
} }
} }
...@@ -442,26 +434,21 @@ namespace BLL ...@@ -442,26 +434,21 @@ namespace BLL
} }
if (Config.Func_EnabledOCR) if (Config.Func_EnabledOCR)
{ {
foreach (var o in mateTemp[index].Ocr) List<MaterialCodeMatch> codeMatch = mateTemp[index].Match.FindAll(match => match.CodeType.Equals(Setting_Str.OCR));
{
ocrlist.Add(o); int ocrCount = codeMatch.Count;
//ocrcode.Add(code[j]); if (ocrCount > 0)
}
int ocrCount = ocrlist.Count;
if (ocrlist.Count > 0)
{ {
LogNet.log.Info($"{mateTemp[index].Name} 开始OCR匹配 [{ocrCount}]"); LogNet.log.Info($"{mateTemp[index].Name} 开始OCR匹配 [{ocrCount}]");
for (int i = 0; i < ocrlist.Count; i++) // for (int i = 0; i < ocrlist.Count; i++)
{ {
List<MaterialCodeMatch> codeMatch = mateTemp[index].Match.FindAll(match => match.CodeID == ocrlist[i].ID);
foreach (string regCode in regOcrCodes.Split(';')) foreach (string regCode in regOcrCodes.Split(';'))
{ {
if (string.IsNullOrEmpty(regCode)) continue; if (string.IsNullOrEmpty(regCode)) continue;
var x = new BarcodeInfo() { Text = regCode, CodeType = "OCR" }; var x = new BarcodeInfo() { Text = regCode, CodeType = Setting_Str.OCR };
Dictionary<string, string> matchKey = CodeMatch(x, codeMatch); Dictionary<string, string> matchKey = CodeMatch(x, codeMatch);
if (matchKey != null) if (matchKey != null)
{ {
foreach (string key in matchKey.Keys) foreach (string key in matchKey.Keys)
{ {
if (!keyword.ContainsKey(key)) if (!keyword.ContainsKey(key))
......
...@@ -9,5 +9,6 @@ namespace BLL ...@@ -9,5 +9,6 @@ namespace BLL
{ {
public class Setting_Str public class Setting_Str
{ {
public const string OCR = "OCR";
} }
} }
...@@ -56,10 +56,11 @@ namespace SmartScan ...@@ -56,10 +56,11 @@ namespace SmartScan
{ {
List<string> item = new(); List<string> item = new();
for (int i = 0; i < mateCopy[mateIndex].Code.Count; i++) for (int i = 0; i < mateCopy[mateIndex].Code.Count; i++)
{
item.Add(FormatCode(i)); item.Add(FormatCode(i));
}
return item.ToArray(); return item.ToArray();
} }
private string FormatCode(int index) private string FormatCode(int index)
{ {
MaterialCode code = mateCopy[mateIndex].Code[index]; MaterialCode code = mateCopy[mateIndex].Code[index];
...@@ -70,9 +71,16 @@ namespace SmartScan ...@@ -70,9 +71,16 @@ namespace SmartScan
string s = string.Format("({0}) ", index + 1) + text; string s = string.Format("({0}) ", index + 1) + text;
if (code.ID == mateCopy[mateIndex].PrimaryCode) if (code.ID == mateCopy[mateIndex].PrimaryCode)
s += " <P>"; s += " <P>";
//条码的关键字 //条码的关键字
List<string> arr = new(); List<string> arr = new();
List<MaterialCodeMatch> math = mateCopy[mateIndex].Match.FindAll(s => s.CodeID == mateCopy[mateIndex].Code[index].ID);
for (int j = 0; j < math.Count; j++)
arr.Add(math[j].Keyword);
if (arr.Count > 0)
s += " <OCR>";
arr = new();
for (int i = 0; i < mateCopy[mateIndex].Match.Count; i++) for (int i = 0; i < mateCopy[mateIndex].Match.Count; i++)
{ {
if (code.ID == mateCopy[mateIndex].Match[i].CodeID) if (code.ID == mateCopy[mateIndex].Match[i].CodeID)
...@@ -82,16 +90,27 @@ namespace SmartScan ...@@ -82,16 +90,27 @@ namespace SmartScan
s += " [" + string.Join(",", arr) + "]"; s += " [" + string.Join(",", arr) + "]";
//OCR的关键字 //OCR的关键字
arr = new(); //arr = new();
List<MaterialCodeOCR> codeOcr = mateCopy[mateIndex].Ocr.FindAll(s => s.CodeID == code.ID); //List<MaterialCode> codeOcr = mateCopy[mateIndex].Code.FindAll(s => s.CodeType.Equals(Setting_Str.OCR));
for (int i = 0; i < codeOcr.Count; i++) //for (int i = 0; i < codeOcr.Count; i++)
{ //{
List<MaterialCodeMatch> math = mateCopy[mateIndex].Match.FindAll(s => s.CodeID == codeOcr[i].ID); // List<MaterialCodeMatch> math = mateCopy[mateIndex].Match.FindAll(s => s.CodeID == codeOcr[i].ID);
for (int j = 0; j < math.Count; j++) // for (int j = 0; j < math.Count; j++)
arr.Add(math[j].Keyword); // arr.Add(math[j].Keyword);
} //}
if (arr.Count > 0) //if (arr.Count > 0)
s += " [OCR:" + string.Join(",", arr) + "]"; // s += " [OCR"+ "]";// + string.Join(",", arr) +
//arr = new();
//List<MaterialCodeOCR> codeOcr = mateCopy[mateIndex].Ocr.FindAll(s => s.CodeID == code.ID);
//for (int i = 0; i < codeOcr.Count; i++)
//{
// List<MaterialCodeMatch> math = mateCopy[mateIndex].Match.FindAll(s => s.CodeID == codeOcr[i].ID);
// for (int j = 0; j < math.Count; j++)
// arr.Add(math[j].Keyword);
//}
//if (arr.Count > 0)
// s += " [OCR:" + string.Join(",", arr) + "]";
return s; return s;
} }
...@@ -119,8 +138,8 @@ namespace SmartScan ...@@ -119,8 +138,8 @@ namespace SmartScan
if (dr != DialogResult.OK) return; if (dr != DialogResult.OK) return;
if (string.IsNullOrWhiteSpace(input.InputValue)) return; if (string.IsNullOrWhiteSpace(input.InputValue)) return;
//检查是否有已存在的名称 //检查是否有已存在的名称
var find= mateCopy.Find(s => s.Name.Equals(input.InputValue)); var find = mateCopy.Find(s => s.Name.Equals(input.InputValue));
if(find !=null) if (find != null)
{ {
string hint = Asa.FaceControl.Language.Dialog("KeyExists"); string hint = Asa.FaceControl.Language.Dialog("KeyExists");
hint = hint.Replace("[name]", input.InputValue); hint = hint.Replace("[name]", input.InputValue);
...@@ -226,9 +245,9 @@ namespace SmartScan ...@@ -226,9 +245,9 @@ namespace SmartScan
List<CameraVisionLib.Model.BarcodeInfo> info = Common.cameraVision.GetBarCode(bmp); List<CameraVisionLib.Model.BarcodeInfo> info = Common.cameraVision.GetBarCode(bmp);
LstCode.Items.Clear(); LstCode.Items.Clear();
ImgShow.CodeCenterClear(); ImgShow.CodeCenterClear();
mateCopy[mateIndex].Match.Clear();
mateCopy[mateIndex].Code.Clear(); mateCopy[mateIndex].Code.Clear();
mateCopy[mateIndex].Ocr.Clear(); mateCopy[mateIndex].Ocr.Clear();
mateCopy[mateIndex].Match.Clear();
mateCopy[mateIndex].PrimaryCode = -1; mateCopy[mateIndex].PrimaryCode = -1;
mateCopy[mateIndex].State = TemplateState.Unsaved; mateCopy[mateIndex].State = TemplateState.Unsaved;
Common.mateMaxCodeID = info.Count; Common.mateMaxCodeID = info.Count;
...@@ -271,7 +290,7 @@ namespace SmartScan ...@@ -271,7 +290,7 @@ namespace SmartScan
if (codeIndex == -1) return; if (codeIndex == -1) return;
MaterialCode code = mateCopy[mateIndex].Code[codeIndex]; MaterialCode code = mateCopy[mateIndex].Code[codeIndex];
List <MaterialCodeMatch> match = mateCopy[mateIndex].Match.FindAll(s => s.CodeID == code.ID); List<MaterialCodeMatch> match = mateCopy[mateIndex].Match.FindAll(s => s.CodeID == code.ID);
FrmCodeExtract frm = new(code.Text, code.ID, code.CodeType, match); FrmCodeExtract frm = new(code.Text, code.ID, code.CodeType, match);
DialogResult dr = frm.ShowDialog(); DialogResult dr = frm.ShowDialog();
if (dr == DialogResult.OK) if (dr == DialogResult.OK)
...@@ -288,8 +307,43 @@ namespace SmartScan ...@@ -288,8 +307,43 @@ namespace SmartScan
private void BtnOcrCode_Click(object sender, EventArgs e) private void BtnOcrCode_Click(object sender, EventArgs e)
{ {
if (codeIndex == -1) return; if (bmp == null) return;
//保存需要识别ocr的区域
bmp?.Save(@"ocrt.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
string[] regOcrCodes = PaddleOCRHelper.StartTest("..\\ocrt.jpg").Split(';');
LstCode.Items.Clear();
var ocrs = mateCopy[mateIndex].Code.FindAll(s => s.CodeType.Equals(Setting_Str.OCR));
foreach (var code in ocrs)
{
mateCopy[mateIndex].Code.Remove(code);
}
mateCopy[mateIndex].Match.Clear();
mateCopy[mateIndex].Ocr.Clear();
if (regOcrCodes.Length == 0)
{
string text = Language.Dialog(LanguageDialogKey.CODE_COUNT);
new FaceMessageBox("", text, MessageBoxButtons.OK).ShowDialog();
return;
}
mateCopy[mateIndex].State = TemplateState.Unsaved;
int startidx = Common.mateMaxCodeID + 1;
foreach (var ocr in regOcrCodes)
{
if (string.IsNullOrEmpty(ocr)) continue;
MaterialCode code = new()
{
ID = startidx,
Text = ocr,
CodeType = Setting_Str.OCR
};
mateCopy[mateIndex].Code.Add(code);
startidx++;
}
LstCode.Items.AddRange(FormatCode());
LstCode.SelectedIndex = codeIndex = -1;
//if (codeIndex == -1) return;
//var m = mateCopy[mateIndex].Match.Find(m=>m.CodeID==codeIndex); //var m = mateCopy[mateIndex].Match.Find(m=>m.CodeID==codeIndex);
//if (m == null) //if (m == null)
//{ //{
...@@ -302,21 +356,21 @@ namespace SmartScan ...@@ -302,21 +356,21 @@ namespace SmartScan
// new FaceMessageBox("", text, MessageBoxButtons.OK).ShowDialog(); // new FaceMessageBox("", text, MessageBoxButtons.OK).ShowDialog();
// return; // return;
//} //}
List<MaterialCodeOCR> codeOcr = mateCopy[mateIndex].Ocr.FindAll(s => s.CodeID == mateCopy[mateIndex].Code[codeIndex].ID); //List<MaterialCodeOCR> codeOcr = mateCopy[mateIndex].Ocr.FindAll(s => s.CodeID == mateCopy[mateIndex].Code[codeIndex].ID);
FrmCodeOCR frm = new(mateCopy[mateIndex].Code[codeIndex], codeOcr, mateCopy[mateIndex].Match, mateCopy[mateIndex].Image);
DialogResult dr = frm.ShowDialog();
if (dr == DialogResult.OK)
{
for (int i = 0; i < frm.codeOcr.Count; i++)
mateCopy[mateIndex].Match.RemoveAll(s => s.CodeID == frm.codeOcr[i].ID);
mateCopy[mateIndex].Ocr.RemoveAll(s => s.CodeID == mateCopy[mateIndex].Code[codeIndex].ID);
mateCopy[mateIndex].Ocr.AddRange(frm.codeOcr);
mateCopy[mateIndex].Match.AddRange(frm.codeMatch); //FrmCodeOCR frm = new(mateCopy[mateIndex].Code[codeIndex], codeOcr, mateCopy[mateIndex].Match, mateCopy[mateIndex].Image);
mateCopy[mateIndex].State = TemplateState.Unsaved; //DialogResult dr = frm.ShowDialog();
LstCode.Items[codeIndex] = FormatCode(codeIndex); //if (dr == DialogResult.OK)
} //{
// for (int i = 0; i < frm.codeOcr.Count; i++)
// mateCopy[mateIndex].Match.RemoveAll(s => s.CodeID == frm.codeOcr[i].ID);
// mateCopy[mateIndex].Ocr.RemoveAll(s => s.CodeID == mateCopy[mateIndex].Code[codeIndex].ID);
// mateCopy[mateIndex].Ocr.AddRange(frm.codeOcr);
// mateCopy[mateIndex].Match.AddRange(frm.codeMatch);
// mateCopy[mateIndex].State = TemplateState.Unsaved;
// LstCode.Items[codeIndex] = FormatCode(codeIndex);
//}
} }
private void BtnPrimaryCode_Click(object sender, EventArgs e) private void BtnPrimaryCode_Click(object sender, EventArgs e)
......
...@@ -145,7 +145,7 @@ namespace paddleOCR ...@@ -145,7 +145,7 @@ namespace paddleOCR
var res = engine.DetectText(imagebyte); var res = engine.DetectText(imagebyte);
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
res.TextBlocks.ForEach(s => { score += s.Score; sb.AppendLine(s.Text); }); res.TextBlocks.ForEach(s => { score += s.Score; sb.AppendLine(s.Text); });
log.Info($"【{item.FullName}】识别结果:【{score}】【{sb.ToString().Replace("\r", "").Replace("\n", ";")}】"); log.Info($"【{item.FullName}】结果:【{score}】【{sb.ToString().Replace("\r", "").Replace("\n", ";")}】");
if (score > maxScore) if (score > maxScore)
{ {
maxScore = score; maxScore = score;
...@@ -225,7 +225,7 @@ namespace paddleOCR ...@@ -225,7 +225,7 @@ namespace paddleOCR
{ {
result = result.Substring(0, result.Length - 1); result = result.Substring(0, result.Length - 1);
} }
log.Info("识别结果:" + result); log.Info($"识别结果[{strs.Length}]:" + result);
return true; return true;
} }
/// <summary> /// <summary>
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!