similie 0.3.1 → 0.3.2
Sign up to get free protection for your applications and to get access to all the features.
- data/ext/extconf.rb +18 -7
- data/ext/similie.c +8 -2
- metadata +2 -2
data/ext/extconf.rb
CHANGED
@@ -10,17 +10,25 @@ def lib_paths lib, defaults
|
|
10
10
|
path.size > 0 ? path : defaults.map {|name| "-L#{name}"}.join(' ')
|
11
11
|
end
|
12
12
|
|
13
|
-
def
|
13
|
+
def lib_flags lib, defaults
|
14
14
|
path = %x{pkg-config #{lib} --libs-only-l 2>/dev/null}.strip
|
15
|
-
path.size > 0 ? path
|
15
|
+
path.size > 0 ? path.split(/\s+/).select {|name| %r{core|highgui}.match(name)}.join(' ')
|
16
|
+
: defaults.map {|name| "-l#{name}"}.join(' ')
|
16
17
|
end
|
17
18
|
|
18
|
-
|
19
|
-
$LDFLAGS
|
19
|
+
def lib_name re
|
20
|
+
$LDFLAGS.scan(re).flatten.first
|
21
|
+
end
|
22
|
+
|
23
|
+
$CFLAGS = inc_paths 'opencv', %w(/usr/include/opencv)
|
24
|
+
$LDFLAGS = lib_flags 'opencv', %w(highgui cxcore)
|
20
25
|
|
21
|
-
|
22
|
-
|
23
|
-
|
26
|
+
cxcore = lib_name(%r{-l(\w*core)}) or raise 'unable to find opencv cxcore'
|
27
|
+
highgui = lib_name(%r{-l(\w*highgui)}) or raise 'unable to find opencv highgui'
|
28
|
+
|
29
|
+
headers = %w(stdio.h stdlib.h string.h opencv/cxcore.h opencv/highgui.h)
|
30
|
+
lib_1 = [cxcore, 'cvInitFont', headers]
|
31
|
+
lib_2 = [highgui, 'cvEncodeImage', headers]
|
24
32
|
|
25
33
|
if have_header('opencv/cxcore.h') && have_library(*lib_1) && have_library(*lib_2)
|
26
34
|
create_makefile 'similie'
|
@@ -31,6 +39,9 @@ else
|
|
31
39
|
On debian based systems you can install it from apt as,
|
32
40
|
sudo apt-get install libcv-dev libhighgui-dev
|
33
41
|
|
42
|
+
On macos try,
|
43
|
+
brew install opencv
|
44
|
+
|
34
45
|
Refer to http://opencv.willowgarage.com/wiki/InstallGuide for other platforms or operating systems.
|
35
46
|
}
|
36
47
|
|
data/ext/similie.c
CHANGED
@@ -25,15 +25,21 @@
|
|
25
25
|
#define CSTRING(v) RSTRING_PTR(TO_S(v))
|
26
26
|
|
27
27
|
#undef SIZET2NUM
|
28
|
+
#undef NUM2SIZET
|
29
|
+
|
28
30
|
#ifdef HAVE_LONG_LONG
|
29
31
|
#define SIZET2NUM(x) ULL2NUM(x)
|
32
|
+
#define NUM2SIZET(x) NUM2ULL(x)
|
30
33
|
#else
|
31
34
|
#define SIZET2NUM(x) ULONG2NUM(x)
|
35
|
+
#define NUM2SIZET(x) NUM2ULONG(x)
|
32
36
|
#endif
|
33
37
|
|
38
|
+
|
39
|
+
|
34
40
|
#define DCT_SIZE 32
|
35
41
|
|
36
|
-
#if __GNUC__
|
42
|
+
#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
|
37
43
|
#define popcount __builtin_popcountll
|
38
44
|
#else
|
39
45
|
// http://en.wikipedia.org/wiki/Hamming_weight
|
@@ -132,7 +138,7 @@ VALUE rb_image_initialize(VALUE self, VALUE file) {
|
|
132
138
|
VALUE rb_image_distance(VALUE self, VALUE other) {
|
133
139
|
VALUE hash1 = rb_image_fingerprint(self);
|
134
140
|
VALUE hash2 = rb_image_fingerprint(other);
|
135
|
-
int dist = popcount(
|
141
|
+
int dist = popcount(NUM2SIZET(hash1) ^ NUM2SIZET(hash2));
|
136
142
|
return INT2NUM(dist);
|
137
143
|
}
|
138
144
|
|