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)); } }
public void CreateAndDispose() { using (var model = AverageHash.Create()) { GC.KeepAlive(model); } }
public ImageHashFacade(IFileSystem fileSystem) { this.fileSystem = fileSystem ?? throw new ArgumentNullException(nameof(fileSystem)); averageHash = new AverageHash(); differenceHash = new DifferenceHash(); perceptualHash = new PerceptualHash(); }
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); } }
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); } } }
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 }
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 }
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--; } }
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); } }
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]); } }
public AverageHashTest() { sut = new AverageHash(); }