Как заполнить форму, которая на canvas?

Nekro

Client
Регистрация
01.08.2020
Сообщения
146
Благодарностей
10
Баллы
18
Здравствуйте.

Есть необычная форма на canvas. Нужно ввести 4 цифры. При клике по 1 цифре - номера остальных рандомно меняются. Как её можно заполнить правильными числами? Даже не знаю с чего начать. Числа, которые нужно ввести, известны. Вот скриншоты:
85925

85926
 

Phoenix78

Client
Регистрация
06.11.2018
Сообщения
7 887
Благодарностей
3 710
Баллы
113
отправляешь каждую цифру на кап или в сервис или подрубаешь тессеракт и разпознаешь цифири. цифры ровные, будет стабильно разпознавать.
можно даже просто их в хэш перевести и искать через свою базу хэшей.
 
  • Спасибо
Реакции: sergodjan66 и Nekro

Nekro

Client
Регистрация
01.08.2020
Сообщения
146
Благодарностей
10
Баллы
18
отправляешь каждую цифру на кап или в сервис или подрубаешь тессеракт и разпознаешь цифири. цифры ровные, будет стабильно разпознавать.
можно даже просто их в хэш перевести и искать через свою базу хэшей.
Тессеракт вроде нашёл. Попробую. Забыл написать, что критически важно, чтобы всё это дело проходило как можно быстрее.

А насчёт базы хэшей. Как её сделать в данном случае? Там наверное миллион вариантов будет картинок. Ещё таким не занимался, представляю себе это так:
1) Беру картинку
2) Преобразовываю в хэш и помечаю координаты для цифр, которые будут нажиматься.
3) Сравниваю хэш картинки.
4) Если хэш совпадает, то беру координаты цифр у этого хэша и жму по ним.
5) Повтор для каждой цифры.

Или можно тупо отобрать хэши картинок, где по одной первой цифре (1, 2, 3, 4, 5, 6, 7, 8, 9, 0) будет и потом прожимать так?
 

Phoenix78

Client
Регистрация
06.11.2018
Сообщения
7 887
Благодарностей
3 710
Баллы
113
хэши для каждой картинки-цифры. всего 10 цифр, значит всего 10 хэшей. каждую цифру с браузера перегонять в хеш и прогонять цикл по списку известных хешей. думаю это должно быть очень быстро.
 
  • Спасибо
Реакции: Nekro

Nekro

Client
Регистрация
01.08.2020
Сообщения
146
Благодарностей
10
Баллы
18
хэши для каждой картинки-цифры. всего 10 цифр, значит всего 10 хэшей. каждую цифру с браузера перегонять в хеш и прогонять цикл по списку известных хешей. думаю это должно быть очень быстро.
Благодарю. Принцип понял. Только там 1 целая картинка со всеми цифрами, а не по одной картинке на каждое число. Поэтому я в затруднении. Если я возьму всего 10 хэшей, то не факт, что найду в таком случае совпадения. Потому что нужно будет собирать огромную базу из разных вариантов, чтобы верно идентифицировать картинку с первым числом. Там же нельзя по кусочку хэша определить первую цифру насколько я понял.

Только если делить картинку... Но как тогда сравнить потом хэш с исходным вариантом - непонятно. Потому что он целостный. Ну если только и его делить. Я только не знаю, будет ли в таком случае одинаковый хэш если брать область одного размера для каждой цифры.

+там где поля для отображения введённых чисел - проставляются звёздочки *
 
Последнее редактирование:

nicanil

Moderator
Команда форума
Регистрация
06.03.2016
Сообщения
2 086
Благодарностей
1 572
Баллы
113
Лучше всего вырезать каждую цифру, вычислить хэш для неё, составить таблицу из 10 пар хэш:число.
Затем в рабочем проекте снова вырезаете каждую цифру, получаете хэш и ищите совпадение по таблице.
Для получения наибольшей скорости без C# будет трудно обойтись.

Пример составления такой базы можно найти тут - https://zennolab.com/discussion/posts/80620/
 
  • Спасибо
Реакции: Nekro и sergodjan66

Nekro

Client
Регистрация
01.08.2020
Сообщения
146
Благодарностей
10
Баллы
18
Лучше всего вырезать каждую цифру, вычислить хэш для неё, составить таблицу из 10 пар хэш:число.
Затем в рабочем проекте снова вырезаете каждую цифру, получаете хэш и ищите совпадение по таблице.
Для получения наибольшей скорости без C# будет трудно обойтись.

Пример составления такой базы можно найти тут - https://zennolab.com/discussion/posts/80620/
Как раз начал так делать. Я ещё не дошёл до конца, но есть пара вопросов:
1) Если будет сдвиг хотя бы на 1 пиксель у размера какой либо цифры - хэш будет другим?
2) Будет ли одинаковый хэш, например, у одной и той же цифры в первой строке и во второй, при условии, что размер одинаковый (пиксель в пиксель), но другая позиция?

