Metashape,之前也叫做Photoscan,提供了python接口,可以使用python脚本来进行自动化处理。但是目前这方面的资料实在是比较少,可能是因为大部分人都习惯使用界面来进行操作吧,但其实在很多场合下,使用python脚本进行自动化处理能极大地提高工作效率(针对某些流程比较固定的任务)。所以,我通过读官方的文档自己摸索了一些非常基本的脚本操作。
首先先说明一下,Metashape调用python脚本有三种方式:
- 在软件内部调用(这个最简单)
- 在软件外部使用metashape.exe调用(详见Metashape在软件外面调用python脚本)
- 使用stand-alone module进行编写并调用(这个需要license)
但无论你用哪种调用方式,其基本的代码流程是差不多的。
import Metashape
#实例化一个chunk对象
doc=Metashape.app.document
chunk=doc.addChunk() #在软件外部调用,软件没打开,那么就不存在chunk,必须添加一个。
#chunk=doc.chunk #在软件内部调用,因为打开软件后其实一个chunk就已经被激活了。
#添加照片
chunk.addPhotos(list[string]) #伪代码,参数为一个存放照片路径字符串的list对象
#判断版本,1.5和1.6某些函数的参数不同,如果想改变重建的质量,1.6版本需要改变downscal参数的值,1为最高质量。
major_version = ".".join(Metashape.app.version.split('.')[:2])
if version=='1.5':
#匹配
chunk.matchPhotos(accuracy=Metashape.MediumAccuracy, generic_preselection=True,reference_preselection=False)
#建立深度图
chunk.buildDepthMaps(quality=Metashape.HighQuality, filter=Metashape.AggressiveFiltering)
if version=='1.6':
#匹配
chunk.matchPhotos(downscale=1,generic_preselection=True,reference_preselection=False)
#建立深度图
chunk.buildDepthMaps(downscale=1, filter_mode=Metashape.AggressiveFiltering)
#点云重建
chunk.buildDenseCloud()
#构建模型
chunk.buildModel(surface_type=Metashape.Arbitrary, interpolation=Metashape.EnabledInterpolation)
#UV分解
chunk.buildUV(mapping_mode=Metashape.GenericMapping)
#纹理贴图
chunk.buildTexture(blending_mode=Metashape.MosaicBlending, texture_size=4096)
#保存项目
doc.save(path = "project.psz", chunks = [doc.chunk])
这段代码就是大概的整个流程,但是注意,上面的代码现在还跑不起来,因为没有相关的照片,所以里面没有照片路径。大家可以参照这个并结合官方的文档编写自己的脚本。
对于已有的项目,官方文档给出的代码是这样的:
如果你有自己的项目,可以试试这段代码(不过要注意版本区别,在我的代码里面给了说明)
另外,刚开始可以在软件内部试着调用一下脚本看看效果,调用方法如下:
大概的流程就是这样,如果你的脚本里导入了其它的python包,那么你需要将这些包也安装到Metashape自带的python环境中。具体方法参考:https://blog.csdn.net/qq_41475842/article/details/107243856