def find_balloon(self, color): if not self.balloonmode.alive: return False self.balloonmode.logger.logevent(SearchState.LOGGER_NAME, "Zoeken naar ballon " + color, Logger.MESSAGE) img = BalloonVision.get_image() search = BalloonVision.find_balloon(color, img) while not search[0] and self.balloonmode.alive: if self.moveTo: #Beweeg naar links self.balloonmode.movementHandler.move_one_turn(True) #self.balloonmode.movementHandler.move(0, 0, 180, 100) #time.sleep(self.balloonmode.movementHandler.TIME_TURN * 5) #self.balloonmode.movementHandler.move(0, 0, 0, 0) elif not self.moveTo: #Beweeg naar rechts self.balloonmode.movementHandler.move_one_turn(False) # self.balloonmode.movementHandler.move(0, 0, 181, 100) # time.sleep(self.balloonmode.movementHandler.TIME_TURN * 5) # self.balloonmode.movementHandler.move(0, 0, 0, 0) img = BalloonVision.get_image() search = BalloonVision.find_balloon(color, img) if not self.balloonmode.alive: return False return search[1]
def move_balloon_to_center(self, blob, center, color): self.balloonmode.logger.logevent(MoveState.LOGGER_NAME, "Ballon " + color + " naar het midden bewegen", Logger.MESSAGE) verschil = self.diff_to_center(blob, center) while abs(verschil) > 100 and self.balloonmode.alive: #100 px marge voor het midden print "Blob nog niet in het midden" if verschil > 0: #naar links draaien self.balloonmode.movementHandler.move_one_turn(True) #self.balloonmode.movementHandler.move(0, 0, 181, 100) #time.sleep(self.balloonmode.movementHandler.TIME_TURN) #self.balloonmode.movementHandler.move(0, 0, 0, 0) else: #naar rechts draaien self.balloonmode.movementHandler.move_one_turn(False) #self.balloonmode.movementHandler.move(0, 0, 180, 100) #time.sleep(self.balloonmode.movementHandler.TIME_TURN) #self.balloonmode.movementHandler.move(0, 0, 0, 0) img = BalloonVision.get_image() search = BalloonVision.find_balloon(color, img) blob = search[1] if search[0]: verschil = self.diff_to_center(blob, center) if not self.balloonmode.alive: return False return True
def recognize_card(self): redBlob = None greenBlob = None blueBlob = None blobs = None self.balloonmode.logger.logevent(CardState.LOGGER_NAME, "Bezig met zoeken", Logger.MESSAGE) #img = Image("C:\\cards\\realCard1.jpg") #img = Image("C:\\muur\\card.jpg") #Blobs uit de afbeelding herkennen blobs = BalloonVision.recognize_card() #Zolang er geen blobs zijn gevonden en we alive zijn. Door blijven zoeken while not blobs[0] or not blobs[1] or not blobs[2] and self.balloonmode.alive: blobs = BalloonVision.recognize_card() #Voorbij de while, kaart wordt voorgehouden. Of niet meer alive if not self.balloonmode.alive: return False #Blobs in variabelen zetten redBlob, greenBlob, blueBlob = blobs self.balloonmode.logger.logevent(CardState.LOGGER_NAME, "Gevonden.", Logger.MESSAGE) #Blobs sorteren op y (hoogte) blobs.sort(key=lambda x: x.y) return [blobs[0].Name, blobs[1].Name, blobs[2].Name]
def move_to_balloon(self, color, blob): self.balloonmode.logger.logevent(MoveState.LOGGER_NAME, "Naar ballon " + color + " lopen", Logger.MESSAGE) #Midden van het beeld center = 640 / 2 #Draaien zodat de ballon in het midden van de camera staat move = self.move_balloon_to_center(blob, center, color) if not move: return False #loop naar de ballon self.balloonmode.logger.logevent(MoveState.LOGGER_NAME, "Vooruit lopen", Logger.MESSAGE) #Max area = 640*480 = 307200 area = 0 not_found_count = 0 #vooruit lopen for i in xrange(0, 5): self.balloonmode.movementHandler.move_one_step() #self.balloonmode.movementHandler.move(0, 100, 0, 0) #time.sleep(self.balloonmode.movementHandler.TIME_MOVE_ONE_STEP * 5) #self.balloonmode.movementHandler.move(0, 0, 0, 0) while area < 300000 and self.balloonmode.alive: if not_found_count >= 5: self.balloonmode.logger.logevent(MoveState.LOGGER_NAME, color + " ballon kwijt, wat nu?!", Logger.MESSAGE) return False img = BalloonVision.get_image() search = BalloonVision.find_balloon(color, img, True) if search[0]: #Ballon als nodig naar het midden krijgen. move = self.move_balloon_to_center(search[1], center, color) if not move: return False area = search[1].area() for i in xrange(0,5): self.balloonmode.movementHandler.move_one_step() #self.balloonmode.movementHandler.move(0, 100, 0, 0) #time.sleep(self.balloonmode.movementHandler.TIME_MOVE_ONE_STEP * 5) #self.balloonmode.movementHandler.move(0, 0, 0, 0) else: not_found_count += 1 if not self.balloonmode.alive: return False return True
def get_balloon_order(self): if not self.balloonmode.alive: return False #Alle balonnen kunnen gezien worden img = BalloonVision.get_image() red = BalloonVision.find_red_balloon(img)[1] green = BalloonVision.find_green_balloon(img)[1] blue = BalloonVision.find_blue_balloon(img)[1] while (red is None or green is None or blue is None) and self.balloonmode.alive: img = BalloonVision.get_image() red = BalloonVision.find_red_balloon(img)[1] green = BalloonVision.find_green_balloon(img)[1] blue = BalloonVision.find_blue_balloon(img)[1] if not self.balloonmode.alive: return False red.Name = "red" green.Name = "green" blue.Name = "blue" balloonOrder = [red, green, blue] balloonOrder.sort(key=lambda x: x.x) balloonOrder = [balloonOrder[0].Name, balloonOrder[1].Name, balloonOrder[2].Name] return balloonOrder
def balloon_alive(self, color): #Afbeelding ophalen img = BalloonVision.get_image() #Blob vinden return BalloonVision.find_balloon(color, img, True)[0]