def run(self): self.start_time = time.time() duty = self.D0 duties = [] for step in range(self.STEPS): duties.append(duty) self.s.change_duty(duty) if step % self.duty_interval == 0: if duty > self.D1: duty -= 1 frame = self.get_frame() # if step % self.IMSAVE_INTERVAL == 0: images.save(frame, f"{self.im_save}/{step}.png") circles = self.get_circles(frame) self.x.append(circles[0, 0]) self.x.append(circles[1, 0]) self.update_image(circles, frame) self.update_hist() self.update_plot() self.update_duty_plot(duties) self.fig.canvas.flush_events() self.fig.canvas.start_event_loop(0.5) if step % self.DATASAVE_INTERVAL == 0: np.savetxt(self.data_save, self.x) if step % 20 == 0: plt.savefig(self.plot_save, dpi=600)
def run(self): self.start_time = time.time() for step in range(self.STEPS): frame = self.get_frame() if step % self.IMSAVE_INTERVAL == 0: images.save(frame, f"{self.im_save}/{step}.png") circles = self.get_circles(frame) self.x.append(circles[0]) self.y.append(circles[1]) # self.x.append(circles[1, 0]) self.update_image(circles, frame) # self.update_hist() self.update_plot() self.fig.canvas.flush_events() self.fig.canvas.start_event_loop(0.5) if step % self.DATASAVE_INTERVAL == 0: np.savetxt(self.data_save_x, self.x) np.savetxt(self.data_save_y, self.y) if step % 20 == 0: plt.savefig(self.plot_save, dpi=600)
def im(self): im = self.cam.get_frame() for f in range(10): im = self.cam.get_frame() im = images.crop_and_mask(im, self.crop, self.mask) im = images.bgr_to_gray(im) images.save(im, self.log_direc + '{}_original.png'.format(self.i)) return im
def mean_im(self): ims = [] for f in range(8): im = self.cam.get_frame() im = images.crop_and_mask(im, self.crop, self.mask) im = images.bgr_to_gray(im) ims.append(im) images.save(ims[0], self.log_direc + '{}_original.png'.format(self.i)) mean_im = images.mean(ims) # mean_im = images.mask(mean_im, ring_mask) images.save(mean_im, self.log_direc + '{}_mean.png'.format(self.i)) return mean_im
def find_center(self, im): im0 = im.copy() im = images.threshold(im, 80) im = images.opening(im, (6, 6)) center = images.center_of_mass(im) im0 = images.gray_to_bgr(im0) im0 = images.draw_circle(im0, center[0], center[1], 5) im = images.gray_to_bgr(im) im = images.draw_circle(im, center[0], center[1], 5) images.save(images.hstack(im, im0), self.log_direc + '{}.png'.format(self.i)) self.i += 1 return center
def mean_im(self): ims = [] for f in range(8): im = ~self.cam.get_frame() im = images.crop_and_mask(im, self.crop, self.mask) # if f == 0: # ring_mask = images.inrange(images.bgr_to_lab(im), (0, 113, 0), # (255, 152, 255)) im = images.bgr_to_gray(im) ims.append(im) images.save(ims[0], self.log_direc + '{}_original.png'.format(self.i)) mean_im = images.mean(ims) # mean_im = images.mask(mean_im, ring_mask) images.save(mean_im, self.log_direc + '{}_mean.png'.format(self.i)) return mean_im
def check(filename): core_name = os.path.splitext(filename)[0] vid_name = core_name + '.MP4' data_name = core_name + '.hdf5' out_name = core_name + '_check.png' data = dataframes.DataStore(data_name) crop = data.metadata['crop'] vid = video.ReadVideo(vid_name) print(vid_name) frames = np.arange(4)*vid.num_frames//4 ims = [images.crop(vid.read_frame(f), crop) for f in frames] circles = [data.get_info(f, ['x', 'y', 'r']) for f in frames] new_ims = [images.draw_circles(im, c) for im, c in zip(ims, circles)] out = images.vstack(images.hstack(new_ims[0], new_ims[1]), images.hstack(new_ims[2], new_ims[3])) images.save(out, out_name)
def find_center(self, im): im0 = im.copy() im = images.gaussian_blur(im, (5, 5)) circles = trackpy.locate(im, 5) center = circles[['x', 'y']].values.mean(axis=0) im0 = images.gray_to_bgr(im0) im0 = images.draw_circle(im0, center[0], center[1], 5) im1 = images.gray_to_bgr(im) im1 = images.draw_circle(im1, center[0], center[1], 5) im2 = images.gray_to_bgr(im) im2 = images.draw_circles(im2, circles[['x', 'y', 'size']].values) images.save(images.hstack(im1, im0, im2), self.log_direc + '{}.png'.format(self.i)) self.i += 1 return center
from particletracking import dataframes from labvision import video, images import numpy as np import filehandling file_store = "/media/data/Data/FirstOrder/Hysterisis/FlatPlate/Trial2/0.2_up_1.hdf5" file_vid = "/media/data/Data/FirstOrder/Hysterisis/FlatPlate/Trial2/0.2_up_1.MP4" metadata = dataframes.load_metadata(file_store) vid = video.ReadVideo(file_vid) box = metadata['crop'] frame = vid.read_frame(vid.num_frames - 1) frame = images.crop(frame, box) xmin = 750 xmax = 1250 ymin = 750 ymax = 1250 vertices = np.array([[xmin, ymin], [xmin, ymax], [xmax, ymax], [xmax, ymin]]) frame = images.draw_polygon(frame, vertices, thickness=3) images.save( frame, "/media/data/Data/FirstOrder/Hysterisis/FlatPlate/Trial2/HexagonFigures/box_end.png" ) images.display(frame)
fig.show() import os if os.path.exists(data_save): x = np.loadtxt(data_save).tolist() else: x = [] t = [] i = 0 start_time = time.time() for step in range(3000): for repeat in range(20): frame = get_frame() if i % 5 == 0: images.save(cam.get_frame(), f"{im_save}/{i}.png") circles = get_circles(frame) x.append(circles[0]) current_time = time.time() - start_time c1.remove() c1 = get_plot_circles(circles) ax[0].add_artist(c1) im_artist.set_data(frame) ax[0].set_title(f"Elapsed Time: {current_time:.1f}, data: {len(x)//2}") freq, _ = np.histogram(x, bins=bins) for rect, h, in zip(hist, freq): rect.set_height(h) ax[1].set_ylim([0, max(freq)]) ax[2].set_ylim([0, len(x)]) plot.set_xdata(x) plot.set_ydata(np.arange(len(x)))
p1 = [333, 1318] p2 = [1784, 528] midpoint = np.array([p1[0] - p2[0], p1[1] - p2[1]]) h = h + midpoint[1] x = x + midpoint[0] m = (p2[1] - p1[1]) / (p2[0] - p1[0]) a = -atan(m) print(a) points = np.vstack((x, h)).T print(points.shape) points = rotate_points(points, midpoint, -a) print(points[0]) print(points[1]) points[:, 0] += -points[0, 0] + p1[0] points[:, 1] += -points[0, 1] + p1[1] points = np.int32(points) # points = points.reshape((points.shape[0], 1, points.shape[1])) # lines = [((a[0], b[0]), (a[1], b[1])) for a, b in zip(points[1:], points[:-1])] # print(lines) im = cv2.polylines(im, [points], False, images.YELLOW, 10) im = images.rotate(im, 30) # im = images.draw_contours(im, [points], images.YELLOW, 10) images.display(im) images.save(im, direc + 'boundary.jpeg') # plt.savefig(direc+'boundary.jpeg', quality=95, dpi=300) # plt.show()
vid = video.ReadVideo(vid_file) metadata = dataframes.load_metadata(data_file) print(metadata['boundary'].shape) start = vid.read_frame(0) middle = vid.read_frame(vid.num_frames // 2) end = vid.read_frame(vid.num_frames - 1) start = crop_then_mask(start) middle = crop_then_mask(middle) end = crop_then_mask(end) save_direc = "/media/data/Data/FirstOrder/Hysterisis/5Repeats/RedTrayDense/HexagonFigures" images.save(start, f'{save_direc}/start.png') images.save(middle, f'{save_direc}/middle.png') images.save(end, f'{save_direc}/end.png') new_corners = get_crop_region(start, metadata['boundary']) # start = images.draw_polygon(start, new_corners, color=images.GREEN, thickness=8) # middle = images.draw_polygon(middle, new_corners, color=images.GREEN, thickness=8) # end = images.draw_polygon(end, new_corners, color=images.GREEN, thickness=8) new_corners = np.hstack((new_corners, np.ones((6, 1))*3)) start = images.draw_circles(start, new_corners, color=images.GREEN) middle = images.draw_circles(middle, new_corners, color=images.GREEN) end = images.draw_circles(end, new_corners, color=images.GREEN) images.save(start, f'{save_direc}/start_hex.png') images.save(middle, f'{save_direc}/middle_hex.png')
with open(save_direc + 'bbox.txt', 'w') as f: f.writelines([ 'BBOX xmin, xmax, ymin, ymax', str(bbox.xmin), str(bbox.xmax), str(bbox.ymin), str(bbox.ymax) ]) frame = images.draw_polygon( frame, np.array([[bbox.xmin, bbox.ymin], [bbox.xmin, bbox.ymax], [bbox.xmax, bbox.ymax], [bbox.xmax, bbox.ymin]], dtype=np.float32), color=images.RED, thickness=2) images.save(frame, save_direc + 'im.png') down_df = down_data.df[down_data.df.x.between(bbox.xmin, bbox.xmax)] down_df = down_df[down_df.y.between(bbox.ymin, bbox.ymax)] up_df = up_data.df[up_data.df.x.between(bbox.xmin, bbox.xmax)] up_df = up_df[up_df.y.between(bbox.ymin, bbox.ymax)] # down_duty, down_density = density_duty_mapped(down_df) # up_duty, up_density = density_duty_mapped(up_df) down_duty, down_density = density_duty_mapped(down_df) up_duty, up_density = density_duty_mapped(up_df) # np.savetxt(save_direc+'duty_down_rate={}'.format(rate), # down_duty)
from labequipment import shaker from labvision import camera, images import time s = shaker.Shaker() cam_num = camera.guess_camera_number() cam = camera.Camera(cam_num=cam_num) save_dir = "/media/data/Data/August2020/balance_test/" for i in range(20): s.ramp(650, 600, 0.2) im = cam.get_frame() images.save(im, save_dir + '{}.png'.format(i)) time.sleep(5)
def save_img(self): home = os.getenv("HOME") filename, ok = QFileDialog.getSaveFileName(self, "", home + "/Pictures/",self.tr("*.jpg;; *.png;; *.tiff")) if filename: img = self.readvid.read_frame(n=self.framenum_slider.value) save(img, filename)