コード例 #1
0
class SpecificWorker(GenericWorker):
    def __init__(self, proxy_map):
        super(SpecificWorker, self).__init__(proxy_map)
        self.timer.timeout.connect(self.compute)
        self.Period = 20
        self.timer.start(self.Period)
        self.visualizer = Visualizer()
        self.cam_timer = Timer(fps=30)
        self.pose_timer = Timer(fps=10)
        self.inference_timer = Timer(fps=10)
        self.print_timer = Timer(fps=0.5)

        self.camera_image = None
        self.img_restored = None
        self.skeleton2d = None
        self.skeleton3d = None

    def setParams(self, params):
        return True

    def adjustSkeleton(self, skeleton):
        # adjust the data to fit the activity recognition inference requirements
        skeleton = np.swapaxes(skeleton, 0, 1)
        skel_copy = np.copy(skeleton)
        torso = (skel_copy[:, 8] + skel_copy[:, 6]) / 2
        skeleton = skeleton[:, _joints_order_cad]
        skeleton[:, 2] = torso
        # pose estimator return values in meters, activity recognition expects values in mm
        skeleton = skeleton * 1000
        # in CAD-60 left and right sides are mirrored and z increases in depth direction
        skeleton[0, :] *= -1
        skeleton[1, :] *= -1
        skeleton[2, :] *= -1
        # skeleton[2, 3:] += 2000
        return skeleton

    @QtCore.Slot()
    def compute(self):
        now = current_milli_time()
        cam_ready = self.cam_timer.isReady(now)
        if cam_ready:
            try:
                self.camera_image = self.camerasimple_proxy.getImage()
                arr = np.fromstring(self.camera_image.image, np.uint8)
                self.img_restored = np.reshape(
                    arr, (self.camera_image.width, self.camera_image.height,
                          self.camera_image.depth))
            except Ice.Exception as e:
                traceback.print_exc()
                print(e)

        if self.pose_timer.isReady(now):
            skeleton2d, skeleton3d = self.poseestimation_proxy.getSkeleton(
                self.img_restored.data, [
                    self.camera_image.width, self.camera_image.height,
                    self.camera_image.depth
                ])

            self.skeleton2d = np.asarray(skeleton2d)
            self.skeleton3d = np.asarray(skeleton3d, dtype=np.float32)
            self.skeleton3d = self.adjustSkeleton(skeleton3d)

        if cam_ready:
            self.visualizer.add_img(self.img_restored)
            if self.skeleton2d is not None:
                self.visualizer.add_point_2d(self.skeleton2d, (255, 0, 0))
            self.visualizer.show_all_imgs(pause=False)

        if self.inference_timer.isReady(now):
            ready = self.activityrecognition_proxy.addSkeleton(self.skeleton3d)
            if ready and self.print_timer.isReady(now):
                activity = self.activityrecognition_proxy.getCurrentActivity()
                print
                try:
                    activity = json.loads(activity)
                    for clazz, prob in sorted(activity.items(),
                                              key=lambda x: float(x[1]),
                                              reverse=True):
                        print(clazz + ': ' + prob)
                except:
                    print(activity)

        return True