示例#1
0
文件: vision.cpp 项目: ck1125/sikuli
vector<FindResult> 
Vision::find(FindInput input){
   VisualLogger::next();

   vector<FindResult> results;

   if (input.getTargetType() == TARGET_TYPE_IMAGE){
      
      results = find_image(input);
      
   }
   else if (input.getTargetType() == TARGET_TYPE_TEXT){
    
      results = find_text(input);
      
   }else if (input.getTargetType() == TARGET_TYPE_BUTTON){

      results = find_button(input);
   
   }
   
   vector<FindResult> final_results;
   int n = min((int)results.size(), (int)input.getLimit());
   for (int i=0; i< n; ++i){
      final_results.push_back(results[i]);
   }

   return final_results;
}
示例#2
0
文件: vision.cpp 项目: ck1125/sikuli
static vector<FindResult> 
find_image(FindInput& input){
   
   vector<FindResult> results;
   Mat source = input.getSourceMat();
   Mat image = input.getTargetMat();
   if(!source.rows || !source.cols || !image.rows || !image.cols)
      return results;
      
   TemplateFinder f(source);
   
   if (input.isFindingAll()){
      f.find_all(image, input.getSimilarity());
      while (f.hasNext()){
         results.push_back(f.next());
      }
   }
   else{
      f.find(image, input.getSimilarity());
      if (f.hasNext())
         results.push_back(f.next());
      
   }
   return results;
}
示例#3
0
static vector<FindResult> 
find_image(FindInput& input){
   
   vector<FindResult> results;
   Mat source = input.getSourceMat();
   Mat image = input.getTargetMat();
   if(!source.rows || !source.cols || !image.rows || !image.cols)
      return results;
      
   TemplateFinder f(source);
   
   if (input.isFindingAll()){
      int maxReturn = Vision::getParameter("FindAllMaxReturn");
      f.find_all(image, input.getSimilarity());
      while (f.hasNext() && results.size() < maxReturn){
         results.push_back(f.next());
      }
   }
   else{
      f.find(image, input.getSimilarity());
      if (f.hasNext())
         results.push_back(f.next());
      
   }
   return results;
}
示例#4
0
vector<FindResult>
Vision::findChanges(FindInput input){
   vector<FindResult> results;
   Mat source = input.getSourceMat();
   Mat image = input.getTargetMat();
   ChangeFinder f(source);
   f.find(image);
   while (f.hasNext() && (results.size() < input.getLimit())){
      results.push_back(f.next());
   }
   vector<FindResult> final_results;
   int n = input.getLimit();
   if(n < results.size()){
      copy(results.begin(), results.begin()+n, final_results.begin());
      return final_results;
   }
   else return results;
}
示例#5
0
static vector<FindResult> 
find_text(FindInput& input){
  
   vector<FindResult> results;
   
   Mat source = input.getSourceMat();
   if(!source.rows || !source.cols) 
      return results;
   
   TextFinder f(source);
   if (input.isFindingAll()){
      
      int maxReturn = Vision::getParameter("FindAllMaxReturn");
      f.find_all(input.getTargetText().c_str(), input.getSimilarity());
      while (f.hasNext() && results.size() < maxReturn){
         results.push_back(f.next());
      }
   }
   else{
      f.find(input.getTargetText().c_str(), input.getSimilarity());
      if (f.hasNext())
         results.push_back(f.next());
   }
   
   
   
   Mat result_image = source * 0.5;
   for (vector<FindResult>::iterator it = results.begin();
        it != results.end(); ++it){
      
      FindResult& r = *it;
      
      Point pt(r.x,r.y);
      putText(result_image, input.getTargetText(), pt,  
              FONT_HERSHEY_SIMPLEX, 0.3, Color::RED);
      
   }
   VisualLogger::setEnabled(enable_visual_log);
   VisualLogger::log("FindText-Result", result_image);

   
   return results;
}
示例#6
0
文件: vision.cpp 项目: ck1125/sikuli
static vector<FindResult> 
find_button(FindInput& input){
   
   vector<FindResult> results;
   
   Mat screen = input.getSourceMat();
   
   vector<Blob> blobs;
   cvgui::findBoxes(screen, blobs);
   
   
   VisualLogger::setEnabled(false);
   
   for (vector<Blob>::iterator it = blobs.begin();
        it != blobs.end(); ++it){
      Blob& blob = *it;
      
      
      if (blob.width < 10)
         continue;
      
      Util::growRect(blob, -3, 0, screen);
      
      Mat blob_image(screen, blob);
      
      FindResult result(blob.x,blob.y,blob.width,blob.height,1);      
      result.text = Vision::recognize(blob_image);
      
      if (result.text.empty())
         continue;
      
      
      string target_text = input.getTargetText();
      if (!target_text.empty()){
         
         int d;
         d = OCR::findEditDistance(target_text.c_str(),
                                            result.text.c_str(),
                                            3);
         
         if (d < 2){
            results.push_back(result);  
         }
      }else{
         results.push_back(result);
      }
      
      // if we only need to find one result, and we already have one result
      if (!input.isFindingAll() && !results.empty()){
         break;
      }
      
   }
   
   
   Mat result_image = screen * 0.5;
   for (vector<FindResult>::iterator it = results.begin();
        it != results.end(); ++it){
      
      FindResult& r = *it;
      
      Point pt(r.x,r.y);
      putText(result_image, r.text, pt,  
              FONT_HERSHEY_SIMPLEX, 0.3, Color::RED);
      
      
      
   }
   
   VisualLogger::setEnabled(enable_visual_log);
   VisualLogger::log("Buttons-OCR", result_image);
   
   return results;
}