def run_original(self):

        while True:
            playing = not self.paused and not self.rect_sel.dragging
            # flag used to quit imaging, when the size detected.
            flag = 0
            # if playing or self.frame is None:
            #     # ret, frame = self.cap.read()
            #     if not ret:
            #         break
            #     self.frame = frame.copy()
            # size of the frame (image) - used to draw rectangle
            w, h = getsize(self.frame)
            vis = np.zeros((h, w*2, 3), np.uint8)
            # copy to the image (original)
            vis[:h,:w] = self.frame
            if len(self.tracker.targets) > 0:
                target = self.tracker.targets[0]
                vis[:,w:] = target.image
                draw_keypoints(vis[:,w:], target.keypoints)
                x0, y0, x1, y1 = target.rect # rectangle coordinates
                cv.rectangle(vis, (x0+w, y0), (x1+w, y1), (0, 255, 0), 2) # green line drawn
                # finding the width of the region
                width_region = distance(x0, x1, y0, y1)
                flag = 1 # set flag = 1, quit the program!
            self.rect_sel.draw(vis)
            cv.imshow('Selected Region', vis) # show the image
            ch = cv.waitKey(1)
            if ch == 27 or flag == 1:
                print("Quitting")
                return width_region
Пример #2
0
    def run(self):
        while True:
            playing = not self.paused and not self.rect_sel.dragging
            if playing or self.frame is None:
                ret, frame = self.cap.read()
                if not ret:
                    break
                self.frame = frame.copy()

            w, h = getsize(self.frame)
            vis = np.zeros((h, w*2, 3), np.uint8)
            vis[:h,:w] = self.frame
            if len(self.tracker.targets) > 0:
                target = self.tracker.targets[0]
                vis[:,w:] = target.image
                draw_keypoints(vis[:,w:], target.keypoints)
                x0, y0, x1, y1 = target.rect
                cv2.rectangle(vis, (x0+w, y0), (x1+w, y1), (0, 255, 0), 2)

            if playing:
                tracked = self.tracker.track(self.frame)
                if len(tracked) > 0:
                    tracked = tracked[0]
                    cv2.polylines(vis, [np.int32(tracked.quad)], True, (255, 255, 255), 2)
                    for (x0, y0), (x1, y1) in zip(np.int32(tracked.p0), np.int32(tracked.p1)):
                        cv2.line(vis, (x0+w, y0), (x1, y1), (0, 255, 0))
            draw_keypoints(vis, self.tracker.frame_points)

            self.rect_sel.draw(vis)
            cv2.imshow('plane', vis)
            ch = cv2.waitKey(1)
            if ch == ord(' '):
                self.paused = not self.paused
            if ch == 27:
                break
Пример #3
0
    def run(self):
        while True:
            playing = not self.paused and not self.rect_sel.dragging
            if playing or self.frame is None:
                ret, frame = self.cap.read()
                if not ret:
                    break
                self.frame = frame.copy()

            w, h = getsize(self.frame)
            vis = np.zeros((h, w*2, 3), np.uint8)
            vis[:h,:w] = self.frame
            if len(self.tracker.targets) > 0:
                target = self.tracker.targets[0]
                vis[:,w:] = target.image
                draw_keypoints(vis[:,w:], target.keypoints)
                x0, y0, x1, y1 = target.rect
                cv2.rectangle(vis, (x0+w, y0), (x1+w, y1), (0, 255, 0), 2)

            if playing:
                tracked = self.tracker.track(self.frame)
                if len(tracked) > 0:
                    tracked = tracked[0]
                    cv2.polylines(vis, [np.int32(tracked.quad)], True, (255, 255, 255), 2)
                    for (x0, y0), (x1, y1) in zip(np.int32(tracked.p0), np.int32(tracked.p1)):
                        cv2.line(vis, (x0+w, y0), (x1, y1), (0, 255, 0))
            draw_keypoints(vis, self.tracker.frame_points)

            self.rect_sel.draw(vis)
            cv2.imshow('plane', vis)
            ch = cv2.waitKey(1)
            if ch == ord(' '):
                self.paused = not self.paused
            if ch == 27:
                break
