How to saved hashes for future comparison?
Opened this issue · 1 comments
k0fi commented
After I get an image hashed:
hash1, err := goimagehash.AverageHash(img1)
if err != nil {
log.Fatal(err)
}
fmt.Println("hash of image is:", hash1)
fmt.Println("hash1.ToString():", hash1.ToString())
I get
hash of image is: &{9222170938831798272 1}
hash1.ToString(): a:7ffbbb9b93000000
My problem is how to save hash1
in database, so that later on I can retrive it and compare its distance with newly computed hash2
using:
distance, _ := hash1.Distance(hash2)
uncopied commented
Not an authoritative answer, but you can save your hash value as separate columns :
// Golang :
// DigitalAssetSrc data dbmodel (ex. a raw image)
type DigitalAssetSrc struct {
gorm.Model
AverageHash uint64
DifferenceHash uint64
PerceptionHash uint64
...
// compute thumbnail hashes for similarity indexing
averageHash, _ := goimagehash.AverageHash(thumbnail)
differenceHash, _ := goimagehash.DifferenceHash(thumbnail)
perceptionHash, _ := goimagehash.PerceptionHash(thumbnail)
asset.AverageHash = averageHash.GetHash()
asset.DifferenceHash = differenceHash.GetHash()
asset.PerceptionHash = perceptionHash.GetHash()
// DB :
CREATE TABLE digital_asset_srcs
(
id bigint NOT NULL DEFAULT nextval('digital_asset_srcs_id_seq'::regclass),
average_hash bigint,
difference_hash bigint,
perception_hash bigint,
...
Then you can either reload those image hashes for comparison, on you can try and use K-nearest neighbour search with Hamming distance if you backend database supports it.