Need help on some Miraco files please

Hello, I hope everything is going well on your side.

I have two major issues with some scans I recently did using the MIRACO.

First issue: I scanned several parts of a model, and the entire project is completely invisible on the MIRACO.

The MIRACO doesn’t see this project at all. When I connect the MIRACO to the PC, I find a folder. In that folder, I see files totaling about six or seven gigabytes, and I can see the previews of all the different elements I scanned.

However, when I click on the .revo file, even Revo5 on the PC doesn’t manage to open it. It opens the software but not the project file itself, which is very problematic because these are professional scans that I need for a client. That’s the first problem.

Second issue: I scanned a model that was very, very tall. I had to use a pole and put the MIRACO at the end of this pole. However, this gives me alignment problems, and even using the alignment optimization option, the alignment is still not correct.

I wanted to try going through MeshLab or CloudCompare, but Revo5 does not allow me to export all the point clouds as separate PLY files. As far as I know, I can only export a single merged point cloud, so I cannot realign it in another software.

What I would like to know is: when this doesn’t work, the only option I’ve found is to duplicate my project several times, go into the keyframe edit mode, and every time there’s a shift in the scan, split the scan into smaller pieces so I can align the parts that work well together, then export them as separate PLY files and realign them in another tool.

Unfortunately, in the keyframe edit mode, the point cloud resolution is very low, so it’s very hard for me to see what I’m doing.

I really need solutions to these two problems because these are professional projects with deadlines, and it’s becoming very complicated.

Thanks a lot for your time and help.

J

For the first issue, see this thread:

https://forum.revopoint3d.com/t/empty-revo-file-after-crash-during-saving/39234/1

Second issue has no easy answer. When the scanner actually knows that it lost tracking, it creates a new prefix number for the following frames. So in the cache folder you’ll see frame_000_0000 for the first sequence, and frame_001_0000 for the next, etc. Duplicate your project as many times as you need to isolate each sequence (delete the frames from all but one of those sequences in each duplicate project). That might give you a better view as you’re not working with all the pieces simultaneously. Of course it isn’t always broken up that neatly but sometimes you get lucky.

I have a Python module that splits a scan up into pieces based on prefix number and creates a new project with each piece as a separate scan. I don’t pretend that I know how to write proper code but it works most of the time.

import json, uuid, os, subprocess, glob, copy

#project_file includes full path
#model_num is index of model to split as found under 'nodes' key in project file

def create_project(project_file, model_num, export_path_input):
    new_guid = str(uuid.uuid4())
    project_name=os.path.split(project_file)[1]
    project_path=os.path.normpath(os.path.split(project_file)[0])+'\\'
    export_path=os.path.normpath(export_path_input)+'\\'

    with open(project_file, 'r') as json_file:
        project_data = json.load(json_file)

    model = project_data["nodes"][model_num]

    source_dir = project_path+"data\\"+project_data["nodes"][model_num]["guid"]+"\\cache\\"
    source_dir_model = project_path+"data\\"+project_data["nodes"][model_num]["guid"]+"\\"
    dest_dir = export_path + project_data["nodes"][model_num]["name"]
    dest_dir_data = dest_dir+"\\data\\"

    with open(source_dir_model+"property.rvproj", 'r') as json_file:
        model_properties = json.load(json_file)

    print(source_dir)
    print(dest_dir)

    if not os.path.exists(dest_dir):
        os.mkdir(dest_dir)
        os.mkdir(dest_dir_data)        

    new_project_name = model["name"]
    new_project = project_data
    new_project["guid"] = new_guid
    new_project["name"] = new_project_name
    new_project["nodes"] = []

    components = {}

    x = 0
    searching = True
    filename_to_search = f"{source_dir}\\{x:0>3}_*."

    while searching:
        
        filelist = glob.glob(f"{source_dir}\\frame_{x:0>3}_*.inf")

        if len(filelist) == 0:
            searching = False
            print('While loop ended')
        else:
            components[x] = filelist
            x += 1

    base_name = model['name']

    for a in range(len(components)):
        new_model = model
        new_properties = model_properties
        new_model['name'] = f'p{a}_' + base_name
        new_model['guid'] = f'p{a}_' + base_name
        new_project['nodes'].append(copy.copy(new_model))
        new_properties['guid'] = new_model['name']
        new_properties['vf_count'] = len(components[a])
        new_properties['scan_step'] = 1
        dest_dir_new_name = dest_dir_data+new_model['name']
        dest_dir_cache = dest_dir_new_name+'\\cache\\'

        print("Creating destination directories...")
        os.mkdir(dest_dir_new_name)
        os.mkdir(dest_dir_cache)
        os.mkdir(dest_dir_new_name+'\\param')
        os.mkdir(dest_dir_new_name+'\\dump')
        print(f"Copying files for component {a}...")
        copy_return = subprocess.check_output(["copy", f"{source_dir}frame_{a:0>3}_*.*", dest_dir_cache], shell=True)
        copy_return = subprocess.check_output(["copy", f"{source_dir_model}param\\", dest_dir_new_name+'\\param\\'], shell=True)
        copy_return = subprocess.check_output(["copy", f"{source_dir_model}frameFlag.json", dest_dir_new_name+'\\'], shell=True)
        if os.path.isdir(f'{source_dir_model}param1'):
            print('param1 directory found')
            os.mkdir(dest_dir_new_name+'\\param1')
            copy_return = subprocess.check_output(["copy", f"{source_dir_model}param1\\", dest_dir_new_name+'\\param1\\'], shell=True)


        with open(f"{dest_dir_new_name}\\property.rvproj", "w") as f:
            json.dump(new_properties, f, indent=4)
        
    with open(f"{dest_dir}\\{new_project_name}.revo", "w") as f:
        json.dump(new_project, f, indent=4)

    print('Done.')
    return