Пример #4
0
    def run(self):
        def find_line(p0, p1):
            x0, y0 = p0
            x1, y1 = p1
            k = (x1 - x0) / (y1 - y0)
            b = y1 - k * x0
            return k, b

        def cross(l0, l1):
            k0, b0 = l0
            k1, b1 = l1
            x = (b1 - b0) / (k0 - k1)
            y = k0 * x + b0
            return x, y

        while True:
            playing = not self.paused and not self.rect_sel.dragging
            if playing or self.frame is None:
                ret, frame = self.cap.read()
                if not ret:
                    break
                self.frame = frame.copy()

            w, h = getsize(self.frame)
            vis = np.zeros((h, w * 2, 3), np.uint8)
            vis[:h, :w] = self.frame
            if len(self.tracker.targets) > 0:
                target = self.tracker.targets[0]
                vis[:, w:] = target.image
                draw_keypoints(vis[:, w:], target.keypoints)
                x0, y0, x1, y1 = target.rect
                cv2.rectangle(vis, (x0 + w, y0), (x1 + w, y1), (0, 255, 0), 2)

            if playing:
                tracked = self.tracker.track(self.frame)
                if len(tracked) > 0:
                    tracked = tracked[0]
                    cv2.polylines(vis, [np.int32(tracked.quad)], True,
                                  (255, 255, 255), 2)
                    # print([np.int32(tracked.quad)])
                    p0, p1, p2, p3 = np.int32(tracked.quad)
                    l0 = find_line(p0, p2)
                    l1 = find_line(p1, p3)
                    x, y = cross(l0, l1)
                    z = 3 * 180 / (p3[1] - p0[1]) * 1
                    print(x, y, z)
            draw_keypoints(vis, self.tracker.frame_points)

            self.rect_sel.draw(vis)
            cv2.imshow('plane', vis)
            ch = cv2.waitKey(1)
            if ch == ord(' '):
                self.paused = not self.paused
            if ch == 27:
                break
    def run(self, Cover_Dimensions, Actual_Dimensions):
        '''
        Runs the program, of selection of the image's region. Approximates the
        dimensions of the cover based on given dimensions.
        '''
        while True:
            # flag used to quit imaging, when the size detected.
            flag = 0
            playing = not self.rect_sel.dragging

            # get size of the book cover
            w, h = getsize(self.frame)
            vis = np.zeros((h, w*2, 3), np.uint8)
            vis[:h,:w] = self.frame

            if len(self.tracker.targets) > 0:
                target = self.tracker.targets[0]
                vis[:,w:] = target.image
                draw_keypoints(vis[:,w:], target.keypoints)
                x0, y0, x1, y1 = target.rect # get the selected region coordinates
                cv.rectangle(vis, (x0+w, y0), (x1+w, y1), (0, 255, 0), 2)

                Region_Dimensions = [x1 - x0, y1 - y0]
                print("Region_Dimensions:", Region_Dimensions)
                # Ratio of the cover dimensions (width) to region dimensions (width)
                # similarly for height
                ratio_width = float(Cover_Dimensions)/(Region_Dimensions[0])

                # Hard coded the actual width and height of the region.
                # Actual width (in cm) = 14
                # Actual height (in cm) = 1.1
                width_of_book = ratio_width * Actual_Dimensions[0]
                # height_of_book = ratio_height * Actual_Dimensions[1]

            # Optional (useful in case of video source)
            if playing:
                tracked = self.tracker.track(self.frame)
                if len(tracked) > 0:
                    tracked = tracked[0]
                    cv.polylines(vis, [np.int32(tracked.quad)], True, (255, 255, 255), 2)
                    for (x0, y0), (x1, y1) in zip(np.int32(tracked.p0), np.int32(tracked.p1)):
                        cv.line(vis, (x0+w, y0), (x1, y1), (0, 255, 0))
                        print("Detected")
                        # break when the region is detected.
                        flag = 1
                        break
            draw_keypoints(vis, self.tracker.frame_points)

            self.rect_sel.draw(vis)
            cv.imshow('Selected Region', vis)
            cv.waitKey(1)
            if flag == 1:
                print("Dimensions of the book : ", width_of_book)
                return
    def run(self):
        while True:
            playing = not self.paused and not self.rect_sel.dragging
            if playing or self.frame is None:
                ret, frame = self.cap.read()
                if not ret:
                    break
                self.frame = frame.copy()

            blue = cv.cvtColor(frame, cv.COLOR_BGR2Luv)
            # Display the resulting frame
            cv.imshow('self.frame', blue)

            w, h = getsize(self.frame)
            vis = np.zeros((h, w * 2, 3), np.uint8)
            vis[:h, :w] = self.frame
            if len(self.tracker.targets) > 0:
                target = self.tracker.targets[0]
                vis[:, w:] = target.image
                draw_keypoints(vis[:, w:], target.keypoints)
                x0, y0, x1, y1 = target.rect
                #cv.rectangle(vis, (x0+w, y0), (x1+w, y1), (255, 0, 0), 2)
                center_x = int((x0 + x1 + 2 * w) / 2)
                center_y = int((y0 + y1) / 2)
                r_x = int(abs((x0 - x1) / 2))
                r_y = int(abs((x0 - x1) / 2))
                radius = int(math.sqrt((r_x * r_x) + (r_y * r_y)))

                cv.circle(vis, (center_x, center_y), radius, (0, 0, 255), 2)
            if playing:
                tracked = self.tracker.track(self.frame)
                if len(tracked) > 0:
                    tracked = tracked[0]
                    cv.polylines(vis, [np.int32(tracked.quad)], True,
                                 (255, 0, 255), 2)
                    for (x0, y0), (x1, y1) in zip(np.int32(tracked.p0),
                                                  np.int32(tracked.p1)):
                        cv.line(vis, (x0 + w, y0), (x1, y1), (255, 0, 0))
            draw_keypoints(vis, self.tracker.frame_points)

            self.rect_sel.draw(vis)
            cv.imshow('plane', vis)
            ch = cv.waitKey(1)
            if ch == ord(' '):
                self.paused = not self.paused
            if ch == 27:
                break
