Пример #1
0
    def get_camera_images(self):
        '''
            截取摄像头图片,存入全局变量中
        '''
        reactTimer = MyTimer()
        waitTimer = MyTimer()
        reactTime = 0.5
        imageSize = (640, 480)
        images = []
        reactTime = int(reactTime * 1000)
        reactTimer.start(reactTime)
        waitTime = 100

        while reactTimer.isTimeOut() == False:
            waitTimer.start(waitTime)
            flag, image = self.cap.read()
            image = cv2.resize(image, imageSize)
            images.append(image)
            waitTimer.waitTimeOut()

        gl.GL_Images = images
        gl.GL_Images_Length = images.__len__()
        print("length={}".format(images.__len__()))
Пример #2
0
    def run(self):
        #获取全局变量数据并更新全局数据
        self.info = gl.GL_VInfo
        self.model = gl.GL_Model
        self.isEnd = False
        gl.GL_TalScore = 0
        #清空全局队列
        while gl.GL_CurScoreQueue.empty() == False:
            gl.GL_CurScoreQueue.get()

        startTimer = MyTimer()
        startTimer.start(1000)  #开始计时
        temp = 0

        for oneInfo in self.info:

            timeid = oneInfo['timeid']  #演示视频播放时间ms
            reactime = float(oneInfo['reactime'])  #反应时间
            poseSocre = oneInfo['score']  #分数
            posepoints = oneInfo['posepoints']  #关节点信息
            posepoints = mxnet.nd.array(posepoints)  #类型转换
            temp += 1
            print('*************这是第{}次'.format(temp))
            print("timeid={}".format(timeid))
            startTimer.resetWaitTime(timeid)  #设置等待时间
            startTimer.waitTimeOut()  #等待时间,相当于 sleep

            self.now_to_getImages.emit()  #发送截取视频图像的信号

            #等待截取的图片存入全局变量
            while bool(gl.GL_Images == []) | bool(
                    gl.GL_Images.__len__() < gl.GL_Images_Length):
                if self.isEnd == True:  #当需要线程关闭时,退出
                    break
                time.sleep(0.02)
            if self.isEnd == True:  #当需要线程关闭时,退出
                break

            images = gl.GL_Images  #获取全局变量 (截取的图片list)
            #跟新全局变量数据
            gl.GL_Images = []
            gl.GL_Images_Length = 0

            use_gpu = False
            maxScore = 0
            score = 0

            #给每一个图片匹配示范骨架,获取最大分数
            for image in images:
                if self.isEnd == True:
                    break
                playerPre, playerImage = net.detection(self.model, image,
                                                       use_gpu)  #模型预测骨架
                if playerPre != None:
                    playerDis, playerSkeleton = tools.normalization(
                        playerPre['pred_coords'][0])  #结果归一化
                    score = tools.matching(playerSkeleton,
                                           posepoints,
                                           use_gpu=use_gpu)  #计算匹配结果
                if maxScore < score:
                    maxScore = score

            if self.isEnd == True:
                break
            print("mxScore={}".format(maxScore))

            #当分数超过10,认定匹配成功
            if maxScore > 10:
                #将分数更新在全局变量中
                gl.GL_CurScoreQueue.put(poseSocre)
                gl.GL_TalScore += poseSocre

                self.update_date.emit(poseSocre)  #发送信号,传递动作得分
            else:
                self.update_date.emit(0)  #发送信号,传递动作得分

        startTimer.end()