class ProcImg():
    def __init__(self, stream):
        self.stream = stream
        self.numThread = cv2.getNumberOfCPUs()
        #self.numThread = 1
        self.workerPool = ThreadPool(processes = self.numThread)
        self.pendingWorker = deque()

        self.latency = StatValue()
        self.frameInterval = StatValue()
        self.lastFrameTime = clock()

        self.outFrames = deque(maxlen = self.numThread)
        self.faces = []

    def isEmpty(self):
        return(len(self.outFrames) == 0)

    def getFrame(self):
        return self.outFrames.popleft()
    def draw(self, rects, frame):
        
        color = (0, 0, 255)# Rect color selection
        for (x,y,w,h) in rects:
            pt1 = (int(x), int(y))
            pt2 = (int((x+w)), int(y + h))
            cv2.rectangle(frame,  pt1, pt2, color, 1) # Draws the Rect
        #return hits

        
    def threadedProcess(self):
              
        rects = [] 
        if len(self.pendingWorker) > 0 and self.pendingWorker[0].ready():
            task = self.pendingWorker.popleft()
            frame, curTime = task.get()
            self.latency.update(clock() - curTime)
            
            draw_str(frame, (20, config.VIDEO_WIDTH -20), "Latency: %.1f ms" % (self.latency.value*1000))
            draw_str(frame, (20, config.VIDEO_WIDTH - 35), "FPS: %d" % (1/self.frameInterval.value))
            #print("Latency %lf" % (self.latency.value*1000))
            #print("FPS: %d" % (1/self.frameInterval.value))
            self.outFrames.append(frame)
            #cv2.imshow('Processed Video', frame) 
            #cv2.waitKey(1)
        if len(self.pendingWorker) < self.numThread:
            frame = self.stream.read()
            t = clock()
            self.frameInterval.update(t - self.lastFrameTime)
            self.lastFrameTime = t
            task = self.workerPool.apply_async(process, (copy.copy(frame), t))
            self.pendingWorker.append(task)
        


    def stop(self):
        workerPool.terminate()
        pendingWorker.clear()
class ProcImg():
    def __init__(self, stream):
        self.stream = stream
        self.numThread = cv2.getNumberOfCPUs()
        self.numThread = 5
        self.workerPool = ThreadPool(processes=self.numThread)
        self.pendingWorker = deque()

        self.latency = StatValue()
        self.frameInterval = StatValue()
        self.lastFrameTime = clock()

        self.outFrames = deque(maxlen=self.numThread)
        self.faces = []

    def isEmpty(self):
        return (len(self.outFrames) == 0)

    def getFrame(self):
        return self.outFrames.popleft()

    def draw(self, rects, frame):

        color = (0, 0, 255)  # Rect color selection
        for (x, y, w, h) in rects:
            pt1 = (int(x), int(y))
            pt2 = (int((x + w)), int(y + h))
            cv2.rectangle(frame, pt1, pt2, color, 1)  # Draws the Rect
        #return hits

    def threadedProcess(self):

        rects = []
        if len(self.pendingWorker) > 0 and self.pendingWorker[0].ready():
            task = self.pendingWorker.popleft()
            frame, curTime = task.get()
            self.latency.update(clock() - curTime)

            draw_str(frame, (20, config.VIDEO_WIDTH - 20),
                     "Latency: %.1f ms" % (self.latency.value * 1000))
            draw_str(frame, (20, config.VIDEO_WIDTH - 35),
                     "FPS: %d" % (1 / self.frameInterval.value))
            #print("Latency %lf" % (self.latency.value*1000))
            #print("FPS: %d" % (1/self.frameInterval.value))
            self.outFrames.append(frame)
            #cv2.imshow('Processed Video', frame)
            #cv2.waitKey(1)
        if len(self.pendingWorker) < self.numThread:
            frame = self.stream.read()
            t = clock()
            self.frameInterval.update(t - self.lastFrameTime)
            self.lastFrameTime = t
            task = self.workerPool.apply_async(process, (copy.copy(frame), t))
            self.pendingWorker.append(task)

    def stop(self):
        workerPool.terminate()
        pendingWorker.clear()