Пример #7
0
    def run(self):
        img = cv2.imread('image.jpg')
        while True:
            playing = not self.paused and not self.rect_sel.dragging
            if playing or self.frame is None:
                ret, frame = self.cap.read()
                if not ret:
                    break
                self.frame = frame.copy()

            w, h = getsize(self.frame)
            vis = np.zeros((h, w * 2, 3), np.uint8)
            vis[:h, :w] = self.frame

            if len(self.tracker.targets) > 0:
                target = self.tracker.targets[0]
                vis[:, w:] = target.image
                draw_keypoints(vis[:, w:], target.keypoints)
                x0, y0, x1, y1 = target.rect
                cv2.rectangle(vis, (x0 + w, y0), (x1 + w, y1), (0, 255, 0), 2)

            if playing:
                tracked = self.tracker.track(self.frame)
                if len(tracked) > 0:
                    tracked = tracked[0]
                    #cv2.fillPoly(vis, [np.int32(tracked.quad)], 255)
                    cv2.polylines(vis, [np.int32(tracked.quad)], True,
                                  (255, 0, 0), 2)

                    xt, yt = tracked.quad[3]
                    font = cv2.FONT_HERSHEY_SIMPLEX
                    cv2.putText(vis, 'Planar track', (xt, yt), font, 1,
                                (0, 0, 255), 2)
                    cv2.circle(vis, (xt, yt), 30, (0, 255, 0), 2)

                    #for (x0, y0), (x1, y1) in zip(np.int32(tracked.p0), np.int32(tracked.p1)):
                    #    cv2.line(vis, (x0+w, y0), (x1, y1), (0, 255, 0))
            draw_keypoints(vis, self.tracker.frame_points)

            self.rect_sel.draw(vis)
            cv2.imshow('plane', vis)
            ch = cv2.waitKey(1)
            if ch == ord(' '):
                self.paused = not self.paused
            if ch == 27:
                break
Пример #8
0
    def run(self):
        num = 0
        while True:
            if not self.paused:
                state, frame = self.cap.read()
                if not state:
                    print 'video end'
                    continue
                self.frame = frame.copy()
            show_img = self.frame.copy()

            if not self.paused and not self.rect_selector.dragging:
                tracked = self.track(self.frame)
                if len(tracked) > 0:
                    for tr in tracked:
                        if tr > 0:
                            cv2.polylines(show_img, [np.int32(tr.quad)], True,
                                          (255, 255, 255), 2)
                if not self.paused:
                    keypoints, _ = self.detect_features(show_img)
                    common.draw_keypoints(show_img, keypoints)
                '''
                if len(tracked)>0:
                    tracked = tracked[0]
                    cv2.polylines(show_img, [np.int32(tracked.quad)], True, (255, 255, 255), 2)
                    '''
            self.rect_selector.draw(show_img)
            cv2.imshow('src', show_img)
            #videowriter.write(show_img)
            key = cv2.waitKey(10)
            if key == -1:
                continue
            elif key == 27:
                break
            elif key == ord(' '):
                self.paused = not self.paused
                print self.paused
            elif key == ord('c'):
                self.targets = []
                self.matcher.clear()
