Added _ColorCollections
This commit is contained in:
		
							
								
								
									
										2
									
								
								Adaptation/.vscode/launch.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								Adaptation/.vscode/launch.json
									
									
									
									
										vendored
									
									
								
							| @ -4,7 +4,7 @@ | |||||||
|       "name": ".NET Core Attach", |       "name": ".NET Core Attach", | ||||||
|       "type": "coreclr", |       "type": "coreclr", | ||||||
|       "request": "attach", |       "request": "attach", | ||||||
|       "processId": 13700 |       "processId": 9360 | ||||||
|     } |     } | ||||||
|   ] |   ] | ||||||
| } | } | ||||||
|  | |||||||
| @ -1,5 +0,0 @@ | |||||||
| namespace Adaptation.FileHandlers.DEP08SIASM; |  | ||||||
|  |  | ||||||
| public class ProcessData |  | ||||||
| { |  | ||||||
| } |  | ||||||
| @ -4,6 +4,7 @@ using Adaptation.Shared; | |||||||
| using Adaptation.Shared.Methods; | using Adaptation.Shared.Methods; | ||||||
| using System; | using System; | ||||||
| using System.Collections.Generic; | using System.Collections.Generic; | ||||||
|  | using System.Drawing; | ||||||
| using System.IO; | using System.IO; | ||||||
| using System.Linq; | using System.Linq; | ||||||
| using System.Reflection; | using System.Reflection; | ||||||
| @ -14,9 +15,16 @@ namespace Adaptation.FileHandlers.jpeg; | |||||||
| public class FileRead : Shared.FileRead, IFileRead | public class FileRead : Shared.FileRead, IFileRead | ||||||
| { | { | ||||||
|  |  | ||||||
|     protected string _LastText; |     protected int _EndX; | ||||||
|  |     protected int _EndY; | ||||||
|  |     protected int _StartX; | ||||||
|  |     protected int _StartY; | ||||||
|  |     protected int[] _Bounds; | ||||||
|     protected long _LastChange; |     protected long _LastChange; | ||||||
|  |     protected string _LastText; | ||||||
|  |     protected string _TessDataDirectory; | ||||||
|     protected readonly Dictionary<string, string> _Reactors; |     protected readonly Dictionary<string, string> _Reactors; | ||||||
|  |     protected readonly List<(string, Color[])> _ColorCollections; | ||||||
|  |  | ||||||
|     public FileRead(ISMTP smtp, Dictionary<string, string> fileParameter, string cellInstanceName, string cellInstanceConnectionName, FileConnectorConfiguration fileConnectorConfiguration, string equipmentTypeName, string parameterizedModelObjectDefinitionType, IList<ModelObjectParameterDefinition> modelObjectParameters, string equipmentDictionaryName, Dictionary<string, List<long>> dummyRuns, bool useCyclicalForDescription, bool isEAFHosted) : |     public FileRead(ISMTP smtp, Dictionary<string, string> fileParameter, string cellInstanceName, string cellInstanceConnectionName, FileConnectorConfiguration fileConnectorConfiguration, string equipmentTypeName, string parameterizedModelObjectDefinitionType, IList<ModelObjectParameterDefinition> modelObjectParameters, string equipmentDictionaryName, Dictionary<string, List<long>> dummyRuns, bool useCyclicalForDescription, bool isEAFHosted) : | ||||||
|         base(new Description(), true, smtp, fileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, useCyclicalForDescription, isEAFHosted) |         base(new Description(), true, smtp, fileParameter, cellInstanceName, cellInstanceConnectionName, fileConnectorConfiguration, equipmentTypeName, parameterizedModelObjectDefinitionType, modelObjectParameters, equipmentDictionaryName, dummyRuns, useCyclicalForDescription, isEAFHosted) | ||||||
| @ -44,11 +52,11 @@ public class FileRead : Shared.FileRead, IFileRead | |||||||
|         string x86 = Path.Combine(entryAssemblyLocationDirectory, "x86"); |         string x86 = Path.Combine(entryAssemblyLocationDirectory, "x86"); | ||||||
|         if (!Directory.Exists(x86)) |         if (!Directory.Exists(x86)) | ||||||
|             _ = Directory.CreateDirectory(x86); |             _ = Directory.CreateDirectory(x86); | ||||||
|         string tessdata = Path.Combine(entryAssemblyLocationDirectory, "tessdata"); |         _TessDataDirectory = Path.Combine(entryAssemblyLocationDirectory, "tessdata"); | ||||||
|         if (!Directory.Exists(tessdata)) |         if (!Directory.Exists(_TessDataDirectory)) | ||||||
|             _ = Directory.CreateDirectory(tessdata); |             _ = Directory.CreateDirectory(_TessDataDirectory); | ||||||
|         string pdfttfSource = Path.Combine(entryAssemblyLocationDirectory, "pdf.ttf"); |         string pdfttfSource = Path.Combine(entryAssemblyLocationDirectory, "pdf.ttf"); | ||||||
|         string pdfttfDestination = Path.Combine(tessdata, Path.GetFileName(pdfttfSource)); |         string pdfttfDestination = Path.Combine(_TessDataDirectory, Path.GetFileName(pdfttfSource)); | ||||||
|         if (File.Exists(pdfttfSource) && !File.Exists(pdfttfDestination)) |         if (File.Exists(pdfttfSource) && !File.Exists(pdfttfDestination)) | ||||||
|             File.Copy(pdfttfSource, pdfttfDestination); |             File.Copy(pdfttfSource, pdfttfDestination); | ||||||
|         string tesseract41dllSource = Path.Combine(entryAssemblyLocationDirectory, "tesseract41.dll"); |         string tesseract41dllSource = Path.Combine(entryAssemblyLocationDirectory, "tesseract41.dll"); | ||||||
| @ -56,13 +64,24 @@ public class FileRead : Shared.FileRead, IFileRead | |||||||
|         if (File.Exists(tesseract41dllSource) && !File.Exists(tesseract41dllDestination)) |         if (File.Exists(tesseract41dllSource) && !File.Exists(tesseract41dllDestination)) | ||||||
|             File.Copy(tesseract41dllSource, tesseract41dllDestination); |             File.Copy(tesseract41dllSource, tesseract41dllDestination); | ||||||
|         string engtraineddataSource = Path.Combine(entryAssemblyLocationDirectory, "eng.traineddata"); |         string engtraineddataSource = Path.Combine(entryAssemblyLocationDirectory, "eng.traineddata"); | ||||||
|         string engtraineddataDestination = Path.Combine(tessdata, Path.GetFileName(engtraineddataSource)); |         string engtraineddataDestination = Path.Combine(_TessDataDirectory, Path.GetFileName(engtraineddataSource)); | ||||||
|         if (File.Exists(engtraineddataSource) && !File.Exists(engtraineddataDestination)) |         if (File.Exists(engtraineddataSource) && !File.Exists(engtraineddataDestination)) | ||||||
|             File.Copy(engtraineddataSource, engtraineddataDestination); |             File.Copy(engtraineddataSource, engtraineddataDestination); | ||||||
|         string leptonica1800dllSource = Path.Combine(entryAssemblyLocationDirectory, "leptonica-1.80.0.dll"); |         string leptonica1800dllSource = Path.Combine(entryAssemblyLocationDirectory, "leptonica-1.80.0.dll"); | ||||||
|         string leptonica1800dllDestination = Path.Combine(x86, Path.GetFileName(leptonica1800dllSource)); |         string leptonica1800dllDestination = Path.Combine(x86, Path.GetFileName(leptonica1800dllSource)); | ||||||
|         if (File.Exists(leptonica1800dllSource) && !File.Exists(leptonica1800dllDestination)) |         if (File.Exists(leptonica1800dllSource) && !File.Exists(leptonica1800dllDestination)) | ||||||
|             File.Copy(leptonica1800dllSource, leptonica1800dllDestination); |             File.Copy(leptonica1800dllSource, leptonica1800dllDestination); | ||||||
|  |         ModelObjectParameterDefinition[] images = GetProperties(cellInstanceConnectionName, modelObjectParameters, "Image."); | ||||||
|  |         string startX = GetPropertyValue(cellInstanceConnectionName, images, "Image.StartX"); | ||||||
|  |         string startY = GetPropertyValue(cellInstanceConnectionName, images, "Image.StartY"); | ||||||
|  |         string endX = GetPropertyValue(cellInstanceConnectionName, images, "Image.EndX"); | ||||||
|  |         string endY = GetPropertyValue(cellInstanceConnectionName, images, "Image.EndY"); | ||||||
|  |         _StartX = int.Parse(startX); | ||||||
|  |         _StartY = int.Parse(startY); | ||||||
|  |         _EndX = int.Parse(endX); | ||||||
|  |         _EndY = int.Parse(endY); | ||||||
|  |         string masterImageDirectory = GetPropertyValue(cellInstanceConnectionName, modelObjectParameters, "Path.Memory.Master.Images"); | ||||||
|  |         _ColorCollections = ProcessData.GetColorCollections(_StartX, _StartY, _EndX, _EndY, masterImageDirectory); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     void IFileRead.Move(Tuple<string, Test[], JsonElement[], List<FileInfo>> extractResults, Exception exception) => Move(extractResults, exception); |     void IFileRead.Move(Tuple<string, Test[], JsonElement[], List<FileInfo>> extractResults, Exception exception) => Move(extractResults, exception); | ||||||
| @ -141,7 +160,7 @@ public class FileRead : Shared.FileRead, IFileRead | |||||||
|             results.Item4.Add(new FileInfo(reportFullPath)); |             results.Item4.Add(new FileInfo(reportFullPath)); | ||||||
|         else |         else | ||||||
|         { |         { | ||||||
|             IProcessData iProcessData = new ProcessData(this, _Logistics, results.Item4); |             IProcessData iProcessData = new ProcessData(this, _Logistics, results.Item4, _TessDataDirectory, _StartX, _StartY, _EndX, _EndY, _ColorCollections); | ||||||
|             if (iProcessData is ProcessData _) |             if (iProcessData is ProcessData _) | ||||||
|             { |             { | ||||||
|                 if (!iProcessData.Details.Any()) |                 if (!iProcessData.Details.Any()) | ||||||
| @ -156,7 +175,7 @@ public class FileRead : Shared.FileRead, IFileRead | |||||||
|                 throw new Exception(string.Concat("C) No Data - ", dateTime.Ticks)); |                 throw new Exception(string.Concat("C) No Data - ", dateTime.Ticks)); | ||||||
|             if (_LastText != _Logistics.MID || _LastChange < DateTime.Now.AddMinutes(-30).Ticks) |             if (_LastText != _Logistics.MID || _LastChange < DateTime.Now.AddMinutes(-30).Ticks) | ||||||
|             { |             { | ||||||
|                 _LastText = _Logistics.MesEntity; |                 _LastText = _Logistics.MID; | ||||||
|                 _LastChange = DateTime.Now.Ticks; |                 _LastChange = DateTime.Now.Ticks; | ||||||
|                 results = iProcessData.GetResults(this, _Logistics, results.Item4); |                 results = iProcessData.GetResults(this, _Logistics, results.Item4); | ||||||
|             } |             } | ||||||
|  | |||||||
| @ -8,6 +8,7 @@ using System.Drawing; | |||||||
| using System.IO; | using System.IO; | ||||||
| using System.Linq; | using System.Linq; | ||||||
| using System.Text.Json; | using System.Text.Json; | ||||||
|  | using System.Text.RegularExpressions; | ||||||
| using Tesseract; | using Tesseract; | ||||||
|  |  | ||||||
| namespace Adaptation.FileHandlers.jpeg; | namespace Adaptation.FileHandlers.jpeg; | ||||||
| @ -24,7 +25,7 @@ public class ProcessData : IProcessData | |||||||
|  |  | ||||||
|     List<object> Shared.Properties.IProcessData.Details => _Details; |     List<object> Shared.Properties.IProcessData.Details => _Details; | ||||||
|  |  | ||||||
|     public ProcessData(IFileRead fileRead, Logistics logistics, List<FileInfo> fileInfoCollection) |     public ProcessData(IFileRead fileRead, Logistics logistics, List<FileInfo> fileInfoCollection, string tessDataDirectory, int startX, int startY, int endX, int endY, List<(string, Color[])> colorCollections) | ||||||
|     { |     { | ||||||
|         if (logistics is null) |         if (logistics is null) | ||||||
|         { } |         { } | ||||||
| @ -33,7 +34,7 @@ public class ProcessData : IProcessData | |||||||
|         _Details = new List<object>(); |         _Details = new List<object>(); | ||||||
|         MesEntity = logistics.MesEntity; |         MesEntity = logistics.MesEntity; | ||||||
|         _Log = LogManager.GetLogger(typeof(ProcessData)); |         _Log = LogManager.GetLogger(typeof(ProcessData)); | ||||||
|         Parse(fileRead, fileInfoCollection); |         Parse(fileRead, fileInfoCollection, tessDataDirectory, startX, startY, endX, endY, colorCollections); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     private static string Get(string value, bool useSplitForMID) |     private static string Get(string value, bool useSplitForMID) | ||||||
| @ -96,33 +97,79 @@ public class ProcessData : IProcessData | |||||||
|         return results; |         return results; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | #nullable enable | ||||||
| #pragma warning disable CA1416 | #pragma warning disable CA1416 | ||||||
|  |  | ||||||
|     private static (MemoryStream memoryStream, Color[]) Get(IFileRead fileRead, int thresHold, int startX, int startY, int endX, int endY) |     private static Color[] Get(string reportFullPath, int startX, int startY, int endX, int endY) | ||||||
|     { |     { | ||||||
|         Color color; |         Color color; | ||||||
|         List<Color> colors = new(); |         List<Color> colors = new(); | ||||||
|         MemoryStream memoryStream = new(); |         using Bitmap? bitmap = Image.FromFile(reportFullPath) as Bitmap; | ||||||
|         int middle = (int)(endY - startY * .5); |         if (bitmap is null) | ||||||
|         Bitmap selectedBitmap = new(endX - startX, endY - startY); |             throw new Exception($"Couldn't load image from <{reportFullPath}>"); | ||||||
|         using Bitmap bitmap = Image.FromFile(fileRead.ReportFullPath) as Bitmap; |  | ||||||
|         System.Drawing.Imaging.ImageFormat imageFormat = System.Drawing.Imaging.ImageFormat.Png; |  | ||||||
|         for (int x = startX; x < endX; x++) |         for (int x = startX; x < endX; x++) | ||||||
|         { |         { | ||||||
|             for (int y = startY; y < endY; y++) |             for (int y = startY; y < endY; y++) | ||||||
|             { |             { | ||||||
|                 color = bitmap.GetPixel(x, y); |                 color = bitmap.GetPixel(x, y); | ||||||
|                 if (y == middle) |                 colors.Add(color); | ||||||
|                     colors.Add(color); |             } | ||||||
|                 if (color.R > thresHold || color.G > thresHold || color.B > thresHold) |         } | ||||||
|                     selectedBitmap.SetPixel(x - startX, y - startY, Color.Black); |         return colors.ToArray(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     private static System.Drawing.Imaging.ImageFormat Get(string extension) | ||||||
|  |     { | ||||||
|  |         System.Drawing.Imaging.ImageFormat imageFormat = extension switch | ||||||
|  |         { | ||||||
|  |             ".bmp" => System.Drawing.Imaging.ImageFormat.Bmp, | ||||||
|  |             ".gif" => System.Drawing.Imaging.ImageFormat.Gif, | ||||||
|  |             ".jpeg" => System.Drawing.Imaging.ImageFormat.Jpeg, | ||||||
|  |             ".jpg" => System.Drawing.Imaging.ImageFormat.Jpeg, | ||||||
|  |             ".png" => System.Drawing.Imaging.ImageFormat.Png, | ||||||
|  |             ".tiff" => System.Drawing.Imaging.ImageFormat.Tiff, | ||||||
|  |             _ => throw new Exception("Extension not mapped"), | ||||||
|  |         }; | ||||||
|  |         return imageFormat; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     private static (Color[], int, int, MemoryStream) Get(string reportFullPath, string extension, int startX, int startY, int endX, int endY) | ||||||
|  |     { | ||||||
|  |         Color color; | ||||||
|  |         List<Color> colors = new(); | ||||||
|  |         MemoryStream memoryStream = new(); | ||||||
|  |         Bitmap selectedBitmap = new(endX - startX, endY - startY); | ||||||
|  |         System.Drawing.Imaging.ImageFormat imageFormat = Get(extension); | ||||||
|  |         using Bitmap? bitmap = Image.FromFile(reportFullPath) as Bitmap; | ||||||
|  |         if (bitmap is null) | ||||||
|  |             throw new Exception($"Couldn't load image from <{reportFullPath}>"); | ||||||
|  |         for (int x = startX; x < endX; x++) | ||||||
|  |         { | ||||||
|  |             for (int y = startY; y < endY; y++) | ||||||
|  |             { | ||||||
|  |                 color = bitmap.GetPixel(x, y); | ||||||
|  |                 colors.Add(color); | ||||||
|  |                 selectedBitmap.SetPixel(x - startX, y - startY, color); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|         selectedBitmap.Save(memoryStream, imageFormat); |         selectedBitmap.Save(memoryStream, imageFormat); | ||||||
|         return new(memoryStream, colors.ToArray()); |         return new(colors.ToArray(), endX - startX, endY - startY, memoryStream); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     private static void SaveToFile(MemoryStream memoryStream, string extension, string saveFileName) |     private static string Get(string saveFileName, string extension, string extra) | ||||||
|  |     { | ||||||
|  |         string result; | ||||||
|  |         string? directoryName = Path.GetDirectoryName(saveFileName); | ||||||
|  |         if (string.IsNullOrEmpty(directoryName)) | ||||||
|  |             throw new Exception("Couldn't get directoryName!"); | ||||||
|  |         string? fileNameWithoutExtension = Path.GetFileNameWithoutExtension(saveFileName); | ||||||
|  |         if (string.IsNullOrEmpty(fileNameWithoutExtension)) | ||||||
|  |             throw new Exception("Couldn't get fileNameWithoutExtension!"); | ||||||
|  |         result = Path.Combine(directoryName, $"{fileNameWithoutExtension} - {extra}{extension}"); | ||||||
|  |         return result; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     private static void SaveToFile(string extension, string saveFileName, MemoryStream memoryStream) | ||||||
|     { |     { | ||||||
|         System.Drawing.Imaging.ImageFormat imageFormat = extension switch |         System.Drawing.Imaging.ImageFormat imageFormat = extension switch | ||||||
|         { |         { | ||||||
| @ -138,44 +185,197 @@ public class ProcessData : IProcessData | |||||||
|         bitmap.Save(saveFileName, imageFormat); |         bitmap.Save(saveFileName, imageFormat); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     private static byte[] Get(bool development, string extension, string saveFileName, Color[] sourceColors, int width, int height, int thresHold, bool saveToFile) | ||||||
|  |     { | ||||||
|  |         int i = 0; | ||||||
|  |         Color color; | ||||||
|  |         MemoryStream memoryStream = new(); | ||||||
|  |         Bitmap selectedBitmap = new(width, height); | ||||||
|  |         System.Drawing.Imaging.ImageFormat imageFormat = Get(extension); | ||||||
|  |         string newSaveFileName = Get(saveFileName, extension, thresHold.ToString("000")); | ||||||
|  |         for (int x = 0; x < width; x++) | ||||||
|  |         { | ||||||
|  |             for (int y = 0; y < height; y++) | ||||||
|  |             { | ||||||
|  |                 color = sourceColors[i]; | ||||||
|  |                 if (color.R > thresHold || color.G > thresHold || color.B > thresHold) | ||||||
|  |                     selectedBitmap.SetPixel(x, y, Color.Black); | ||||||
|  |                 i += 1; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         selectedBitmap.Save(memoryStream, imageFormat); | ||||||
|  |         if (development && saveToFile) | ||||||
|  |             SaveToFile(extension, newSaveFileName, memoryStream); | ||||||
|  |         byte[] bytes = memoryStream.GetBuffer(); | ||||||
|  |         return bytes; | ||||||
|  |     } | ||||||
|  |  | ||||||
| #pragma warning restore CA1416 | #pragma warning restore CA1416 | ||||||
|  |  | ||||||
|     private static (MemoryStream, Color[]) Get(IFileRead fileRead, int thresHold) => Get(fileRead, thresHold, 330, 16, 400, 32); |     private static void SaveText(int red, int green, string text, string textFileName, List<(string File, int TotalDelta)> totalDeltaCollection, int readAt, string reading, int score) | ||||||
|  |  | ||||||
|     private void Parse(IFileRead fileRead, List<FileInfo> fileInfoCollection) |  | ||||||
|     { |     { | ||||||
|         int thresHold = 76; |         string format = "00000"; | ||||||
|         (MemoryStream memoryStream, Color[] colors) = Get(fileRead, thresHold); |         List<string> lines = new() { red.ToString(format), green.ToString(format), text }; | ||||||
|         byte[] bytes = memoryStream.GetBuffer(); |         foreach ((string file, int totalDelta) in totalDeltaCollection) | ||||||
|         using TesseractEngine engine = new(string.Empty, "eng", EngineMode.Default); |  | ||||||
|         using Pix img = Pix.LoadFromMemory(bytes); |  | ||||||
|         using Page page = engine.Process(img); |  | ||||||
|         string text = page.GetText().Trim(); |  | ||||||
|         if (!string.IsNullOrEmpty(text)) |  | ||||||
|             _Log.Debug(text); |  | ||||||
|         else |  | ||||||
|         { |         { | ||||||
|             int red = 0; |             lines.Add(file); | ||||||
|             int green = 0; |             lines.Add(totalDelta.ToString(format)); | ||||||
|             _Log.Debug("Looking by color"); |         } | ||||||
|             string extension = ".png"; |         lines.Add(readAt.ToString(format)); | ||||||
|             string saveFileName = Path.ChangeExtension(fileRead.ReportFullPath, extension); |         lines.Add(reading); | ||||||
|             SaveToFile(memoryStream, extension, saveFileName); |         lines.Add(score.ToString(format)); | ||||||
|             foreach (Color color in colors) |         File.WriteAllLines(textFileName, lines); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     internal static List<(string, Color[])> GetColorCollections(int startX, int startY, int endX, int endY, string masterImageDirectory) | ||||||
|  |     { | ||||||
|  |         List<(string, Color[])> results = new(); | ||||||
|  |         string[] files = Directory.GetFiles(masterImageDirectory, "*.jpeg", SearchOption.TopDirectoryOnly); | ||||||
|  |         foreach (string file in files) | ||||||
|  |             results.Add(new(file, Get(file, startX, startY, endX, endY))); | ||||||
|  |         return results; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     private void Parse(IFileRead fileRead, List<FileInfo> fileInfoCollection, string tessDataDirectory, int startX, int startY, int endX, int endY, List<(string, Color[])> colorCollections) | ||||||
|  |     { | ||||||
|  |         Pix pix; | ||||||
|  |         int delta; | ||||||
|  |         Page page; | ||||||
|  |         int readAt; | ||||||
|  |         Color color; | ||||||
|  |         int red = 0; | ||||||
|  |         string text; | ||||||
|  |         byte[] bytes; | ||||||
|  |         int green = 0; | ||||||
|  |         int totalDelta; | ||||||
|  |         string textFileName; | ||||||
|  |         string closestMatchFile; | ||||||
|  |         const int thresHold = 70; | ||||||
|  |         string closestMatchFileName; | ||||||
|  |         List<string> readings = new(); | ||||||
|  |         const int upperThresHold = 153; | ||||||
|  |         Regex regex = new(@"[^a-zA-Z]"); | ||||||
|  |         const string extension = ".tiff"; | ||||||
|  |         string[] closestMatchFileNameSplit; | ||||||
|  |         char[] closestMatchFileNameDistinct; | ||||||
|  |         List<(string File, int TotalDelta)> totalDeltaCollection = new(); | ||||||
|  |         string saveFileName = Path.ChangeExtension(fileRead.ReportFullPath, extension); | ||||||
|  |         (Color[] sourceColors, int width, int height, MemoryStream memoryStream) = Get(fileRead.ReportFullPath, extension, startX, startY, endX, endY); | ||||||
|  |         foreach ((string file, Color[] colors) in colorCollections) | ||||||
|  |         { | ||||||
|  |             totalDelta = 0; | ||||||
|  |             if (colors.Length != sourceColors.Length) | ||||||
|  |                 continue; | ||||||
|  |             for (int i = 0; i < sourceColors.Length; i++) | ||||||
|             { |             { | ||||||
|  |                 color = sourceColors[i]; | ||||||
|                 if (color.R > thresHold) |                 if (color.R > thresHold) | ||||||
|                     red += 1; |                     red += 1; | ||||||
|                 if (color.G > thresHold) |                 if (color.G > thresHold) | ||||||
|                     green += 1; |                     green += 1; | ||||||
|  |                 delta = color.R - colors[i].R; | ||||||
|  |                 if (delta > 0) | ||||||
|  |                     totalDelta += delta; | ||||||
|  |                 else | ||||||
|  |                     totalDelta += delta * -1; | ||||||
|  |                 delta = color.G - colors[i].G; | ||||||
|  |                 if (delta > 0) | ||||||
|  |                     totalDelta += delta; | ||||||
|  |                 else | ||||||
|  |                     totalDelta += delta * -1; | ||||||
|             } |             } | ||||||
|             if (red > green) |             totalDeltaCollection.Add(new(file, totalDelta)); | ||||||
|                 text = "Red*"; |  | ||||||
|             else |  | ||||||
|                 text = "Green*"; |  | ||||||
|             fileInfoCollection.Add(new FileInfo(saveFileName)); |  | ||||||
|         } |         } | ||||||
|         if (memoryStream is not null) |         totalDeltaCollection = (from l in totalDeltaCollection orderby l.TotalDelta select l).ToList(); | ||||||
|  |         bytes = memoryStream.GetBuffer(); | ||||||
|  |         closestMatchFile = totalDeltaCollection[0].File; | ||||||
|  |         closestMatchFileNameSplit = Path.GetFileNameWithoutExtension(closestMatchFile).Split('-'); | ||||||
|  |         closestMatchFileName = closestMatchFileNameSplit.Last().TrimStart(); | ||||||
|  |         closestMatchFileNameDistinct = closestMatchFileName.Distinct().ToArray(); | ||||||
|  |         using TesseractEngine tesseractEngine = new(tessDataDirectory, "eng", EngineMode.Default); | ||||||
|  |         pix = Pix.LoadTiffFromMemory(bytes); | ||||||
|  |         page = tesseractEngine.Process(pix); | ||||||
|  |         text = page.GetText().Trim(); | ||||||
|  |         pix.Dispose(); | ||||||
|  |         page.Dispose(); | ||||||
|  |         if (!fileRead.IsEAFHosted) | ||||||
|  |         { | ||||||
|  |             fileInfoCollection.Add(new FileInfo(saveFileName)); | ||||||
|  |             SaveToFile(extension, saveFileName, memoryStream); | ||||||
|  |         } | ||||||
|  |         if (!string.IsNullOrEmpty(text)) | ||||||
|  |         { | ||||||
|  |             text = regex.Replace(text, string.Empty); | ||||||
|  |             readings.Add(text); | ||||||
|  |         } | ||||||
|  |         if (text == closestMatchFileName) | ||||||
|  |         { | ||||||
|  |             readAt = thresHold; | ||||||
|  |             _Log.Info(text); | ||||||
|  |             textFileName = Get(saveFileName, ".txt", $"{thresHold:000} - {text}"); | ||||||
|  |             if (!fileRead.IsEAFHosted) | ||||||
|  |             { | ||||||
|  |                 fileInfoCollection.Add(new FileInfo(textFileName)); | ||||||
|  |                 SaveText(red, green, text, textFileName, totalDeltaCollection, readAt, text, int.MaxValue); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         else | ||||||
|  |         { | ||||||
|  |             readAt = -1; | ||||||
|             memoryStream.Dispose(); |             memoryStream.Dispose(); | ||||||
|  |             for (int i = thresHold; i < upperThresHold; i += 10) | ||||||
|  |             { | ||||||
|  |                 bytes = Get(!fileRead.IsEAFHosted, extension, saveFileName, sourceColors, width, height, i, i == thresHold); | ||||||
|  |                 pix = Pix.LoadTiffFromMemory(bytes); | ||||||
|  |                 page = tesseractEngine.Process(pix); | ||||||
|  |                 text = page.GetText().Trim(); | ||||||
|  |                 pix.Dispose(); | ||||||
|  |                 page.Dispose(); | ||||||
|  |                 if (!string.IsNullOrEmpty(text)) | ||||||
|  |                 { | ||||||
|  |                     text = regex.Replace(text, string.Empty); | ||||||
|  |                     readings.Add(text); | ||||||
|  |                 } | ||||||
|  |                 if (text == closestMatchFileName) | ||||||
|  |                 { | ||||||
|  |                     readAt = i; | ||||||
|  |                     _Log.Info(text); | ||||||
|  |                     textFileName = Get(saveFileName, ".txt", $"{i:000} - {text}"); | ||||||
|  |                     if (!fileRead.IsEAFHosted) | ||||||
|  |                     { | ||||||
|  |                         fileInfoCollection.Add(new FileInfo(textFileName)); | ||||||
|  |                         SaveText(red, green, text, textFileName, totalDeltaCollection, readAt, text, int.MaxValue); | ||||||
|  |                     } | ||||||
|  |                     break; | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         if (readAt < thresHold) | ||||||
|  |         { | ||||||
|  |             int score; | ||||||
|  |             char[] readingDistinct; | ||||||
|  |             text = closestMatchFileName; | ||||||
|  |             List<(string Reading, int Score)> readingEvaluations = new(); | ||||||
|  |             foreach (string reading in readings) | ||||||
|  |             { | ||||||
|  |                 score = 0; | ||||||
|  |                 readingDistinct = reading.Distinct().ToArray(); | ||||||
|  |                 for (int i = 0; i < closestMatchFileNameDistinct.Length; i++) | ||||||
|  |                 { | ||||||
|  |                     if (!readingDistinct.Contains(closestMatchFileNameDistinct[i])) | ||||||
|  |                         continue; | ||||||
|  |                     score += 1; | ||||||
|  |                 } | ||||||
|  |                 readingEvaluations.Add(new(reading, score)); | ||||||
|  |             } | ||||||
|  |             readingEvaluations = (from l in readingEvaluations orderby l.Score descending select l).ToList(); | ||||||
|  |             textFileName = Get(saveFileName, ".txt", $"{readAt:000} - {readingEvaluations[0].Reading} - {text}"); | ||||||
|  |             if (!fileRead.IsEAFHosted) | ||||||
|  |             { | ||||||
|  |                 fileInfoCollection.Add(new FileInfo(textFileName)); | ||||||
|  |                 SaveText(red, green, text, textFileName, totalDeltaCollection, readAt, readingEvaluations[0].Reading, readingEvaluations[0].Score); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|         _Details.Add(text); |         _Details.Add(text); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | |||||||
| @ -86,7 +86,6 @@ | |||||||
|     <Compile Include="Adaptation\FileHandlers\CellInstanceConnectionName.cs" /> |     <Compile Include="Adaptation\FileHandlers\CellInstanceConnectionName.cs" /> | ||||||
|     <Compile Include="Adaptation\FileHandlers\DEP08SIASM\FileRead.cs" /> |     <Compile Include="Adaptation\FileHandlers\DEP08SIASM\FileRead.cs" /> | ||||||
|     <Compile Include="Adaptation\FileHandlers\DEP08SIASM\Hyphen.cs" /> |     <Compile Include="Adaptation\FileHandlers\DEP08SIASM\Hyphen.cs" /> | ||||||
|     <Compile Include="Adaptation\FileHandlers\DEP08SIASM\ProcessData.cs" /> |  | ||||||
|     <Compile Include="Adaptation\FileHandlers\DownloadJpegFile\FileRead.cs" /> |     <Compile Include="Adaptation\FileHandlers\DownloadJpegFile\FileRead.cs" /> | ||||||
|     <Compile Include="Adaptation\FileHandlers\Dummy\FileRead.cs" /> |     <Compile Include="Adaptation\FileHandlers\Dummy\FileRead.cs" /> | ||||||
|     <Compile Include="Adaptation\FileHandlers\jpeg\Description.cs" /> |     <Compile Include="Adaptation\FileHandlers\jpeg\Description.cs" /> | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user