dhash-vips 0.2.0.0 → 0.2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: ffcb306bfad9804bd8f04b0e45be41792a31c631
4
- data.tar.gz: 83cf911d2a2768694c7500101854c1b2d60dbac7
2
+ SHA256:
3
+ metadata.gz: ce70f825a89117f682dad1e5ae6400ec3cd430d08d8bb34b36719dff4905894e
4
+ data.tar.gz: 17ff221fad7650632cefc04f7421efc79b4f0fe0f2f884d6f1019fc82d360c94
5
5
  SHA512:
6
- metadata.gz: fa5d434886611ab65c4c5c957ec4a19953681ab2ebfded077d8dd6ea18bc756083e9abd9d7b04db6aea9f1cdce4805445f045c3dc882ee2af1b63c062726dd3f
7
- data.tar.gz: d0e444171d64f461b6cb4fde6fc23b58f7ca91e4160f05347948a88b490d2f2d9f664da4aa69ab7d375ecba8f298adb13262e66e4ba286bfa3f96a7dd971db62
6
+ metadata.gz: '019fa1a1b89a5e734332eb1993ea4ccd9dd18b6add3677f065c41cbf0b624986220a094ee5e055cf4f965b56292abe9275ee96fdcbdae53481ea557b0317ad46'
7
+ data.tar.gz: 4fa0705056bc27ef272b9a4ca93657bada9646486e0a9532b21d4f53f8d23847188e0b156d66c105054d9a0f2745be4be89b3c9b0244e8e52bc593abd8757a96
data/common.rb CHANGED
@@ -2,9 +2,9 @@ def download_if_needed path
2
2
  require "open-uri"
3
3
  require "digest"
4
4
  FileUtils.mkdir_p File.dirname path
5
- open("http://gems.nakilon.pro.storage.yandexcloud.net/dhash-vips/#{File.basename path}".tap do |url|
5
+ URI("http://gems.nakilon.pro.storage.yandexcloud.net/dhash-vips/#{File.basename path}".tap do |url|
6
6
  puts "downloading #{path} from #{url}"
7
- end) do |link|
7
+ end).open do |link|
8
8
  File.open(path, "wb"){ |file| IO.copy_stream link, file }
9
9
  end unless File.exist?(path) && Digest::MD5.file(path) == File.basename(path, File.extname(path))
10
10
  path
data/dhash-vips.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |spec|
2
2
  spec.name = "dhash-vips"
3
- spec.version = "0.2.0.0"
3
+ spec.version = "0.2.3.0"
4
4
  spec.summary = "dHash and IDHash perceptual image hashing/fingerprinting"
5
5
  # spec.homepage = "https://github.com/nakilon/dhash-vips"
6
6
 
data/extconf.rb CHANGED
@@ -24,11 +24,12 @@ end
24
24
 
25
25
  __END__
26
26
 
27
- to test: $ rake clean && rake install
28
-
29
27
  # this unlike using rake is building to current directory
30
28
  # that is vital to be able to require the native extention for benchmarking, etc.
31
29
  $ ruby extconf.rb && make clean && make
30
+
31
+ # to test: $ rake clean && rake install
32
+
32
33
  $ ruby -e "require 'dhash-vips'; p DHashVips::IDHash.method(:distance3).source_location" # using -r makes bundler mad
33
34
  # [".../dhash-vips.rb", 32] # if LoadError
34
35
  # [".../dhash-vips.rb", 52] # if native (or 42 with Ruby<2.4)
data/lib/dhash-vips.rb CHANGED
@@ -3,6 +3,10 @@ Vips.vector_set false
3
3
 
4
4
  module DHashVips
5
5
 
6
+ def self.bw image
7
+ (image.has_alpha? ? image.flatten(background: 255) : image).colourspace("b-w")[0]
8
+ end
9
+
6
10
  module DHash
7
11
  extend self
8
12
 
@@ -11,12 +15,11 @@ module DHashVips
11
15
  end
12
16
 
13
17
  def pixelate input, hash_size
14
- image = if input.is_a? Vips::Image
18
+ DHashVips.bw( if input.is_a? Vips::Image
15
19
  input.thumbnail_image(hash_size + 1, height: hash_size, size: :force)
16
20
  else
17
21
  Vips::Image.thumbnail(input, hash_size + 1, height: hash_size, size: :force)
18
- end
19
- (image.has_alpha? ? image.flatten : image).colourspace("b-w")[0]
22
+ end )
20
23
  end