В зависимости от этого мне придётся делать либо всего 10 хэшей, по 1 для каждой цифры, либо 100 хэшей, по 10 цифр для каждой позиции.

Почему то не могу заменить/удалить исходную картинку после преобразования. Пишет, что занята project maker'ом, даже если закрыть проект. Помогает только полное выключение project maker. Затрудняет тестирование...
 

nicanil

Moderator
Команда форума
Регистрация
06.03.2016
Сообщения
2 086
Благодарностей
1 572
Баллы
113
1) Если будет сдвиг хотя бы на 1 пиксель у размера какой либо цифры - хэш будет другим?
Да.

2) Будет ли одинаковый хэш, например, у одной и той же цифры в первой строке и во второй, при условии, что размер одинаковый (пиксель в пиксель), но другая позиция?
Да.

Почему то не могу заменить/удалить исходную картинку после преобразования. Пишет, что занята project maker'ом, даже если закрыть проект. Помогает только полное выключение project maker. Затрудняет тестирование...
Работайте с изображением внутри блока using, как показано вот тут.
 
  • Спасибо
Реакции: Nekro

Nekro

Client
Регистрация
01.08.2020
Сообщения
146
Благодарностей
10
Баллы
18
Работайте с изображением внутри блока using, как показано вот тут.
Так и не смог разобраться как это применить в моём случае (постоянно ловлю ошибки). Подскажите пожалуйста. На всякий случай отправлю 2 кода, потому что не знаю наверняка из-за какого возникает ошибка.

Беру изображение и вырезаю кусок. Затем кусок сохраняю.:
var img = new Bitmap(Image.FromFile(@"D:\1.png"));

int x1 = 35;
int x2 = 55;
int y1 = 70;
int y2 = 90;

int width = x2 - x1 + 1;
int height = y2 - y1 + 1;

var result = new Bitmap(width, height);

for (int i = x1; i <= x2; i++)
     for (int j = y1; j <= y2; j++)
          result.SetPixel(i - x1, j - y1, img.GetPixel(i, j));

result.Save(@"D:\1q.png");
result.Dispose();
Дальше (тут using есть)


Получаю хэш:
using (System.IO.FileStream fs = new System.IO.FileStream(@"D:\1q.png", System.IO.FileMode.Open, System.IO.FileAccess.Read))
{
    System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
    byte[] fileData = new byte[fs.Length];
    fs.Read(fileData, 0, (int)fs.Length);
    byte[] checkSum = md5.ComputeHash(fileData);
    string result = BitConverter.ToString(checkSum).Replace("-", String.Empty);
    return result;
}
 
Последнее редактирование:

Phoenix78

Client
Регистрация
06.11.2018
Сообщения
7 887
Благодарностей
3 710
Баллы
113
Так и не смог разобраться как это применить в моём случае (постоянно ловлю ошибки). Подскажите пожалуйста. На всякий случай отправлю 2 кода, потому что не знаю наверняка из-за какого возникает ошибка.
C#:
int x1 = 35;
int x2 = 55;
int y1 = 70;
int y2 = 90;
int width = x2 - x1 + 1;
int height = y2 - y1 + 1;

using (var result = new Bitmap(width, height))
{
    using (var bmpTemp = new Bitmap(@"c:\SavedBMPs\9717e5cf185c1e7dd55196a882903601.jpg"))
    {
        using (var img = new Bitmap(bmpTemp))
        {
            for (int i = x1; i <= x2; i++)
                for (int j = y1; j <= y2; j++)
                result.SetPixel(i - x1, j - y1, img.GetPixel(i, j));
        }
    }
    result.Save(@"c:\SavedBMPs\9717e5cf185c1e7dd55196a882903601.jpg");
}
 
  • Спасибо
Реакции: nicanil и Nekro

Nekro

Client
Регистрация
01.08.2020
Сообщения
146
Благодарностей
10
Баллы
18
C#:
int x1 = 35;
int x2 = 55;
int y1 = 70;
int y2 = 90;
int width = x2 - x1 + 1;
int height = y2 - y1 + 1;

using (var result = new Bitmap(width, height))
{
    using (var bmpTemp = new Bitmap(@"c:\SavedBMPs\9717e5cf185c1e7dd55196a882903601.jpg"))
    {
        using (var img = new Bitmap(bmpTemp))
        {
            for (int i = x1; i <= x2; i++)
                for (int j = y1; j <= y2; j++)
                result.SetPixel(i - x1, j - y1, img.GetPixel(i, j));
        }
    }
    result.Save(@"c:\SavedBMPs\9717e5cf185c1e7dd55196a882903601.jpg");
}
Появляется такая ошибка при выполнении. Пробовал разный путь указывать.
86512
 

Nekro

Client
Регистрация
01.08.2020
Сообщения
146
Благодарностей
10
Баллы
18
Всё, работает) Походу я намутил что-то с файлами и путями сначала.
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)