Beispiel #1
0
    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))
Beispiel #2
0
    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
Beispiel #3
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
Beispiel #4
0
    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