Нужно разбить картинку на пиксели и собрать все пиксели в MD5-хэш

Код:
Развернуть Свернуть Копировать
var hash1 =  project.Variables["hash1"].Value; // 23423423423
var hash2 =  project.Variables["hash2"].Value;  // 34534534534
var diff = ImageHashing.ImageHashing.Similarity(hash1,hash2);
return diff.ToString();

Пишет: Выполнение действия CSharp OwnCode Путь имеет недопустимую форму.
Это что такое?
Если сравниваешь через картинки, а не через переменные с md5, то все сравнивает, если вместо Hash2 b Hash1 вставлять цыфры, то тоже все сравнивает, а если с переменными, то выдает ошибку. ???? Как писать переменные.
 
C#:
Развернуть Свернуть Копировать
ulong hash1 = ulong.Parse(project.Variables["hash1"].Value);
ulong hash2 = ulong.Parse(project.Variables["hash2"].Value);
var diff = ImageHashing.ImageHashing.Similarity(hash1, hash2);
return diff;
 
  • Оценить
Реакции: samsonnn и PostCard
Оба варианта рабочии. Спасибо!!
 
привет я пробую этот код для сравнения и выдает ошибку имя ImageHashing отсуствует в текушем контексте что я не так делаю?
upload_2017-6-5_10-54-44.png
 
привет я пробую этот код для сравнения и выдает ошибку имя ImageHashing отсуствует в текушем контексте что я не так делаю?

на скрине видно что не подключили dll-ку.
 
подключил я dll -ку через gac сейчас выдает другую ошибку входная строка имела неверный формат в чем может быть причина?
upload_2017-6-5_15-15-18.png
 
незнаю что у вас не так, я проверил у меня работает
нашел причину по пробовал хешы от razdab 23423423423 код срабатовает а если ставлю хеш такова рода ec0cd320ce6a56938aea42fb2b9c959b код выдает ошибку вопроа как получить хеш в таком виде 23423423423
 
Код:
Развернуть Свернуть Копировать
var hash1 =  ImageHashing.ImageHashing.AverageHash("1.jpeg"); // 23423423423

Так получаем в переенную hash1 хэш картинки и сохраняем в переменную.
 
Код:
Развернуть Свернуть Копировать
var hash1 =  ImageHashing.ImageHashing.AverageHash("1.jpeg"); // 23423423423

Так получаем в переенную hash1 хэш картинки и сохраняем в переменную.
это я понел но как получить такой хеш я например использую такой код
//Получаем значение строки из переменной
string input = project.Variables["directtiva_Pictures"].Value;

// Создаем объект этого класса.
System.Security.Cryptography.MD5 md5Hasher = System.Security.Cryptography.MD5.Create();
// Преобразуем входную строку в массив байт и вычисляем хэш
byte[] data = md5Hasher.ComputeHash(Encoding.Default.GetBytes(input));
// Создаем новый Stringbuilder (Изменяемую строку) для набора байт
StringBuilder md5hash = new StringBuilder();
// Преобразуем каждый байт хэша в шестнадцатеричную строку
for (int i = 0; i < data.Length; i++)
{
//преобразуем элемент в шестнадцатиричную строку длиной в два символа
md5hash.Append(data.ToString("x2"));
}
//Возвращаем MD5 хеш для строки
return md5hash.ToString();
на выходе получаю хеш в таком виде 93dda154a1aba849394ddab92e494d37 но по какой то причине такии хешы код
ulong hash1 = ulong.Parse(project.Variables["a"].Value);
ulong hash2 = ulong.Parse(project.Variables["b"].Value);
var diff = ImageHashing.ImageHashing.Similarity(hash1, hash2);
return diff;
не работает выдает ошибку
 
У меня лежит картинка 1.jpg на диске D жесткого, я кодом
Код:
Развернуть Свернуть Копировать
var hash1 =  ImageHashing.ImageHashing.AverageHash(@"D:\1.jpg"); // 23423423423
    return hash1;
