Як відправити captcha на розпізнавання в CapMonstr2

Маючи картинку в форматі base64 і бажання дізнатись символи на цій картинці її можна розпізнати за допомогою бібліотеки Tesseract, відправити на будь-який сервіс розпізнавання, а також можна відправити на розпізнавання в програму CapMonstr2. Власне мені здається що розробники вирішили не продовжувати її розробляти, а перевести клієнтів на хмарну версію, проте, все таки мені здається що ліцензія на компьютері краще, ніж оплата за сервіс Saas.

Перш за все я розказував про це у своєму відео, тому однозначно покажу його в цій публікації, а уже нижче по тексту приведу код:

Не знаю, знаєте чи ні як з картинки одержати base64, тому перечислю нижче основні варіанти звідки він у нас може взятись:

Файл в base64

Наприклад коли в нас на комп’ютері збережений файл, і саме його потрібно відправити на розпізнавання, тоді потрібно прочитати його в масив байт, і тоді перевести в текстовий рядок base64. До цього способу також може належати варіант, коли ми скачали зображення у вигляді масиву байт, просто замість зчитування підставляємо аргументом в метод ToBase64String свій масив байт зображення.

string path = @"D:\image.jpg";
string base64 = Convert.ToBase64String(File.ReadAllBytes(path)); // одержали base64

HTML в base64

Можливий варіант коли у вікні браузера програми ZennoPoster у нас появилось зображення, яке нам потрібно розпізнати – тоді просто беремо цей HTML елемент, переводимо його у base64 використовуючи визов метода DrawToBitmap, який приймає аргумент false коли це не картинка, і true коли це картинка.

var he = instance.ActiveTab.FindElementById("zp_fr_hl_top_hl"); 
string base64 = he.DrawToBitmap(false); // якщо це блок
string base64 = he.DrawToBitmap(true); // якщо це картинка

Скриншот в base64

Також ми можемо просто зробити скриншот області екрану, і саме його переводити в base64 для подальшої відправки на розпізнавання. Зручно тоді, коли наприклад перед відправкою проводиться зміна зображення, наприклад видаляються лишні елементи чи змінюється кількість кольорів.

string base64 = string.Empty;
using(var bitmap = new Bitmap(1920,1080)){
	using(var graphics = Graphics.FromImage(bitmap)){
		graphics.CopyFromScreen(0,0,0,0,bitmap.Size);
		using (var ms = new MemoryStream()){
			bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); // при зміненому маштабі передати третій параметр EncoderParameter
			base64 = Convert.ToBase64String(ms.GetBuffer());
		}
	}
}

return base64;

Так ось, в цей момент, коли у нас уже є зображення в форматі base64 ми можемо визвати метод CaptchaRecognition і передати туди наше зображення base64, вказавши модуль “CapMonster2.dll”. Після чого ZennoPoster дочекається розпізнавання і поверне результат.

return ZennoPoster.CaptchaRecognition("CapMonster2.dll", base64, "CapMonsterModule=повне ім'я модуля");

Хочу відмітити, що у деяких випадках буде зручніше самостійно відправляти HTTP запити до CapMonster2 чи будь-якого іншого сервісу, так як це може зменшити кількість зверненнь за короткий проміжок часу (наприклад коли проєкт працює в багато потоків одночасно). Можливо або доповню цю публікацію, або створю нову, де розгляну варіант відправки на розпізнавання за допомогою HTTP метода POST і одержання результату методом GET.

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *