diff --git a/config/compound_eye.png b/config/compound_eye.png index eed73b6..d60ac8f 100644 Binary files a/config/compound_eye.png and b/config/compound_eye.png differ diff --git a/promote_video.py b/promote_video.py index 091fae1..4f1a98b 100644 --- a/promote_video.py +++ b/promote_video.py @@ -50,23 +50,23 @@ def create_plot(): grad_brush = make_gradient_brush(theme_color, max_alpha=120) show_values = False - title_font = QFont("Segoe UI", 14, QFont.Bold) - axis_font = QFont("Segoe UI", 10, QFont.Bold) + # title_font = QFont("Segoe UI", 14, QFont.Bold) + # axis_font = QFont("Segoe UI", 10, QFont.Bold) p1 = win.addPlot(title="Normal") - p1.titleLabel.item.setFont(title_font) + # p1.titleLabel.item.setFont(title_font) p1.getAxis('left').setStyle(showValues=show_values) p1.showGrid(x=True, y=True, alpha=0.3) win.nextRow() p2 = win.addPlot(title="Shear X") - p2.titleLabel.item.setFont(title_font) + # p2.titleLabel.item.setFont(title_font) p2.getAxis('left').setStyle(showValues=show_values) p2.showGrid(x=True, y=True, alpha=0.3) win.nextRow() p3 = win.addPlot(title="Shear Y") - p3.titleLabel.item.setFont(title_font) + # p3.titleLabel.item.setFont(title_font) p3.getAxis('left').setStyle(showValues=show_values) p3.setLabel('bottom', 'Time', units='s') - p3.getAxis('bottom').label.setFont(axis_font) + # p3.getAxis('bottom').label.setFont(axis_font) p3.showGrid(x=True, y=True, alpha=0.3) plot_af = p1.plot(pen=line_pen, fillLevel=0, fillBrush=grad_brush) plot_tfx = p2.plot(pen=line_pen, fillLevel=0, fillBrush=grad_brush) @@ -147,11 +147,12 @@ def main(): parser = argparse.ArgumentParser() parser.add_argument("--video","-v", type=str, default="s1.mp4", help="视频文件路径") + parser.add_argument("--fps", type=float, default=30) args = parser.parse_args() - - arrow_writer = cv2.VideoWriter(args.video.replace(".mp4", "_arrows.mp4"), cv2.VideoWriter_fourcc(*'mp4v'), 30, (384, 384)) - pyqt_writer = cv2.VideoWriter(args.video.replace(".mp4", "_pyqt.mp4"), cv2.VideoWriter_fourcc(*'mp4v'), 30, (1600, 1200)) - depth_writer = cv2.VideoWriter(args.video.replace(".mp4", "_depth.mp4"), cv2.VideoWriter_fourcc(*'mp4v'), 30, (384, 384)) + fps_video = args.fps + arrow_writer = cv2.VideoWriter(args.video.replace(".mp4", "_arrows.mp4"), cv2.VideoWriter_fourcc(*'mp4v'), fps_video, (384, 384)) + pyqt_writer = cv2.VideoWriter(args.video.replace(".mp4", "_pyqt.mp4"), cv2.VideoWriter_fourcc(*'mp4v'), fps_video, (1600, 1200)) + depth_writer = cv2.VideoWriter(args.video.replace(".mp4", "_depth.mp4"), cv2.VideoWriter_fourcc(*'mp4v'),fps_video, (384, 384)) sensor1 = orisys.Sensor(args.video, config_name="./config/prototype_of3.json", cal_path= "./config/dd01a_98.npy", isstitch=True, cuda=False, verbose=True) @@ -160,8 +161,7 @@ def main(): frame_count = 0 writer = None while True: - sensor1.get_img() # 提取并拼接复眼图像 - + sensor1.get_img() # 提取并拼接复眼图像 sensor1.compute_deformation() # 计算形变和分解 sensor1.compute_contact() @@ -170,11 +170,14 @@ def main(): # 帧率,时间戳: FPS, TIMESTAMP # 变形量总和: FNORMAL , FSHEARX, FSHEARY : 法向,切向(X),切向(Y) fps, fn, fx, fy, flow, depth_map = sensor1.read_info(sensor1.info.FPS, sensor1.info.FNORMAL, sensor1.info.FSHEARX, sensor1.info.FSHEARY, sensor1.info.VRAW, sensor1.info.DEPTH) - print(fps,fn,fx,fy) + frame_count += 1 + print(fps,fn,fx,fy,frame_count) + if sensor1.img is None: + break # 显示向量场 # Background color #24292E (BGR) black_img = np.full_like(sensor1.img, bg_color) - arrows = orisys.util.draw_arrows(black_img, flow, threshold=2, grid_spacing=20, arrow_scale=0.5, colormap=cv2.COLORMAP_PARULA, below_threshold_color=text_color) + arrows = orisys.util.draw_arrows(black_img, flow, threshold=1, grid_spacing=20, arrow_scale=0.5, colormap=cv2.COLORMAP_PARULA, below_threshold_color=text_color) cv2.imshow("Deformation", arrows) # 显示深度图 @@ -192,11 +195,11 @@ def main(): # cv2.imshow("Depth Map", cv2.applyColorMap(div_normalized, cv2.COLORMAP_JET)) # 显示图表 - 更新时间轴 - current_time = time.time() - start_time + elapsed_time = time.time() - start_time for i in range(3): data[:-1, 0, i] = data[1:, 0, i] # shift time data left data[:-1, 1, i] = data[1:, 1, i] # shift force data left - data[-1, 0, :] = frame_count/30.0 # set current time for all plots + data[-1, 0, :] = frame_count/fps_video # set current time for all plots data[-1, 1, 0] = fn data[-1, 1, 1] = abs(fx) data[-1, 1, 2] = abs(fy) @@ -214,7 +217,7 @@ def main(): below = data_plot[:, 1, :] < plot_threshold data_plot[:, 1, :] = np.where(below, 0, data_plot[:, 1, :]) update(plot_af, plot_tfx, plot_tfy, data_plot, p1, p2, p3) # Update plot - frame_count += 1 + # frame_count += 1 # Convert pyqtgraph plot to image # Grab the GraphicsLayoutWidget as QPixmap @@ -222,7 +225,10 @@ def main(): # Convert QPixmap to QImage qimg = pixmap.toImage() # Convert QImage to numpy array (RGB format) - qimg = qimg.convertToFormat(QImage.Format_RGB888) + # Qt6/PySide6: QImage.Format.Format_RGB888; Qt5: QImage.Format_RGB888 + QImg = QtGui.QImage + fmt = getattr(QImg.Format, 'Format_RGB888', None) or getattr(QImg, 'Format_RGB888') + qimg = qimg.convertToFormat(fmt) width = qimg.width() height = qimg.height() # Convert QImage to numpy array diff --git a/src/orisys/sensor.py b/src/orisys/sensor.py index 8fd0857..1a4d57a 100644 --- a/src/orisys/sensor.py +++ b/src/orisys/sensor.py @@ -434,7 +434,7 @@ class Sensor: except: pass # Some backends don't support this property self.cap.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter.fourcc('M', 'J', 'P', 'G')) - # self.cap.set(cv2.CAP_PROP_FPS, self._config_fps) + self.cap.set(cv2.CAP_PROP_FPS, self._config_fps) self.cap.set(cv2.CAP_PROP_FRAME_WIDTH, self._config_resolution_raw[0]) self.cap.set(cv2.CAP_PROP_FRAME_HEIGHT, self._config_resolution_raw[1])