21
24
 
22
25
  def calculate file, hash_size = 8
@@ -34,7 +37,9 @@ module DHashVips
34
37
  begin
35
38
  require_relative "../idhash.#{Gem::Platform.local.os == "darwin" ? "bundle" : "o"}"
36
39
  rescue LoadError
37
- alias_method :distance3, :distance3_ruby
40
+ class << self
41
+ alias distance3 distance3_ruby
42
+ end
38
43
  else
39
44
  # we can't just do `defined? Bignum` because it's defined but deprecated (some internal CONST_DEPRECATED flag)
40
45
  if Gem::Version.new(RUBY_VERSION) < Gem::Version.new("2.4")
@@ -98,7 +103,7 @@ module DHashVips
98
103
  else
99
104
  Vips::Image.thumbnail(input, size, height: size, size: :force)
100
105
  end
101
- array = (image.has_alpha? ? image.flatten : image).flatten.colourspace("b-w")[0].to_enum.map &:flatten
106
+ array = DHashVips.bw(image).to_enum.map &:flatten
102
107
  d1, i1, d2, i2 = [array, array.transpose].flat_map do |a|
103
108
  d = a.zip(a.rotate(1)).flat_map{ |r1, r2| r1.zip(r2).map{ |i, j| i - j } }
104
109
  m = median d.map(&:abs).sort
data/test.rb CHANGED
@@ -5,63 +5,9 @@ require_relative "lib/dhash-vips"
5
5
  # TODO tests about `fingerprint(4)`
6
6
 
