def next_frame(self): self.fps.update() if self.input_type == "rgb": # Send cropping information to manip node on device cfg = dai.ImageManipConfig() points = [ [self.crop_region.xmin, self.crop_region.ymin], [self.crop_region.xmax - 1, self.crop_region.ymin], [self.crop_region.xmax - 1, self.crop_region.ymax - 1], [self.crop_region.xmin, self.crop_region.ymax - 1], ] point2fList = [] for p in points: pt = dai.Point2f() pt.x, pt.y = p[0], p[1] point2fList.append(pt) cfg.setWarpTransformFourPoints(point2fList, False) cfg.setResize(self.pd_input_length, self.pd_input_length) cfg.setFrameType(dai.ImgFrame.Type.RGB888p) self.q_manip_cfg.send(cfg) # Get the device camera frame if wanted if self.laconic: frame = np.zeros((self.frame_size, self.frame_size, 3), dtype=np.uint8) else: in_video = self.q_video.get() frame = in_video.getCvFrame() else: if self.input_type == "image": frame = self.img.copy() else: ok, frame = self.cap.read() if not ok: return None, None # Cropping of the video frame cropped = self.crop_and_resize(frame, self.crop_region) cropped = cv2.cvtColor(cropped, cv2.COLOR_BGR2RGB).transpose(2, 0, 1) frame_nn = dai.ImgFrame() frame_nn.setTimestamp(time.monotonic()) frame_nn.setWidth(self.pd_input_length) frame_nn.setHeight(self.pd_input_length) frame_nn.setData(cropped) self.q_pd_in.send(frame_nn) # Get result from device inference = self.q_pd_out.get() body = self.pd_postprocess(inference) self.crop_region = body.next_crop_region # Statistics if self.stats: self.nb_frames += 1 self.nb_pd_inferences += 1 return frame, body
resizeX = resizeMaxW // resizeFactor resizeY = resizeMaxH // resizeFactor print("Crop region resized to: ", resizeX, 'x', resizeY) elif key == ord(keyWarpTestCycle): # Disable resizing initially resizeFactor = 0 warpIdx = (warpIdx + 1) % len(warpList) testFourPt = True testDescription = warpList[warpIdx][2] print("Warp 4-point transform: ", testDescription) elif key == ord('h'): printControls() # Send an updated config with continuous rotate, or after a key press if key >= 0 or (not testFourPt and abs(rotateRate) > 0.0001): cfg = dai.ImageManipConfig() if testFourPt: test = warpList[warpIdx] points, normalized = test[0], test[1] point2fList = [] for p in points: pt = dai.Point2f() pt.x, pt.y = p[0], p[1] point2fList.append(pt) cfg.setWarpTransformFourPoints(point2fList, normalized) else: angleDeg += rotateRate rotatedRect = ((320, 240), (400, 400), angleDeg) rr = dai.RotatedRect() rr.center.x, rr.center.y = rotatedRect[0] rr.size.width, rr.size.height = rotatedRect[1]