Beispiel #1
0
        def onFileSelected(filename):
            if not filename.lower().endswith('.mhm'):
                filename += '.mhm'

            path = os.path.normpath(os.path.join(modelPath, filename))

            dir, name = os.path.split(path)
            name, ext = os.path.splitext(name)

            if not os.path.exists(dir):
                os.makedirs(dir)

            # Save the thumbnail

            ((x0,y0,z0),(x1,y1,z1)) = self.selection.mesh.calcBBox()
            x0,y0,z0 = gui3d.app.guiCamera.convertToScreen(x0, y0, 0)
            x1,y1,z1 = gui3d.app.guiCamera.convertToScreen(x1, y1, 0)
            log.debug('grab rectangle: %d %d %d %d', x0, y0, x1, y1)
            mh.grabScreen(int(x0+1), int(y1+1), int(x1-x0-1), int(y0-y1-1), os.path.join(dir, name + '.thumb'))

            # Save the model

            human = gui3d.app.selectedHuman
            human.save(path, name)
            gui3d.app.modified = False
            
            gui3d.app.setFilenameCaption(filename)
            gui3d.app.setFileModified(False)

            mh.changeCategory('Modelling')
Beispiel #2
0
 def screenShot(self,fileName):
     log.message("SCRIPT: screenShot(" + fileName + ")")
     width = G.windowWidth;
     height = G.windowHeight;
     width = width - 3;
     height = height - 3;
     mh.grabScreen(1,1,width,height,fileName)
Beispiel #3
0
        def onClicked(event):
            filenameImage='F:/Aotu3DImage/'+str(time.strftime("%Y-%m-%d_%H.%M.%S"))+'.png'
            filenameIma='F:/Aotu3DImage/'+str(time.strftime("%Y-%m-%d_%H.%M.%S"))+'.png'
            width = G.windowWidth;
            height = G.windowHeight;
            width = width - 3;
            height = height - 3;
            log.message(filenameImage)
            mh.grabScreen(0,0,width,height,filenameImage)
            img=cv2.imread(filenameImage)
            height1,width1=img.shape[:2]
            #print height,width
            for i in range(height1):
                for j in range(width1):
                    r,b,g= img[i][j]
                    rb=abs(r-b)
                    rg=abs(r-g)
                    bg=abs(b-g)
                    if rb<10 and rg<10 and bg<10:
                        img[i][j]=[0,0,0]
                    else:
                        img[i][j]=[255,255,255]




            cv2.imwrite(filenameIma,img)
 def screenShot(self, fileName):
     log.message("SCRIPT: screenShot(" + fileName + ")")
     width = G.windowWidth
     height = G.windowHeight
     width = width - 3
     height = height - 3
     mh.grabScreen(1, 1, width, height, fileName)
Beispiel #5
0
 def grabScreen(self):
     import datetime
     grabPath = mh.getPath('grab')
     if not os.path.exists(grabPath):
         os.makedirs(grabPath)
     # TODO: use bbox to choose grab region
     grabName = datetime.datetime.now().strftime('grab_%Y-%m-%d_%H.%M.%S.png')
     mh.grabScreen(0, 0, G.windowWidth, G.windowHeight, os.path.join(grabPath, grabName))
Beispiel #6
0
 def grabScreen(self):
     import datetime
     grabPath = mh.getPath('grab')
     if not os.path.exists(grabPath):
         os.makedirs(grabPath)
     grabName = datetime.datetime.now().strftime('grab_%Y-%m-%d_%H.%M.%S.png')
     filename = os.path.join(grabPath, grabName)
     mh.grabScreen(0, 0, G.windowWidth, G.windowHeight, filename)
     self.status("Screengrab saved to %s", filename)
Beispiel #7
0
 def grabScreen(self):
     import datetime
     grabPath = mh.getPath('grab')
     if not os.path.exists(grabPath):
         os.makedirs(grabPath)
     # TODO: use bbox to choose grab region
     grabName = datetime.datetime.now().strftime(
         'grab_%Y-%m-%d_%H.%M.%S.png')
     mh.grabScreen(0, 0, G.windowWidth, G.windowHeight,
                   os.path.join(grabPath, grabName))
Beispiel #8
0
        def onClicked(event):
            width = G.windowWidth;
            height = G.windowHeight;
            width = width - 3;
            height = height - 3;
            log.message(str(width))
            log.message(str(height))
            for value in range(5,100,5):
                chushihua()
                a5[0]=value-50
                bvhanniu()
                gui3d.app.do(AotuPose1("Change pose", self, self.currentPose, fileout))
                #anim = self.loadBvh(fileout, convertFromZUp="auto")
                filenameImage='F:/Aotu3DImage/'+str(time.strftime("%Y-%m-%d_%H.%M.%S"))+'.png'
                filenameIma='F:/Aotu3DImage/'+str(time.strftime("%Y-%m-%d_%H.%M.%S"))+'.png'
                width = G.windowWidth;
                height = G.windowHeight;
                width = width - 3;
                height = height - 3;
                #log.message(filenameImage)
                mh.grabScreen(0,0,width,height,filenameImage)
                img=cv2.imread(filenameImage)
                height1,width1=img.shape[:2]
            #print height,width
                for i in range(height1):
                    for j in range(width1):
                        r,b,g= img[i][j]
                        rb=abs(r-b)
                        rg=abs(r-g)
                        bg=abs(b-g)
                        if rb<10 and rg<10 and bg<10:
                            img[i][j]=[0,0,0]
                        else:
                            img[i][j]=[255,255,255]




                imsave=normalize.Normalize(img)
                cv2.imwrite(filenameIma,imsave)
                cv2.imshow("img",imsave)
                cv2.waitKey(10)
                delt5=onpicture()
                if delt5<=deltvalue5[0]:
                    deltvalue5[0]=delt5
                    deltva5[0]=value-50


            num5=(deltva5[0]+50)/5
            result=cv2.imread(fileResult+str(num5)+'.png')
            cv2.imshow("Result",result)
            cv2.waitKey(0)
            log.message(deltvalue5)
            log.message(num5)