Пример #9
0
 def run(self):
     num = 0
     while True:     
         if not self.paused:
             state,frame = self.cap.read()
             if not state:
                 print 'video end'
                 continue
             self.frame = frame.copy()
         show_img = self.frame.copy()
       
         if not self.paused and not  self.rect_selector.dragging:
             tracked = self.track(self.frame)
             if len(tracked)>0:
                 for tr in tracked:
                     if tr >0:
                         cv2.polylines(show_img, [np.int32(tr.quad)], True, (255, 255, 255), 2)
             if not self.paused:
                 keypoints,_ = self.detect_features(show_img)
                 common.draw_keypoints(show_img, keypoints)
             '''
             if len(tracked)>0:
                 tracked = tracked[0]
                 cv2.polylines(show_img, [np.int32(tracked.quad)], True, (255, 255, 255), 2)
                 '''
         self.rect_selector.draw(show_img)
         cv2.imshow('src',show_img)
         #videowriter.write(show_img)
         key = cv2.waitKey(10)
         if key == -1:
             continue
         elif key == 27:
             break
         elif key == ord(' '):
             self.paused = not self.paused
             print self.paused
         elif key == ord('c'):
             self.targets = []
             self.matcher.clear()
Пример #10
0
from common import draw_keypoints

file1 = '/home/diego/Videos-REID/descriptores/personaAzulWalk2/descriptor8.png'
file2 = '/home/diego/Videos-REID/descriptores/personaAzulWalk2/descriptor12.png'

detector = cv2.xfeatures2d.SIFT_create()
norm = cv2.NORM_L2
matcher = cv2.BFMatcher(norm)

img1 = cv2.imread(file1,0)
img2 = cv2.imread(file2,0)

kp1, desc1 = detector.detectAndCompute(img1, None)
kp2, desc2 = detector.detectAndCompute(img2, None)

draw_keypoints(img1,kp1)
draw_keypoints(img2,kp2)


print 'matching...'
raw_matches = matcher.knnMatch(desc1, trainDescriptors = desc2, k = 2) #2
p1, p2, kp_pairs = filter_matches(kp1, kp2, raw_matches)

if len(p1) >= 4:
	H, status = cv2.findHomography(p1, p2, cv2.RANSAC, 5.0)
	print '%d / %d  inliers/matched' % (np.sum(status), len(status))
else:
	H, status = None, None
	print '%d matches found, not enough for homography estimation' % len(p1)

