VisionFlow的数据包#

VisionFlow中除了可以使用工程来管理数据外,我们还提供了数据包用于管理图像数据和标注。 数据包和工程的主要区别在于:工程是为了处理一个特定的检测任务而创建的,工程中除了包含 图像数据、图像信息、标注和检测结果外,更重要的是将这些数据安装检测流程组织起来。 而数据包是一个存粹的图像和标注信息的数据管理管理工具,它仅仅将图像和标注保存在一起,和 具体的检测流程或使用到的检测工具没有直接关系也不包含检测流程或检测工具的任何信息。

你可以使用数据包来: #. 在未知检测工具和流程的情况下保存标注数据; #. 将工程中的标注和图像数据存储到独立的数据包中; #. 从数据包中导入数据到一个或多个工程中; #. 长久保存通用标注数据;

工程和数据包的交互#

你可以将工程中的数据导出为数据包,再在其他工程中将这些数据导入。通过这一功能,你可以非常方便 的在不同工程、不同工具、甚至不同类型的工具之间复制标注等数据。下面是一个简单的使用示例:

#include "visionflow/helpers/datapack_project_io.hpp"

void export_to_datapack() {
  auto proj = vflow::Project::Open("D://example.vflow");

  std::string datapack_path = u8"D://example.vfpack";

  vflow::helper::DatapackExportOptions export_opt;
  /* 输入工具的名称,为空时会尝试自动查找 */
  export_opt.input_tool_id = "InputTool";
  /* 设置为空表示从主数据集导出 */
  export_opt.sample_set_name = "";
  /* 导出所有样本 */
  export_opt.export_all_samples = true;
  /* 同时导出图像 */
  export_opt.with_image = true;
  /* 要导出的属性集 */
  export_opt.property_ids = {
    {"SegmentationTool", "truth"},
    {"SegmentationTool", "pred"},
    {"InputTool", "views"},
  };
  export_opt.remark = "备注信息";
  /* 进度回调 */
  export_opt.progress_callback = nullptr;

  vflow::helper::export_project_to_datapack(*proj, datapack_path, export_opt);
}
.. TODO
.. TODO

同上面一样,你也可以非常方面的将数据从数据包中将数据导入到工程中:

#include "visionflow/helpers/datapack_project_io.hpp"

void import_from_datapack() {

  auto datapack = vflow::datapack::Datapack(u8"D://example.vfpack");

  vflow::helper::DatapackImportOptions import_opt;
  /* 要导入的数据项 */
  import_opt.sample_ids = datapack.sample_ids();
  /* 同导出一样,你可以设置为全部导入
  // import_opt.import_all_samples = true;
  /* 设置为空表示导入到主据集 */
  import_opt.sample_set_name = "";
  /* 输入工具的名称,为空时会尝试自动查找 */
  export_opt.input_tool_id = "InputTool_1";
  /* 同时导出图像 */
  import_opt.with_image = true;
  /* 导入时的映射关系 */
  import_opt.property_column_map = {
    {{"DetectionTool", "truth"}, "SegmentationTool/pred"},
    {{"InputTool_1", "views"}, "InputTool/views"},
  };
  /* 仅导入对应图像已在工程中的相关数据 */
  import_ot.only_import_for_exist_sample = true;
  /* 强制替换旧数据 */
  import_ot.force_replace_old_data = true;
  /* 进度回调 */
  import_opt.progress_callback = nullptr;

  vflow::helper::import_datapack_to_project(datapack, *proj, import_opt);
}
.. TODO
.. TODO

除上面提供的帮助快速在工程和数据包之间互导数据的方法外,数据包也提供了灵活的接口用于访问数据包中的任意数据项; 你也可以利用这些灵活的接口实现任意的更加灵活的功能。详细请查阅 visionflow::datapack::DataPack 及其相关类型的接口。