def saveMHM(path):
    """Save the .mhm and the thumbnail to the selected save path."""
    path = pathToUnicode(os.path.normpath(path))

    savedir = os.path.dirname(path)
    if not os.path.exists(savedir):
        os.makedirs(savedir)

    name = os.path.splitext(os.path.basename(path))[0]

    # Save square sized thumbnail
    size = min(G.windowWidth, G.windowHeight)
    img = mh.grabScreen(
        (G.windowWidth - size) / 2, (G.windowHeight - size) / 2, size, size)

    # Resize thumbnail to max 128x128
    if size > 128:
        img.resize(128, 128)
    img.save(os.path.join(savedir, name + '.thumb'))

    # Save the model
    G.app.selectedHuman.save(path, name)
    #G.app.clearUndoRedo()

    # Remember last save folder
    gui3d.app.setSetting('savedir', os.path.dirname(path))

    G.app.status('Your model has been saved to %s.', path)
Beispiel #10
0
def saveMHM(path):
    """Save the .mhm and the thumbnail to the selected save path."""
    path = pathToUnicode(os.path.normpath(path))

    savedir = os.path.dirname(path)
    if not os.path.exists(savedir):
        os.makedirs(savedir)

    name = os.path.splitext(os.path.basename(path))[0]

    # Save square sized thumbnail
    size = min(G.windowWidth, G.windowHeight)
    img = mh.grabScreen((G.windowWidth - size) // 2,
                        (G.windowHeight - size) // 2, size, size)

    # Resize thumbnail to max 128x128
    if size > 128:
        img.resize(128, 128)
    img.save(os.path.join(savedir, name + '.thumb'))

    # Save the model
    G.app.selectedHuman.save(path)
    #G.app.clearUndoRedo()

    # Remember last save folder
    gui3d.app.setSetting('savedir', formatPath(os.path.dirname(path)))

    G.app.status('Your model has been saved to %s.', path)
 def makeImage(self,rot):
     try:
         self.human.setRotation(rot)
         mh.redraw()
         ret = mh.grabScreen(0, 0, G.windowWidth, G.windowHeight).data
         self.human.setRotation([0, 0, 0])
         mh.redraw()
         return ret
     except Exception as e:
         return None
        def onFileSelected(filename):
            
            modelPath = mh.getPath('models')
            if not os.path.exists(modelPath):
                os.makedirs(modelPath)

            tags = filename

            # Save the thumbnail

            leftTop = self.selection.getPosition()
            mh.grabScreen(int(leftTop[0]+1), int(leftTop[1]+1), int(self.selection.width-1), int(self.selection.height-1), os.path.join(modelPath, filename + '.bmp'))

            # Save the model

            human = gui3d.app.selectedHuman
            human.save(os.path.join(modelPath, filename + '.mhm'), tags)
            
            gui3d.app.setCaption("MakeHuman - [%s]" % filename)

            gui3d.app.switchCategory('Modelling')
Beispiel #13
0
def my_render(settings=None):
    if settings is None:
        settings = {'AA': True, 'lightmapSSS': False, 'scene': G.app.scene, 'dimensions': (230, 230)}

    if settings['lightmapSSS']:
        human = G.app.selectedHuman
        material_backup = material.Material(human.material)

        diffuse = imgop.Image(data=human.material.diffuseTexture)
        lmap = projection.mapSceneLighting(settings['scene'], border=human.material.sssRScale)
        lmapG = imgop.blurred(lmap, human.material.sssGScale, 13)
        lmapR = imgop.blurred(lmap, human.material.sssRScale, 13)
        lmap = imgop.compose([lmapR, lmapG, lmap])

        if not diffuse.isEmpty:
            lmap = imgop.resized(lmap, diffuse.width, diffuse.height, filter=image.FILTER_BILINEAR)
            lmap = imgop.multiply(lmap, diffuse)
            lmap.sourcePath = "Internal_Renderer_Lightmap_SSS_Texture"

        human.material.diffuseTexture = lmap
        human.configureShading(diffuse=True)
        human.shadeless = True

    if not mh.hasRenderToRenderbuffer():
        img = mh.grabScreen(0, 0, G.windowWidth, G.windowHeight)
        alphaImg = None
    else:
        width, height = settings['dimensions']
        if settings['AA']:
            width *= 2
            height *= 2

            img = mh.renderToBuffer(width, height)
            alphaImg = mh.renderAlphaMask(width, height)
            img = imgop.addAlpha(img, imgop.getChannel(alphaImg, 0))

        if settings['AA']:
            img = img.resized(width/2, height/2, filter=image.FILTER_BILINEAR)
            img.data[:, :, :] = img.data[:, :, (2, 1, 0, 3)]

    if settings['lightmapSSS']:
        human.material = material_backup

    return img
Beispiel #14
0
    def saveMHM(self, filename):
        if not filename.lower().endswith('.mhm'):
            filename += '.mhm'

        modelPath = mh.getPath('models')
        path = os.path.normpath(os.path.join(modelPath, filename))

        dir, name = os.path.split(path)
        name, ext = os.path.splitext(name)

        if not os.path.exists(dir):
            os.makedirs(dir)

        # Save square sized thumbnail
        size = min(G.windowWidth, G.windowHeight)
        img = mh.grabScreen((G.windowWidth - size) / 2,
                            (G.windowHeight - size) / 2, size, size)

        # Resize thumbnail to max 128x128
        if size > 128:
            img.resize(128, 128)
        img.save(os.path.join(dir, name + '.thumb'))

        # Save the model
        human = gui3d.app.selectedHuman
        human.save(path, name)
        gui3d.app.modified = False
        #gui3d.app.clearUndoRedo()

        gui3d.app.setFilenameCaption(filename)
        gui3d.app.setFileModified(False)

        self.parent.tasksByName['Load'].fileentry.text = dir
        self.parent.tasksByName['Load'].fileentry.edit.setText(dir)
        self.parent.tasksByName['Load'].fileentry.setDirectory(dir)

        mh.changeCategory('Modelling')
Beispiel #15
0
    def __init__(self,
                 category,
                 name,
                 label=None,
                 saveName=None,
                 cameraView=None):
        if label is None:
            label = name.capitalize()
        if saveName is None:
            saveName = name

        super(Modifier1TaskView, self).__init__(category, name, label=label)

        self.saveName = saveName
        self.cameraFunc = _getCamFunc(cameraView)

        self.groupBoxes = OrderedDict()
        self.radioButtons = []
        self.sliders = []
        self.modifiers = {}

        self.categoryBox = self.addRightWidget(gui.GroupBox('Category'))
        self.groupBox = self.addLeftWidget(gui.StackedBox())

        self.showMacroStats = False
        self.human = gui3d.app.selectedHuman
        a = [0]
        deltvalue = [100]
        deltva = [0]
        box = self.addLeftWidget(gui.GroupBox(u'体型自动化'))
        self.aButton = box.addWidget(gui.Button(u'体型搜索'))
        self.bButton = box.addWidget(gui.Button(u'Test'))

        @self.bButton.mhEvent
        def onClicked(event):
            #img=cv2.imread('/home/smith/PycharmProjects/AutoMakeHuman/src/7_auto_human_body/data/MyAutoData/picture.png')
            #cv2.imshow("img", img)
            #cv2.waitKey(0)
            slider = self.sliders[0]
            slider.modifier.setValue(1)
            sli = modifierslider.ModifierSlider(slider.modifier)
            value = slider.modifier.getValue()
            valuesli = sli.getValue()
            # sli.onChanging(slider.modifier.getValue())
            action = humanmodifier.ModifierAction(slider.modifier, value,
                                                  valuesli, sli.update)
            G.app.do(action)

        def worker(sliders, stopSearch):
            log.message('start...')
            for slider in sliders:
                if (stopSearch):
                    stopSearch = False
                    break
                value = 0
                for valuenum in range(0, 101, 1):
                    if (stopSearch):
                        stopSearch = False
                        break
                    valuenums = valuenum / 100.000000
                    slider.update()
                    slider.modifier.setValue(valuenums)
                    log.message('slider modifiy value:' + str(valuenums))
                    sli = modifierslider.ModifierSlider(slider.modifier)
                    # value = slider.modifier.getValue()
                    valuesli = sli.getValue()
                    # #sli.onChanging(slider.modifier.getValue())
                    action = humanmodifier.ModifierAction(
                        slider.modifier, value, valuesli, sli.update)
                    log.message('before value:' + str(value))
                    # 以下更新场景代码均无效
                    if valuesli != value:
                        G.app.do(action)
                    else:
                        action.do()
                    #gui3d.app.do(action)
                    #G.app.do(action)
                    #G.app.redraw()
                    log.message('update views')
                    value = valuesli
                    filenameImage = fileAotupicture + '/' + str(
                        time.strftime("%Y-%m-%d_%H.%M.%S")) + '.png'
                    filenameIma = fileAotupicture + '/' + str(
                        time.strftime("%Y-%m-%d_%H.%M.%S")) + '.png'
                    filenameIma1 = fileAotupicture + '/result' + str(
                        time.strftime("%Y-%m-%d_%H.%M.%S")), '.png'
                    width = G.windowWidth
                    height = G.windowHeight
                    width1 = width - 3
                    height1 = height - 3
                    log.message('grab screen')
                    mh.grabScreen(0, 0, width, height, filenameImage)
                    img = cv2.imread(filenameImage)
                    height1, width1 = img.shape[:2]
                    # print height,width
                    for i in range(height1):
                        for j in range(width1):
                            r, b, g = img[i][j]
                            rb = abs(r - b)
                            rg = abs(r - g)
                            bg = abs(b - g)
                            if rb < 10 and rg < 10 and bg < 10:
                                img[i][j] = [0, 0, 0]
                            else:
                                img[i][j] = [255, 255, 255]
                    imsave = normalize.Normalize(img)
                    log.message('show normalize image')
                    try:
                        log.message('cv2 start')
                        cv2.imwrite(filenameIma, imsave)
                        # log.message('cv2 imwrite:'+filenameIma)
                        # newimg=cv2.imread(filenameIma)
                        # log.message('cv2 imread')
                        # cv2.imshow("img", imsave)
                        # log.message('cv2 imshow')
                        ## 60与电脑的刷新频率有关,如果<60刷新频率跟不上,则不会显示图像
                        # cv2.waitKey(60)
                        # cv2.destroyAllWindows()
                        # delt = onpicture()
                        imnew = cv2.imread(filepicture)
                        delt = findcontours.GetDeltValue(imsave, imnew)
                        log.message('delt value:' + str(delt))
                        if delt <= deltvalue[0]:
                            deltvalue[0] = delt
                            deltva[0] = valuenums
                    except Exception, e:
                        log.message(e)
                num = deltva[0] * 20 + 1
                # result = cv2.imread(fileResult + str(num) + '.png')
                # cv2.imshow("Result", result)
                # cv2.waitKey(0)
                log.message(deltvalue)
                log.message(num)

            slider.modifier.setValue(valuenums)
            # log.message(slider.modifier.getValue())
            sli = modifierslider.ModifierSlider(slider.modifier)
            value = slider.modifier.getValue()
            valuesli = sli.getValue()
            # sli.onChanging(slider.modifier.getValue())
            action = humanmodifier.ModifierAction(slider.modifier, value,
                                                  valuesli, sli.update)
            G.app.do(action)
            mh.grabScreen(0, 0, width, height, filenameImage)
            imgw = cv2.imread(filenameImage)
            height1, width1 = imgw.shape[:2]
            # print height,width
            for i in range(height1):
                for j in range(width1):
                    r, b, g = imgw[i][j]
                    rb = abs(r - b)
                    rg = abs(r - g)
                    bg = abs(b - g)
                    if rb < 10 and rg < 10 and bg < 10:
                        imgw[i][j] = [0, 0, 0]
                    else:
                        imgw[i][j] = [255, 255, 255]
            imsavew = normalize.Normalize(imgw)
            cv2.imwrite(filenameIma1, imsavew)
            # sli.resetValue()
            # syncSliders()
            # slider.modifier.human
            # enabled = getattr(slider.modifier.human, slider.enabledCondition)()
            # slider.setEnabled(str(2))
            # log.message(str(enabled))
            return
        def onClicked(event):
            log.message('start...')
            for slider in self.sliders:
                for valuenum in range(0,105,5):
                    valuenums=valuenum/100.000000
                    slider.update()
                    #log.message(slider.modifier.getValue())
                #if slider.enabledCondition:
                    #log.message(slider)
                    slider.modifier.setValue(valuenums)
                    #log.message(slider.modifier.getValue())
                    sli=modifierslider.ModifierSlider(slider.modifier)
                    value=slider.modifier.getValue()
                    valuesli=sli.getValue()
                    #sli.onChanging(slider.modifier.getValue())
                    action = humanmodifier.ModifierAction(slider.modifier, value, valuesli, sli.update)
                    log.message(str(valuesli))
                    log.message(str(value))
                    if valuesli != value:
                        G.app.do(action)
                    else:
                        action.do()
                    
                    filenameImage='F:/Aotu3DImage/'+str(time.strftime("%Y-%m-%d_%H.%M.%S"))+'.png'
                    filenameIma='F:/Aotu3DImage/'+str(time.strftime("%Y-%m-%d_%H.%M.%S"))+'.png'
                    filenameIma1='F:/Aotu3DImage/result'+str(time.strftime("%Y-%m-%d_%H.%M.%S")),'.png'
                    width = G.windowWidth;
                    height = G.windowHeight;
                    width1 = width - 3;
                    height1 = height - 3;
                #log.message(filenameImage)
                    mh.grabScreen(0,0,width,height,filenameImage)
                    img=cv2.imread(filenameImage)
                    height1,width1=img.shape[:2]
            #print height,width
                    for i in range(height1):
                        for j in range(width1):
                            r,b,g= img[i][j]
                            rb=abs(r-b)
                            rg=abs(r-g)
                            bg=abs(b-g)
                            if rb<10 and rg<10 and bg<10:
                                img[i][j]=[0,0,0]
                            else:
                                img[i][j]=[255,255,255]



                    imsave=normalize.Normalize(img)
                    cv2.imwrite(filenameIma,imsave)
                    #cv2.imshow("img",imsave)
                   # cv2.waitKey(10)
                    delt=onpicture()
                    log.message(str(delt))
                    if delt<=deltvalue[0]:
                        deltvalue[0]=delt
                        deltva[0]=valuenums

                num=deltva[0]*20+1
                result=cv2.imread(fileResult+str(num)+'.png')
                cv2.imshow("Result",result)
                cv2.waitKey(0)
                log.message(deltvalue)
                log.message(num)
            
            slider.modifier.setValue(valuenums)
            #log.message(slider.modifier.getValue())
            sli=modifierslider.ModifierSlider(slider.modifier)
            value=slider.modifier.getValue()
            valuesli=sli.getValue()
            #sli.onChanging(slider.modifier.getValue())
            action = humanmodifier.ModifierAction(slider.modifier, value, valuesli, sli.update)
            G.app.do(action)
            mh.grabScreen(0,0,width,height,filenameImage)
            imgw=cv2.imread(filenameImage)
            height1,width1=imgw.shape[:2]
            #print height,width
            for i in range(height1):
                for j in range(width1):
                    r,b,g= imgw[i][j]
                    rb=abs(r-b)
                    rg=abs(r-g)
                    bg=abs(b-g)
                    if rb<10 and rg<10 and bg<10:
                        imgw[i][j]=[0,0,0]
                    else:
                        imgw[i][j]=[255,255,255]



            imsavew=normalize.Normalize(imgw)
            cv2.imwrite(filenameIma1,imsavew)    
        def onClicked(event):
            log.message('start...')
            for slider in self.sliders:
                for valuenum in range(0, 105, 5):
                    valuenums = valuenum / 100.000000
                    slider.update()
                    # log.message(slider.modifier.getValue())
                    # if slider.enabledCondition:
                    # log.message(slider)
                    slider.modifier.setValue(valuenums)
                    # log.message(slider.modifier.getValue())
                    sli = modifierslider.ModifierSlider(slider.modifier)
                    value = slider.modifier.getValue()
                    valuesli = sli.getValue()
                    # sli.onChanging(slider.modifier.getValue())
                    action = humanmodifier.ModifierAction(slider.modifier, value, valuesli, sli.update)
                    log.message(str(valuesli))
                    log.message(str(value))
                    if valuesli != value:
                        G.app.do(action)
                    else:
                        action.do()

                    filenameImage = fileAotupicture + '/' + str(time.strftime("%Y-%m-%d_%H.%M.%S")) + '.png'
                    filenameIma = fileAotupicture + '/' + str(time.strftime("%Y-%m-%d_%H.%M.%S")) + '.png'
                    filenameIma1 = fileAotupicture + '/result' + str(time.strftime("%Y-%m-%d_%H.%M.%S")), '.png'
                    width = G.windowWidth;
                    height = G.windowHeight;
                    width1 = width - 3;
                    height1 = height - 3;
                    # log.message(filenameImage)
                    mh.grabScreen(0, 0, width, height, filenameImage)
                    img = cv2.imread(filenameImage)
                    height1, width1 = img.shape[:2]
                    # print height,width
                    for i in range(height1):
                        for j in range(width1):
                            r, b, g = img[i][j]
                            rb = abs(r - b)
                            rg = abs(r - g)
                            bg = abs(b - g)
                            if rb < 10 and rg < 10 and bg < 10:
                                img[i][j] = [0, 0, 0]
                            else:
                                img[i][j] = [255, 255, 255]

                    imsave = normalize.Normalize(img)
                    cv2.imwrite(filenameIma, imsave)
                    # cv2.imshow("img",imsave)
                    # cv2.waitKey(10)
                    delt = onpicture()
                    log.message(str(delt))
                    if delt <= deltvalue[0]:
                        deltvalue[0] = delt
                        deltva[0] = valuenums

                num = deltva[0] * 20 + 1
                result = cv2.imread(fileResult + str(num) + '.png')
                cv2.imshow("Result", result)
                cv2.waitKey(0)
                log.message(deltvalue)
                log.message(num)

            slider.modifier.setValue(valuenums)
            # log.message(slider.modifier.getValue())
            sli = modifierslider.ModifierSlider(slider.modifier)
            value = slider.modifier.getValue()
            valuesli = sli.getValue()
            # sli.onChanging(slider.modifier.getValue())
            action = humanmodifier.ModifierAction(slider.modifier, value, valuesli, sli.update)
            G.app.do(action)
            mh.grabScreen(0, 0, width, height, filenameImage)
            imgw = cv2.imread(filenameImage)
            height1, width1 = imgw.shape[:2]
            # print height,width
            for i in range(height1):
                for j in range(width1):
                    r, b, g = imgw[i][j]
                    rb = abs(r - b)
                    rg = abs(r - g)
                    bg = abs(b - g)
                    if rb < 10 and rg < 10 and bg < 10:
                        imgw[i][j] = [0, 0, 0]
                    else:
                        imgw[i][j] = [255, 255, 255]

            imsavew = normalize.Normalize(imgw)
            cv2.imwrite(filenameIma1, imsavew)
Beispiel #18
0
        def onClicked(event):
            #chushihua()
            width = G.windowWidth;
            height = G.windowHeight;
            width = width - 3;
            height = height - 3;
            log.message(str(width))
            log.message(str(height))
            
            OrigalIm = cv2.imread(filepicture) #先读目标图像
            for value in range(61,71,10):
                a8[0]=value-50
                bvhanniu()
                gui3d.app.do(AotuPose1("Change pose", self, self.currentPose, fileout))
                anim = self.loadBvh(fileout, convertFromZUp="auto")
                #cv2.waitKey(10)
                #filenameImage=fileResult+str(time.strftime("%Y-%m-%d_%H.%M.%S"))+'.png'
                filenameImage=fileResult+str(a8[0])+'DegreeLLeg.png'
                #filenameIma=fileResult+str(time.strftime("%Y-%m-%d_%H.%M.%S"))+'.png'
                filenameIma=fileResult+str(a8[0])+'DegreeLLeg.png'
                width = G.windowWidth;
                height = G.windowHeight;
                
                Xdel=600   #原图为800x600  减除后为200x150
                Ydel=450
                width = width - Xdel;
                height = height - Ydel;
                #log.message(filenameImage)
                #mh.grabScreen(300,225,width,height,filenameImage)  #存盘
                
                mh.grabScreen(Xdel/2,Ydel/2,width,height,filenameImage)  #不存盘,全在内在操作,提高速度
                log.message("Saved screengrab to %s", filenameImage)
           
                img=cv2.imread(filenameImage)  #存盘
                height1,width1=img.shape[:2]
                #print height,width
                for i in range(height1):
                    for j in range(width1):
                        r,b,g= img[i][j]
                        rb=abs(r-b)
                        rg=abs(r-g)
                        bg=abs(b-g)
                        if rb<10 and rg<10 and bg<10:
                            img[i][j]=[0,0,0]
                        else:
                            img[i][j]=[255,255,255]

                imsave=normalize.Normalize(img)
                cv2.imwrite(filenameIma,imsave)
                #cv2.imshow("img",imsave)
                #cv2.waitKey(10)
                #delt8=findcontours.GetDeltValue(imsave,OrigalIm)  #onpicture()
                delt8=findcontours.CalDiff(imsave,OrigalIm)
                log.debug('delt8 (%d Degree): = %f', a8[0], delt8)
                if delt8<=deltvalue8[0]:
                    deltvalue8[0]=delt8
                    deltva8[0]=value-50
                    filenameImaFit=filenameIma
                    bvhanniu(filepicbvh)
                    gui3d.app.do(AotuPose1("Change pose", self, self.currentPose, filepicbvh))
                    anim = self.loadBvh(filepicbvh, convertFromZUp="auto")
                    imsavefit=imsave

            gui3d.app.do(AotuPose1("Change pose", self, self.currentPose, filepicbvh))
            anim = self.loadBvh(filepicbvh, convertFromZUp="auto")
            a8[0]= deltva8[0]  #需要更新,不然后面姿态重置了
            bvhanniu()
            num1=(deltva8[0]+50)/5
            #result=cv2.imread(fileResult+str(num1)+'.png')
            #result=cv2.imread(filenameImaFit)
            result =imsavefit
            result2=cv2.imread(filepicture)            
            cv2.imshow("Result",result)
            cv2.imshow("Original",result2)            
            #cv2.waitKey(10)
            log.message(deltvalue8)
            log.message(num1)
            imsavefit = None
Beispiel #19
0
def Render(settings):
    progress = Progress.begin()
    
    if not mh.hasRenderToRenderbuffer():
        settings['dimensions'] = (G.windowWidth, G.windowHeight)

    if settings['lightmapSSS']:
        progress(0, 0.05, "Storing data")
        import material
        human = G.app.selectedHuman
        materialBackup = material.Material(human.material)

        progress(0.05, 0.1, "Projecting lightmaps")
        diffuse = imgop.Image(data = human.material.diffuseTexture)
        lmap = projection.mapSceneLighting(
            settings['scene'], border = human.material.sssRScale)
        progress(0.1, 0.4, "Applying medium scattering")
        lmapG = imgop.blurred(lmap, human.material.sssGScale, 13)
        progress(0.4, 0.7, "Applying high scattering")
        lmapR = imgop.blurred(lmap, human.material.sssRScale, 13)
        lmap = imgop.compose([lmapR, lmapG, lmap])
        if not diffuse.isEmpty:
            progress(0.7, 0.8, "Combining textures")
            lmap = imgop.resized(lmap, diffuse.width, diffuse.height, filter=image.FILTER_BILINEAR)
            progress(0.8, 0.9)
            lmap = imgop.multiply(lmap, diffuse)
        lmap.sourcePath = "Internal_Renderer_Lightmap_SSS_Texture"

        progress(0.9, 0.95, "Setting up renderer")
        human.material.diffuseTexture = lmap
        human.configureShading(diffuse = True)
        human.shadeless = True
        progress(0.95, 0.98, None)
    else:
        progress(0, 0.99, None)
        
    if not mh.hasRenderToRenderbuffer():
        # Limited fallback mode, read from screen buffer
        log.message("Fallback render: grab screen")
        img = mh.grabScreen(0, 0, G.windowWidth, G.windowHeight)
        alphaImg = None
    else:
        # Render to framebuffer object
        renderprog = Progress()
        renderprog(0, 0.99 - 0.59 * settings['AA'], "Rendering")
        width, height = settings['dimensions']
        log.message("Rendering at %sx%s", width, height)
        if settings['AA']:
            width = width * 2
            height = height * 2
        img = mh.renderToBuffer(width, height)
        alphaImg = mh.renderAlphaMask(width, height)
        img = imgop.addAlpha(img, imgop.getChannel(alphaImg, 0))

        if settings['AA']:
            renderprog(0.4, 0.99, "AntiAliasing")
            # Resize to 50% using bi-linear filtering
            img = img.resized(width/2, height/2, filter=image.FILTER_BILINEAR)
            # TODO still haven't figured out where components get swapped, but this hack appears to be necessary
            img.data[:,:,:] = img.data[:,:,(2,1,0,3)]
        renderprog.finish()

    if settings['lightmapSSS']:
        progress(0.98, 0.99, "Restoring data")
        human.material = materialBackup

    progress(1, None, 'Rendering complete')

    gui3d.app.getCategory('Rendering').getTaskByName('Viewer').setImage(img)
    mh.changeTask('Rendering', 'Viewer')
    gui3d.app.statusPersist('Rendering complete')
Beispiel #20
0
def Render(settings):
    progress = Progress.begin()

    if not mh.hasRenderToRenderbuffer():
        settings['dimensions'] = (G.windowWidth, G.windowHeight)

    if settings['lightmapSSS']:
        progress(0, 0.05, "Storing data")
        import material
        human = G.app.selectedHuman
        materialBackup = material.Material(human.material)

        progress(0.05, 0.1, "Projecting lightmaps")
        diffuse = imgop.Image(data=human.material.diffuseTexture)
        lmap = projection.mapSceneLighting(settings['scene'],
                                           border=human.material.sssRScale)
        progress(0.1, 0.4, "Applying medium scattering")
        lmapG = imgop.blurred(lmap, human.material.sssGScale, 13)
        progress(0.4, 0.7, "Applying high scattering")
        lmapR = imgop.blurred(lmap, human.material.sssRScale, 13)
        lmap = imgop.compose([lmapR, lmapG, lmap])
        if not diffuse.isEmpty:
            progress(0.7, 0.8, "Combining textures")
            lmap = imgop.resized(lmap,
                                 diffuse.width,
                                 diffuse.height,
                                 filter=image.FILTER_BILINEAR)
            progress(0.8, 0.9)
            lmap = imgop.multiply(lmap, diffuse)
        lmap.sourcePath = "Internal_Renderer_Lightmap_SSS_Texture"

        progress(0.9, 0.95, "Setting up renderer")
        human.material.diffuseTexture = lmap
        human.configureShading(diffuse=True)
        human.shadeless = True
        progress(0.95, 0.98, None)
    else:
        progress(0, 0.99, None)

    if not mh.hasRenderToRenderbuffer():
        # Limited fallback mode, read from screen buffer
        log.message("Fallback render: grab screen")
        img = mh.grabScreen(0, 0, G.windowWidth, G.windowHeight)
        alphaImg = None
    else:
        # Render to framebuffer object
        renderprog = Progress()
        renderprog(0, 0.99 - 0.59 * settings['AA'], "Rendering")
        width, height = settings['dimensions']
        log.message("Rendering at %sx%s", width, height)
        if settings['AA']:
            width = width * 2
            height = height * 2
        img = mh.renderToBuffer(width, height)
        alphaImg = mh.renderAlphaMask(width, height)
        img = imgop.addAlpha(img, imgop.getChannel(alphaImg, 0))

        if settings['AA']:
            renderprog(0.4, 0.99, "AntiAliasing")
            # Resize to 50% using bi-linear filtering
            img = img.resized(width / 2,
                              height / 2,
                              filter=image.FILTER_BILINEAR)
            # TODO still haven't figured out where components get swapped, but this hack appears to be necessary
            img.data[:, :, :] = img.data[:, :, (2, 1, 0, 3)]
        renderprog.finish()

    if settings['lightmapSSS']:
        progress(0.98, 0.99, "Restoring data")
        human.material = materialBackup

    progress(1, None, 'Rendering complete')

    gui3d.app.getCategory('Rendering').getTaskByName('Viewer').setImage(img)
    mh.changeTask('Rendering', 'Viewer')
    gui3d.app.statusPersist('Rendering complete')
Beispiel #21
0
 def grabScreen(self):
     grabPath = mh.getPath('grab')
     if not os.path.exists(grabPath):
         os.makedirs(grabPath)
     # TODO: use bbox to choose grab region
     mh.grabScreen(0, 0, G.windowWidth, G.windowHeight, os.path.join(grabPath, 'grab.png'))
Beispiel #22
0
def Render(settings):
    progress = Progress.begin()

    if not mh.hasRenderToRenderbuffer():
        settings['dimensions'] = (G.windowWidth, G.windowHeight)

    if settings['lightmapSSS']:
        progress(0, 0.05, "Storing data")
        import material
        human = G.app.selectedHuman
        materialBackup = material.Material(human.material)

        progress(0.05, 0.1, "Projecting lightmaps")
        diffuse = imgop.Image(data=human.material.diffuseTexture)
        lmap = projection.mapSceneLighting(settings['scene'],
                                           border=human.material.sssRScale)
        progress(0.1, 0.4, "Applying medium scattering")
        lmapG = imgop.blurred(lmap, human.material.sssGScale, 13)
        progress(0.4, 0.7, "Applying high scattering")
        lmapR = imgop.blurred(lmap, human.material.sssRScale, 13)
        lmap = imgop.compose([lmapR, lmapG, lmap])
        if not diffuse.isEmpty:
            progress(0.7, 0.8, "Combining textures")
            lmap = imgop.resized(lmap, diffuse.width, diffuse.height)
            progress(0.8, 0.9)
            lmap = imgop.multiply(lmap, diffuse)
        lmap.sourcePath = "Internal_Renderer_Lightmap_SSS_Texture"

        progress(0.9, 0.95, "Setting up renderer")
        human.material.diffuseTexture = lmap
        human.mesh.configureShading(diffuse=True)
        human.mesh.shadeless = True
        progress(0.95, 0.98, None)
    else:
        progress(0, 0.99, None)

    if not mh.hasRenderToRenderbuffer():
        # Limited fallback mode, read from screen buffer
        log.message("Fallback render: grab screen")
        img = mh.grabScreen(0, 0, G.windowWidth, G.windowHeight)
        alphaImg = None
    else:
        # Render to framebuffer object
        renderprog = Progress()
        renderprog(0, 0.99 - 0.59 * settings['AA'], "Rendering")
        width, height = settings['dimensions']
        log.message("Rendering at %sx%s", width, height)
        if settings['AA']:
            width = width * 2
            height = height * 2
        img = mh.renderToBuffer(width, height)
        alphaImg = mh.renderAlphaMask(width, height)
        img = imgop.addAlpha(img, imgop.getChannel(alphaImg, 0))

        if settings['AA']:
            renderprog(0.4, 0.99, "AntiAliasing")
            # Resize to 50% using Qt image class
            qtImg = img.toQImage()
            del img
            # Bilinear filtered resize for anti-aliasing
            scaledImg = qtImg.scaled(
                width / 2,
                height / 2,
                transformMode=gui.QtCore.Qt.SmoothTransformation)
            del qtImg
            img = scaledImg
            #img = image.Image(scaledImg)    # Convert back to MH image
            #del scaledImg
        renderprog.finish()

    if settings['lightmapSSS']:
        progress(0.98, 0.99, "Restoring data")
        human.material = materialBackup

    progress(1, None, 'Rendering complete')

    gui3d.app.getCategory('Rendering').getTaskByName('Viewer').setImage(img)
    mh.changeTask('Rendering', 'Viewer')
    gui3d.app.statusPersist('Rendering complete.')
Beispiel #23
0
 def worker(sliders, stopSearch):
     log.message('start...')
     for slider in sliders:
         if (stopSearch):
             stopSearch = False
             break
         value = 0
         for valuenum in range(0, 101, 1):
             if (stopSearch):
                 stopSearch = False
                 break
             valuenums = valuenum / 100.000000
             slider.update()
             slider.modifier.setValue(valuenums)
             log.message('slider modifiy value:' + str(valuenums))
             sli = modifierslider.ModifierSlider(slider.modifier)
             # value = slider.modifier.getValue()
             valuesli = sli.getValue()
             # #sli.onChanging(slider.modifier.getValue())
             action = humanmodifier.ModifierAction(
                 slider.modifier, value, valuesli, sli.update)
             log.message('before value:' + str(value))
             # 以下更新场景代码均无效
             if valuesli != value:
                 G.app.do(action)
             else:
                 action.do()
             #gui3d.app.do(action)
             #G.app.do(action)
             #G.app.redraw()
             log.message('update views')
             value = valuesli
             filenameImage = fileAotupicture + '/' + str(
                 time.strftime("%Y-%m-%d_%H.%M.%S")) + '.png'
             filenameIma = fileAotupicture + '/' + str(
                 time.strftime("%Y-%m-%d_%H.%M.%S")) + '.png'
             filenameIma1 = fileAotupicture + '/result' + str(
                 time.strftime("%Y-%m-%d_%H.%M.%S")), '.png'
             width = G.windowWidth
             height = G.windowHeight
             width1 = width - 3
             height1 = height - 3
             log.message('grab screen')
             mh.grabScreen(0, 0, width, height, filenameImage)
             img = cv2.imread(filenameImage)
             height1, width1 = img.shape[:2]
             # print height,width
             for i in range(height1):
                 for j in range(width1):
                     r, b, g = img[i][j]
                     rb = abs(r - b)
                     rg = abs(r - g)
                     bg = abs(b - g)
                     if rb < 10 and rg < 10 and bg < 10:
                         img[i][j] = [0, 0, 0]
                     else:
                         img[i][j] = [255, 255, 255]
             imsave = normalize.Normalize(img)
             log.message('show normalize image')
             try:
                 log.message('cv2 start')
                 cv2.imwrite(filenameIma, imsave)
                 # log.message('cv2 imwrite:'+filenameIma)
                 # newimg=cv2.imread(filenameIma)
                 # log.message('cv2 imread')
                 # cv2.imshow("img", imsave)
                 # log.message('cv2 imshow')
                 ## 60与电脑的刷新频率有关,如果<60刷新频率跟不上,则不会显示图像
                 # cv2.waitKey(60)
                 # cv2.destroyAllWindows()
                 # delt = onpicture()
                 imnew = cv2.imread(filepicture)
                 delt = findcontours.GetDeltValue(imsave, imnew)
                 log.message('delt value:' + str(delt))
                 if delt <= deltvalue[0]:
                     deltvalue[0] = delt
                     deltva[0] = valuenums
             except Exception, e:
                 log.message(e)
         num = deltva[0] * 20 + 1
         # result = cv2.imread(fileResult + str(num) + '.png')
         # cv2.imshow("Result", result)
         # cv2.waitKey(0)
         log.message(deltvalue)
         log.message(num)
Beispiel #24
0
    def applyModifier(self,conn,jsonCall):
        modifierName = jsonCall.getParam("modifier")
        if modifierName == 'all':
            values = jsonCall.getParam("power")
            for modifierName in values:
                power = values[modifierName]
                modifier = self.api.internals.getHuman().getModifier(modifierName)
                modifier.setValue(power)
                # jsonCall.setParam("modifier", modifier);
                # jsonCall.setParam("power", power);
                # self.applyModifier(conn, jsonCall)
            self.api.modifiers._threadSafeApplyAllTargets()
            jsonCall.setData("OK")
            return
        power = float(jsonCall.getParam("power"))

        if modifierName.startswith('camera/'):
            cmd = modifierName[7:]
            if cmd == 'reset':
                G.app.selectedHuman.setPosition([0.0, 0.0, 0.0])
                G.app.modelCamera.setPosition([0.0, 0.9, 0.0])
                G.app.modelCamera.setRotation([0.0, 0.0, 0.0])
                G.app.modelCamera.zoomFactor = 7
            elif cmd == 'snapshot':
                G.app.redraw()
                img = mh.grabScreen(0, 0, G.windowWidth, G.windowHeight)
                fname = jsonCall.getParam("filename")
                img.save(fname)
            elif cmd == 'zoom':
                G.app.modelCamera.zoomFactor = power
                G.app.redraw()
            elif (cmd.startswith('rot_')):
                axis = -1
                if cmd.endswith('x'): axis = 0
                elif cmd.endswith('y'): axis = 1
                elif cmd.endswith('z'): axis = 2
                G.app.rotateCamera(axis, power * 180)
            elif (cmd.startswith('trans_')):
                axis = -1
                if cmd.endswith('x'): axis = 0
                elif cmd.endswith('y'): axis = 1
                elif cmd.endswith('z'): axis = 2
                if axis != -1:
                    c = G.app.selectedHuman.getPosition()
                    c[axis] = power
                    G.app.selectedHuman.setPosition(c)
            elif (cmd.startswith('pan_')):
                axis = -1
                if cmd.endswith('x'): axis = 0
                elif cmd.endswith('y'): axis = 1
                elif cmd.endswith('z'): axis = 2
                G.app.panCamera(axis, power)
            return

        modifier = self.api.internals.getHuman().getModifier(modifierName)
        #print('MODIFYING: '+modifierName)
        #G.app.panUp()
        #G.app.axisView([0.0, 0.0, 0.0])
        #G.app.resetView()
        #G.app.rotateCamera(1,10)
        #G.app.rightView()
        #object_methods = [method_name for method_name in dir(G.app)]
        #for m in object_methods: print('- '+m)

        if not modifier:
            jsonCall.setError("No such modifier")
            return

        self.api.modifiers.applyModifier(modifierName,power,True)
        jsonCall.setData("OK")