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

project : string String containing the name of the project.

string

String containing the name of the experimenter.

int

An integer value specifying the number of cameras.

string, optional

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

Example

Linux/MacOs

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

Windows:

deeplabcut.create_new_project('reaching-task','Bill',2) Users must format paths with either: 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.

    Parameters
    ----------
    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.


    Example
    --------
    Linux/MacOs
    >>> deeplabcut.create_new_project_3d('reaching-task','Linus',2)

    Windows:
    >>> deeplabcut.create_new_project('reaching-task','Bill',2)
    Users must format paths with either:  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).resolve()
    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 = os.path.join(str(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