def run(self): print(" Start capture ...") dmcam.cap_start(dev) # blocking code goes here self.run = True while self.run: global f_dist, f_gray, frame_data, f_mutex if dev is None: time.sleep(0.5) # get one frame finfo = dmcam.frame_t() ret = dmcam.cap_get_frames(dev, 1, frame_data, finfo) # will blocking wait # ret = dmcam.cap_get_frame(dev, frame_data, None) # print("get %d frames" % ret) if ret > 0: w = finfo.frame_info.width h = finfo.frame_info.height # print(" frame @ %d, %dx%d (%d)" % # (finfo.frame_info.frame_idx, # finfo.frame_info.width, # finfo.frame_info.height, # finfo.frame_info.frame_size)) f_mutex.lock() dist_cnt, f_dist = dmcam.frame_get_distance(dev, w * h, frame_data, finfo.frame_info) gray_cnt, f_gray = dmcam.frame_get_gray(dev, w * h, frame_data, finfo.frame_info) if dist_cnt != w * h: f_dist = None if gray_cnt != w * h: f_gray = None f_mutex.unlock() self.frameReadySignal.emit(0) self.captureDoneSignal.emit(int(self.run))
def poll_frame(self): finfo = dmcam.frame_t() ret = dmcam.cap_get_frame(self.dev, self.frame_data, finfo) if ret > 0: w = finfo.frame_info.width h = finfo.frame_info.height _, frame_dist = dmcam.frame_get_distance(self.dev, w * h, self.frame_data, finfo.frame_info) _, frame_gray = dmcam.frame_get_gray(self.dev, w * h, self.frame_data, finfo.frame_info) self.frame_dist.append(frame_dist.reshape(h, w)) self.frame_gray.append(frame_gray.reshape(h, w)) if len(self.frame_dist) > 4: self.frame_dist.pop(0) if len(self.frame_gray) > 4: self.frame_gray.pop(0) self.frame_cnt += 1 return ret > 0
def tof_main(head_alarm): """ ToF 主函数 """ finfo = dmcam.frame_t() ret = dmcam.cap_get_frames(dev, 1, f, finfo) # print("get %d frames" % ret) if ret > 0: w = finfo.frame_info.width h = finfo.frame_info.height dist_cnt, dist = dmcam.frame_get_distance(dev, w * h, f, finfo.frame_info) gray_cnt, gray = dmcam.frame_get_gray(dev, w * h, f, finfo.frame_info) if dist_cnt == w * h: # ----------------------------------------- dep0 = (dist.reshape(h, w) * 1000) Z = gray.reshape(h, w) img_dep = cv2.convertScaleAbs(dep0, None, 1 / 16) img_to_pred = img_dep[:, cut_edge:320 - cut_edge] img_to_pred = cv2.merge([img_to_pred] * 3) img_show = img_to_pred.copy() # cv2.imwrite('ToF'+'/dep_{}.png'.format(time.time()),img_show) predict_label = 0 if use_CNN_model: img_to_pred = np.expand_dims(img_to_pred, axis=0) y_pred = model.predict(img_to_pred)[0] if head_alarm == 1: y_pred[1] += 0.2 predict_label = np.argmax(y_pred) max_prob = np.max(y_pred) if max_prob < 0.55: predict_label = 0 show_label = dl.after_delay(predict_label) return img_show, show_label
ret = dmcam.cap_get_frames(dev, 1, f, finfo) # print("get %d frames" % ret) if ret > 0: print(" frame @ %d, %dx%d (%d)" % (finfo.frame_info.frame_idx, finfo.frame_info.width, finfo.frame_info.height, finfo.frame_info.frame_size)) # print the first 16bytes of the frame # print([hex(n) for n in f][:16]) w = finfo.frame_info.width h = finfo.frame_info.height gray_cnt = 0 dist_cnt, dist = dmcam.frame_get_distance(dev, w * h, f, finfo.frame_info) gray_cnt, gray = dmcam.frame_get_gray(dev, w * h, f, finfo.frame_info) if dist_cnt != w * h: dist = None if gray_cnt != w * h: gray = None # dist = dmcam.raw2dist(int(len(f) / 8), f) # gray = dmcam.raw2gray(int(len(f) / 4), f) # amb = dmcam.raw2amb(int(len(f) / 4), f) # --- show in TL sub-window --- if gray is not None: Z = gray.reshape(h, w, 1) Z = (255.0 * Z / Z.max()).astype(int) # convert to 320x240x3 gray