def _add_prefetch(s):
     with viewer.config_state.txn() as s:
         prefetch_state = copy.deepcopy(initial_state)
         prefetch_state.partial_viewport = [0.5, 0, 0.5, 1]
         s.prefetch = [
             neuroglancer.PrefetchState(state=prefetch_state, priority=0)
         ]
Пример #2
0
 def set_state(self, viewer, frame_i, prefetch_frames):
     states = self.get_frames(frame_i, frame_i + prefetch_frames)
     viewer.set_state(states[0])
     with viewer.config_state.txn() as s:
         del s.prefetch[:]
         for i, state in enumerate(states[1:]):
             s.prefetch.append(
                 neuroglancer.PrefetchState(state=state, priority=prefetch_frames - i))
Пример #3
0
def capture_screenshots(viewer, request_iter, refresh_browser_callback, refresh_browser_timeout, num_to_prefetch=1):
    prefetch_buffer = list(itertools.islice(request_iter, num_to_prefetch + 1))
    while prefetch_buffer:
        with viewer.config_state.txn() as s:
            s.show_ui_controls = False
            s.show_panel_borders = False
            del s.prefetch[:]
            for i, request in enumerate(prefetch_buffer[1:]):
                s.prefetch.append(neuroglancer.PrefetchState(state=request.state, priority=num_to_prefetch - i))
            request = prefetch_buffer[0]
            request.config_callback(s)
        viewer.set_state(request.state)
        print('%s [%s] Requesting screenshot' % (
            datetime.datetime.now().strftime('%Y-%m-%dT%H:%M%S.%f'),
            request.description,
        ))
        last_statistics_time = time.time()

        def statistics_callback(statistics):
            nonlocal last_statistics_time
            last_statistics_time = time.time()
            total = statistics.total
            print(
                '%s [%s] Screenshot in progress: %6d/%6d chunks loaded (%10d bytes), %3d downloading'
                % (
                    datetime.datetime.now().strftime('%Y-%m-%dT%H:%M%S.%f'),
                    request.description,
                    total.visible_chunks_gpu_memory,
                    total.visible_chunks_total,
                    total.visible_gpu_memory,
                    total.visible_chunks_downloading,
                ))
        event = threading.Event()
        screenshot = None
        def result_callback(s):
            nonlocal screenshot
            screenshot = s.screenshot
            event.set()
        viewer.async_screenshot(
            result_callback,
            include_depth=request.include_depth,
            statistics_callback=statistics_callback,
        )
        def get_timeout():
            return max(0, last_statistics_time + refresh_browser_timeout - time.time())
        while True:
            if event.wait(get_timeout()):
                break
            if get_timeout() > 0:
                continue
            last_statistics_time = time.time()
            refresh_browser_callback()
        request.response_callback(screenshot)
        del prefetch_buffer[0]
        next_request = next(request_iter, None)
        if next_request is not None:
            prefetch_buffer.append(next_request)
Пример #4
0
    def render_func(viewer, start_frame, end_frame):
        with lock:
            saver = neuroglancer.ScreenshotSaver(viewer, args.output_directory)
        states_to_capture = []
        frame_number = 0
        for i in range(len(keypoints) - 1):
            a = keypoints[i]['state']
            b = keypoints[i + 1]['state']
            duration = keypoints[i]['transition_duration']
            num_frames = max(1, int(duration * fps))
            for frame_i in range(num_frames):
                t = frame_i / num_frames
                if frame_number >= end_frame:
                    return

                if frame_number < start_frame:
                    frame_number += 1
                    continue

                path = saver.get_path(frame_number)

                if args.resume and os.path.exists(path):
                    frame_number += 1
                    with lock:
                        num_frames_written[0] += 1
                else:
                    cur_state = neuroglancer.ViewerState.interpolate(a, b, t)
                    states_to_capture.append((frame_number, i + t, cur_state))
                    frame_number += 1
        for frame_number, t, cur_state in states_to_capture:
            prefetch_states = [
                x[2] for x in states_to_capture[frame_number + 1:frame_number +
                                                1 + num_prefetch_frames]
            ]
            prev_state = viewer.state.to_json()
            cur_state = cur_state.to_json()
            cur_state['layers'] = prev_state['layers']
            cur_state = neuroglancer.ViewerState(cur_state)
            viewer.set_state(cur_state)
            if num_prefetch_frames > 0:
                with viewer.config_state.txn() as s:
                    del s.prefetch[:]
                    for i, state in enumerate(prefetch_states[1:]):
                        s.prefetch.append(
                            neuroglancer.PrefetchState(
                                state=state, priority=num_prefetch_frames - i))
            frame_number, path = saver.capture(frame_number)
            with lock:
                num_frames_written[0] += 1
                cur_num_frames_written = num_frames_written[0]
                print('[%07d/%07d] keypoint %.3f/%5d: %s' %
                      (cur_num_frames_written, total_frames, t, len(keypoints),
                       path))
Пример #5
0
    def prefetch(self):
        prefetch_states = []
        for i in range(self.num_to_prefetch):
            idx = self.index + (i + 1) * self.batch
            if idx >= len(self.todo):
                break
            prefetch_state = copy.deepcopy(self.viewer.state)
            prefetch_state.layers['seg'].segments = self.list_segments(idx)
            prefetch_state.layout = '3d'
            prefetch_states.append(prefetch_state)

        with self.viewer.config_state.txn() as s:
            s.prefetch = [
                neuroglancer.PrefetchState(state=prefetch_state, priority=-i)
                for i, prefetch_state in enumerate(prefetch_states)
            ]
    def set_index(self, index):
        if index == self.index:
            return
        body = self.bodies[index]
        self.index = index

        def modify_state_for_body(s, body):
            s.layers['segmentation'].segments = frozenset([body.segment_id])
            s.voxel_coordinates = body.bbox_start + body.bbox_size // 2

        with self.viewer.txn() as s:
            modify_state_for_body(s, body)

        prefetch_states = []
        for i in range(self.num_to_prefetch):
            prefetch_index = self.index + i + 1
            if prefetch_index >= len(self.bodies):
                break
            prefetch_state = copy.deepcopy(self.viewer.state)
            prefetch_state.layout = '3d'
            modify_state_for_body(prefetch_state, self.bodies[prefetch_index])
            prefetch_states.append(prefetch_state)

        with self.viewer.config_state.txn() as s:
            s.prefetch = [
                neuroglancer.PrefetchState(state=prefetch_state, priority=-i)
                for i, prefetch_state in enumerate(prefetch_states)
            ]

        label = self.state.body_labels.get(body.segment_id, '')
        with self.viewer.config_state.txn() as s:
            s.status_messages['status'] = (
                '[Segment %d/%d  : %d/%d voxels labeled = %.3f fraction] label=%s'
                % (index, len(self.bodies), self.cumulative_voxels[index],
                   self.total_voxels,
                   self.cumulative_voxels[index] / self.total_voxels, label))