julien
julien

Reputation: 3

List integration as argument (beginner)

I am writing a script in python, but I am a beginner (started yesterday).

Basically, I just create chunks that I fill with ~10 pictures, align them, build the model, and build the texture. Now I have my chunks and I want to align them...

From the manual:

PhotoScan.alignChunks(chunks, reference, method=’points’, accuracy=’high’, preselection=False)

Aligns specified set of chunks.

Parameters

  • chunks (list) – List of chunks to be aligned.
  • reference (Chunk) – Chunk to be used as a reference.
  • method (string) – Alignment method in [’points’, ‘markers’].
  • accuracy (string) – Alignment accuracy in [’high’, ‘medium’, ‘low’].
  • preselection (boolean) – Enables image pair preselection.

Returns Success of operation.

Return type boolean

I tried to align the chunks, but the script throws an error at line 26:

TypeError: expected a list of chunks as an argument

Do you have any idea how I can make it work?

This is my current code:

import PhotoScan
doc = PhotoScan.app.document
main_doc = PhotoScan.app.document
chunk = PhotoScan.Chunk()
proj = PhotoScan.GeoProjection()
proj.init("EPSG::32641")
gc = chunk.ground_control
gc.projection = proj
working_path = "x:\\New_agisoft\\ok\\Optical\\"
for i in range (1,3):
    new_chunk = PhotoScan.Chunk()
    new_chunk.label = str(i)
    loop = i*10 
    loo = (i-1)*10
    doc.chunks.add(new_chunk)
    for j in range (loo,loop):
        file_path = working_path + str(j) + ".jpg"
        new_chunk.photos.add(file_path)
    gc = new_chunk.ground_control
    gc.loadExif()
    gc.apply()
    main_doc.active = len(main_doc.chunks) - 1
    doc.activeChunk.alignPhotos(accuracy="low", preselection="ground control")
    doc.activeChunk.buildModel(quality="lowest", object="height field", geometry="smooth", faces=50000)
    doc.activeChunk.buildTexture(mapping="generic", blending="average", width=2048, height=2048)
PhotoScan.alignChunks(,1,method="points",accuracy='low', preselection=True)

Upvotes: 0

Views: 551

Answers (2)

Lenna
Lenna

Reputation: 1465

Note: I have never used this module.

You're calling PhotoScan.alignChunks with an empty first argument, while the documentation states that it expects a list of chunks.

You could initialize an empty list before your loop:

chunks = []

And add completed chunks to the list from inside the loop:

    # ...
    chunks.append(new_chunk)

Then call the function:

PhotoScan.alignChunks(chunks, chunk[0], ...)

Upvotes: 1

f p
f p

Reputation: 3223

PhotoScan.alignChunks(,1,method="points",accuracy='low', preselection=True)
                      ^

Before the ',' you need the chunks!

Upvotes: 2

Related Questions