Class: SqedToTaxonworks::Result
- Inherits:
-
Object
- Object
- SqedToTaxonworks::Result
- 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
-
#depiction ⇒ Object
Returns the value of attribute depiction.
-
#depiction_id ⇒ Object
Returns the value of attribute depiction_id.
-
#height_ratio ⇒ Object
Returns the value of attribute height_ratio.
-
#namespace_id ⇒ Object
Returns the value of attribute namespace_id.
-
#original_image ⇒ Object
Returns the value of attribute original_image.
-
#sqed ⇒ Object
Returns the value of attribute sqed.
-
#sqed_depiction ⇒ Object
Returns the value of attribute sqed_depiction.
-
#sqed_result ⇒ a sqed result, false
Minimize use of this if possible, depend on the cached values when possible.
-
#width_ratio ⇒ Object
Returns the value of attribute width_ratio.
Instance Method Summary collapse
- #boundaries_cached? ⇒ Boolean
-
#cache_all ⇒ Object
TODO: should be set_cached.
- #cache_boundaries ⇒ Object
- #cache_ocr ⇒ Object
-
#coordinates_valid? ⇒ Boolean
If false then they are clearly not, if true then they might be.
- #coords_for(layout_section_type) ⇒ Object
- #image_path_for(layout_section_type) ⇒ Object
- #image_path_for_large_image(layout_section_type) ⇒ Object
- #image_path_for_small_image(layout_section_type) ⇒ Object
- #image_sections ⇒ Array
- #image_unavailable? ⇒ Boolean
-
#initialize(depiction_id: nil, namespace_id: nil) ⇒ Result
constructor
A new instance of Result.
- #large_dimensions_for(layout_section_type) ⇒ Object
- #large_height_for(layout_section_type) ⇒ Object
- #large_height_width(layout_section_type) ⇒ Object
- #larger_height_width(layout_section_type) ⇒ Object
- #namespace_locked? ⇒ Boolean
- #ocr_cached? ⇒ Boolean
- #ocr_for(layout_section_type) ⇒ Object
- #ocr_path_for(layout_section_type) ⇒ Object
- #primary_image ⇒ Symbol
-
#process_result(use_thumbnail: true) ⇒ Object
private.
- #secondary_sections ⇒ Array
- #small_dimensions_for(layout_section_type) ⇒ Object
- #small_height_for(layout_section_type) ⇒ Object
- #small_height_width(layout_section_type) ⇒ Object
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
#depiction ⇒ Object
Returns the value of attribute depiction.
23 24 25 |
# File 'lib/vendor/sqed_to_taxonworks.rb', line 23 def depiction @depiction end |
#depiction_id ⇒ Object
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_ratio ⇒ Object
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_id ⇒ Object
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_image ⇒ Object
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 |
#sqed ⇒ Object
Returns the value of attribute sqed.
31 32 33 |
# File 'lib/vendor/sqed_to_taxonworks.rb', line 31 def sqed @sqed end |
#sqed_depiction ⇒ Object
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_result ⇒ a sqed result, false
Minimize use of this if possible, depend on the cached values when possible.
35 36 37 |
# File 'lib/vendor/sqed_to_taxonworks.rb', line 35 def sqed_result @sqed_result end |
#width_ratio ⇒ Object
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
127 128 129 |
# File 'lib/vendor/sqed_to_taxonworks.rb', line 127 def boundaries_cached? !sqed_depiction.result_boundary_coordinates.nil? end |
#cache_all ⇒ Object
TODO: should be set_cached
148 149 150 151 152 |
# File 'lib/vendor/sqed_to_taxonworks.rb', line 148 def cache_all cache_ocr cache_boundaries sqed_depiction.touch end |
#cache_boundaries ⇒ Object
135 136 137 138 139 140 141 |
# File 'lib/vendor/sqed_to_taxonworks.rb', line 135 def cache_boundaries begin sqed_depiction.update_column(:result_boundary_coordinates, sqed.boundaries.coordinates) rescue Sqed::Error sqed_depiction.update_column(:result_boundary_coordinates, nil) end end |
#cache_ocr ⇒ Object
143 144 145 |
# File 'lib/vendor/sqed_to_taxonworks.rb', line 143 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.
254 255 256 257 258 259 260 261 262 |
# File 'lib/vendor/sqed_to_taxonworks.rb', line 254 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
165 166 167 168 169 170 171 172 173 174 |
# File 'lib/vendor/sqed_to_taxonworks.rb', line 165 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
176 177 178 179 |
# File 'lib/vendor/sqed_to_taxonworks.rb', line 176 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
181 182 183 184 |
# File 'lib/vendor/sqed_to_taxonworks.rb', line 181 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
186 187 188 189 |
# File 'lib/vendor/sqed_to_taxonworks.rb', line 186 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_sections ⇒ Array
197 198 199 |
# File 'lib/vendor/sqed_to_taxonworks.rb', line 197 def image_sections (sqed_depiction.[:metadata_map].values - [:image_registration]) end |
#image_unavailable? ⇒ Boolean
247 248 249 250 |
# File 'lib/vendor/sqed_to_taxonworks.rb', line 247 def image_unavailable? return true if !File.exist?(depiction.image.image_file.path(:original)) false end |
#large_dimensions_for(layout_section_type) ⇒ Object
241 242 243 244 245 |
# File 'lib/vendor/sqed_to_taxonworks.rb', line 241 def large_dimensions_for(layout_section_type) c = coords_for(layout_section_type) return nil if c.blank? || c[2] == 0 || 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
236 237 238 239 |
# File 'lib/vendor/sqed_to_taxonworks.rb', line 236 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
221 222 223 224 |
# File 'lib/vendor/sqed_to_taxonworks.rb', line 221 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
226 227 228 229 |
# File 'lib/vendor/sqed_to_taxonworks.rb', line 226 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
123 124 125 |
# File 'lib/vendor/sqed_to_taxonworks.rb', line 123 def namespace_locked? !namespace_id.nil? end |
#ocr_cached? ⇒ Boolean
131 132 133 |
# File 'lib/vendor/sqed_to_taxonworks.rb', line 131 def ocr_cached? !sqed_depiction.result_ocr.nil? end |
#ocr_for(layout_section_type) ⇒ Object
154 155 156 157 158 159 160 161 162 163 |
# File 'lib/vendor/sqed_to_taxonworks.rb', line 154 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
191 192 193 194 |
# File 'lib/vendor/sqed_to_taxonworks.rb', line 191 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_image ⇒ Symbol
202 203 204 |
# File 'lib/vendor/sqed_to_taxonworks.rb', line 202 def primary_image (image_sections & [:labels, :collecting_event_labels, :annotated_specimen]).first end |
#process_result(use_thumbnail: true) ⇒ Object
private
84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
# File 'lib/vendor/sqed_to_taxonworks.rb', line 84 def process_result(use_thumbnail: true) begin sqed.use_thumbnail = use_thumbnail r = sqed.result rescue Sqed::Error r = false # TODO: likely remove TypeError rescue TypeError r = false rescue Magick::ImageMagickError => e if e..include?('unable to open image') r = false else raise end rescue RuntimeError => e if e..include?('ImageMagick library function failed to return a result.') r = false else raise end end r end |
#secondary_sections ⇒ Array
207 208 209 |
# File 'lib/vendor/sqed_to_taxonworks.rb', line 207 def secondary_sections image_sections - [primary_image] end |
#small_dimensions_for(layout_section_type) ⇒ Object
211 212 213 214 |
# File 'lib/vendor/sqed_to_taxonworks.rb', line 211 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
231 232 233 234 |
# File 'lib/vendor/sqed_to_taxonworks.rb', line 231 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
216 217 218 219 |
# File 'lib/vendor/sqed_to_taxonworks.rb', line 216 def small_height_width(layout_section_type) c = coords_for(layout_section_type) "#{SMALL_WIDTH}, #{small_height_for(layout_section_type)}" end |