2 Likes

Thanks my friend, i’d try that :wink:

Hi @Giu3232

You need first to load the project from MIRACO to your PC and do not open it directly from MURACO hard drive as it will not work this way .

All projects need to be imported first to PC before they can be opened in RevoScan5, you can also connect MIRACO in PC mode and manually navigate to the folder to copy and paste the project to your PC folder ( without opening it until it is saved on PC)

In the future avoid to create too big scanning folders on MIRACO as they can easy can get corrupted . Especially if you scan important scans

Hi,

So I copied all the data from the miraco to the PC.

The .revo file was empty, so I created another empty project, saved it, then copied the data folder in it.

I then copied a working .revo file in it and replaced the 9 nodes with something like this:

“nodes”: [
{
“childs”: ,
“guid”: “20250805_011311”,
“name”: “TIKE_HEAD_SD_01”,
“type”: 2
}
],

I updated “guid” with the name of each folder contained in the data folder. It partially worked, I managed to open the file, but only 4 scans out of 9 are visible.

Some are near mode, some are far mode. All are type 2 in the .revo file, if I change the non working one to type 1 for exemple I see them in the interface but not the geometry at all.

Any advices would be very appreciated,

Thanks.

Hi. There were some threads bwfor on same/similar problems. You might use the forum search,look for “empty project” and see if there is anything helpful in those threads meanwhile. I am sure @PUTV will come back to you with some useful advice ,too, or refere you to customer service.

1 Like

Thanks @ivan but I can’t help out here with the project issue since it got corrupted , the best would be to ask technical team about because there is not really clear instruction how to fix it from the tech team .

I think what @TheBoatScans provided is a common knowledge so can’t add anything to it .

@Giu3232 you may contact customer@revopoint3d.com for technical assistance in this case but nothing is guaranteed.

Try to not create heavy projects in the future as they can easy get corrupted .

1 Like

In the other thread it turned out the property.rvproj was corrupted as well. That file is in each scan folder within the project. Most of the data in that file is not unique to the individual scan or is just informational (doesn’t affect output) so use one from one of the working scans and see if replicating it fixes the non-working ones. GUID should probably be updated. Near and Far modes make it tricky on a Miraco, so if you used both modes there may be fields that are different (such as param_index which I think is near/far mode intrinsics/calibrations). vf_count is the number of frames but doesn’t seem to impact anything.

3 Likes

Thanks a lot for your help, i managed to fix everything.

3 Likes

Great! Can you briefly share how you fixed it?:face_without_mouth: It might help other in the future.

That’s great , it would be fantastic if you can share your steps fixing it for future users

Thanks !

1 Like

Hi,

The technical team helped me to fix that.

It was caused by corruption of the .revo file in the parent project, as well as the frameFlag.json and property.rvproj files in the child project.

To fix this, find a similar project or child project, copy the correct files to the problematic project, and replace the key IDs within the files according to the project’s folder name.

This resolve the issue. For other minor content, the software may display minor issues when reading it, but these issues will be automatically fixed and updated.

I hope that will help.

J.

3 Likes

Thank you a lot for sharing, very appreciated!

Funny about the frameFlag.json file.. it doesn’t seem to ever be populated with anything but apparently has to exist.

1 Like