/// <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); ; }