工程的使用#
对工程的操作可以通过调用 visionflow::Project 类的静态函数完成。
调用这些函数时通常需要一个 visionflow::ProjectDescriptor 类型的参数,
并且设置其中的 workspace_token 和 project_name 字段,用于指定 Workspace 路径和工程名称。
Note
workspace_token 和 project_name 必须符合以下要求,
否则会抛出 visionflow::excepts::InvalidArgument 类型的异常。
workspace_token 和 project_name 均须满足:
不为空字符串;
不以空白字符(空格、制表符等)开头或结尾;
不包含
* < > ? " |中的任何一个字符。
在以上要求之外, project_name 还须满足:
不超过200个字符;
不包含
\ / : * ? " < > |中的任何一个字符。
查看工程基本信息#
工程的基本信息可以使用 visionflow::Project::ReadProjectDescriptorFromProject()
函数获取。
该函数接收一个 visionflow::ProjectDescriptor 类型的引用作为参数。
传入参数时须设置 workspace_token project_name 两个字段以指定工程。
如果工程不存在,函数返回 false;
如果工程存在,函数返回 true,并且修改传入的 ProjectDescriptor,写入以下字段:
created_time工程创建的时间last_modified_time工程最后一次被修改的时间remark备注sdk_version创建工程时使用的VisionFlow SDK版本brief_images工程预览图,通常是数据集的前4张
std::string workspace_token = "D:/path/to/workspace";
std::string project_name = "MyProject";
auto project_descriptor = visionflow::ProjectDescriptor{workspace_token, project_name};
bool proj_exists = visionflow::Project::ReadProjectDescriptorFromProject(project_descriptor);
if (proj_exists) {
// project_descriptor 的各个字段填充为工程的信息
std::cout << project_descriptor.remark << std::endl;
}
创建、打开、删除工程#
创建工程#
工程可以使用 visionflow::Project::Create() 函数创建;该函数接收一个
visionflow::ProjectDescriptor 类型的参数。
按上节所述的要求设置好参数的 workspace_token 和 project_name 字段。
remark 字段可选,用于设定工程的备注。其他字段被忽略。
创建工程时,会创建工程目录,并且创建名为 default_main 的默认数据集。
函数的返回值是一个新的 visionflow::ProjectDescriptor 对象,其中的
created_time last_modified_time sdk_version 和 brief_images
字段会被正确填充。
std::string workspace_token = "D:/path/to/workspace";
std::string project_name = "MyProject";
std::string remark = "This is a remark";
auto project_descriptor = visionflow::ProjectDescriptor{workspace_token, project_name, remark};
auto created = visionflow::Project::Create(project_descriptor);
Note
尝试创建已经存在的工程,将会抛出 visionflow::excepts::ProjectAlreadyExists
类型的异常。
Note
判断工程是否存在,可以使用 visionflow::Project::Exists() 函数。
打开工程#
工程可以使用 visionflow::Project::Open() 函数打开。
该函数有2个参数,第1个为上述 visionflow::ProjectDescriptor 对象,
第2个参数(可选)为 visionflow::ProjectOpenMode 类型的值,用于指定打开模式。
kNormally是默认的打开模式,打开的工程可读可写。kReadOnly以只读模式打开工程。kForceWrite和kNormally完全等价,仅为了兼容性而提供。
返回值为 std::unique_ptr<Project> 类型的智能指针,指向打开的工程。
当该 unique_ptr 析构时,工程会自动关闭。也可以通过手动调用 reset() 来关闭工程。
std::string workspace_token = "D:/path/to/workspace";
std::string project_name = "MyProject";
auto project_descriptor = visionflow::ProjectDescriptor{workspace_token, project_name};
std::unique_ptr<visionflow::Project> project = visionflow::Project::Open(project_descriptor);
// 工程会在该指针释放时自动关闭
// 也可以通过以下方式手动关闭
project.reset();
// 通过以下方式打开为只读模式
project = visionflow::Project::Open(project_descriptor, visionflow::kReadOnly);
Note
已经打开的工程不能重复打开,否则将抛出 visionflow::excepts::ProjectLockExist
类型的异常。
Note
判断工程是否处于关闭状态,可以使用 visionflow::Project::Closed() 函数。
另一种方法#
提供了一个重载的 visionflow::Project::Open() 函数,接收一个指向 .vflow
目录的路径字符串和一个可选的 visionflow::ProjectOpenMode 值。
std::string path = "D:/path/to/MyProject.vflow";
auto project = visionflow::Project::Open(path);
删除工程#
工程可以使用 visionflow::Project::RemoveProject() 函数删除。
在删除工程时,工程目录下所有由VisionFlow创建的文件或目录均被删除。如果工程目录下没有其他文件, 工程目录也会被删除。
Warning
放置在工程目录下的用户文件不会被删除,但由VisionFlow创建的二级目录下的文件均会随目录一起删除。
在删除工程前务必做好检查和备份。
std::string workspace_token = "D:/path/to/workspace";
std::string project_name = "MyProject";
auto project_descriptor = visionflow::ProjectDescriptor{workspace_token, project_name};
visionflow::Project::RemoveProject(project_descriptor);
Note
在尝试删除时工程必须处于关闭状态,否则将抛出 visionflow::excepts::ProjectLockExist
类型的异常。