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.



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

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.



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

def depiction
  @depiction
end

#depiction_idObject

Returns the value of attribute depiction_id.



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

def depiction_id
  @depiction_id
end

#height_ratioObject

Returns the value of attribute height_ratio.



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

def height_ratio
  @height_ratio
end

#namespace_idObject

Returns the value of attribute namespace_id.



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

def namespace_id
  @namespace_id
end

#original_imageObject

Returns the value of attribute original_image.



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

def original_image
  @original_image
end

#sqedObject

Returns the value of attribute sqed.



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

def sqed
  @sqed
end

#sqed_depictionObject

Returns the value of attribute sqed_depiction.



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

def sqed_depiction
  @sqed_depiction
end

#sqed_resulta sqed result, false

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

Returns:

  • (a sqed result, false)


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

def sqed_result
  @sqed_result
end

#width_ratioObject

Returns the value of attribute width_ratio.



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

def width_ratio
  @width_ratio
end

Instance Method Details

#boundaries_cached?Boolean

Returns:

  • (Boolean)


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

def boundaries_cached?
  !sqed_depiction.result_boundary_coordinates.nil?
end

#cache_allObject



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

def cache_all
  cache_ocr
  cache_boundaries
  sqed_depiction.touch
end

#cache_boundariesObject



124
125
126
127
128
129
130
131
132
133
134
# File 'lib/vendor/sqed_to_taxonworks.rb', line 124

def cache_boundaries
  begin
    sqed_depiction.update_column(:result_boundary_coordinates, sqed.boundaries.coordinates)
  rescue RuntimeError => e
    if e.message.include?("No image provided")
      sqed_depiction.update_column(:result_boundary_coordinates, nil)
    else
      raise
    end
  end
end

#cache_ocrObject



136
137
138
# File 'lib/vendor/sqed_to_taxonworks.rb', line 136

def cache_ocr
  sqed_depiction.update_column(:result_ocr, (sqed_result || nil)&.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



246
247
248
249
250
251
252
253
254
# File 'lib/vendor/sqed_to_taxonworks.rb', line 246

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



157
158
159
160
161
162
163
164
165
166
# File 'lib/vendor/sqed_to_taxonworks.rb', line 157

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



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

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



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

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



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

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)


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

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

#image_unavailable?Boolean

Returns:

  • (Boolean)


239
240
241
242
# File 'lib/vendor/sqed_to_taxonworks.rb', line 239

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

#large_dimensions_for(layout_section_type) ⇒ Object



233
234
235
236
237
# File 'lib/vendor/sqed_to_taxonworks.rb', line 233

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



228
229
230
231
# File 'lib/vendor/sqed_to_taxonworks.rb', line 228

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



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

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



218
219
220
221
# File 'lib/vendor/sqed_to_taxonworks.rb', line 218

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)


112
113
114
# File 'lib/vendor/sqed_to_taxonworks.rb', line 112

def namespace_locked?
  !namespace_id.nil?
end

#ocr_cached?Boolean

Returns:

  • (Boolean)


120
121
122
# File 'lib/vendor/sqed_to_taxonworks.rb', line 120

def ocr_cached?
  !sqed_depiction.result_ocr.nil?
end

#ocr_for(layout_section_type) ⇒ Object



146
147
148
149
150
151
152
153
154
155
# File 'lib/vendor/sqed_to_taxonworks.rb', line 146

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) if sqed_result
  end
end

#ocr_path_for(layout_section_type) ⇒ Object



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

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)


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

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

#secondary_sectionsArray

Returns:

  • (Array)


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

def secondary_sections
  image_sections - [primary_image]
end

#small_dimensions_for(layout_section_type) ⇒ Object



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

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



223
224
225
226
# File 'lib/vendor/sqed_to_taxonworks.rb', line 223

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



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

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