- Регистрация
- 19.02.2015
- Сообщения
- 245
- Благодарностей
- 179
- Баллы
- 43
Здравствуйте дорогие друзья, многие столкнулись с проблемной капчей Teaserfast.
Вот такой.

Постараюсь помочь простым решением в одном кубике С#.
Приступим к решению. Удаляем линии с изображения.

Добавляем логику. Ищем на изображении наибольшее количество цветных пикселей, в квадрате размером 38x38 пикселей, на изображении 378x178 пикселей. Определяем координаты середины найденного квадрата относительно изображения.

Результат выводится в удобной форме для POST запроса X:Y, где:
Данное решение не претендует на лучшее, но со своей задачей справляется. Можете поиграть с размером квадрата.
Меня устраивают такие настройки, результат проверяем сами, качаем архив тестов и проверяем процент.
Вот и всё дорогие друзья, спасибо за внимание! Принимаем участие в опросе. Будет интересна тема, будем совершенствовать код.
Вот такой.

Постараюсь помочь простым решением в одном кубике С#.
Приступим к решению. Удаляем линии с изображения.

Добавляем логику. Ищем на изображении наибольшее количество цветных пикселей, в квадрате размером 38x38 пикселей, на изображении 378x178 пикселей. Определяем координаты середины найденного квадрата относительно изображения.
Подключаем нужные пространства имён:
using System;
using System.Drawing;
using System.Drawing.Imaging;
Экшен С#:
// Путь к изображению из переменной ZennoPoster
string imagePath = project.Variables["Variable2"].Value;
// Размер квадрата
int squareSize = 38;
// Диапазон цвета для удаления
int minRGB = 180;
int maxRGB = 255;
// Проверяем наличие файла
if (!System.IO.File.Exists(imagePath))
{
return "Ошибка: изображение не найдено по пути " + imagePath;
}
using (Bitmap bmp = new Bitmap(imagePath))
{
int width = bmp.Width;
int height = bmp.Height;
int maxCount = 0;
int bestX = 0;
int bestY = 0;
for (int y = 0; y < height; y++)
{
for (int x = 0; x < width; x++)
{
Color c = bmp.GetPixel(x, y);
// Проверяем, попадает ли пиксель в диапазон
if (c.R >= minRGB && c.R <= maxRGB &&
c.G >= minRGB && c.G <= maxRGB &&
c.B >= minRGB && c.B <= maxRGB)
{
// Заменяем на белый (можно поменять на прозрачный или другой цвет)
bmp.SetPixel(x, y, Color.White);
}
}
}
// Проходим по всем возможным позициям квадрата
for (int y = 0; y <= height - squareSize; y++)
{
for (int x = 0; x <= width - squareSize; x++)
{
int count = 0;
for (int dy = 0; dy < squareSize; dy++)
{
for (int dx = 0; dx < squareSize; dx++)
{
Color c = bmp.GetPixel(x + dx, y + dy);
// Считаем пиксель цветным, если он не почти белый
if (!(c.R > 240 && c.G > 240 && c.B > 240))
count++;
}
}
if (count > maxCount)
{
maxCount = count;
bestX = x;
bestY = y;
}
}
}
int centerX = bestX + squareSize / 2;
int centerY = bestY + squareSize / 2;
// Возвращаем результат
return centerX.ToString() + ":" + centerY.ToString();
}

Результат выводится в удобной форме для POST запроса X:Y, где:
- X — координата по горизонтали,
- Y — координата по вертикали.
Данное решение не претендует на лучшее, но со своей задачей справляется. Можете поиграть с размером квадрата.
Меня устраивают такие настройки, результат проверяем сами, качаем архив тестов и проверяем процент.
Вот и всё дорогие друзья, спасибо за внимание! Принимаем участие в опросе. Будет интересна тема, будем совершенствовать код.
Вложения
-
1,5 МБ Просмотры: 2
Последнее редактирование:



