Class: SqedToTaxonworks::Result

Inherits:
Object
  • Object
show all
Defined in:
lib/vendor/sqed_to_taxonworks.rb

Overview

Stores and handles metadata linking a TW depiction to the Sqed library.

Constant Summary collapse

SMALL_WIDTH =
100
LARGE_WIDTH =
400
TEXT_MAP =
{
  annotated_specimen: :buffered_collecting_event,
  collecting_event_labels: :buffered_collecting_event,
  curator_metadata: :buffered_other_labels,
  determination_labels: :buffered_determinations,
  identifier: :buffered_other_labels,
  image_registration: nil,
  other_labels: :buffered_other_labels,
  labels: :buffered_collecting_event,
  nothing: nil,
  specimen: nil,
  stage: :buffered_collecting_event,
}.freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(depiction_id: nil, namespace_id: nil) ⇒ Result

Returns a new instance of Result.



42
43
44
45
# File 'lib/vendor/sqed_to_taxonworks.rb', line 42

def initialize(depiction_id: nil, namespace_id: nil)
  @depiction_id = depiction_id
  @namespace_id = namespace_id
end

Instance Attribute Details

#depictionObject

Returns the value of attribute depiction.



24
25
26
# File 'lib/vendor/sqed_to_taxonworks.rb', line 24

def depiction
  @depiction
end

#depiction_idObject

Returns the value of attribute depiction_id.



26
27
28
# File 'lib/vendor/sqed_to_taxonworks.rb', line 26

def depiction_id
  @depiction_id
end

#height_ratioObject

Returns the value of attribute height_ratio.



40
41
42
# File 'lib/vendor/sqed_to_taxonworks.rb', line 40

def height_ratio
  @height_ratio
end

#namespace_idObject

Returns the value of attribute namespace_id.



28
29
30
# File 'lib/vendor/sqed_to_taxonworks.rb', line 28

def namespace_id
  @namespace_id
end

#original_imageObject

Returns the value of attribute original_image.



38
39
40
# File 'lib/vendor/sqed_to_taxonworks.rb', line 38

def original_image
  @original_image
end

#sqedObject

Returns the value of attribute sqed.



32
33
34
# File 'lib/vendor/sqed_to_taxonworks.rb', line 32

def sqed
  @sqed
end

#sqed_depictionObject

Returns the value of attribute sqed_depiction.



30
31
32
# File 'lib/vendor/sqed_to_taxonworks.rb', line 30

def sqed_depiction
  @sqed_depiction
end

#sqed_resultObject

Minimize use of this if possible, depend on the cached values when possible.



36
37
38
# File 'lib/vendor/sqed_to_taxonworks.rb', line 36

def sqed_result
  @sqed_result
end

#width_ratioObject

Returns the value of attribute width_ratio.



40
41
42
# File 'lib/vendor/sqed_to_taxonworks.rb', line 40

def width_ratio
  @width_ratio
end

Instance Method Details

#boundaries_cached?Boolean

Returns:

  • (Boolean)


94
95
96
# File 'lib/vendor/sqed_to_taxonworks.rb', line 94

def boundaries_cached?
  !sqed_depiction.result_boundary_coordinates.nil? 
end

#cache_allObject



114
115
116
117
118
# File 'lib/vendor/sqed_to_taxonworks.rb', line 114

def cache_all
  cache_ocr
  cache_boundaries
  sqed_depiction.touch
end

#cache_boundariesObject



102
103
104
105
106
107
108
# File 'lib/vendor/sqed_to_taxonworks.rb', line 102

def cache_boundaries
  begin
    sqed_depiction.update_column(:result_boundary_coordinates, sqed.boundaries.coordinates)
  rescue NoMethodError  # TODO - better handling in Sqed
    sqed_depiction.update_column(:result_boundary_coordinates, nil)
  end
end

#cache_ocrObject



110
111
112
# File 'lib/vendor/sqed_to_taxonworks.rb', line 110

def cache_ocr
  sqed_depiction.update_column(:result_ocr, sqed_result&.text)
end

#coordinates_valid?Boolean

Returns if false then they are clearly not, if true then they might be.

Returns:

  • (Boolean)

    if false then they are clearly not, if true then they might be



220
221
222
223
224
225
226
227
228
# File 'lib/vendor/sqed_to_taxonworks.rb', line 220

def coordinates_valid?
  return false if sqed_depiction.result_boundary_coordinates.nil?
  zeroed = 0
  sqed_depiction.result_boundary_coordinates.each do |k, v|
    zeroed += 1 if v == [0,0,0,0]
    return false if zeroed > 1
  end
  true
end

#coords_for(layout_section_type) ⇒ Object



131
132
133
134
135
136
137
138
139
140
# File 'lib/vendor/sqed_to_taxonworks.rb', line 131

def coords_for(layout_section_type)
  index = sqed_depiction.[:metadata_map].key(layout_section_type)
  if boundaries_cached?
    sqed_depiction.result_boundary_coordinates[index.to_s].to_a # TODO- hmm, why the to_s needed here
  else # do not do the OCR if only coords asked for
    sqed_result 
    cache_boundaries
    sqed.boundaries.for(index)
  end
end

#image_path_for(layout_section_type) ⇒ Object



142
143
144
145
# File 'lib/vendor/sqed_to_taxonworks.rb', line 142

def image_path_for(layout_section_type)
  c = coords_for(layout_section_type) 
  "/images/#{depiction.image.id}/extract/#{c[0]}/#{c[1]}/#{c[2]}/#{c[3]}"
end

#image_path_for_large_image(layout_section_type) ⇒ Object