Example #3
0
def main():
    import sys

    try:
        fn = sys.argv[1]
    except:
        fn = 0
    cap = video.create_capture(fn)

    def process_frame(frame, t0):
        # some intensive computation...
        frame = cv.medianBlur(frame, 19)
        frame = cv.medianBlur(frame, 19)
        return frame, t0

    threadn = cv.getNumberOfCPUs()
    pool = ThreadPool(processes=threadn)
    pending = deque()

    threaded_mode = True

    latency = StatValue()
    frame_interval = StatValue()
    last_frame_time = clock()
    while True:
        while len(pending) > 0 and pending[0].ready():
            res, t0 = pending.popleft().get()
            latency.update(clock() - t0)
            draw_str(res, (20, 20), "threaded      :  " + str(threaded_mode))
            draw_str(res, (20, 40),
                     "latency        :  %.1f ms" % (latency.value * 1000))
            draw_str(
                res, (20, 60),
                "frame interval :  %.1f ms" % (frame_interval.value * 1000))
            cv.imshow('threaded video', res)
        if len(pending) < threadn:
            _ret, frame = cap.read()
            t = clock()
            frame_interval.update(t - last_frame_time)
            last_frame_time = t
            if threaded_mode:
                task = pool.apply_async(process_frame, (frame.copy(), t))
            else:
                task = DummyTask(process_frame(frame, t))
            pending.append(task)
        ch = cv.waitKey(1)
        if ch == ord(' '):
            threaded_mode = not threaded_mode
        if ch == 27:
            break

    print('Done')
Example #4
0
def trackGoals():
    print('tracking')

    threadn = cv2.getNumberOfCPUs()
    pool = ThreadPool(processes=threadn)
    pending = deque()

    threaded_mode = True

    latency = StatValue()
    frame_interval = StatValue()
    last_frame_time = clock()
    while True:
        while len(pending) > 0 and pending[0].ready():
            res, t0 = pending.popleft().get()
            latency.update(clock() - t0)
            draw_str(res, (20, 20), "threaded      :  " + str(threaded_mode))
            draw_str(res, (20, 40),
                     "latency        :  %.1f ms" % (latency.value * 1000))
            draw_str(
                res, (20, 60),
                "frame interval :  %.1f ms" % (frame_interval.value * 1000))
            cv2.imshow('threaded video', res)
        if len(pending) < threadn:
            ret, frame = cap.read()
            if frame is not None:
                t = clock()
                frame_interval.update(t - last_frame_time)
                last_frame_time = t
                if threaded_mode:
                    task = pool.apply_async(process_frame, (frame.copy(), t))
                else:
                    task = DummyTask(process_frame(frame, t))
                pending.append(task)
        ch = cv2.waitKey(1)
        if ch == ord(' '):
            threaded_mode = not threaded_mode
        if ch == 27:
            break
    cv2.destroyAllWindows()
        return frame, t0

    threadn = cv2.getNumberOfCPUs()
    pool = ThreadPool(processes = threadn)
    pending = deque()

    threaded_mode = True

    latency = StatValue()
    frame_interval = StatValue()
    last_frame_time = clock()
    while True:
        while len(pending) > 0 and pending[0].ready():
            '''   '''
            res, t0 = pending.popleft().get()
            latency.update(clock() - t0)
            draw_str(res, (20, 20), "Latency: %.1f ms" % (latency.value*1000))
            draw_str(res, (100, 20), "Frame interval: %.1f ms" % (frame_interval.value*1000))
            print('Interval: %.lf ms',(frame_interval.value*1000))
            #cv2.imshow('threaded video', res)
            frame = cv2.medianBlur(frame, 19)
        if len(pending) < threadn:
            #camera.capture(rawCap, format = "bgr")
            #frame = rawCap.array
            frame = cap.read()
            t = clock()
            frame_interval.update(t - last_frame_time)
            last_frame_time = t
            if threaded_mode:
                task = pool.apply_async(process_frame, (copy.copy(frame), t))
                #task = pool.apply_async(process_frame, (frame, t))
