public unsafe void Convert_BitmapToPix(PixelFormat pixelFormat) { var depth = Image.GetPixelFormatSize(pixelFormat); string pixType; if (depth < 16) { pixType = "palette"; } else if (depth == 16) { pixType = "grayscale"; } else { pixType = Image.IsAlphaPixelFormat(pixelFormat) ? "argb" : "rgb"; } var sourceFile = string.Format("Conversion/photo_{0}_{1}bpp.tif", pixType, depth); var sourceFilePath = TestFilePath(sourceFile); var bitmapConverter = new BitmapToPixConverter(); using (var source = new Bitmap(sourceFilePath)) { Assert.AreEqual(source.PixelFormat, pixelFormat); Assert.AreEqual(source.GetBPP(), depth); using (var dest = bitmapConverter.Convert(source)) { var destFilename = string.Format("Conversion/BitmapToPix_{0}_{1}bpp.tif", pixType, depth); dest.Save(TestResultRunFile(destFilename), ImageFormat.Tiff); AssertAreEquivalent(source, dest, true); } } }
public unsafe void Convert_BitmapToPix(int depth) { string pixType; if (depth < 16) { pixType = "palette"; } else if (depth == 16) { pixType = "grayscale"; } else { pixType = "rgb"; } var sourceFile = String.Format("Conversion/photo_{0}_{1}bpp.tif", pixType, depth); var sourceFilePath = TestFilePath(sourceFile); var bitmapConverter = new BitmapToPixConverter(); using (var source = new Bitmap(sourceFilePath)) { Assert.That(BitmapHelper.GetBPP(source), Is.EqualTo(depth)); using (var dest = bitmapConverter.Convert(source)) { var destFilename = String.Format("Conversion/BitmapToPix_{0}_{1}bpp.tif", pixType, depth); dest.Save(TestResultRunFile(destFilename), ImageFormat.Tiff); AssertAreEquivalent(source, dest, true); } } }
private static void InvokeTesseractOnBitmap(Bitmap bitmap, TesseractEngine engine) { BitmapToPixConverter converter = new BitmapToPixConverter(); using (var img = converter.Convert(bitmap)) { using (var page = engine.Process(img)) { var text = page.GetText(); Console.WriteLine(text); } } }
public unsafe void Convert_BitmapToPix( [Values("photo.jpg", "photo.bmp", "photo_8.bmp", "photo_24.bmp", "photo.png", "photo_8.png", "photo_24.png", "photo_32.png", "photo.tif", "photo.gif")] string sourceFile) { var sourceFilePath = Path.Combine(DataDirectory, sourceFile); var bitmapConverter = new BitmapToPixConverter(); using (var source = new Bitmap(sourceFilePath)) { using (var dest = bitmapConverter.Convert(source)) { AssertAreEquivalent(source, dest, true); //dest.Save("converted_img.bmp"); } } }
private static string AnalyseFrameUsingTesseract(Bitmap c1, TesseractEngine engine, out float cf1) { var conv = new BitmapToPixConverter(); var p = conv.Convert(c1); string t1; using (var page = engine.Process(p)) { t1 = page.GetText().Replace("\n\n", "").Replace(".", "").Replace(",", ""); cf1 = page.GetMeanConfidence(); } return(t1); }
private string ReadTextFromImage() { string result = ""; var imageConverter = new BitmapToPixConverter(); Pix image = imageConverter.Convert(new Bitmap(@"E:\CompanyID.JPG")); TesseractEngine ocr = new TesseractEngine(@"E:\tessdata", "eng"); var ocrResult = ocr.Process(image, region: Rect.Empty); result = ocrResult.GetText(); //MessageBox.Show(ocrResult.GetText()); return(result); }
public unsafe void Convert_BitmapToPix_Format8bppIndexed() { var sourceFile = TestFilePath("Conversion/photo_palette_8bpp.png"); var bitmapConverter = new BitmapToPixConverter(); using (var source = new Bitmap(sourceFile)) { Assert.That(source.GetBPP(), Is.EqualTo(8)); Assert.That(source.PixelFormat, Is.EqualTo(PixelFormat.Format8bppIndexed)); using (var dest = bitmapConverter.Convert(source)) { var destFilename = TestResultRunFile("Conversion/BitmapToPix_palette_8bpp.png"); dest.Save(destFilename, ImageFormat.Png); AssertAreEquivalent(source, dest, true); } } }
public unsafe void Convert_ScaledBitmapToPix() { var sourceFilePath = TestFilePath("Conversion/photo_rgb_32bpp.tif"); var bitmapConverter = new BitmapToPixConverter(); using (var source = new Bitmap(sourceFilePath)) { using (var scaledSource = new Bitmap(source, new Size(source.Width * 2, source.Height * 2))) { Assert.That(scaledSource.GetBPP(), Is.EqualTo(32)); using (var dest = bitmapConverter.Convert(scaledSource)) { dest.Save(TestResultRunFile("Conversion/ScaledBitmapToPix_rgb_32bpp.tif"), ImageFormat.Tiff); AssertAreEquivalent(scaledSource, dest, true); } } } }
public void ReadScreen() { try { log.Info("OCR read screen"); TesseractEnviornment.CustomSearchPath = "resources/Tesseract"; var engine = new TesseractEngine(@"./resources/Tesseract/tessdata", "eng", EngineMode.Default); //var engine = new TesseractEngine(@"./tessdata", "eng", EngineMode.Default); var conv = new BitmapToPixConverter(); var img = conv.Convert(ImageUtil.RemoveNoise(ImageUtil.SetGrayscale(adbClass.GetAdbScreen()))); var page = engine.Process(img); log.Info("OCR : " + page.GetText()); } catch (Exception e) { log.Debug(e); } }
public unsafe void Convert_BitmapToPix_Format8bppIndexed() { if (!Directory.Exists(ResultsDirectory)) Directory.CreateDirectory(ResultsDirectory); var sourceFile = "photo_palette_8bpp.png"; var sourceFilePath = Path.Combine(DataDirectory, sourceFile); var bitmapConverter = new BitmapToPixConverter(); using (var source = new Bitmap(sourceFilePath)) { Assert.That(BitmapHelper.GetBPP(source), Is.EqualTo(8)); Assert.That(source.PixelFormat, Is.EqualTo(PixelFormat.Format8bppIndexed)); using (var dest = bitmapConverter.Convert(source)) { var destFilename = "BitmapToPix_palette_8bpp.png"; dest.Save(Path.Combine(ResultsDirectory, destFilename), ImageFormat.Png); AssertAreEquivalent(source, dest, true); } } }
public unsafe void Convert_ScaledBitmapToPix() { if (!Directory.Exists(ResultsDirectory)) Directory.CreateDirectory(ResultsDirectory); var sourceFile = "photo_rgb_32bpp.tif"; var sourceFilePath = Path.Combine(DataDirectory, sourceFile); var bitmapConverter = new BitmapToPixConverter(); using (var source = new Bitmap(sourceFilePath)) { using (var scaledSource = new Bitmap(source, new Size(source.Width * 2, source.Height * 2))) { Assert.That(BitmapHelper.GetBPP(scaledSource), Is.EqualTo(32)); using (var dest = bitmapConverter.Convert(scaledSource)) { var destFilename = "ScaledBitmapToPix_rgb_32bpp.tif"; dest.Save(Path.Combine(ResultsDirectory, destFilename), ImageFormat.Tiff); AssertAreEquivalent(scaledSource, dest, true); } } } }
public static List <Pix> GetTextAreas(string filePath) { using (Mat src = new Mat(filePath, ImreadModes.Color)) using (Mat gray = new Mat()) { Cv2.CvtColor(src, gray, ColorConversionCodes.BGR2GRAY); MSER mser = MSER.Create(); Point[][] msers = null; OpenCvSharp.Rect[] boundingBoxes = null; mser.DetectRegions(gray, out msers, out boundingBoxes); // MSER::operator() int meanWidth = (int)(boundingBoxes.Select(x => x.Width).Average()); int stdWidth = (int)( Math.Sqrt( boundingBoxes.Select( x => x.Width ).Average( x => x * x ) - Math.Pow(meanWidth, 2))); int meanHeight = (int)(boundingBoxes.Select(x => x.Height).Average()); int stdHeight = (int)( Math.Sqrt( boundingBoxes.Select( x => x.Height ).Average( x => x * x ) - Math.Pow(meanHeight, 2))); foreach (OpenCvSharp.Rect rect in boundingBoxes) { rect.Inflate(6, 2); if (rect.Width - meanWidth < stdWidth && rect.Height - meanHeight < stdHeight) { gray.Rectangle(rect, Scalar.Black, -1); } } var bitmapToPix = new BitmapToPixConverter(); return(ExtractTextAreasFromMask(gray).Select(x => bitmapToPix.Convert(x.ToBitmap())).ToList()); } }
public unsafe void Convert_BitmapToPix_Format8bppIndexed() { if (!Directory.Exists(ResultsDirectory)) { Directory.CreateDirectory(ResultsDirectory); } var sourceFile = "photo_palette_8bpp.png"; var sourceFilePath = Path.Combine(DataDirectory, sourceFile); var bitmapConverter = new BitmapToPixConverter(); using (var source = new Bitmap(sourceFilePath)) { Assert.That(BitmapHelper.GetBPP(source), Is.EqualTo(8)); Assert.That(source.PixelFormat, Is.EqualTo(PixelFormat.Format8bppIndexed)); using (var dest = bitmapConverter.Convert(source)) { var destFilename = "BitmapToPix_palette_8bpp.png"; dest.Save(Path.Combine(ResultsDirectory, destFilename), ImageFormat.Png); AssertAreEquivalent(source, dest, true); } } }
public unsafe void Convert_BitmapToPix(int depth) { if (!Directory.Exists(ResultsDirectory)) Directory.CreateDirectory(ResultsDirectory); string pixType; if (depth < 16) pixType = "palette"; else if (depth == 16) pixType = "grayscale"; else pixType = "rgb"; var sourceFile = String.Format("photo_{0}_{1}bpp.tif", pixType, depth); var sourceFilePath = Path.Combine(DataDirectory, sourceFile); var bitmapConverter = new BitmapToPixConverter(); using (var source = new Bitmap(sourceFilePath)) { Assert.That(BitmapHelper.GetBPP(source), Is.EqualTo(depth)); using (var dest = bitmapConverter.Convert(source)) { var destFilename = String.Format("BitmapToPix_{0}_{1}bpp.tif", pixType, depth); dest.Save(Path.Combine(ResultsDirectory, destFilename), ImageFormat.Tiff); AssertAreEquivalent(source, dest, true); } } }
public static TessConvertResult BitmapToString(Bitmap bitmap, OcrMode mode) { string textResult; float confidence; if (bitmap.Size.IsEmpty) { return(null); } using (var engine = new TesseractEngine(@"./tessdata", "pol", EngineMode.Default)) { if (mode == OcrMode.numeric) { engine.SetVariable("tessedit_char_whitelist", "-0123456789.,"); } Tesseract.BitmapToPixConverter converter = new BitmapToPixConverter(); var imgPix = converter.Convert(bitmap); imgPix = imgPix.ConvertRGBToGray(); imgPix = imgPix.Scale(7, 7); //imgPix.Save("test.tiff"); using (var page = engine.Process(imgPix)) { textResult = page.GetText(); confidence = page.GetMeanConfidence(); } if (confidence == 0 || textResult == "") { return(null); } } return(new TessConvertResult(textResult, confidence)); }
public unsafe void Convert_ScaledBitmapToPix() { if (!Directory.Exists(ResultsDirectory)) { Directory.CreateDirectory(ResultsDirectory); } var sourceFile = "photo_rgb_32bpp.tif"; var sourceFilePath = Path.Combine(DataDirectory, sourceFile); var bitmapConverter = new BitmapToPixConverter(); using (var source = new Bitmap(sourceFilePath)) { using (var scaledSource = new Bitmap(source, new Size(source.Width * 2, source.Height * 2))) { Assert.That(BitmapHelper.GetBPP(scaledSource), Is.EqualTo(32)); using (var dest = bitmapConverter.Convert(scaledSource)) { var destFilename = "ScaledBitmapToPix_rgb_32bpp.tif"; dest.Save(Path.Combine(ResultsDirectory, destFilename), ImageFormat.Tiff); AssertAreEquivalent(scaledSource, dest, true); } } } }
public unsafe void Convert_BitmapToPix(int depth) { if (!Directory.Exists(ResultsDirectory)) { Directory.CreateDirectory(ResultsDirectory); } string pixType; if (depth < 16) { pixType = "palette"; } else if (depth == 16) { pixType = "grayscale"; } else { pixType = "rgb"; } var sourceFile = String.Format("photo_{0}_{1}bpp.tif", pixType, depth); var sourceFilePath = Path.Combine(DataDirectory, sourceFile); var bitmapConverter = new BitmapToPixConverter(); using (var source = new Bitmap(sourceFilePath)) { Assert.That(BitmapHelper.GetBPP(source), Is.EqualTo(depth)); using (var dest = bitmapConverter.Convert(source)) { var destFilename = String.Format("BitmapToPix_{0}_{1}bpp.tif", pixType, depth); dest.Save(Path.Combine(ResultsDirectory, destFilename), ImageFormat.Tiff); AssertAreEquivalent(source, dest, true); } } }
public void PerformOcr(List <Tuple <int, int> > textRowLocations) { var conv = new BitmapToPixConverter(); Pix p = conv.Convert(_bTrimmedHeader); string headerResult; using (var engine = new TesseractEngine(@"./tessdata", "eng", EngineMode.Default)) { using (var page = engine.Process(p)) { var text = page.GetText(); headerResult = StripPunctuationFromScannedText(text);// (text + " {" + page.GetMeanConfidence() + "}\r\n"); } } var matchesInStationReferenceList = _callingForm.StationReferenceList.Where(x => x.System == SystemAtTimeOfScreenshot.ToUpper()).OrderBy(x => _levenshtein.LD2(headerResult, x.Name)).ToList(); var q = _callingForm.StationReferenceList.Where(x => x.Name.Contains("'")); if (matchesInStationReferenceList.Count > 0) { var ld = _levenshtein.LD2(headerResult, matchesInStationReferenceList[0].Name.ToUpper()); if (ld < 5) { headerResult = matchesInStationReferenceList[0].Name.ToUpper(); } } _callingForm.DisplayResults(headerResult); var commodityColumnText = new string[textRowLocations.Count(), 8];; var originalBitmaps = new Bitmap[textRowLocations.Count(), 8]; var originalBitmapConfidences = new float[textRowLocations.Count(), 8]; var rowIds = new string[textRowLocations.Count()]; var rowCtr = 0; var bTrimmedContrast = Contrast(MakeGrayscale(MakeBrighter((Bitmap)(_bTrimmed.Clone()), .25f)), 60); var bitmapCtr = 0; foreach (var row in textRowLocations) { int startRow = row.Item1 - 3; int heightRow = row.Item2 - row.Item1 + 6; if (startRow < 0) { startRow = 0; } if (heightRow + startRow > bTrimmedContrast.Height) { heightRow = bTrimmedContrast.Height - startRow; } // We'll use this later to identify the right correction image rowIds[rowCtr] = Guid.NewGuid().ToString(); using (Bitmap b = Crop(bTrimmedContrast, new Rectangle(0, startRow, bTrimmedContrast.Width, heightRow))) { b.Save(".//OCR Correction Images//" + rowIds[rowCtr] + ".png"); } int columnCounter = 0; while (columnCounter < 8) { int left, width; switch (columnCounter) { case 0: left = 0; width = _calibrationPoints[3].X - _calibrationPoints[2].X; break; case 1: left = _calibrationPoints[3].X - _calibrationPoints[2].X; width = _calibrationPoints[4].X - _calibrationPoints[3].X; break; case 2: left = _calibrationPoints[4].X - _calibrationPoints[2].X; width = _calibrationPoints[5].X - _calibrationPoints[4].X; break; case 3: left = _calibrationPoints[5].X - _calibrationPoints[2].X; width = _calibrationPoints[6].X - _calibrationPoints[5].X; break; case 4: left = _calibrationPoints[6].X - _calibrationPoints[2].X; width = _calibrationPoints[7].X - _calibrationPoints[6].X; break; case 5: left = _calibrationPoints[7].X - _calibrationPoints[2].X; width = _calibrationPoints[8].X - _calibrationPoints[7].X; break; case 6: left = _calibrationPoints[8].X - _calibrationPoints[2].X; width = _calibrationPoints[9].X - _calibrationPoints[8].X; break; case 7: left = _calibrationPoints[9].X - _calibrationPoints[2].X; width = _calibrationPoints[10].X - _calibrationPoints[9].X; break; default: left = 0; width = _calibrationPoints[3].X - _calibrationPoints[2].X; break; } var fudgeFactor = 0;// _bOriginal.Height * 6 / 1440; left = left + fudgeFactor; width = width - fudgeFactor; if (columnCounter != 0 && columnCounter != 5 && columnCounter != 7) { //If it's a numeric column write it out for Brainerous to process later var brainerousOut = Crop(bTrimmedContrast, new Rectangle(left, startRow, width, heightRow)); if (!Directory.Exists("./Brainerous/images")) { Directory.CreateDirectory("./Brainerous/images"); } brainerousOut.Save("./Brainerous/images/" + bitmapCtr + ".png"); bitmapCtr++; } else { // It's a text column, we'll use Tesseract // Prepare some different versions of the bitmap, we will take the best result var c = new Bitmap[7]; c[0] = (Crop(bTrimmedContrast, new Rectangle(left, startRow, width, heightRow))); c[1] = (Crop(bTrimmedContrast, new Rectangle(left + 1, startRow, width, heightRow))); c[2] = (Crop(bTrimmedContrast, new Rectangle(left - 1, startRow, width, heightRow))); c[3] = (Crop(bTrimmedContrast, new Rectangle(left, startRow - 1, width, heightRow))); c[4] = (Crop(bTrimmedContrast, new Rectangle(left + 1, startRow - 1, width, heightRow))); c[5] = (Crop(bTrimmedContrast, new Rectangle(left - 1, startRow - 1, width, heightRow))); c[6] = (Crop(bTrimmedContrast, new Rectangle(left, startRow + 2, width, heightRow - 2))); var t = new string[c.Length]; var cf = new float[c.Length]; using (var engine = new TesseractEngine(@"./tessdata", "eng", EngineMode.Default)) { for (int i = 0; i < c.Length; i++) { t[i] = AnalyseFrameUsingTesseract((Bitmap)(c[i].Clone()), engine, out cf[i]); } } int result = 0; float confidence = cf[0]; for (int i = 1; i < c.Length; i++) { if (confidence < cf[i]) { result = i; confidence = cf[i]; } } originalBitmaps[rowCtr, columnCounter] = (Bitmap)(c[result].Clone()); switch (columnCounter) { //bodges for number columns case 1: case 2: case 3: t[result] = t[result].Replace(" ", "").Replace("O", "0").Replace("I", "1").Replace("'", ""); t[result] = System.Text.RegularExpressions.Regex.Replace(t[result], @"[a-zA-Z\s]+", string.Empty); // remove any alphas that remain break; case 5: case 7: t[result] = t[result].Replace(" ", "").Replace("-", ""); if (t[result] == "HIGH" || t[result] == "MED" || t[result] == "LOW") { cf[result] = 1; } break; } if ((columnCounter == 5 && t[result].Contains("ENTER")) || (columnCounter == 6 && (t[result].Contains("NGAR") || t[result].Contains("SURFACE")))) { t[result] = ""; cf[result] = 1; } commodityColumnText[rowCtr, columnCounter] += t[result]; originalBitmapConfidences[rowCtr, columnCounter] = cf[result]; } columnCounter++; } rowCtr++; } if (textRowLocations.Count > 0) { // Call out to Brainerous to process the numeric bitmaps we saved earlier var outputFromBrainerous = ""; var pr = new Process(); pr.StartInfo.UseShellExecute = false; pr.StartInfo.CreateNoWindow = true; pr.StartInfo.RedirectStandardOutput = true; pr.StartInfo.FileName = "./Brainerous/nn_training.exe"; pr.StartInfo.WorkingDirectory = "./Brainerous/"; pr.Start(); outputFromBrainerous = pr.StandardOutput.ReadToEnd(); while (outputFromBrainerous.Contains("Failed to pad successfully")) { var o2 = outputFromBrainerous.IndexOf("Failed to "); var o3 = outputFromBrainerous.Substring(0, o2); var o4 = outputFromBrainerous.Substring(o2).IndexOf("./images"); var o5 = outputFromBrainerous.Substring(o2 + o4); outputFromBrainerous = o3 + "\r\n" + o5; } pr.WaitForExit(); var splitOutput = outputFromBrainerous.Replace("\r", "").Split('\n'); // Load the result from Brainerous into the OCR output for (var i = 0; i < textRowLocations.Count; i++) { commodityColumnText[i, 1] = splitOutput[i * 10 + 1]; originalBitmaps[i, 1] = null; originalBitmapConfidences[i, 1] = 1; commodityColumnText[i, 2] = splitOutput[i * 10 + 3]; originalBitmaps[i, 2] = null; originalBitmapConfidences[i, 2] = 1; commodityColumnText[i, 3] = splitOutput[i * 10 + 5]; originalBitmaps[i, 3] = null; originalBitmapConfidences[i, 3] = 1; commodityColumnText[i, 4] = splitOutput[i * 10 + 7]; originalBitmaps[i, 4] = null; originalBitmapConfidences[i, 4] = 1; commodityColumnText[i, 6] = splitOutput[i * 10 + 9]; originalBitmaps[i, 6] = null; originalBitmapConfidences[i, 6] = 1; } } _bOriginal.Dispose(); _bOriginalClone.Dispose(); // Send the results for this screenshot back to the Form _callingForm.DisplayCommodityResults(commodityColumnText, originalBitmaps, originalBitmapConfidences, rowIds, CurrentScreenshot); // ...and if we've got any buffered screenshots waiting to be processed, process the next one if (ScreenshotBuffer.Count > 0) { var screenshot = ScreenshotBuffer[0]; ScreenshotBuffer.Remove(screenshot); ProcessNewScreenshot(screenshot); } Working = false; Debug.WriteLine("set to " + Working); }
private bool CaptureLoadsXBOX() { bool isLoad = false; if ((timerStart.Ticks - liveSplitState.Run.Offset.Ticks) <= DateTime.Now.Ticks) { framesSinceLastManualSplit++; //Console.WriteLine("TIME NOW: {0}", DateTime.Now - lastTime); //Console.WriteLine("TIME DIFF START: {0}", DateTime.Now - lastTime); //lastTime = DateTime.Now; wasBlackScreen = isBlackScreen; //Capture image using the settings defined for the component Bitmap capture = settings.CaptureImage(); isBlackScreen = FeatureDetector.IsBlackScreen(ref capture, settings.blacklevel); BitmapToPixConverter btp = new BitmapToPixConverter(); //if (!testSaved) //{ // Bitmap jpntestbmp = new Bitmap("cutout.bmp"); // FeatureDetector.ClearBackgroundPostLoad(ref jpntestbmp); // jpntestbmp.Save("jpntest.bmp"); // Pix jpntest = btp.Convert(jpntestbmp); // using (var page = engine.Process(jpntest, PageSegMode.SingleChar)) // { // Console.WriteLine(page.GetText()); // } // testSaved = true; //} if (wasBlackScreen && !isBlackScreen) { //This could be a pre-load transition, start timing it transitionStart = DateTime.Now; waitOnLoad = true; } if (!isBlackScreen && !waitOnFadeIn && waitOnLoad) { specialLoad = FeatureDetector.ClearBackground(ref capture, settings.blacklevel); Pix img = btp.Convert(capture); string ResultText = ""; using (var page = engine.Process(img, PageSegMode.SingleChar)) { ResultText = page.GetText(); } int counter = 0; foreach (char c in expectedResultEng) { if (ResultText.Contains(c)) { counter++; } } if (counter > 5 && ResultText.Length == 8) { isLoading = true; isLoad = true; } } timer.CurrentState.IsGameTimePaused = isLoading || isBlackScreen; if (waitOnFadeIn && !specialLoad) { capture = settings.CaptureImagePostLoad(); int lowestBitLast = lowestBit; lowestBit = FeatureDetector.ClearBackgroundPostLoad(ref capture, settings.blacklevel); if (lowestBit == lowestBitLast && lowestBit != 0) { Pix img = btp.Convert(capture); using (var page = engine.Process(img, PageSegMode.SingleChar)) { string result = page.GetText(); if (result != "\n") { Console.WriteLine(page.GetText()); waitOnFadeIn = false; isLoading = false; lowestBit = 0; //the lifecounter coming in from the top takes a quarter of a second to stop TimeSpan quarter = new TimeSpan(2500000); timer.CurrentState.SetGameTime(timer.CurrentState.GameTimePauseTime + quarter); } } } } if (waitOnFadeIn && isBlackScreen && !specialLoad) { waitOnFadeIn = false; isLoading = false; } if (waitOnFadeIn && specialLoad && FeatureDetector.IsEndOfSpecialLoad(ref capture, settings.blacklevel)) { specialLoad = false; waitOnFadeIn = false; isLoading = false; } if (isLoading && waitOnLoad) { // This was a pre-load transition, subtract the gametime TimeSpan delta = (DateTime.Now - transitionStart); timer.CurrentState.SetGameTime(timer.CurrentState.GameTimePauseTime - delta); waitOnLoad = false; waitOnFadeIn = true; } } return(isLoad); }
/// <summary> /// Converts the specified <paramref name="img"/> to a Pix. /// </summary> /// <param name="img">The source image to be converted.</param> /// <returns>The converted bitmap image as a <see cref="Pix"/>.</returns> public static Pix ToPix(Bitmap img) { return(bitmapConverter.Convert(img)); }
private bool CaptureLoadsPS2() { bool isLoad = false; framesSinceLastManualSplit++; //Console.WriteLine("TIME NOW: {0}", DateTime.Now - lastTime);13 //Console.WriteLine("TIME DIFF START: {0}", DateTime.Now - lastTime); lastTime = DateTime.Now; //Capture image using the settings defined for the component Bitmap capture = settings.CaptureImage(); wasBlackScreen = isBlackScreen; isBlackScreen = FeatureDetector.IsBlackScreen(ref capture, settings.blacklevel); //BitmapToPixConverter btp = new BitmapToPixConverter(); //if (!testSaved) //{ // Bitmap jpntestbmp = new Bitmap("cutout.bmp"); // FeatureDetector.GetBlackLevel(ref jpntestbmp); // FeatureDetector.ClearBackground(ref jpntestbmp); // jpntestbmp.Save("jpntest.bmp"); // Pix jpntest = btp.Convert(jpntestbmp); // using (var page = engine.Process(jpntest, PageSegMode.SingleChar)) // { // Console.WriteLine(page.GetText()); // } // testSaved = true; //} if (!isBlackScreen && waitOnLoad) { FeatureDetector.ClearBackground(ref capture, settings.blacklevel); BitmapToPixConverter btp = new BitmapToPixConverter(); Pix img = btp.Convert(capture); string ResultText = ""; using (var page = engine.Process(img, PageSegMode.SingleChar)) { ResultText = page.GetText(); //Console.WriteLine(ResultText); } int counter = 0; if (settings.platform == "ENG/PS2") { foreach (char c in expectedResultEng) { if (ResultText.Contains(c)) { counter++; } } if (counter > 5 && ResultText.Length == 8) { isLoading = true; isLoad = true; } else { waitFrames++; if (waitFrames == WAIT_ON_LOAD_FRAMES) { waitOnLoad = false; waitFrames = 0; } } } else if (settings.platform == "JPN/PS2") { foreach (char c in expectedResultJpn) { if (ResultText.Contains(c)) { counter++; } } if (counter > 3) { isLoading = true; isLoad = true; } else { waitFrames++; if (waitFrames == WAIT_ON_LOAD_FRAMES) { waitOnLoad = false; waitFrames = 0; } } } //TODO: add korean else { foreach (char c in expectedResultKrn) { if (ResultText.Contains(c)) { counter++; } } if (counter > 1) { isLoading = true; isLoad = true; } else { waitFrames++; if (waitFrames == WAIT_ON_LOAD_FRAMES) { waitOnLoad = false; waitFrames = 0; } } } } timer.CurrentState.IsGameTimePaused = isLoading || isBlackScreen; if (waitOnFadeIn && isBlackScreen) { waitOnFadeIn = false; isLoading = false; } if (wasBlackScreen && !isBlackScreen) { //This could be a pre-load transition, start timing it transitionStart = DateTime.Now; waitOnLoad = true; waitFrames = 0; } if (isLoading && waitOnLoad) { // This was a pre-load transition, subtract the gametime TimeSpan delta = (DateTime.Now - transitionStart); timer.CurrentState.SetGameTime(timer.CurrentState.GameTimePauseTime - delta); waitOnLoad = false; waitFrames = 0; waitOnFadeIn = true; } return(isLoad); }
private void CalibrateBlacklevel() { Bitmap capture = settings.CaptureImage(); int tempBlacklevel = FeatureDetector.GetBlackLevel(ref capture); if (tempBlacklevel != -1 && tempBlacklevel < settings.cmpBlackLevel) { settings.cmpBlackLevel = tempBlacklevel; } FeatureDetector.ClearBackground(ref capture, settings.cmpBlackLevel); BitmapToPixConverter btp = new BitmapToPixConverter(); Pix img = btp.Convert(capture); string ResultText = ""; using (var page = engine.Process(img, PageSegMode.SingleChar)) { ResultText = page.GetText(); } int counter = 0; if (settings.platform == "ENG/PS2" || settings.platform == "ENG/XBOX&GC") { foreach (char c in expectedResultEng) { if (ResultText.Contains(c)) { counter++; } } if (counter > 5 && ResultText.Length == 8) { isCmpFinished = true; } } else if (settings.platform == "JPN/PS2") { foreach (char c in expectedResultJpn) { if (ResultText.Contains(c)) { counter++; } } if (counter > 3) { isCmpFinished = true; } } else { foreach (char c in expectedResultKrn) { if (ResultText.Contains(c)) { counter++; } } if (counter > 2) { isCmpFinished = true; } } if (isCmpFinished) { settings.blacklevel = settings.cmpBlackLevel; isCmpFinished = false; settings.isCalibratingBlacklevel = false; settings.cmpBlackLevel = 100; Console.WriteLine("BLACKLEVEL: {0}", settings.blacklevel); settings.UpdateBlacklevelLabel(); settings.Refresh(); } }
private void Scan() { var scanTime = DateTime.Now; var bounds = _selectionForegroundPath.Data.Bounds; var targetBounds = new Rectangle((int)bounds.X, (int)bounds.Y, (int)bounds.Width, (int)bounds.Height); GraphicsPath graphicsPath; if (_lassoSelectionForegroundGeometry != null) { graphicsPath = new GraphicsPath(); graphicsPath.AddLines( _lassoSelectionForegroundGeometry.Segments.Cast <LineSegment>() .Select(s => new PointF((float)(s.Point.X - bounds.X), (float)(s.Point.Y - bounds.Y))) .Where(p => p.X > 0 && p.Y > 0 && p.X < bounds.Width && p.Y < bounds.Height) .ToArray()); } else { graphicsPath = new GraphicsPath(); graphicsPath.AddRectangle(new RectangleF(0, 0, (float)bounds.Width, (float)bounds.Height)); } var croppedScreenshot = CropBitmap(_fullScreenshotBitmap, targetBounds, graphicsPath); // test show cropped bitmap //ShowCroppedScreenshot(croppedScreenshot); // OCR var converter = new BitmapToPixConverter(); var target = converter.Convert(croppedScreenshot); Task.Run(() => { if (_reseted) { return; } // start watch var watch = new Stopwatch(); watch.Start(); // OCR double confidence; var result = Ocr(target, out confidence); if (_reseted) { return; } // stop watch watch.Stop(); // log and display var cleanText = string.Join(Environment.NewLine, result.Replace(Environment.NewLine, "").Replace("\t", "").Split(new string[] { "\n" }, StringSplitOptions.RemoveEmptyEntries)); cleanText += Environment.NewLine; Dispatcher.Invoke(() => { // log _checker.Log(confidence, cleanText, croppedScreenshot, watch.ElapsedMilliseconds, scanTime); // display PrintScanTextOnScreen(cleanText); }); }); }