print len(p1), len(p2)
Пример #11
0
    def run(self):
	direccion = None
        while not rospy.is_shutdown():
            playing = not self.paused and not self.rect_sel.dragging
            if playing or self.frame is None:
		#print(self.cv_image)
                ret = True
		frame = self.cv_image
		#print(self.cv_image)
		#print("**************************** frame")
		#print(frame)
		#ret, frame = self.cap.read()
		if not ret:
                    break
                self.frame = frame.copy()
	    
            w, h = getsize(self.frame)
            vis = np.zeros((h, w*2, 3), np.uint8)
            vis[:h,:w] = self.frame
            if len(self.tracker.targets) > 0:
                target = self.tracker.targets[0]
                vis[:,w:] = target.image
                draw_keypoints(vis[:,w:], target.keypoints)
                x0, y0, x1, y1 = target.rect
		#print(x0,y0,x1,y1)
                cv2.rectangle(vis, (x0+w, y0), (x1+w, y1), (0, 255, 0), 2)
	    
            if playing:
                tracked = self.tracker.track(self.frame)
                if len(tracked) > 0:
		    tracked = tracked[0]
		    if not self.reiniciar_exploracion_timer:
		    	self.pubNavegacion.publish('STOP')
			self.reiniciar_exploracion_timer = True
		    	rospy.Timer(rospy.Duration(15), self.reiniciar_exploracion)
		    #Aca se imprimen los 4 puntos que genera
		    #print(str(np.int32(tracked.quad[0])))
		    #print(str(np.int32(tracked.quad[1])))
		    #print(str(np.int32(tracked.quad[2])))
		    #print(str(np.int32(tracked.quad[3])))
		    #Este es el punto medio del poligono que genera. 
		    ptoMedio = (np.int32(tracked.quad[0]) + np.int32(tracked.quad[1]) + np.int32(tracked.quad[2]) + np.int32(tracked.quad[3]))/4
		    direccion = (ptoMedio[0]-320)/-320.0
		    twist = Twist(Vector3(15,0,0),Vector3(0,0,direccion))
		    self.pubVel.publish(twist)
		    
                    cv2.polylines(vis, [np.int32(tracked.quad)], True, (255, 255, 255), 2)
                    for (x0, y0), (x1, y1) in zip(np.int32(tracked.p0), np.int32(tracked.p1)):
                        cv2.line(vis, (x0+w, y0), (x1, y1), (0, 255, 0))
		else:
		    if self.reiniciar_exploracion_timer:
			direccion = direccion or 0.5
		    	twist = Twist(Vector3(0 if direccion > 0.2 else 10,0,0),Vector3(0,0, direccion if direccion > 0.2 else 0))
		    	self.pubVel.publish(twist)

            draw_keypoints(vis, self.tracker.frame_points)
	    
            self.rect_sel.draw(vis)
            cv2.imshow('plane', vis)
            ch = cv2.waitKey(1)
            if ch == ord(' '):
                self.paused = not self.paused
            if ch == 27:
                break
Пример #12
0
    def run(self):
        setting_fn = 'setting.json'
        if myutil.isfile(setting_fn):
            print('setting exists')
            self.load_setting(setting_fn)
        # load preset frame and rect
        if True and myutil.isfile('h**o.json'):
            print('preset exists')
            tmp_frame = self.load_config('h**o.json')
            #self.frame = tmp_frame

        print('test: {}'.format(
            self.distance_to_camera(self.KNOWN_WIDTH, self.focal_length, 135)))

        while True:
            playing = not self.paused and not self.rect_sel.dragging
            if playing or self.frame is None:
                ret, frame = self.cap.read()
                if not ret:
                    break
                self.frame = frame.copy()
                self.auto_output_frame = frame.copy()

            w, h = getsize(self.frame)
            vis = np.zeros((h, w * 2, 3), np.uint8)
            # if tmp_frame:
            #     vis[:,w:] = tmp_frame
            vis[:h, :w] = self.frame
            if len(self.tracker.targets) > 0:
                target = self.tracker.targets[0]
                vis[:, w:] = target.image
                draw_keypoints(vis[:, w:], target.keypoints)
                x0, y0, x1, y1 = target.rect
                cv.rectangle(vis, (x0 + w, y0), (x1 + w, y1), (0, 255, 0), 2)

            is_ok_to_export = False
            if playing:
                tracked = self.tracker.track(self.frame)
                if len(tracked) > 0:
                    tracked = tracked[0]
                    wtf = np.int32(tracked.quad)
                    if self.check_wtf(wtf):
                        self.draw_result(vis, wtf)
                        cv.fillPoly(vis, [wtf], (255, 0, 0))
                        for (x0, y0), (x1, y1) in zip(np.int32(tracked.p0),
                                                      np.int32(tracked.p1)):
                            cv.line(vis, (x0 + w, y0), (x1, y1), (0, 255, 0))
                        is_ok_to_export = True
                        if self.auto_save:
                            self.draw_result(self.auto_output_frame, wtf)
                            fn = 'autosave_{:04d}.png'.format(self.auto_serial)
                            self.save_image(fn, self.auto_output_frame)
                            self.auto_serial += 1

            draw_keypoints(vis, self.tracker.frame_points)

            self.rect_sel.draw(vis)
            cv.imshow(WIN_NAME, vis)
            ch = cv.waitKey(1)
            if ch == ord(' '):
                self.paused = not self.paused
            elif ch == 27:
                break
            elif ch == ord('s'):
                fn = 'saved_{:04d}.png'.format(self.serial)
                self.serial += 1
                self.save_image(fn, vis)