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')
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)
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)
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))
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)
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))
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)
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')
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
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')
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)
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
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')
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')
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'))
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.')
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)
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")