Class: DupeMagick

Inherits:
Object
  • Object
show all
Defined in:
lib/dupe-magick.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#distanceObject

Returns the value of attribute distance.



8
9
10
# File 'lib/dupe-magick.rb', line 8

def distance
  @distance
end

#source_cubeObject

Returns the value of attribute source_cube.



8
9
10
# File 'lib/dupe-magick.rb', line 8

def source_cube
  @source_cube
end

#source_vectorObject

Returns the value of attribute source_vector.



8
9
10
# File 'lib/dupe-magick.rb', line 8

def source_vector
  @source_vector
end

#target_cubeObject

Returns the value of attribute target_cube.



8
9
10
# File 'lib/dupe-magick.rb', line 8

def target_cube
  @target_cube
end

#target_vectorObject

Returns the value of attribute target_vector.



8
9
10
# File 'lib/dupe-magick.rb', line 8

def target_vector
  @target_vector
end

Instance Method Details

#compare_images(source, target, params) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
# File 'lib/dupe-magick.rb', line 10

def compare_images(source, target, params)
  source_image = process_image(source, params)
  target_image = process_image(target, params)
  @source_vector = create_vector_from_image(source_image)
  @source_cube = create_cube_from_vector(@source_vector)
  @target_vector = create_vector_from_image(target_image)
  @target_cube = create_cube_from_vector(@target_vector)
  @distance = calculate_euclidian_distance(@source_cube, @target_cube)
  puts "Images are " + euclidian_plain_language(@distance) + ", score: " + @distance.to_i.to_s
  @distance.to_i
end

#deserialize(obj) ⇒ Object



46
47
48
49
# File 'lib/dupe-magick.rb', line 46

def deserialize(obj)
  # for retrieving image data from a blob in mysql etc
  Base64.decode64(Marshal.load(obj))
end

#find_duplicates(source_file, target_path) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/dupe-magick.rb', line 22

def find_duplicates(source_file, target_path)
  source_image = process_image(source_file, {:geometry => '8x8!'})
  @source_vector = create_vector_from_image(source_image)
  @source_cube = create_cube_from_vector(@source_vector)
  files = Dir[target_path]
  pbar = do_make_progress_bar("#{files.size} images", files.size)
  results = {}
  files.each do |target|
    target_image = process_image(target, {:geometry => '8x8!'})
    @target_vector = create_vector_from_image(target_image)
    @target_cube = create_cube_from_vector(@target_vector)
    @distance = calculate_euclidian_distance(@source_cube, @target_cube)
    results[target] = @distance
    pbar.inc
  end
  pbar.finish
  write_results(source_file, results)
end

#serialize(obj) ⇒ Object



41
42
43
44
# File 'lib/dupe-magick.rb', line 41

def serialize(obj)
  # for storing image data as a blob in mysql etc
  Base64.encode64(Marshal.dump(obj))
end