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);
                                }
                            }
                        }
                    }
                }
            }
        }
Example #2
0
        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);
                }
            }
        }
Example #3
0
        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();
        }