def get_matches_using_sift(img_src, img_marker, method): sift = cv2.xfeatures2d.SIFT_create() kp1, des1 = sift.detectAndCompute(img_marker, None) kp2, des2 = sift.detectAndCompute(img_src, None) if not exists(des1) or not exists(des2): return None, None, None matches = Drawing.get_matches(des1, des2, method) return matches, kp1, kp2
def get_matches_using_orb(img_src, img_marker, method): orb = cv2.ORB_create() kp1, des1 = orb.detectAndCompute(img_marker, None) kp2, des2 = orb.detectAndCompute(img_src, None) if not exists(des1) or not exists(des2): return None, None, None matches = Drawing.get_matches(des1, des2, method) return matches, kp1, kp2
def match_and_render(img_src, img_marker, obj, method): assert method in [const.METHOD_ORB, const.METHOD_SIFT] min_matches = { const.METHOD_ORB: 15, const.METHOD_SIFT: 15, }[method] matches, kp1, kp2 = { const.METHOD_ORB: Drawing.get_matches_using_orb, const.METHOD_SIFT: Drawing.get_matches_using_sift, }[method](img_src, img_marker, const.MATCHES_BEST) if not matches: return if len(matches) >= min_matches: homography, mask = Drawing.find_homography(matches, kp1, kp2) if exists(homography): # Draw marker outline # Drawing.draw_marker_border(img_src, img_marker, homography) # Draw marker matches # Drawing.draw_marker_matches(img_src, img_marker, homography, method) # Draw projection Drawing.draw_projection(img_src, img_marker, homography, obj)
def show_preview(self): if not exists(self.window_manager): return if self.mirror_preview: mirrored_frame = np.fliplr(self._frame).copy() self.window_manager.show(mirrored_frame) else: self.window_manager.show(self._frame)
def _write_video_frame(self): if not self.is_writing_video: return if not exists(self._video_writer): video_fps = self.fps() if not exists(video_fps): return video_size = (int(self._capture.get(cv2.CAP_PROP_FRAME_WIDTH)), int(self._capture.get(cv2.CAP_PROP_FRAME_HEIGHT))) self._video_writer = cv2.VideoWriter( self._video_filename, self._video_encoding, video_fps, video_size, ) self._video_writer.write(self._frame)
def run(self): self._window.create() while self._window.is_created: self._capture_controller.enter_frame() self._frame = self._capture_controller.frame if not exists(self._frame): continue if exists(self._filter): self._filter.apply(self._frame, dst=self._frame) self.draw( contours=self._draw_contours, lines=self._draw_lines, corners=self._draw_corners, ) self._capture_controller.exit_frame() self._window.process_events()
def exit_frame(self): if not exists(self.frame): self._frame_entered = False return self._count_frames() self.show_preview() self._write_image_frame() self._write_video_frame() self._frame = None self._frame_entered = False
def resource(request, serial, name, res_type, medium=None): if int(serial) == settings.RAPE_SERIAL: if helpers.exists(res_type, name, medium): if helpers.changed(request, res_type, name, medium): helpers.check_dirs(res_type) generate_resource(request, res_type, name, medium) fp = open(helpers.get_output_path(request, res_type, name)) response = HttpResponse(re.sub(r'{{HOST}}', request.META['HTTP_HOST'], fp.read())) fp.close() if settings.RAPE_CORS_ORIGIN: response['Access-Control-Allow-Origin'] = settings.RAPE_CORS_ORIGIN if settings.RAPE_CORS_METHODS: response['Access-Control-Allow-Methods'] = settings.RAPE_CORS_METHODS if settings.RAPE_CORS_HEADERS: response['Access-Control-Allow-Headers'] = settings.RAPE_CORS_HEADERS response['Content-Type'] = helpers.get_content_type(res_type) response['Cache-Control'] = 'public, max-age=86400' return response else: raise Http404 else: return HttpResponseRedirect(reverse(('raped_%s' % res_type), args=(settings.RAPE_SERIAL, name)))
def process_events(self): keycode = cv2.waitKey(1) if exists(self.keypress_callback) and keycode != -1: keycode &= 0xFF self.keypress_callback(keycode)
def enter_frame(self): assert not self._frame_entered if exists(self._capture): self._frame_entered = self._capture.grab()
def is_writing_video(self): return exists(self._video_filename)
def is_writing_image(self): return exists(self._image_filename)
def frame(self): if exists(self._frame_entered) and not exists(self._frame): _, self._frame = self._capture.retrieve() return self._frame