7
7
  [
8
- [DHashVips::DHash, :hamming, :calculate, 2, 23, 9, 53, 7],
9
-
10
- # vips-8.9.1-Tue Jan 28 13:05:46 UTC 2020
11
- # [[0, 14, 26, 27, 31, 27, 32, 28, 43, 43, 34, 37, 37, 34, 35, 42],
12
- # [14, 0, 28, 25, 39, 35, 32, 32, 43, 43, 38, 41, 41, 38, 37, 50],
13
- # [26, 28, 0, 13, 35, 41, 28, 30, 41, 41, 36, 33, 35, 32, 27, 36],
14
- # [27, 25, 13, 0, 36, 36, 31, 35, 40, 40, 33, 32, 42, 35, 26, 33],
15
- # [31, 39, 35, 36, 0, 16, 33, 33, 40, 40, 31, 24, 28, 33, 40, 31],
16
- # [27, 35, 41, 36, 16, 0, 41, 41, 38, 38, 23, 26, 24, 29, 34, 27],
17
- # [32, 32, 28, 31, 33, 41, 0, 10, 27, 25, 38, 35, 37, 32, 23, 34],
18
- # [28, 32, 30, 35, 33, 41, 10, 0, 27, 27, 34, 31, 37, 36, 27, 34],
19
- # [43, 43, 41, 40, 40, 38, 27, 27, 0, 2, 35, 34, 30, 31, 28, 27],
20
- # [43, 43, 41, 40, 40, 38, 25, 27, 2, 0, 35, 34, 30, 31, 28, 27],
21
- # [34, 38, 36, 33, 31, 23, 38, 34, 35, 35, 0, 9, 23, 26, 29, 18],
22
- # [37, 41, 33, 32, 24, 26, 35, 31, 34, 34, 9, 0, 22, 25, 30, 19],
23
- # [37, 41, 35, 42, 28, 24, 37, 37, 30, 30, 23, 22, 0, 19, 26, 23],
24
- # [34, 38, 32, 35, 33, 29, 32, 36, 31, 31, 26, 25, 19, 0, 21, 26],
25
- # [35, 37, 27, 26, 40, 34, 23, 27, 28, 28, 29, 30, 26, 21, 0, 23],
26
- # [42, 50, 36, 33, 31, 27, 34, 34, 27, 27, 18, 19, 23, 26, 23, 0]]
27
-
28
- # vips-8.11.3-Wed Aug 11 09:29:27 UTC 2021
29
- # [[0, 17, 25, 30, 30, 26, 35, 30, 42, 42, 35, 32, 36, 32, 34, 42],
30
- # [17, 0, 28, 27, 39, 35, 32, 29, 43, 43, 38, 39, 43, 37, 37, 49],
31
- # [25, 28, 0, 13, 35, 41, 28, 29, 41, 41, 38, 35, 33, 31, 27, 37],
32
- # [30, 27, 13, 0, 36, 36, 31, 34, 38, 38, 35, 32, 40, 34, 26, 32],
33
- # [30, 39, 35, 36, 0, 16, 35, 34, 40, 40, 31, 26, 28, 34, 40, 30],
34
- # [26, 35, 41, 36, 16, 0, 41, 44, 38, 38, 23, 28, 26, 30, 34, 24],
35
- # [35, 32, 28, 31, 35, 41, 0, 11, 27, 27, 38, 35, 33, 33, 21, 35],
36
- # [30, 29, 29, 34, 34, 44, 11, 0, 28, 28, 37, 32, 36, 40, 30, 38],
37
- # [42, 43, 41, 38, 40, 38, 27, 28, 0, 0, 33, 34, 30, 32, 28, 30],
38
- # [42, 43, 41, 38, 40, 38, 27, 28, 0, 0, 33, 34, 30, 32, 28, 30],
39
- # [35, 38, 38, 35, 31, 23, 38, 37, 33, 33, 0, 11, 23, 27, 31, 17],
40
- # [32, 39, 35, 32, 26, 28, 35, 32, 34, 34, 11, 0, 24, 26, 30, 20],
41
- # [36, 43, 33, 40, 28, 26, 33, 36, 30, 30, 23, 24, 0, 20, 26, 22],
42
- # [32, 37, 31, 34, 34, 30, 33, 40, 32, 32, 27, 26, 20, 0, 20, 26],
43
- # [34, 37, 27, 26, 40, 34, 21, 30, 28, 28, 31, 30, 26, 20, 0, 24],
44
- # [42, 49, 37, 32, 30, 24, 35, 38, 30, 30, 17, 20, 22, 26, 24, 0]]
45
-
46
- # v0.1.2.0
47
- # [[0, 18, 25, 27, 28, 25, 33, 31, 39, 40, 33, 35, 32, 28, 36, 47],
48
- # [18, 0, 31, 25, 34, 33, 33, 33, 39, 38, 37, 43, 40, 36, 40, 53],
49
- # [25, 31, 0, 16, 31, 38, 26, 32, 42, 41, 36, 38, 31, 31, 31, 32],
50
- # [27, 25, 16, 0, 35, 36, 26, 32, 38, 37, 34, 34, 41, 37, 27, 34],
51
- # [28, 34, 31, 35, 0, 17, 39, 37, 41, 44, 31, 27, 26, 32, 32, 33],
52
- # [25, 33, 38, 36, 17, 0, 46, 40, 38, 39, 24, 28, 25, 31, 25, 30],
53
- # [33, 33, 26, 26, 39, 46, 0, 10, 26, 25, 34, 32, 31, 35, 33, 30],
54
- # [31, 33, 32, 32, 37, 40, 10, 0, 26, 27, 34, 32, 33, 33, 33, 34],
55
- # [39, 39, 42, 38, 41, 38, 26, 26, 0, 3, 36, 34, 35, 33, 37, 28],
56
- # [40, 38, 41, 37, 44, 39, 25, 27, 3, 0, 35, 35, 36, 36, 36, 27],
57
- # [33, 37, 36, 34, 31, 24, 34, 34, 36, 35, 0, 10, 23, 31, 23, 22],
58
- # [35, 43, 38, 34, 27, 28, 32, 32, 34, 35, 10, 0, 23, 29, 23, 20],
59
- # [32, 40, 31, 41, 26, 25, 31, 33, 35, 36, 23, 23, 0, 20, 24, 21],
60
- # [28, 36, 31, 37, 32, 31, 35, 33, 33, 36, 31, 29, 20, 0, 20, 25],
61
- # [36, 40, 31, 27, 32, 25, 33, 33, 37, 36, 23, 23, 24, 20, 0, 17],
62
- # [47, 53, 32, 34, 33, 30, 30, 34, 28, 27, 22, 20, 21, 25, 17, 0]]
63
-
64
- # v0.2.0.0
8
+ [DHashVips::DHash, :hamming, :calculate, 2, 23, 16, 50, 7, 0x7919395919191919],
9
+
10
+ # v0.2.3.0
65
11
  # [[0, 18, 26, 28, 28, 24, 35, 31, 42, 42, 32, 34, 33, 29, 35, 40],
66
12
  # [18, 0, 30, 24, 38, 34, 33, 33, 44, 42, 38, 42, 41, 37, 37, 50],
67
13
  # [26, 30, 0, 16, 34, 38, 29, 35, 42, 40, 36, 38, 31, 31, 31, 36],
@@ -79,89 +25,40 @@ require_relative "lib/dhash-vips"
79
25
  # [35, 37, 31, 27, 35, 29, 28, 28, 31, 31, 25, 25, 24, 22, 0, 23],
80
26
  # [40, 50, 36, 34, 28, 28, 31, 33, 28, 28, 18, 16, 19, 27, 23, 0]]
81
27
 
82
- [DHashVips::IDHash, :distance, :fingerprint, 8, 21, 23, 72, 0],
83
-
84
- # vips-8.9.1-Tue Jan 28 13:05:46 UTC 2020
85
- # [[0, 16, 32, 35, 57, 45, 51, 50, 48, 47, 54, 48, 60, 50, 47, 56],
86
- # [16, 0, 30, 34, 58, 47, 55, 56, 47, 50, 57, 49, 62, 52, 52, 61],
87
- # [32, 30, 0, 9, 47, 54, 45, 41, 65, 62, 42, 37, 51, 44, 49, 49],
88
- # [35, 34, 9, 0, 54, 64, 42, 40, 57, 56, 48, 39, 50, 40, 41, 51],
89
- # [57, 58, 47, 54, 0, 22, 43, 45, 64, 61, 48, 47, 35, 43, 47, 48],
90
- # [45, 47, 54, 64, 22, 0, 53, 54, 55, 54, 40, 46, 39, 42, 43, 42],
91
- # [51, 55, 45, 42, 43, 53, 0, 6, 33, 35, 52, 43, 46, 45, 44, 47],
92
- # [50, 56, 41, 40, 45, 54, 6, 0, 38, 41, 53, 50, 48, 45, 41, 42],
93
- # [48, 47, 65, 57, 64, 55, 33, 38, 0, 9, 51, 53, 47, 47, 41, 46],
94
- # [47, 50, 62, 56, 61, 54, 35, 41, 9, 0, 51, 57, 50, 49, 44, 43],
95
- # [54, 57, 42, 48, 48, 40, 52, 53, 51, 51, 0, 10, 33, 36, 38, 25],
96
- # [48, 49, 37, 39, 47, 46, 43, 50, 53, 57, 10, 0, 27, 30, 37, 27],
97
- # [60, 62, 51, 50, 35, 39, 46, 48, 47, 50, 33, 27, 0, 20, 23, 28],
98
- # [50, 52, 44, 40, 43, 42, 45, 45, 47, 49, 36, 30, 20, 0, 35, 39],
99
- # [47, 52, 49, 41, 47, 43, 44, 41, 41, 44, 38, 37, 23, 35, 0, 19],
100
- # [56, 61, 49, 51, 48, 42, 47, 42, 46, 43, 25, 27, 28, 39, 19, 0]]
101
-
102
- # vips-8.11.3-Wed Aug 11 09:29:27 UTC 2021
103
- # [[0, 17, 30, 35, 55, 46, 51, 54, 48, 46, 57, 48, 59, 52, 49, 54],
104
- # [17, 0, 30, 37, 57, 46, 54, 55, 46, 49, 60, 50, 61, 54, 51, 58],
105
- # [30, 30, 0, 12, 46, 57, 47, 42, 66, 59, 44, 37, 49, 44, 48, 49],
106
- # [35, 37, 12, 0, 54, 67, 44, 41, 58, 53, 48, 41, 56, 42, 46, 48],
107
- # [55, 57, 46, 54, 0, 23, 45, 43, 65, 63, 48, 48, 34, 42, 48, 47],
108
- # [46, 46, 57, 67, 23, 0, 57, 56, 51, 50, 42, 48, 37, 38, 46, 40],
109
- # [51, 54, 47, 44, 45, 57, 0, 6, 33, 34, 49, 43, 49, 41, 45, 47],
110
- # [54, 55, 42, 41, 43, 56, 6, 0, 40, 39, 51, 50, 49, 40, 44, 44],
111
- # [48, 46, 66, 58, 65, 51, 33, 40, 0, 10, 47, 53, 48, 46, 40, 46],
112
- # [46, 49, 59, 53, 63, 50, 34, 39, 10, 0, 50, 57, 50, 49, 40, 43],
113
- # [57, 60, 44, 48, 48, 42, 49, 51, 47, 50, 0, 9, 33, 32, 40, 23],
114
- # [48, 50, 37, 41, 48, 48, 43, 50, 53, 57, 9, 0, 28, 27, 38, 28],
115
- # [59, 61, 49, 56, 34, 37, 49, 49, 48, 50, 33, 28, 0, 21, 24, 27],
116
- # [52, 54, 44, 42, 42, 38, 41, 40, 46, 49, 32, 27, 21, 0, 36, 35],
117
- # [49, 51, 48, 46, 48, 46, 45, 44, 40, 40, 40, 38, 24, 36, 0, 21],
118
- # [54, 58, 49, 48, 47, 40, 47, 44, 46, 43, 23, 28, 27, 35, 21, 0]]
119
-
120
- # v0.1.2.0
121
- # [[0, 17, 34, 40, 53, 43, 53, 52, 47, 47, 56, 44, 54, 51, 47, 57],
122
- # [17, 0, 35, 33, 56, 45, 56, 52, 48, 49, 58, 49, 64, 57, 53, 58],
123
- # [34, 35, 0, 8, 51, 57, 45, 40, 57, 54, 47, 40, 49, 47, 47, 48],
124
- # [40, 33, 8, 0, 56, 62, 44, 40, 53, 47, 50, 41, 53, 41, 42, 47],
125
- # [53, 56, 51, 56, 0, 21, 41, 48, 72, 65, 46, 47, 36, 43, 43, 43],
126
- # [43, 45, 57, 62, 21, 0, 54, 56, 61, 60, 41, 47, 38, 39, 43, 39],
127
- # [53, 56, 45, 44, 41, 54, 0, 12, 39, 40, 47, 44, 44, 38, 48, 41],
128
- # [52, 52, 40, 40, 48, 56, 12, 0, 35, 36, 51, 50, 47, 39, 41, 43],
129
- # [47, 48, 57, 53, 72, 61, 39, 35, 0, 11, 53, 53, 57, 48, 42, 51],
130
- # [47, 49, 54, 47, 65, 60, 40, 36, 11, 0, 50, 54, 51, 49, 45, 47],
131
- # [56, 58, 47, 50, 46, 41, 47, 51, 53, 50, 0, 13, 32, 36, 38, 23],
132
- # [44, 49, 40, 41, 47, 47, 44, 50, 53, 54, 13, 0, 28, 30, 35, 27],
133
- # [54, 64, 49, 53, 36, 38, 44, 47, 57, 51, 32, 28, 0, 21, 24, 28],
134
- # [51, 57, 47, 41, 43, 39, 38, 39, 48, 49, 36, 30, 21, 0, 31, 35],
135
- # [47, 53, 47, 42, 43, 43, 48, 41, 42, 45, 38, 35, 24, 31, 0, 19],
136
- # [57, 58, 48, 47, 43, 39, 41, 43, 51, 47, 23, 27, 28, 35, 19, 0]]
137
-
138
- # v0.2.0.0
139
- # [[0, 17, 34, 40, 53, 43, 53, 52, 47, 47, 56, 44, 54, 51, 47, 57],
140
- # [17, 0, 35, 33, 56, 45, 56, 52, 48, 49, 58, 49, 64, 57, 53, 58],
141
- # [34, 35, 0, 8, 51, 57, 45, 40, 57, 54, 47, 40, 49, 47, 47, 48],
142
- # [40, 33, 8, 0, 56, 62, 44, 40, 53, 47, 50, 41, 53, 41, 42, 47],
143
- # [53, 56, 51, 56, 0, 21, 41, 48, 72, 65, 46, 47, 36, 43, 43, 43],
144
- # [43, 45, 57, 62, 21, 0, 54, 56, 61, 60, 41, 47, 38, 39, 43, 39],
145
- # [53, 56, 45, 44, 41, 54, 0, 12, 39, 40, 47, 44, 44, 38, 48, 41],
146
- # [52, 52, 40, 40, 48, 56, 12, 0, 35, 36, 51, 50, 47, 39, 41, 43],
147
- # [47, 48, 57, 53, 72, 61, 39, 35, 0, 11, 53, 53, 57, 48, 42, 51],
148
- # [47, 49, 54, 47, 65, 60, 40, 36, 11, 0, 50, 54, 51, 49, 45, 47],
149
- # [56, 58, 47, 50, 46, 41, 47, 51, 53, 50, 0, 13, 32, 36, 38, 23],
150
- # [44, 49, 40, 41, 47, 47, 44, 50, 53, 54, 13, 0, 28, 30, 35, 27],
151
- # [54, 64, 49, 53, 36, 38, 44, 47, 57, 51, 32, 28, 0, 21, 24, 28],
152
- # [51, 57, 47, 41, 43, 39, 38, 39, 48, 49, 36, 30, 21, 0, 31, 35],
153
- # [47, 53, 47, 42, 43, 43, 48, 41, 42, 45, 38, 35, 24, 31, 0, 19],
154
- # [57, 58, 48, 47, 43, 39, 41, 43, 51, 47, 23, 27, 28, 35, 19, 0]]
155
-
156
- ].each do |lib, dm, calc, min_similar, max_similar, min_not_similar, max_not_similar, bw_exceptional|
28
+ [DHashVips::IDHash, :distance, :fingerprint, 8, 22, 25, 70, 0, 0x1d5cdc0d1d0c1d9f5720a6fff2fe02013f00df9f005e1dc0ff670000ffff0080],
29
+
30
+ # v0.2.3.0
31
+ # [[0, 19, 34, 38, 57, 47, 50, 49, 45, 42, 55, 45, 60, 49, 51, 53],
32
+ # [19, 0, 34, 33, 55, 47, 52, 49, 46, 49, 59, 46, 62, 54, 50, 57],
33
+ # [34, 34, 0, 8, 48, 55, 46, 42, 55, 57, 45, 35, 51, 45, 46, 47],
34
+ # [38, 33, 8, 0, 52, 61, 43, 38, 49, 50, 50, 37, 50, 39, 43, 51],
35
+ # [57, 55, 48, 52, 0, 22, 46, 42, 70, 63, 51, 50, 35, 41, 46, 46],
36
+ # [47, 47, 55, 61, 22, 0, 54, 54, 57, 53, 39, 44, 43, 41, 45, 38],
37
+ # [50, 52, 46, 43, 46, 54, 0, 8, 35, 38, 51, 45, 50, 42, 43, 43],
38
+ # [49, 49, 42, 38, 42, 54, 8, 0, 34, 36, 54, 49, 49, 42, 43, 44],
39
+ # [45, 46, 55, 49, 70, 57, 35, 34, 0, 10, 53, 55, 56, 50, 49, 49],
40
+ # [42, 49, 57, 50, 63, 53, 38, 36, 10, 0, 50, 52, 55, 48, 46, 45],
41
+ # [55, 59, 45, 50, 51, 39, 51, 54, 53, 50, 0, 10, 32, 35, 40, 25],
42
+ # [45, 46, 35, 37, 50, 44, 45, 49, 55, 52, 10, 0, 30, 27, 37, 26],
43
+ # [60, 62, 51, 50, 35, 43, 50, 49, 56, 55, 32, 30, 0, 22, 26, 28],
44
+ # [49, 54, 45, 39, 41, 41, 42, 42, 50, 48, 35, 27, 22, 0, 37, 35],
45
+ # [51, 50, 46, 43, 46, 45, 43, 43, 49, 46, 40, 37, 26, 37, 0, 22],
46
+ # [53, 57, 47, 51, 46, 38, 43, 44, 49, 45, 25, 26, 28, 35, 22, 0]]
47
+
48
+ ].each do |lib, dm, calc, min_similar, max_similar, min_not_similar, max_not_similar, bw_exceptional, hash|
157
49
 