Example #6
0
def image_cap():
    d=[]


    print(__doc__)

    try:
        fn = sys.argv[1]
    except:
        fn = 0
    cap = video.create_capture(fn)
    cap.set(cv.CAP_PROP_FPS, 12)

    def process_frame(frame, t0):
        # some intensive computation...
        #frame = cv.medianBlur(frame, 19)
        #frame = cv.medianBlur(frame, 19)
        return frame, t0

    threadn = cv.getNumberOfCPUs()
    pool = ThreadPool(processes = threadn)
    pending = deque()

    threaded_mode = True

    latency = StatValue()
    frame_interval = StatValue()
    last_frame_time = clock()
    while True:

        while len(pending) > 0 and pending[0].ready():

            res, t0 = pending.popleft().get()
            latency.update(clock() - t0)
            draw_str(res, (20, 20), "threaded      :  " + str(threaded_mode))
            draw_str(res, (20, 40), "latency        :  %.1f ms" % (latency.value*1000))
            draw_str(res, (20, 60), "frame interval :  %.1f ms" % (frame_interval.value*1000))
            res=cv.resize(res,(176,100))
            cv2_im = cv.cvtColor(res, cv.COLOR_BGR2RGB)
            pil_im = Image.fromarray(cv2_im)

            d.append(np.array(pil_im))
            if len(d)==32:
                t1 = data_input(d[0:16])
                t2 = data_input(d[16:32])
                in_x = np.array([t1, t2])
                in_x = np.reshape(in_x, (2, 16, 128, 128, 3))
                start = time.clock()
                #p = Pool(1)
                #p.map(evaluate, in_x)

                evaluate(in_x)
                elapsed = time.clock()
                elapsed = elapsed - start
                print("Time spent in (function name) is: ", elapsed)
                d=[]


            cv.imshow('threaded video', res)
        if len(pending) < threadn:
            ret, frame = cap.read()
            t = clock()
            frame_interval.update(t - last_frame_time)
            last_frame_time = t
            if threaded_mode:
                task = pool.apply_async(process_frame, (frame.copy(), t))
            else:
                task = DummyTask(process_frame(frame, t))
            pending.append(task)
        ch = cv.waitKey(1)
        if ch == ord(' '):
            threaded_mode = not threaded_mode
        if ch == 27:
            break




    cv.destroyAllWindows()
Example #7
0
    def run(self):
        print(__doc__)
        wait_key()
        self.computed_frame = self.get_raw_frame()
        namedWindow(WINDOW_NAME)

        # Create video of Frame sequence -- define the codec and create VideoWriter object
        fourcc = VideoWriter_fourcc(*'XVID')
        cols = int(self.video_capture_obj.get(CAP_PROP_FRAME_WIDTH))
        rows = int(self.video_capture_obj.get(CAP_PROP_FRAME_HEIGHT))
        vid_out = VideoWriter(VIDEO_OUTPUT_FNAME, fourcc, 20.0, (cols, rows))

        # Set up multiprocessing
        num_threads = getNumberOfCPUs()
        pool = ThreadPool(processes=num_threads)
        pending = deque()

        # initialize time variables
        latency = StatValue()
        frame_interval = StatValue()

        # main program loop
        while True:
            while pending and pending[0].ready(
            ):  # there are frames in the queue
                pending.popleft().get()
                latency.update(clock() - self.current_frame_time)
                # plot info on threading and timing on the current image
                # comment out the next 3 lines to skip the plotting
                draw_str(self.computed_frame, (20, 20),
                         "threaded      :  " + str(self.threaded_mode))
                draw_str(self.computed_frame, (20, 40),
                         "latency        :  %.1f ms" % (latency.value * 1000))
                draw_str(
                    self.computed_frame, (20, 60),
                    "frame interval :  %.1f ms" %
                    (frame_interval.value * 1000))
                # write output video frame
                if self.writing_frame_to_video:
                    vid_out.write(self.computed_frame)
                # show the current image
                imshow(WINDOW_NAME, self.computed_frame)

            if len(
                    pending
            ) < num_threads:  # fewer frames than thresds ==> get another frame
                # get frame
                if self.threaded_mode:
                    task = pool.apply_async(self.process_frame)
                else:
                    task = DummyTask(self.process_frame())
                frame_interval.update(clock() - self.current_frame_time)
                pending.append(task)

            # check for a keypress
            key = wait_key()

            # threaded or non threaded mode
            if key == ord(' '):
                self.threaded_mode = not self.threaded_mode
            # toggle doing_gamma_and_contrast_adjust
            if key == ord('a'):
                self.toggle_doing_gamma_and_contrast_adjust()
            # toggle edges
            if key == ord('e'):
                self.toggle_showing_edges()
            # toggle frame
            if key == ord('f'):
                self.toggle_showing_frame()
            # image difference mode
            if key == ord('d'):
                self.showing_diff_frames = not self.showing_diff_frames
            # display image hue band
            if key == ord('h'):
                self.showing_hue = not self.showing_hue
            # equalize image value band
            if key == ord('q'):
                self.doing_hist_eq = not self.doing_hist_eq
            # threshold the image
            if key == ord('t'):
                self.toggle_doing_threshold()
            # do morphological opening on thresholded image (only applied to thresholded image)
            if key == ord('o'):
                self.doing_morph_open = not self.doing_morph_open
            # write video frames
            if key == ord('v'):
                self.toggle_writing_frame_to_video()

            # ESC terminates the program
            if key == ESC_KEY:
                break

        # release video capture object
        self.video_capture_obj.release()
        # release video output object
        vid_out.release()
        destroyAllWindows()