Skip to content

deeplabcut.create_project.new_3d

Functions:

Name Description
create_new_project_3d

Creates a new project directory, sub-directories and a basic configuration file

create_new_project_3d

create_new_project_3d(project, experimenter, num_cameras=2, working_directory=None)

Creates a new project directory, sub-directories and a basic configuration file for 3d project. The configuration file is loaded with the default values. Adjust the parameters to your project's needs.

Parameters:

Name Type Description Default

project

string

String containing the name of the project.

required

experimenter

string

String containing the name of the experimenter.

required

num_cameras

int

An integer value specifying the number of cameras.

2

working_directory

string

The directory where the project will be created. The default is the current working directory; if provided, it must be a string.

None

Examples:

Linux/MacOs:

deeplabcut.create_new_project_3d("reaching-task", "Linus", 2)

Windows:

deeplabcut.create_new_project_3d("reaching-task", "Bill", 2)

On Windows, paths should be formatted as r`"C:\" or "C:\\" (i.e. a double backslash).

Source code in deeplabcut/create_project/new_3d.py
def create_new_project_3d(project, experimenter, num_cameras=2, working_directory=None):
    r"""Creates a new project directory, sub-directories and a basic configuration file
    for 3d project. The configuration file is loaded with the default values. Adjust the
    parameters to your project's needs.

    Args:
        project (string): String containing the name of the project.
        experimenter (string): String containing the name of the experimenter.
        num_cameras (int): An integer value specifying the number of cameras.
        working_directory (string, optional): The directory where the project will be
            created. The default is the ``current working directory``; if provided, it
            must be a string.

    Examples:
        Linux/MacOs:

            deeplabcut.create_new_project_3d("reaching-task", "Linus", 2)

        Windows:

            deeplabcut.create_new_project_3d("reaching-task", "Bill", 2)

        On Windows, paths should be formatted as ``r`"C:\"`` or ``"C:\\"`` (i.e. a double backslash).
    """
    from datetime import datetime as dt

    from deeplabcut.utils import auxiliaryfunctions

    date = dt.today()
    month = date.strftime("%B")
    day = date.day
    d = str(month[0:3] + str(day))
    date = dt.today().strftime("%Y-%m-%d")

    if working_directory is None:
        working_directory = "."

    wd = Path(working_directory).absolute()
    project_name = "{pn}-{exp}-{date}-{triangulate}".format(pn=project, exp=experimenter, date=date, triangulate="3d")
    project_path = wd / project_name
    # Create project and sub-directories
    if not DEBUG and project_path.exists():
        print(f'Project "{project_path}" already exists!')
        return

    camera_matrix_path = project_path / "camera_matrix"
    calibration_images_path = project_path / "calibration_images"
    undistortion_path = project_path / "undistortion"
    path_corners = project_path / "corners"
    path_removed_images = project_path / "removed_calibration_images"

    for p in [
        camera_matrix_path,
        calibration_images_path,
        undistortion_path,
        path_corners,
        path_removed_images,
    ]:
        p.mkdir(parents=True, exist_ok=DEBUG)
        print(f'Created "{p}"')

    # Create config file
    cfg_file_3d, ruamelFile_3d = auxiliaryfunctions.create_config_template_3d()
    cfg_file_3d["Task"] = project
    cfg_file_3d["scorer"] = experimenter
    cfg_file_3d["date"] = d
    cfg_file_3d["project_path"] = str(project_path)
    #    cfg_file_3d['config_files']= [
    #        str('Enter the path of the config file ') + str(i) + ' to include'
    #        for i in range(1, 3)
    #    ]
    #    cfg_file_3d['config_files']= ['Enter the path of the config file 1']
    cfg_file_3d["colormap"] = "jet"
    cfg_file_3d["dotsize"] = 15
    cfg_file_3d["alphaValue"] = 0.8
    cfg_file_3d["markerType"] = "*"
    cfg_file_3d["markerColor"] = "r"
    cfg_file_3d["pcutoff"] = 0.4
    cfg_file_3d["num_cameras"] = num_cameras
    cfg_file_3d["camera_names"] = [str("camera-" + str(i)) for i in range(1, num_cameras + 1)]
    cfg_file_3d["scorername_3d"] = "DLC_3D"

    cfg_file_3d["skeleton"] = [
        ["bodypart1", "bodypart2"],
        ["bodypart2", "bodypart3"],
        ["bodypart3", "bodypart4"],
        ["bodypart4", "bodypart5"],
    ]
    cfg_file_3d["skeleton_color"] = "black"

    for i in range(num_cameras):
        path = str(
            "/home/mackenzie/DEEPLABCUT/DeepLabCut/2DprojectCam" + str(i + 1) + "-Mackenzie-2019-06-05/config.yaml"
        )
        cfg_file_3d.insert(len(cfg_file_3d), str("config_file_camera-" + str(i + 1)), path)

    for i in range(num_cameras):
        cfg_file_3d.insert(len(cfg_file_3d), str("shuffle_camera-" + str(i + 1)), 1)
        cfg_file_3d.insert(len(cfg_file_3d), str("trainingsetindex_camera-" + str(i + 1)), 0)

    projconfigfile = project_path / "config.yaml"
    auxiliaryfunctions.write_config_3d(projconfigfile, cfg_file_3d)

    print('Generated "{}"'.format(project_path / "config.yaml"))
    print(
        f"\nA new project with name {project_name} is created at {wd} and a configurable file (config.yaml) is stored"
        f"there. If you have not calibrated the cameras, then use the function 'calibrate_camera' to start calibrating"
        f"the camera otherwise use the function ``triangulate`` to triangulate the dataframe"
    )
    return projconfigfile