Module: Appium::Core::Device::ImageComparison
- Defined in:
- lib/appium_lib_core/device/image_comparison.rb
Constant Summary collapse
- MODE =
[:matchFeatures, :getSimilarity, :matchTemplate].freeze
- MATCH_FEATURES =
{ detector_name: %w(AKAZE AGAST BRISK FAST GFTT KAZE MSER SIFT ORB), match_func: %w(FlannBased BruteForce BruteForceL1 BruteForceHamming BruteForceHammingLut BruteForceSL2), goodMatchesFactor: nil, # Integer visualize: [true, false] }.freeze
- MATCH_TEMPLATE =
{ visualize: [true, false] }.freeze
- GET_SIMILARITY =
{ visualize: [true, false] }.freeze
Class Method Summary collapse
-
.add_methods ⇒ Object
class << self.
Instance Method Summary collapse
-
#compare_images(mode: , first_image: , second_image: , options: ) ⇒ Object
Performs images comparison using OpenCV framework features.
-
#find_image_occurrence(full_image: , partial_image: , visualize: false, threshold: nil) ⇒ Object
Performs images matching by template to find possible occurrence of the partial image in the full image with default options.
-
#get_images_similarity(first_image: , second_image: , detector_name: 'ORB', visualize: false) ⇒ Object
Performs images matching to calculate the similarity score between them with default options.
-
#match_images_features(first_image: , second_image: , detector_name: 'ORB') ⇒ Object
match_func: ‘BruteForce’, good_matches_factor: 100, visualize: false).
Class Method Details
.add_methods ⇒ Object
class << self
104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 |
# File 'lib/appium_lib_core/device/image_comparison.rb', line 104 def self.add_methods ::Appium::Core::Device.add_endpoint_method(:match_images_features) do def match_images_features(first_image:, # rubocop:disable Metrics/ParameterLists second_image:, detector_name: 'ORB', match_func: 'BruteForce', good_matches_factor: nil, visualize: false) unless ::Appium::Core::Device::ImageComparison::MATCH_FEATURES[:detector_name].member?(detector_name.to_s) raise "detector_name should be #{::Appium::Core::Device::ImageComparison::MATCH_FEATURES[:detector_name]}" end unless ::Appium::Core::Device::ImageComparison::MATCH_FEATURES[:match_func].member?(match_func.to_s) raise "match_func should be #{::Appium::Core::Device::ImageComparison::MATCH_FEATURES[:match_func]}" end unless ::Appium::Core::Device::ImageComparison::MATCH_FEATURES[:visualize].member?(visualize) raise "visualize should be #{::Appium::Core::Device::ImageComparison::MATCH_FEATURES[:visualize]}" end = {} [:detectorName] = detector_name.to_s.upcase [:matchFunc] = match_func.to_s [:goodMatchesFactor] = good_matches_factor.to_i unless good_matches_factor.nil? [:visualize] = visualize compare_images(mode: :matchFeatures, first_image: first_image, second_image: second_image, options: ) end end ::Appium::Core::Device.add_endpoint_method(:find_image_occurrence) do def find_image_occurrence(full_image:, partial_image:, visualize: false, threshold: nil) unless ::Appium::Core::Device::ImageComparison::MATCH_TEMPLATE[:visualize].member?(visualize) raise "visualize should be #{::Appium::Core::Device::ImageComparison::MATCH_TEMPLATE[:visualize]}" end = {} [:visualize] = visualize [:threshold] = threshold unless threshold.nil? compare_images(mode: :matchTemplate, first_image: full_image, second_image: partial_image, options: ) end end ::Appium::Core::Device.add_endpoint_method(:get_images_similarity) do def get_images_similarity(first_image:, second_image:, visualize: false) unless ::Appium::Core::Device::ImageComparison::GET_SIMILARITY[:visualize].member?(visualize) raise "visualize should be #{::Appium::Core::Device::ImageComparison::GET_SIMILARITY[:visualize]}" end = {} [:visualize] = visualize compare_images(mode: :getSimilarity, first_image: first_image, second_image: second_image, options: ) end end ::Appium::Core::Device.add_endpoint_method(:compare_images) do def compare_images(mode: :matchFeatures, first_image:, second_image:, options: nil) unless ::Appium::Core::Device::ImageComparison::MODE.member?(mode) raise "content_type should be #{::Appium::Core::Device::ImageComparison::MODE}" end params = {} params[:mode] = mode params[:firstImage] = Base64.encode64 first_image params[:secondImage] = Base64.encode64 second_image params[:options] = if execute(:compare_images, {}, params) end end end |
Instance Method Details
#compare_images(mode: , first_image: , second_image: , options: ) ⇒ Object
Performs images comparison using OpenCV framework features. It is expected that both OpenCV framework and opencv4nodejs module are installed on the machine where Appium server is running.
|
|
# File 'lib/appium_lib_core/device/image_comparison.rb', line 84
|
#find_image_occurrence(full_image: , partial_image: , visualize: false, threshold: nil) ⇒ Object
Performs images matching by template to find possible occurrence of the partial image in the full image with default options. Read docs.opencv.org/2.4/doc/tutorials/imgproc/histograms/template_matching/template_matching.html for more details on this topic.
|
|
# File 'lib/appium_lib_core/device/image_comparison.rb', line 48
|
#get_images_similarity(first_image: , second_image: , detector_name: 'ORB', visualize: false) ⇒ Object
Performs images matching to calculate the similarity score between them with default options. The flow there is similar to the one used in ‘find_image_occurrence` but it is mandatory that both images are of equal size.
|
|
# File 'lib/appium_lib_core/device/image_comparison.rb', line 67
|
#match_images_features(first_image: , second_image: , detector_name: 'ORB') ⇒ Object
match_func: ‘BruteForce’, good_matches_factor: 100, visualize: false)
|
|
# File 'lib/appium_lib_core/device/image_comparison.rb', line 24
|