public async Task <ImageInfo> Analyse(Stream imageStream)
        {
            // ReSharper disable once UseAwaitUsing
            if (imageStream.Length == 0)
            {
                throw new Exception("Image stream is 0");
            }

            byte[] shaHash;
            using (var sha256Hasher = SHA256.Create())
            {
                shaHash = await sha256Hasher.ComputeHashAsync(imageStream);
            }

            imageStream.Position = 0;
            var(image, format)   = await SixLabors.ImageSharp.Image.LoadWithFormatAsync <Rgba32>(imageStream);

            using (image)
            {
                var width    = image.Width;
                var height   = image.Height;
                var mimeType = format.DefaultMimeType;

                var averageHasher = new AverageHash();
                var averageHash   = averageHasher.Hash(image);

                var perceptualHasher = new PerceptualHash();
                var perceptualHash   = perceptualHasher.Hash(image);
                var differenceHasher = new DifferenceHash();
                var differenceHash   = differenceHasher.Hash(image);

                return(new ImageInfo(shaHash, averageHash, differenceHash, perceptualHash, width, height, mimeType));
            }
        }
Example #2
0
 public void CreateAndDispose()
 {
     using (var model = AverageHash.Create())
     {
         GC.KeepAlive(model);
     }
 }
Example #3
0
 public ImageHashFacade(IFileSystem fileSystem)
 {
     this.fileSystem = fileSystem ?? throw new ArgumentNullException(nameof(fileSystem));
     averageHash     = new AverageHash();
     differenceHash  = new DifferenceHash();
     perceptualHash  = new PerceptualHash();
 }
Example #4
0
 public void CompareSameImage()
 {
     using (var model = AverageHash.Create())
         using (var img1 = Image("lenna.png", ImreadModes.Grayscale))
         {
             double hash = model.Compare(img1, img1);
             Assert.Equal(0, hash, 6);
         }
 }
Example #5
0
 public void CompareDifferentImage()
 {
     using (var model = AverageHash.Create())
         using (var img1 = Image("lenna.png", ImreadModes.Grayscale))
             using (var img2 = Image("building.jpg", ImreadModes.Grayscale))
             {
                 var size = new Size(256, 256);
                 using (var scaledImg1 = img1.Resize(size))
                     using (var scaledImg2 = img2.Resize(size))
                     {
                         double hash = model.Compare(scaledImg1, scaledImg2);
                         Assert.Equal(264411, hash, 6);
                     }
             }
 }
Example #6
0
        public void CalculateImageHashDemo()
        {
            #region CalculateImageHash

            var hashAlgorithm = new AverageHash();
            // or one of the other available algorithms:
            // var hashAlgorithm = new DifferenceHash();
            // var hashAlgorithm = new PerceptualHash();

            string filename = "your filename";
            using var stream = File.OpenRead(filename);

            ulong imageHash = hashAlgorithm.Hash(stream);

            #endregion
        }
Example #7
0
        public void CalculateSimilarityDemo()
        {
            var hashAlgorithm = new AverageHash();
            var imageStream1  = new MemoryStream();
            var imageStream2  = new MemoryStream();

            #region CalculateSimilarity

            // calculate the two image hashes
            ulong hash1 = hashAlgorithm.Hash(imageStream1);
            ulong hash2 = hashAlgorithm.Hash(imageStream2);

            double percentageImageSimilarity = CompareHash.Similarity(hash1, hash2);

            #endregion
        }
Example #8
0
        public async Task HashAsync()
        {
            List <Media> medias = await _dbContext.Medias.AsQueryable()
                                  .Where(x =>
                                         x.State == MediaState.Active &&
                                         x.MediaType == MediaType.Image &&
                                         x.ImageHash == null)
                                  .ToListAsync();

            var todo = medias.Count;

            var hasher = new AverageHash();

            foreach (Media media in medias)
            {
                Console.WriteLine($"{todo} - {media.Id}");

                try
                {
                    var fileName = _mediaService.GetFilename(media, MediaFileType.Original);

                    if (File.Exists(fileName))
                    {
                        var hash = hasher.Hash(File.OpenRead(fileName));

                        UpdateDefinition <Media> update = Builders <Media> .Update.Set(x => x.ImageHash, hash.ToString());

                        await _dbContext.Medias.UpdateOneAsync(x => x.Id == media.Id, update);
                    }
                    else
                    {
                        File.WriteAllText($@"C:\MagicMedia\Broken\{media.Id}.txt", $"NOT_FOUND:{fileName}");
                    }
                }
                catch (Exception ex)
                {
                    File.WriteAllText($@"C:\MagicMedia\Broken\{media.Id}.txt", $"ERROR:{ex.Message}");
                }

                todo--;
            }
        }
Example #9
0
 private void btnAverageHash_Click(object sender, EventArgs e)
 {
     try
     {
         AverageHash aHash1 = new AverageHash(bmpSlika1);
         AverageHash aHash2 = new AverageHash(bmpSlika2);
         lblHashPrveSlike.Text  = "Hash prve slike:  " + aHash1.GetHash();
         lblHashDrugeSlike.Text = "Hash druge slike:" + aHash2.GetHash();
         int brojIstihBitova = AverageHash.IzracunavanjeSlicnihBitova(aHash1.GetHash(), aHash2.GetHash());
         lblIstiBitovi.Text = "Isti bitovi:" + " " + brojIstihBitova.ToString();
         int brojRazlicitihBitova = AverageHash.IzracunavanjeRazlicitihBitova(aHash1.GetHash(), aHash2.GetHash());
         lblRazliciti1.Text = brojRazlicitihBitova.ToString();
         double prosjek = AverageHash.IzracunajPostotakSlicnosti(brojIstihBitova, brojRazlicitihBitova, aHash1.GetHash().Length);
         lblRazliciti2.Text = prosjek.ToString() + "%";
     }
     catch (Exception ex)
     {
         MessageBox.Show(ex.Message, "Niste uploadali sliku!", MessageBoxButtons.OK, MessageBoxIcon.Information);
     }
 }
Example #10
0
        public void Compute()
        {
            using (var model = AverageHash.Create())
                using (var img = Image("lenna.png"))
                    using (var hash = new Mat <byte>())
                    {
                        model.Compute(img, hash);
                        Assert.Equal(1, hash.Rows);
                        Assert.Equal(8, hash.Cols);
                        Assert.Equal(MatType.CV_8UC1, hash.Type());

                        var hashArray = hash.ToArray();
                        Assert.Equal(101, hashArray[0]);
                        Assert.Equal(121, hashArray[1]);
                        Assert.Equal(185, hashArray[2]);
                        Assert.Equal(149, hashArray[3]);
                        Assert.Equal(205, hashArray[4]);
                        Assert.Equal(209, hashArray[5]);
                        Assert.Equal(213, hashArray[6]);
                        Assert.Equal(112, hashArray[7]);
                    }
        }
Example #11
0
 public AverageHashTest()
 {
     sut = new AverageHash();
 }