def __init__(self): self.node_name = rospy.get_name() self.active = True self.image_pub_switch = rospy.get_param("~publish_corrected_image",False) # Initialize publishers and subscribers self.pub_image = rospy.Publisher("~corrected_image",Image,queue_size=1) self.pub_health = rospy.Publisher("~health",AntiInstagramHealth,queue_size=1,latch=True) self.pub_transform = rospy.Publisher("~transform",AntiInstagramTransform,queue_size=1,latch=True) #self.sub_switch = rospy.Subscriber("~switch",BoolStamped, self.cbSwitch, queue_size=1) #self.sub_image = rospy.Subscriber("~uncorrected_image",Image,self.cbNewImage,queue_size=1) self.sub_image = rospy.Subscriber("~uncorrected_image", CompressedImage, self.cbNewImage,queue_size=1) self.sub_click = rospy.Subscriber("~click", BoolStamped, self.cbClick, queue_size=1) # Verbose option self.verbose = rospy.get_param('~verbose',True) # Initialize health message self.health = AntiInstagramHealth() # Initialize transform message self.transform = AntiInstagramTransform() # FIXME: read default from configuration and publish it self.ai = AntiInstagram() self.corrected_image = Image() self.bridge = CvBridge() self.image_msg = None self.click_on = False
def test_anti_instagram(self): ai = AntiInstagram() #### TEST SINGLE TRANSFORM #### error_threshold = 500 # load test images failure = False imagesetf = [ "inputimage0.jpg", "inputimage1.jpg", ] gtimagesetf = [ "groundtruthimage0.jpg", "groundtruthimage1.jpg", ] package_root = get_rospkg_root('anti_instagram') def add_dir(x): return os.path.join(package_root, 'scripts', x) imagesetf = map(add_dir, imagesetf) gtimagesetf = map(add_dir, gtimagesetf) imageset = map(load_image, imagesetf) gtimageset = map(load_image, gtimagesetf) errors = self.correctImages(ai, imageset, gtimageset, error_threshold) logger.info("Test Image Errors: %s" % errors) self.assertLess(max(errors), error_threshold)
def __init__(self): self.node_name = rospy.get_name() self.image_lock = threading.Lock() self.ai = AntiInstagram() # XXX: read parameters # XXX: parameters need to go inside config file, ask aleks about heirarchy self.interval = self.setup_parameter("~ai_interval", 10) self.color_balance_percentage = self.setup_parameter( "~cb_percentage", 0.8) # XXX: change in all launch files self.output_scale = self.setup_parameter( "~scale_percent", 0.4) # XXX: change in all launch files self.calculation_scale = self.setup_parameter("~resize", 0.2) self.bridge = CvBridge() self.image = None rospy.Timer(rospy.Duration(self.interval), self.calculate_new_parameters) self.uncorrected_image_subscriber = rospy.Subscriber( '~uncorrected_image/compressed', CompressedImage, self.process_image, buff_size=921600, queue_size=1) self.corrected_image_publisher = rospy.Publisher( "~corrected_image/compressed", CompressedImage, queue_size=1)
def __init__(self): self.node_name = "LineDetectorNode" self.bw_1 = 0 self.bw_2 = 0 # Thread lock self.thread_lock = threading.Lock() # Constructor of line detector self.bridge = CvBridge() self.active = True self.stats = Stats() # Only be verbose every 10 cycles self.intermittent_interval = 100 self.intermittent_counter = 0 # color correction self.ai = AntiInstagram() # these will be added if it becomes verbose self.pub_edge = None self.pub_colorSegment = None self.detector = None self.verbose = None self.updateParams(None) # Publishers self.pub_lines = rospy.Publisher("~segment_list", SegmentList, queue_size=1) self.pub_image = rospy.Publisher("~image_with_lines", Image, queue_size=1) # Subscribers self.sub_image = rospy.Subscriber("~image", CompressedImage, self.cbImage, queue_size=1) self.sub_transform = rospy.Subscriber("~transform", AntiInstagramTransform, self.cbTransform, queue_size=1) self.sub_switch = rospy.Subscriber("~switch", BoolStamped, self.cbSwitch, queue_size=1) rospy.loginfo("[%s] Initialized (verbose = %s)." % (self.node_name, self.verbose)) rospy.Timer(rospy.Duration.from_sec(2.0), self.updateParams)
def __init__(self): self.node_name = rospy.get_name() self.active = True self.locked = False self.image_pub_switch = rospy.get_param("~publish_corrected_image", False) # Initialize publishers and subscribers self.pub_image = rospy.Publisher("~corrected_image", Image, queue_size=1) self.pub_health = rospy.Publisher("~health", AntiInstagramHealth, queue_size=1, latch=True) self.pub_transform = rospy.Publisher("~transform", AntiInstagramTransform, queue_size=1, latch=True) #self.sub_switch = rospy.Subscriber("~switch",BoolStamped, self.cbSwitch, queue_size=1) #self.sub_image = rospy.Subscriber("~uncorrected_image",Image,self.cbNewImage,queue_size=1) self.sub_image = rospy.Subscriber("~uncorrected_image", CompressedImage, self.cbNewImage, queue_size=1) self.sub_click = rospy.Subscriber("~click", BoolStamped, self.cbClick, queue_size=1) self.trans_timer = rospy.Timer(rospy.Duration.from_sec(20), self.cbPubTrans, True) # Verbose option self.verbose = rospy.get_param('line_detector_node/verbose', True) # Initialize health message self.health = AntiInstagramHealth() # Initialize transform message self.transform = AntiInstagramTransform() # FIXME: read default from configuration and publish it self.ai_scale = np.array( [2.2728408473337893, 2.2728273205024614, 2.272844346401005]) self.ai_shift = np.array( [21.47181119272393, 37.14653160247276, 4.089311860796786]) self.ai = AntiInstagram() self.corrected_image = Image() self.bridge = CvBridge() self.image_msg = None self.click_on = False
def __init__(self): EasyNode.__init__(self, "line_detector2", "line_detector_node2") self.detector = None self.bridge = CvBridge() self.ai = AntiInstagram() self.active = True # Only be verbose every 10 cycles self.intermittent_interval = 100 self.intermittent_counter = 0
def __init__(self): self.node_name = "Line Detector2" # Thread lock self.thread_lock = threading.Lock() # Constructor of line detector self.bridge = CvBridge() self.detector = LineDetector2() # Parameters self.active = True self.intermittent_interval = 100 self.intermittent_counter = 0 self.updateParams(None) # color correction self.ai = AntiInstagram() # Publishers self.pub_lines = rospy.Publisher("~segment_list", SegmentList, queue_size=1) self.pub_image = rospy.Publisher("~image_with_lines", Image, queue_size=1) # Verbose option if self.verbose: self.pub_edge = rospy.Publisher("~edge", Image, queue_size=1) self.pub_colorSegment = rospy.Publisher("~segment", Image, queue_size=1) # Subscribers self.sub_image = rospy.Subscriber("~image", CompressedImage, self.cbImage, queue_size=1) self.sub_transform = rospy.Subscriber("~transform", AntiInstagramTransform, self.cbTransform, queue_size=1) self.sub_switch = rospy.Subscriber("~switch", BoolStamped, self.cbSwitch, queue_size=1) rospy.loginfo("[%s] Initialized." % (self.node_name)) self.timer = rospy.Timer(rospy.Duration.from_sec(1.0), self.updateParams)
def setup(): img = random_image(Params.shape[0], Params.shape[1]) ai = AntiInstagram() return ai, img
def main(): # check number of arguments if len(sys.argv) != 3: print( 'This program expects exactly two arguments: an image filename and an output directory.' ) sys.exit() # store inputs file = sys.argv[1] outdir = sys.argv[2] # check if file exists if not os.path.isfile(file): print('file not found') sys.exit(2) # check if dir exists, create if not if not os.path.exists(outdir): os.makedirs(outdir) # read the image input_img = cv2.imread(file, cv2.IMREAD_UNCHANGED) # lets do the masking! surf = identifyLaneSurface(input_img, use_hsv=False, grad_thresh=20) input_img = np.expand_dims(surf, -1) * input_img print('masked image!') cv2.imshow('mask', input_img) cv2.waitKey(0) # create instance of AntiInstagram ai = AntiInstagram() ai.calculateTransform(input_img) print('Transform Calculation completed!') corrected_img = ai.applyTransform(input_img) print('Transform applied!') cv2.imshow('mask', corrected_img) cv2.waitKey(0) # polygons for pic1_smaller.jpg and pic2_smaller.jpg (hardcoded for now) polygon_black = [(280, 570), (220, 760), (870, 750), (810, 580)] polygon_white = [(781, 431), (975, 660), (1040, 633), (827, 418)] polygon_yellow = [(131, 523), (67, 597), (99, 609), (161, 530)] polygon_red = [(432, 282), (418, 337), (577, 338), (568, 283)] """ # polygons for pic3_smaller.jpg and pic2_smaller.jpg (hardcoded for now) polygon_black = [(280, 570), (220, 760), (870, 750), (810, 580)] polygon_white = [(900, 520), (1000, 640), (1060, 620), (970, 515)] polygon_yellow = [(234, 430), (190, 485), (230, 490), (270, 430)] polygon_red = [(285, 435), (250, 490), (830, 480), (800, 437)] # polygons for pic4_smaller.jpg (hardcoded for now) polygon_black = [(316, 414), (215, 623), (783, 605), (673, 422)] polygon_white = [(710, 388), (947, 656), (1018, 620), (788, 400)] polygon_yellow = [(148, 474), (94, 537), (133, 542), (184, 475)] polygon_red = [(285, 435), (250, 490), (830, 480), (800, 437)] # polygons for pic5_smaller.jpg (hardcoded for now) polygon_black = [(354, 418), (291, 612), (804, 590), (677, 396)] polygon_white = [(783, 424), (949, 602), (1002, 564), (840, 420)] polygon_yellow = [(344, 307), (331, 319), (354, 319), (366, 306)] polygon_red = [(135, 325), (119, 332), (325, 316), (332, 309)] """ # create dictionary containing colors polygons = { 'black': polygon_black, 'white': polygon_white, 'yellow': polygon_yellow, 'red': polygon_red } # initialize estimateError class E = estimateError(corrected_img) # set polygons E.createPolygon(polygons) # estimate error E.GetErrorEstimation() # write the corrected image date = datetime.datetime.now().strftime("%H-%M-%S") path = outdir + '/' + str(date) + '_polygon.jpg' cv2.imwrite(path, E.out_image)
# check if dir exists, create if not if not os.path.exists(outdir): os.makedirs(outdir) # read the image input_img = cv2.imread(file, cv2.IMREAD_UNCHANGED) #lets do the masking! #surf = identifyLaneSurface(input_img, use_hsv=False, grad_thresh=20) #input_img = np.expand_dims(surf, -1) * input_img #cv2.imshow('mask', input_img) #cv2.waitKey(0) # create instance of AntiInstagram ai = AntiInstagram() ai.calculateTransform(input_img) print('Transform Calculation completed!') corrected_img = ai.applyTransform(input_img) print('Transform applied!') # write the corrected image date = datetime.datetime.now().strftime("%H-%M-%S") path = outdir + '/' + str(date) + '_corrected.jpg' cv2.imwrite(path, corrected_img)