Сохраняю получившийся хэш ( например 23423423423) в переменную hash1
Берем другую картинку 2.jpg так же как и у первой берем хэш кодом
Код:
Развернуть Свернуть Копировать
var hash2 =  ImageHashing.ImageHashing.AverageHash(@"D:\2.jpg"); // 23423423423
    return hash2;
Затем кодом
Код:
Развернуть Свернуть Копировать
ulong hash1 = ulong.Parse(project.Variables["hash1"].Value);
ulong hash2 = ulong.Parse(project.Variables["hash2"].Value);
var diff = ImageHashing.ImageHashing.Similarity(hash1, hash2);
return diff;
сравниваем картинки по хэшу. И в переменной diff получаем процент схожести.


Ты получаешь другим кодом хэш (md5) для этой библиотеки используй код выше
 
  • Оценить
Реакции: artur23 и steklarul
Подскажите, а если у меня шесть картинок, как сделать код, чтоб он сравнивал поочередно пары картинок и выводил результат в %, той пары у которой % схожести максимальный?
Код:
Развернуть Свернуть Копировать
var data = ImageHashing.ImageHashing.Similarity(new Bitmap("0.jpeg"), new Bitmap("1.jpeg"), new Bitmap("2.jpeg"), new Bitmap("3.jpeg"), new Bitmap("4.jpeg"), new Bitmap("5.jpeg"));
Сравнивать в таких комбинациях картинки
0-1|0-2|0-3|0-4|0-5
1-2|1-3|1-4|1-5
2-3|2-4|2-5
3-4|3-5
4-5
P.S. Решилось сниппетом.
 
Последнее редактирование:
сегодня капчи сравнивал на 7ой версии и где-то на 1000-ом запросе
45442

C#:
Развернуть Свернуть Копировать
Bitmap captcha = (Bitmap) Image.FromFile(project.Variables["Captcha_Image"].Value);

var hash1 = ImageHashing.ImageHashing.AverageHash(captcha);

project.Variables["hash"].Value = hash1.ToString();

возник вопрос память сама освобождается, когда кубик выполниться?

или надо дописать и поможет ли такой вариант?
captcha.Dispose();
 
У меня лежит картинка 1.jpg на диске D жесткого, я кодом
Код:
Развернуть Свернуть Копировать
var hash1 =  ImageHashing.ImageHashing.AverageHash(@"D:\1.jpg"); // 23423423423
    return hash1;
Сохраняю получившийся хэш ( например 23423423423) в переменную hash1
Берем другую картинку 2.jpg так же как и у первой берем хэш кодом
Код:
Развернуть Свернуть Копировать
var hash2 =  ImageHashing.ImageHashing.AverageHash(@"D:\2.jpg"); // 23423423423
    return hash2;
Затем кодом
Код:
Развернуть Свернуть Копировать
ulong hash1 = ulong.Parse(project.Variables["hash1"].Value);
ulong hash2 = ulong.Parse(project.Variables["hash2"].Value);
var diff = ImageHashing.ImageHashing.Similarity(hash1, hash2);
return diff;
сравниваем картинки по хэшу. И в переменной diff получаем процент схожести.
Подгрузку путей для изображений из переменных сделал
А вот как сделать чтобы переменные сравнивались списком а не по одному?
 
Последнее редактирование:
base64 to ByteArray to PictureBox to md5hash:
Развернуть Свернуть Копировать
byte[] bytes = Convert.FromBase64String(project.Variables["base64"].Value);
MemoryStream ms = new MemoryStream(bytes);
Image returnImage = Image.FromStream(ms);
pictureBox.Image = returnImage;
project.Variables["md5hash"].Value = ImageHashing.ImageHashing.AverageHash(returnImage).ToString();
 
  • Оценить
Реакции: Sho
На маленьких картинках хеши (все) не справляются.
К слову.
 
  • Оценить
Реакции: djaga
В моей задаче были от 10пк до 50пк.
Все хеши (их около 4-5) давали не верный результат каждое 2-3 сравнение.
да хеши вообще очень условное сравнение дают. можно расценивать их как поиск на вхождению в группу , но не как точный поиск.
 
  • Оценить
Реакции: djaga

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