158
50
  describe lib do
51
+ require "fileutils"
52
+ require "digest"
53
+ require "mll"
54
+
55
+ require_relative "common"
159
56
 
160
57
  # these are false positive by idhash
161
- # 6d97739b4a08f965dc9239dd24382e96.jpg
162
58
  # 1b1d4bde376084011d027bba1c047a4b.jpg
59
+ # 6d97739b4a08f965dc9239dd24382e96.jpg
163
60
  [
164
- [ %w{
61
+ [:similar, %w{
165
62
  1d468d064d2e26b5b5de9a0241ef2d4b.jpg 92d90b8977f813af803c78107e7f698e.jpg
166
63
  309666c7b45ecbf8f13e85a0bd6b0a4c.jpg 3f9f3db06db20d1d9f8188cd753f6ef4.jpg
167
64
  679634ff89a31279a39f03e278bc9a01.jpg df0a3b93e9412536ee8a11255f974141.jpg
@@ -170,48 +67,60 @@ require_relative "lib/dhash-vips"
170
67
  21cd9a6986d98976b6b4655e1de7baf4.jpg 9b158c0d4953d47171a22ed84917f812.jpg
171
68
  9c2c240ec02356472fb532f404d28dde.jpg fc762fa286489d8afc80adc8cdcb125e.jpg
172
69
  7a833d873f8d49f12882e86af1cc6b79.jpg ac033cf01a3941dd1baa876082938bc9.jpg
173
- }, min_similar, max_similar], # slightly silimar images
174
- [ %w{
70
+ }, min_similar, max_similar, min_not_similar, max_not_similar], # slightly silimar images
71
+ [:bw_exceptional, %w{
175
72
  71662d4d4029a3b41d47d5baf681ab9a.jpg ad8a37f872956666c3077a3e9e737984.jpg
176
73
  }, bw_exceptional, bw_exceptional], # these are the same photo but of different size and colorspace
177
- ].each do |_images, min, max|
178
-
179
- require "fileutils"
180
- require "digest"
181
- require "mll"
74
+ ].each do |test_name, _images, min, max, min_not, max_not|
182
75
 
183
- require_relative "common"
184
76
  images = _images.map{ |_| download_if_needed "test_images/#{_}" }
185
77
 
186
78
  hashes = images.map &lib.method(calc)
187
79
  table = MLL::table[lib.method(dm), [hashes], [hashes]]
188
80
 
189
- require "pp"
190
- STDERR.puts ""
191
- PP.pp table, STDERR
192
- STDERR.puts ""
81
+ # STDERR.puts ""
82
+ # require "pp"
83
+ # PP.pp table, STDERR
84
+ # STDERR.puts ""
193
85
 
194
- hashes.size.times.to_a.repeated_combination(2) do |i, j|
195
- it "#{_images[i]} #{_images[j]}" do
86
+ it test_name do
87
+ similar = []
88
+ not_similar = []
89
+ hashes.size.times.to_a.repeated_combination(2) do |i, j|
196
90
  case
197
91
  when i == j
198
92
  assert_predicate table[i][j], :zero?
199
93
  when (j - i).abs == 1 && (i + j - 1) % 4 == 0
200
94
  # STDERR.puts [table[i][j], min, max].inspect
201
- assert_includes min..max, table[i][j]
95
+ similar.push table[i][j]
202
96
  else
203
97
  # STDERR.puts [table[i][j], min_not_similar, max_not_similar].inspect
204
- assert_includes min_not_similar..max_not_similar, table[i][j]
98
+ not_similar.push table[i][j]
205
99
  end
206
100
  end
101
+ assert_equal [min, max], similar.minmax
102
+ assert_equal [min_not, max_not], not_similar.minmax if min_not
207
103
  end
208
104
 
209
105
  end
210
106
 
211
107
  it "accepts Vips::Image" do
108
+ # https://github.com/libvips/ruby-vips/issues/349
212
109
  lib.public_send calc, Vips::Image.new_from_buffer("GIF89a\x01\x00\x01\x00\x80\x01\x00\xFF\xFF\xFF\x00\x00\x00,\x00\x00\x00\x00\x01\x00\x01\x00\x00\x02\x02D\x01\x00;", "")
213
110
  end
214
111
 
112
+ it "correct calculation" do
113
+ download_if_needed "alpha_only.png"
114
+ t = lib.public_send calc, "alpha_only.png"
115
+ assert_equal hash, t, ->{ "0x#{hash.to_s 16} != 0x#{t.to_s 16}" }
116
+ end
117
+
215
118
  end
216
119
 
217
120
  end
121
+
122
+ describe DHashVips::IDHash do
123
+ it "does not call distance3_ruby" do
124
+ assert_equal :distance3, DHashVips::IDHash.method(:distance3).original_name
125
+ end
126
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dhash-vips
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0.0
4
+ version: 0.2.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Victor Maslov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-11-11 00:00:00.000000000 Z
11
+ date: 2022-12-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ruby-vips
@@ -71,8 +71,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
71
71
  - !ruby/object:Gem::Version
72
72
  version: '0'
73
73
  requirements: []
74
- rubyforge_project:
75
- rubygems_version: 2.5.2.3
74
+ rubygems_version: 3.3.25
76
75
  signing_key:
77
76
  specification_version: 4
78
77
  summary: dHash and IDHash perceptual image hashing/fingerprinting