System.Drawing.Bitmap Decaptcha(BlockOcr blockOcr, BotData data) { using (var captcha = blockOcr.Base64ImageDecoder(ReplaceValues(Base64Captcha, data))) { using (var src = captcha.ToMat()) { using (var binaryMask = new Mat()) { var linesColor = Scalar.FromRgb(0x74, 0x74, 0x74); Cv2.InRange(src, linesColor, linesColor, binaryMask); using (var masked = new Mat()) { src.CopyTo(masked, binaryMask); int linesDilate = 3; using (var element = Cv2.GetStructuringElement(MorphShapes.Ellipse, new Size(linesDilate, linesDilate))) { Cv2.Dilate(masked, masked, element); } try { Cv2.CvtColor(masked, masked, ColorConversionCodes.RGB2GRAY); } catch { } using (var dst = src.EmptyClone()) { Cv2.Inpaint(src, masked, dst, 3, InpaintMethod.NS); linesDilate = 2; using (var element = Cv2.GetStructuringElement(MorphShapes.Ellipse, new Size(linesDilate, linesDilate))) { Cv2.Dilate(dst, dst, element); } Cv2.GaussianBlur(dst, dst, new Size(5, 5), 0); using (var dst2 = dst.BilateralFilter(5, 75, 75)) { try { Cv2.CvtColor(dst2, dst2, ColorConversionCodes.RGB2GRAY); } catch { } Cv2.Threshold(dst2, dst2, 255, 255, ThresholdTypes.Otsu); Cv2.FastNlMeansDenoising(dst2, dst2, 44); return(dst2.ToBitmap().Clone() as System.Drawing.Bitmap); } } } } } } }
public override void Process(BotData data) { base.Process(data); var blockOcr = new BlockOcr(); using (var captcha = Decaptcha(blockOcr, data)) { using (var pix = PixConverter.ToPix(captcha.ConvertPixelFormat(System.Drawing.Imaging.PixelFormat.Format24bppRgb))) { InsertVariable(data, false, blockOcr.GetOcr(data, pix).First(), InputVariableName); } } }
public PageBlockOcr(BlockOcr block) { InitializeComponent(); vm = block; DataContext = vm; customHeadersRTB.AppendText(vm.GetCustomHeaders()); try { foreach (var filter in vm.GetFilters().Split(new char[] { '\n' }, StringSplitOptions.RemoveEmptyEntries)) { filterLB.Items.Add(filter.Trim()); } } catch { } vm.PixelFormats.Add("Default"); vm.PixelFormats.AddRange(Enum.GetNames(typeof(System.Drawing.Imaging.PixelFormat))); Enum.GetNames(typeof(EngineMode)).ToList().ForEach(e => EngineModeComboBox.Items.Add(e)); Enum.GetNames(typeof(PageSegMode)).ToList().ForEach(p => PageSegModeComboBox.Items.Add(p)); InitFilterControls(); SetItemToComboBox(); }