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
- #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
- #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
116 117 118 |
# File 'lib/vendor/sqed_to_taxonworks.rb', line 116 def boundaries_cached? !sqed_depiction.result_boundary_coordinates.nil? end |
#cache_all ⇒ Object
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_boundaries ⇒ Object
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..include?("No image provided") sqed_depiction.update_column(:result_boundary_coordinates, nil) else raise end end end |
#cache_ocr ⇒ Object
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.
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_sections ⇒ 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
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
112 113 114 |
# File 'lib/vendor/sqed_to_taxonworks.rb', line 112 def namespace_locked? !namespace_id.nil? end |
#ocr_cached? ⇒ 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_image ⇒ 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_sections ⇒ 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 |