public charQuater(IPicAccess pic4x6) { if ((pic4x6.getDimenion() != new Size(4, 6))) { throw new ArgumentException("not 4x6"); } pic4x6.ToFile("pic4x6"); cornerStr = ""; cornerStr += getPixelChar(pic4x6, 3, 0); cornerStr += getPixelChar(pic4x6, 0, 0); cornerStr += getPixelChar(pic4x6, 0, 5); cornerStr += getPixelChar(pic4x6, 3, 5); ObjectDetection det = new ObjectDetection(pic4x6, false, true); det.DoDetection(new dOnDetectObject(delegate(ObjectPoints points, IPicAccess originalPic) { if (points.Type == PixelInfo.Black) { if (points.Points.Contains(topLeft) && points.Points.Contains(bottomRight)) { topLeftToBottomRight = true; } if (points.Points.Contains(topRight) && points.Points.Contains(bottomLeft)) { topRightToBottomLeft = true; } } return(true); }), false, 0); }
public static SpecificResult_Text DetectText(MyPic mPic, bool debug = false, int minSize = 0) { SpecificResult_Text r = new SpecificResult_Text(); StringBuilder sb = new StringBuilder(); try { DebLog(debug, "New"); MyPic mClone = (MyPic)mPic.getClone(); mClone.Threshold_AlmostBlack(); bool first = true; mClone.ToFileIfConfigured("TextRecognitionLibrary.DetectText.SaveInput"); ObjectDetection od = new ObjectDetection(mClone, true, true); int id = 0; od.DoDetection(new dOnDetectObject(delegate(ObjectPoints points, IPicAccess originalPic) { id++; string cnfDumpAll = ConfigurationManager.AppSettings["TextRecognitionLibrary.DetectText.DumpAll"]; if ((cnfDumpAll != null) && (Boolean.Parse(cnfDumpAll))) { MyPic picDumpAll = (MyPic)ObjectDetection.ObjectToPic_RegionOfInterest(points, originalPic); picDumpAll.ToFile(id.ToString()); } DebLog(debug, $"id{id} {points.Rect.Height}x{points.Rect.Width} soFar{sb}"); if (points.Rect.Height == 10) { MyPic pic10 = (MyPic)ObjectDetection.ObjectToPic_RegionOfInterest(points, originalPic); char c = TextCourierNew10.RecogniseChar(pic10); sb.Append(c); if (first) { first = false; r.TextPos = points.Points[0]; } } else if (points.Rect.Height == 11) { MyPic pic11 = (MyPic)ObjectDetection.ObjectToPic_RegionOfInterest(points, originalPic); char c = TextCourierNew11.RecogniseChar(pic11); sb.Append(c); if (first) { first = false; r.TextPos = points.Points[0]; } } else if (points.Rect.Height == 12) { ObjectDetection.ObjectToPic_RegionOfInterest(points, originalPic).ToFile("a12"); if ((points.Rect.Width == 4) || (points.Rect.Width == 5) || (points.Rect.Width == 7)) { IPicAccess pchar = ObjectDetection.ObjectToPic_RegionOfInterest(points, originalPic); IPicAccess pbu = pchar.getClone(); char c = TextRecognition.RecogniseChar(pchar); sb.Append(c); if (first) { first = false; r.TextPos = points.Points[0]; } } else if (points.Rect.Width == 8) { IPicAccess pchar = ObjectDetection.ObjectToPic_RegionOfInterest(points, originalPic) .getSubPic(1, 0, 7, 12); IPicAccess pbu = pchar.getClone(); char c = TextRecognition.RecogniseChar(pchar); sb.Append(c); if (first) { first = false; r.TextPos = points.Points[0]; } } else { // could this be 2 or more chars together? ObjectDetection.ObjectToPic_RegionOfInterest(points, originalPic).ToFile("subAll"); int x = 0; while (x < points.Rect.Width) { IPicAccess sub = mPic.getSubPic(points.Rect.X + x, points.Rect.Y, 7, 12); sub.ToFile("subtogether"); char c = TextRecognition.RecogniseChar(sub.getClone()); if (c == '?') { // not recognised x = points.Rect.Width; } else { x += 9; sb.Append(c); if (first) { first = false; r.TextPos = points.Points[0]; } } } } } return(true); }), debug, minSize); r.Text = sb.ToString(); return(r); } catch (Exception ex) { DebLog(debug, "Exception"); DebLog(debug, ex.Message); if (sb.ToString().Length > 0) { r.Text = sb.ToString(); return(r); } var err = new SpecificResult_Text(); err.Text = "Exception: " + ex.Message; err.TextPos = new Point(0, 0); return(err); } }
public static char RecogniseChar(IPicAccess pic) { pic.ToFile("RecogniseChar"); Size pSize = pic.getDimenion(); Size sBig = new Size(7, 12); Size sSmall4 = new Size(4, 12); Size sSmall5 = new Size(5, 12); doInitialisation_TextRecognition(); if ((pSize == sSmall4) || (pSize == sSmall5)) { charQuater q2 = new charQuater(pic.getSubPic(0, 0, 4, 6)); charQuater q3 = new charQuater(pic.getSubPic(0, 6, 4, 6)); string q23 = q2.ToString() + q3.ToString(); if (q23 == "?BWWB?BWWB") { return('1'); } } else if (pSize == sBig) { IPicAccess p1 = pic.getSubPic(3, 0, 4, 6); charQuater q1 = new charQuater(p1); IPicAccess p2 = pic.getSubPic(0, 0, 4, 6); charQuater q2 = new charQuater(p2); IPicAccess p3 = pic.getSubPic(0, 6, 4, 6); charQuater q3 = new charQuater(p3); IPicAccess p4 = pic.getSubPic(3, 6, 4, 6); charQuater q4 = new charQuater(p4); string q14 = q1.ToString() + q2.ToString() + q3.ToString() + q4.ToString(); Dictionary <string, char> charDir = new Dictionary <string, char>(); charDir.Add("\\WBWB/BWBW\\WBWB/BWBW", '0'); charDir.Add("\\WBWB?BWWW?WWBB?WWBB", '2'); charDir.Add("?WBWW?BWWW?WWBB?WWBB", '2'); charDir.Add("\\WBWB?BWWW/BWBB?WBBB", '2'); charDir.Add("?WBBW?BWWB?WWWB/BWBW", '3'); charDir.Add("/BWBB?WWWB?WWWW?BWWB", '4'); charDir.Add("?BBWW/BWBW?WWWB/BWBW", '5'); charDir.Add("?BBBW?BWWB?WBWB/BWBW", '5'); charDir.Add("?BBBB?BWWB?WBWB/BWBW", '5'); charDir.Add("?WBWB/BWBW\\WBWB/BWBW", '6'); charDir.Add("?WBBB/BWBB\\WBWB/BWBW", '6'); charDir.Add("?WBBW/BWBB\\WBWB/BWBW", '6'); charDir.Add("/BBBW?BBWB?BWWW?WBWW", '7'); charDir.Add("?WBBW?BWWB\\WBWB?WWBW", '8'); charDir.Add("?WBBW?BWWB?BWWB?WBBW", '8'); charDir.Add("?WBBW?BWWB?WWWB?WWBW", '8'); charDir.Add("\\WBWB/BWBW?WBWB/BWBW", '9'); charDir.Add("\\WBWB/BWBW?BBWB/BBBW", '9'); charDir.Add("\\WBWB/BWBW?BWWB/BBBW", '9'); charDir.Add("\\WBWB/BWBW?WWWB/BWBW", '9'); charDir.Add("\\WBWB/BBBW?WBBW?BWWW", 'p'); if (charDir.ContainsKey(q14)) { return(charDir[q14]); } if (q14 == "?WWWW?WWWW?WWWW?WWWW") { // no pattern, all corner while if (areWhite(pic, "0.9.1.9.2.9.3.9.3.10.3.11")) { return('4'); } } try { pic.getClone().ToFile( "CharUnknown_" + q14 .Replace("?", "_F_") .Replace("/", "_SF_") .Replace("\\", "_SB_")); } catch (SystemException) { } ObjectDetection test = new ObjectDetection(pic, false, true); int count = 0; test.DoDetection(new dOnDetectObject(delegate(ObjectPoints points, IPicAccess originalPic) { return(true); }), false, 0); //test.BiggerstWhite.Rect.Height > test = null; } return('?'); }