Initial commit of SIFT search for ship sprites
The data returned by the gamemodel function is overly verbose and not interpreted well yet. I'd like to return a (pt, wh, label) tuple like the find_asteroids function does. This would make it compatible with the existing display_results function.
This commit is contained in:
		
							parent
							
								
									d28344971e
								
							
						
					
					
						commit
						f497bdd61a
					
				
							
								
								
									
										19
									
								
								gamemodel.py
								
								
								
								
							
							
						
						
									
										19
									
								
								gamemodel.py
								
								
								
								
							|  | @ -15,6 +15,10 @@ class GameModel: | |||
|             ("normal", cv2.imread("images/game_assets/rock-normal.png", 0)), | ||||
|             ("small", cv2.imread("images/game_assets/rock-small.png", 0)) | ||||
|             ] | ||||
|         self.ships = [ | ||||
|             ("ship_off", cv2.imread("images/game_assets/spaceship-off.png", 0)), | ||||
|             ("ship_on", cv2.imread("images/game_assets/spaceship-on.png", 0)) | ||||
|             ] | ||||
|         self.frame = None | ||||
|         self.cv_template_thresh = 0.6 # reconfigurable at runtime | ||||
|         self.duplicate_dist_thresh = 10 | ||||
|  | @ -59,6 +63,21 @@ class GameModel: | |||
|         cv2.imshow("Results", displayable) | ||||
|         cv2.waitKey(0) | ||||
| 
 | ||||
|     @with_frame | ||||
|     def find_ships(self): | ||||
|         sift = cv2.SIFT_create() | ||||
|         frame_kp, frame_desc = sift.detectAndCompute(self.frame, None) | ||||
|         kp_desc = [] # list of (keypoints, descriptions) for all ship sprites | ||||
|         for label, s in self.ships: | ||||
|             kp_desc.append((label, sift.detectAndCompute(s, None))) | ||||
|         bf = cv2.BFMatcher(cv2.NORM_L1, crossCheck=True) | ||||
|         matchsets = [] | ||||
|         for label, kpdesc in kp_desc: | ||||
|             _, desc = kpdesc | ||||
|             matchsets.append((label, bf.match(frame_desc, desc))) | ||||
|         return { "matchsets": matchsets, | ||||
|                  "kp_desc": kp_desc | ||||
|                } | ||||
| 
 | ||||
| if __name__ == '__main__': | ||||
|     import platform | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue