Forum

Author Topic: 'PhotoScan' has no attribute 'pointCloudData'  (Read 3196 times)

benton

  • Newbie
  • *
  • Posts: 29
    • View Profile
'PhotoScan' has no attribute 'pointCloudData'
« on: September 22, 2017, 02:29:59 AM »
Version 1.3.3 build 4827 (64 bit)
Win 10

Hello,

Could someone tell me what I have done wrong?

I am getting the following error;

Traceback (most recent call last):
2017-09-22 09:05:35   File "E:/PhotoScan_Scripts/photoscan_process_dji_p4p_ver13.py", line 182, in <module>
2017-09-22 09:05:35     chunk.buildOrthomosaic(surface=PhotoScan.DataSource.PointCloudData, blending=PhotoScan.BlendingMode.MosaicBlending, color_correction=True, fill_holes=True)
2017-09-22 09:05:35 RuntimeError: Unsupported data source


This is the offending line;
Code: [Select]
chunk.buildOrthomosaic(surface=PhotoScan.DataSource.PointCloudData, blending=PhotoScan.BlendingMode.MosaicBlending, color_correction=True, fill_holes=True)
And this is the full script;

Code: [Select]
import PhotoScan
import os

global doc

#Used to loop through folders
#Add comma delimited list of project folders below
collection = ['test_1','test_2']

for project_name in collection:

doc = PhotoScan.app.document

print('project_path')
drive = 'E'
project_path = os.path.normpath(drive + ":/" + project_name + "/" + project_name + ".psx")
path_photos = os.path.normpath(drive + ":/" + project_name + "/JPEG")
output_path = os.path.normpath(drive + ":/" + project_name + "/")

print(project_path)
print(path_photos)
print(output_path)

# Create project file
doc.save(project_path, chunks = doc.chunks )
doc.open(project_path)

# Remove Chunks if they exist (they are in the order 1 and 0 for a reason).
print('Remove chunks if exist')
if len(doc.chunks):
doc.chunk = doc.chunks[1]
chunk = doc.chunk
doc.remove(chunk)

if len(doc.chunks):
doc.chunk = doc.chunks[0]
chunk = doc.chunk
doc.remove(chunk)

print('Name the chunk for dense cloud')
chunk = PhotoScan.app.document.addChunk()
chunk.label = project_name + "_dense_cloud"

print('Add Photos')
image_list = [
os.path.join(path_photos, path)
for path in os.listdir(path_photos)
if path.lower().endswith(("jpg", "jpeg", "tif", "png","JPG","JPEG","TIF",""))
]

print(image_list)
chunk.addPhotos(image_list)

print('Load Exif')
chunk.loadReferenceExif()

print('Set COORD SYS to WGS84')
coord_system = PhotoScan.CoordinateSystem('EPSG::4326')
chunk.crs = coord_system

print('Match Photos')
chunk.matchPhotos(accuracy=PhotoScan.HighAccuracy, preselection=PhotoScan.ReferencePreselection, tiepoint_limit=40000)

print('Align Cameras')
chunk.alignCameras()

print('Optimize Cameras')
chunk.optimizeCameras()

print('Build Dense Point Cloud')
#UltraQuality, HighQuality, MediumQuality, LowQuality, LowestQuality
#NoFiltering, MildFiltering, ModerateFiltering, AggressiveFiltering
chunk.buildDenseCloud(quality=PhotoScan.HighQuality, filter=PhotoScan.NoFiltering)   

print('Copy chunk for sparse cloud processing.')
chunk.copy()
doc.chunk = doc.chunks[1]
chunk = doc.chunk
chunk.label = project_name + "_sparse_cloud"

print('Return to the chunk for dense cloud processing')
doc.chunk = doc.chunks[0]
chunk = doc.chunk

#print('Classify Ground Points')
#chunk.classifyGroundPoints(max_angle=15.0, max_distance=4.0, cell_size=5.0)

#print('Export Point Cloud')
#chunk.exportPoints(output_path + "/POINT_CLOUD/" + project_name + "_pointcloud.txt", source=PhotoScan.DenseCloudData, format=PhotoScan.PointsFormatXYZ, blockw=1000, blockh=1000)

# -------------------------------------------------------------------
# Create Dense Cloud Chunk
# -------------------------------------------------------------------

'''
print('Build Model (Mesh) using dense cloud')
chunk.buildModel(surface=PhotoScan.HeightField, source=PhotoScan.DenseCloudData, face_count=PhotoScan.MediumFaceCount, interpolation=PhotoScan.EnabledInterpolation)

print('Close Holes')
chunk.model.closeHoles(level = 50)

print('Mapping Mode')
chunk.buildUV(mapping=PhotoScan.OrthophotoMapping)

print('Build Texture')
chunk.buildTexture(blending=PhotoScan.MosaicBlending, size=8192)

print('Save project')
doc.save()

#print('Export Report')
chunk.exportReport(output_path + project_name + "_dense_cloud.pdf")
'''

# -------------------------------------------------------------------
# Create Sparse Cloud Chunk
# -------------------------------------------------------------------

print('Make new chunk %_sparse_cloud active')
doc.chunk = doc.chunks[1]
chunk = doc.chunk

#print('Build Dense Point Cloud')
#We have copied the Dense Point Cloud from the Chunk above so we dont have to process it again.
#UltraQuality, HighQuality, MediumQuality, LowQuality, LowestQuality
#NoFiltering, MildFiltering, ModerateFiltering, AggressiveFiltering
#chunk.buildDenseCloud(quality=PhotoScan.HighQuality, filter=PhotoScan.NoFiltering)

print('Build Model (Mesh) using sparse cloud (pointCloudData = sparse cloud)')
chunk.buildModel(surface=PhotoScan.HeightField, source=PhotoScan.PointCloudData, face_count=PhotoScan.MediumFaceCount, interpolation=PhotoScan.EnabledInterpolation)

print('Save project')
doc.save()

print('Close Holes')
chunk.model.closeHoles(level = 50)

print('Mapping Mode')
chunk.buildUV(mapping=PhotoScan.OrthophotoMapping)

print('Build Texture')
chunk.buildTexture(blending=PhotoScan.MosaicBlending, size=8192)

print('Save project')
doc.save()

print('Build Dem using sparse cloud (PointCloudData)')
chunk.buildDem(source=PhotoScan.PointCloudData, interpolation=PhotoScan.EnabledInterpolation)

print('Export Dem to GDA94 Zone 50')
chunk.exportDem(output_path +'/DEM/'+ project_name + "_DEM_DenseCloud_NoFiltering.tif",image_format=PhotoScan.ImageFormatTIFF, projection=PhotoScan.CoordinateSystem('EPSG::28350'))

print('Export INPHO file to GDA94 Zone 50 ')
chunk.exportCameras(output_path + project_name + "_inpho_EPSG28350.prj", format=PhotoScan.CamerasFormatInpho, projection=PhotoScan.CoordinateSystem('EPSG::28350'), rotation_order=PhotoScan.RotationOrderXYZ)

print('Build Orthomosaic')
chunk.buildOrthomosaic(surface=PhotoScan.DataSource.PointCloudData, blending=PhotoScan.BlendingMode.MosaicBlending, color_correction=True, fill_holes=True)

print('Export Orthomosaic to GDA94 Zone 50')
chunk.exportOrthomosaic(output_path +'/ORTHO/'+ project_name + "_Ortho_SparseCloud_NoFiltering_EPSG28350.tif", image_format=PhotoScan.ImageFormatTIFF, projection=PhotoScan.CoordinateSystem('EPSG::28350'))

print('Export Report')
chunk.exportReport(output_path + project_name + "_sparse_cloud.pdf")

print('Save project')
doc.save()
   
The PhotoScan Python reference states the following;

class PhotoScan.DataSource
Data source in [PointCloudData, DenseCloudData, DepthMapsData, ModelData, TiledModelData, Elevation-Data, OrthomosaicData]

Regards
Ben

   

« Last Edit: September 22, 2017, 04:27:15 AM by benton »

Alexey Pasumansky

  • Agisoft Technical Support
  • Hero Member
  • *****
  • Posts: 14813
    • View Profile
Re: 'PhotoScan' has no attribute 'pointCloudData'
« Reply #1 on: September 22, 2017, 10:18:23 AM »
Hello Ben,

It is not possible to project orthomosaic on the point cloud, you need to use either ElevationData or ModelData.
Best regards,
Alexey Pasumansky,
Agisoft LLC

benton

  • Newbie
  • *
  • Posts: 29
    • View Profile
Re: 'PhotoScan' has no attribute 'pointCloudData'
« Reply #2 on: September 26, 2017, 03:01:21 AM »
Thank You for the clarification