147
148
149
150
# File 'lib/vendor/sqed_to_taxonworks.rb', line 147

def image_path_for_large_image(layout_section_type)
  c = coords_for(layout_section_type) 
  "/images/#{depiction.image.id}/scale_to_box/#{c[0]}/#{c[1]}/#{c[2]}/#{c[3]}/400/400"
end

#image_path_for_small_image(layout_section_type) ⇒ Object



152
153
154
155
# File 'lib/vendor/sqed_to_taxonworks.rb', line 152

def image_path_for_small_image(layout_section_type)
  c = coords_for(layout_section_type) 
  "/images/#{depiction.image.id}/scale_to_box/#{c[0]}/#{c[1]}/#{c[2]}/#{c[3]}/150/150"
end

#image_sectionsArray

Returns:

  • (Array)


163
164
165
# File 'lib/vendor/sqed_to_taxonworks.rb', line 163

def image_sections
  (sqed_depiction.[:metadata_map].values - [:image_registration])
end

#image_unavailable?Boolean

Returns:

  • (Boolean)


213
214
215
216
# File 'lib/vendor/sqed_to_taxonworks.rb', line 213

def image_unavailable?
  return true if !File.exists?(depiction.image.image_file.path(:original))
  false
end

#large_dimensions_for(layout_section_type) ⇒ Object



207
208
209
210
211
# File 'lib/vendor/sqed_to_taxonworks.rb', line 207

def large_dimensions_for(layout_section_type)
  c = coords_for(layout_section_type) 
  return nil if c == [] || (c[2] == 0 and  c[3] == 0)
  "0, 0, 400, #{ (c[3].to_f / (c[2].to_f / 400)).to_i }"
end

#large_height_for(layout_section_type) ⇒ Object



202
203
204
205
# File 'lib/vendor/sqed_to_taxonworks.rb', line 202

def large_height_for(layout_section_type)
  c = coords_for(layout_section_type) 
 "#{(c[3].to_f / (c[2].to_f / LARGE_WIDTH)).to_i}"
end

#large_height_width(layout_section_type) ⇒ Object



187
188
189
190
# File 'lib/vendor/sqed_to_taxonworks.rb', line 187

def large_height_width(layout_section_type)
  c = coords_for(layout_section_type) 
  "#{LARGE_WIDTH}, #{large_height_for(layout_section_type)}"
end

#larger_height_width(layout_section_type) ⇒ Object



192
193
194
195
# File 'lib/vendor/sqed_to_taxonworks.rb', line 192

def larger_height_width(layout_section_type)
  c = coords_for(layout_section_type) 
  "#{LARGE_WIDTH + 100}, #{large_height_for(layout_section_type).to_i + 100}"
end

#namespace_locked?Boolean

Returns:

  • (Boolean)


90
91
92
# File 'lib/vendor/sqed_to_taxonworks.rb', line 90

def namespace_locked?
  !namespace_id.nil?
end

#ocr_cached?Boolean

Returns:

  • (Boolean)


98
99
100
# File 'lib/vendor/sqed_to_taxonworks.rb', line 98

def ocr_cached?
  !sqed_depiction.result_ocr.nil? 
end

#ocr_for(layout_section_type) ⇒ Object



120
121
122
123
124
125
126
127
128
129
# File 'lib/vendor/sqed_to_taxonworks.rb', line 120

def ocr_for(layout_section_type)
  index = sqed_depiction.[:metadata_map].key(layout_section_type)
  if ocr_cached?
    sqed_depiction.result_ocr[layout_section_type.to_s] && sqed_depiction.result_ocr[layout_section_type.to_s]['text']
  else
    sqed_result 
    cache_all 
    sqed_result&.text_for(layout_section_type.to_sym)
  end
end

#ocr_path_for(layout_section_type) ⇒ Object



157
158
159
160
# File 'lib/vendor/sqed_to_taxonworks.rb', line 157

def ocr_path_for(layout_section_type)
  c = coords_for(layout_section_type) 
  "/images/#{depiction.image.id}/ocr/#{c[0]}/#{c[1]}/#{c[2]}/#{c[3]}"
end

#primary_imageSymbol

Returns:

  • (Symbol)


168
169
170
# File 'lib/vendor/sqed_to_taxonworks.rb', line 168

def primary_image 
  (image_sections & [:labels, :collecting_event_labels, :annotated_specimen]).first
end

#secondary_sectionsArray

Returns:

  • (Array)


173
174
175
# File 'lib/vendor/sqed_to_taxonworks.rb', line 173

def secondary_sections
  image_sections - [primary_image] 
end

#small_dimensions_for(layout_section_type) ⇒ Object



177
178
179
180
# File 'lib/vendor/sqed_to_taxonworks.rb', line 177

def small_dimensions_for(layout_section_type)
  c = coords_for(layout_section_type) 
  "0, 0, #{SMALL_WIDTH}, #{ (c[3].to_f / (c[2].to_f / SMALL_WIDTH)).to_i }"
end

#small_height_for(layout_section_type) ⇒ Object



197
198
199
200
# File 'lib/vendor/sqed_to_taxonworks.rb', line 197

def small_height_for(layout_section_type)
  c = coords_for(layout_section_type) 
 "#{(c[3].to_f / (c[2].to_f / SMALL_WIDTH)).to_i}"
end

#small_height_width(layout_section_type) ⇒ Object



182
183
184
185
# File 'lib/vendor/sqed_to_taxonworks.rb', line 182

def small_height_width(layout_section_type)
  c = coords_for(layout_section_type) 
  "#{SMALL_WIDTH}, #{small_height_for(layout_section_type)}"
end