/// <summary>
 /// Resolve o captcha
 /// </summary>
 /// <param name="image">Imagem do captcha</param>
 /// <param name="config">Objeto de configurações</param>
 /// <returns>Solução do captcha</returns>
 public string Break(byte[] image, CaptchaConfig config)
 {
     var client = new CCProto();
     client.Login(_url.Host, _url.Port, "dummy", "dummy");
     var result = client.picture2(image, 30, (int)PictureType.Asirra);
     return result.text;
 }
        /// <summary>
        /// Método responsavel por realizar a quebra do captcha
        /// </summary>
        /// <param name="image">Byte Array da imagem captcha</param>
        /// <param name="config">Objeto contendo informações relevantes para solucionar o captcha</param>
        /// <returns>String com a solução do captcha</returns>
        public string Break(byte[] image, CaptchaConfig config)
        {
            string tempName = Path.GetTempFileName();
            string textTempFileName = Path.GetFileName(Path.ChangeExtension(tempName, "txt"));
            string extension = (config.TipoImagem ?? ImageFormat.Bmp).GetExtension();
            string imageTempFilename = Path.ChangeExtension(tempName, extension);
            string imageFullPath =string.Format(@"workspace\{0}", Path.GetFileName(imageTempFilename));
            if (!Directory.Exists("workspace"))
                Directory.CreateDirectory("workspace");

            File.WriteAllBytes(imageFullPath, image);
            
            var stream = File.Create(string.Format(@"workspace\{0}", textTempFileName));
            
            stream.Close();
            
            stream.Dispose();

            UI.CaptchaDialog cd = new UI.CaptchaDialog(imageFullPath);
            cd.ShowDialog(); 
           
            bool solutionFound = false;
            
            var conteudo = string.Empty;
            
            bool firstTime = true;
            
            do
            {
                if (!firstTime)
                {
                    Thread.Sleep(5000);
                }
                else
                {
                    firstTime = false;
                }

                conteudo = File.ReadAllText(string.Format(@"workspace\{0}", textTempFileName));

                if (!string.IsNullOrEmpty(conteudo))
                {
                    solutionFound = true;
                }
            } while (!solutionFound);

            return conteudo;
        }
        /// <summary>
        /// Método responsavel por realizar a quebra do captcha
        /// </summary>
        /// <param name="image">Byte Array da imagem captcha</param>
        /// <param name="config">Objeto contendo informações relevantes para solucionar o captcha</param>
        /// <returns>String com a solução do captcha</returns>
        public string Break(byte[] image, CaptchaConfig config)
        {
            var tempfilename = Path.GetTempFileName();
            
            File.WriteAllBytes(tempfilename, image);
            
            var stbResult = new StringBuilder();
            
            using (var engine = new TesseractEngine(ConfigManager.GetInstance().CAMINHO_ARQUIVO_IDIOMA, IDIOMA_PORTUGUES, EngineMode.Default))
            using (var img = Pix.LoadFromFile(tempfilename))
            {
                var i = 1;
                using (var page = engine.Process(img, null))
                {
                    stbResult.AppendLine(page.GetText());
                    if (config.NumeroDePalavras > 1)
                    {
                        using (var iter = page.GetIterator())
                        {
                            iter.Begin();
                            do
                            {
                                if (i % 2 == 0)
                                {
                                    do
                                    {
                                        stbResult.AppendLine(iter.GetText(PageIteratorLevel.Word));
                                    } while (iter.Next(PageIteratorLevel.TextLine, PageIteratorLevel.Word));
                                }
                                i++;
                            } while (iter.Next(PageIteratorLevel.Para, PageIteratorLevel.TextLine));
                        }
                    }
                }
            }

            return stbResult.ToString().Replace("\r", string.Empty).Replace("\n", string.Empty); ;
        }