基本思想:最近需要使用labelme标注文件来做区域配置文件,作为c++检测+euler追踪代码的区域文件使用,省去了添加不太直观的坐标点, 所以随手用rapjson写了个构建和解析的json文件代码,可以更好的照顾懒人

一、构建

39、使用NCNN+YOLOFast/YOLOV5,实现视频流/图片的自动化的labelme标注数据_sxj731533730-CSDN博客比如我使用

labelme --nodata

标注了一个文件

labelme文件内容

{"version": "3.16.7","flags": {},"shapes": [{"label": "left_restrict_region","line_color": null,"fill_color": null,"points": [[21.64102564102564,421.56410256410254],[530.6153846153846,610.025641025641]],"shape_type": "rectangle","flags": {}},{"label": "right_restrict_region","line_color": null,"fill_color": null,"points": [[1210.102564102564,424.1282051282052],[1861.3846153846152,616.4358974358975]],"shape_type": "rectangle","flags": {}},{"label": "public_region","line_color": null,"fill_color": null,"points": [[533.1794871794873,422.8461538461537],[1199.8461538461538,613.8717948717948]],"shape_type": "rectangle","flags": {}}],"lineColor": [0,255,0,128],"fillColor": [255,0,0,128],"imagePath": "cap_human_00:00:03_01.jpg","imageData": null,"imageHeight": 1080,"imageWidth": 1920
}

代码构建和解析一下,下载rapidjson头文件,导入Clion即可

cmakelist.txt

cmake_minimum_required(VERSION 3.16)
project(untitled10)
include_directories(${CMAKE_SOURCE_DIR}/include)
set(CMAKE_CXX_STANDARD 14)add_executable(untitled10 main.cpp)

测试代码

#include <iostream>
#include<string>
#include <fstream>
#include <vector>
#include <libgen.h>
#include "rapidjson/document.h"
#include "rapidjson/writer.h"
#include "rapidjson/stringbuffer.h"typedef struct RectPoint {double leftx;double lefty;double rightx;double righty;std::string label;
} RectPoint;using namespace std;
using namespace rapidjson;void constructJson(string imagePath,string frame_name, int imageHeight, int imageWidth,std::vector<RectPoint> objects) {rapidjson::Document doc;doc.SetObject();rapidjson::Document::AllocatorType &allocator = doc.GetAllocator();//成员1rapidjson::Value str_version(rapidjson::kStringType);str_version.SetString("3.16.7");rapidjson::Value str_flags(rapidjson::kStringType);str_flags.SetObject();rapidjson::Value str_imageData(rapidjson::kStringType);str_imageData.SetNull();rapidjson::Value str_imageWidth(rapidjson::kStringType);str_imageWidth.SetInt(imageWidth);rapidjson::Value str_imageHeight(rapidjson::kStringType);str_imageHeight.SetInt(imageHeight);rapidjson::Value str_imagePath(rapidjson::kStringType);std::string image_frame_name = frame_name + ".jpg";str_imagePath.SetString(image_frame_name.c_str(), image_frame_name.length(), allocator);rapidjson::Value ary(rapidjson::kArrayType);rapidjson::Value sub_line_color_array0(rapidjson::kArrayType);rapidjson::Value sub_full_color_array1(rapidjson::kArrayType);for (int i = 0; i < objects.size(); i++) {// 嵌套成员2对象rapidjson::Document sub_doc;sub_doc.SetObject();rapidjson::Document::AllocatorType &sub_allocator = sub_doc.GetAllocator();rapidjson::Value sub_str_shape_type(rapidjson::kStringType);sub_str_shape_type.SetString("rectangle");rapidjson::Value sub_str_flags(rapidjson::kStringType);sub_str_flags.SetObject();rapidjson::Value sub_str_group_id(rapidjson::kStringType);sub_str_group_id.SetNull();rapidjson::Value sub_str_line_color_id(rapidjson::kStringType);sub_str_line_color_id.SetNull();rapidjson::Value sub_str_full_color_id(rapidjson::kStringType);sub_str_full_color_id.SetNull();rapidjson::Value sub_str_label(rapidjson::kStringType);std::string labelname =objects[i].label;sub_str_label.SetString(labelname.c_str(), labelname.length(), allocator);// 嵌套坐标点rapidjson::Value sub_array0(rapidjson::kArrayType);rapidjson::Value sub_array1(rapidjson::kArrayType);rapidjson::Value sub_point(rapidjson::kArrayType);float x_min = objects[i].leftx;float y_min = objects[i].lefty;float x_max = objects[i].rightx;float y_max = objects[i].righty;sub_array0.PushBack(x_min, allocator).PushBack(y_min, allocator);sub_array1.PushBack(x_max, allocator).PushBack(y_max, allocator);sub_point.PushBack(sub_array0, allocator);sub_point.PushBack(sub_array1, allocator);sub_doc.AddMember("points", sub_point, allocator);// 嵌套坐标点完成sub_doc.AddMember("shape_type", sub_str_shape_type, allocator);sub_doc.AddMember("flags", sub_str_flags, allocator);sub_doc.AddMember("group_id", sub_str_group_id, allocator);sub_doc.AddMember("label", sub_str_label, allocator);sub_doc.AddMember("line_color", sub_str_line_color_id, allocator);sub_doc.AddMember("fill_color", sub_str_full_color_id, allocator);ary.PushBack(sub_doc, allocator);//成员2完成}//加入doc中doc.AddMember("version", str_version, allocator);doc.AddMember("flags", str_flags, allocator);doc.AddMember("imageData", str_imageData, allocator);doc.AddMember("imageWidth", imageWidth, allocator);doc.AddMember("imageHeight", imageHeight, allocator);doc.AddMember("imagePath", str_imagePath, allocator);doc.AddMember("shapes", ary, allocator);sub_line_color_array0.PushBack(0, allocator).PushBack(255, allocator).PushBack(0, allocator).PushBack(128,allocator);sub_full_color_array1.PushBack(255, allocator).PushBack(0, allocator).PushBack(0, allocator).PushBack(128,allocator);doc.AddMember("lineColor", sub_line_color_array0, allocator);doc.AddMember("fillColor", sub_full_color_array1, allocator);//转化为stringrapidjson::StringBuffer buffer;rapidjson::Writer<rapidjson::StringBuffer> write(buffer);doc.Accept(write);std::string json = buffer.GetString();// Output {"project":"rapidjson","stars":11}std::cout << json << std::endl;std::ofstream fout;std::string destination_name = frame_name + ".json";fout.open(destination_name);    //可以使绝对和相对路径,用\\隔开目录,test, test.json, test.txt 都行,不局限于文件格式后缀,只要是文本文档fout << buffer.GetString();fout.close();}void parseJson(std::string jsonFile) {std::ifstream config(jsonFile);std::string strConfig((std::istreambuf_iterator<char>(config)),std::istreambuf_iterator<char>());rapidjson::Document document;rapidjson::Value Obj,item,subItem;if (!document.Parse(strConfig.c_str()).HasParseError()) {if (document.HasMember("version") && document["version"].IsString()) {std::cout << "version:" << document["version"].GetString() << std::endl;}if (document.HasMember("flags") && document["flags"].IsObject()) {std::cout << "flags:{}" << std::endl;}if (document.HasMember("imageData") && document["imageData"].IsNull()) {std::cout << "imageData:null" << std::endl;}if (document.HasMember("imageWidth") && document["imageWidth"].IsInt()) {std::cout << "imageWidth:" << document["imageWidth"].GetInt() << std::endl;}if (document.HasMember("imageHeight") && document["imageHeight"].IsInt()) {std::cout << "imageHeight:" << document["imageHeight"].GetInt() << std::endl;}if (document.HasMember("imagePath") && document["imagePath"].IsString()) {std::cout << "imagePath:" << document["imagePath"].GetString() << std::endl;}if (document.HasMember("shapes") && document["shapes"].IsArray()) {Obj = document["shapes"];for(int i=0;i<Obj.Size();i++){item= Obj[i];if (item.HasMember("points") && item["points"].IsArray()) {subItem=item["points"];if (subItem.IsArray()){for(int j=0;j<subItem.Size();j++){std::cout<<"points:"<<subItem[0][j].GetDouble()<<" "<<subItem[1][j].GetDouble()<<std::endl;}}}if (item.HasMember("shape_type") && item["shape_type"].IsString()){std::cout<<"shape_type:"<<item["shape_type"].GetString()<<std::endl;}if (item.HasMember("flags") && item["flags"].IsObject()){std::cout<<"flags:{}"<<std::endl;}if (item.HasMember("group_id") && item["group_id"].IsNull()){std::cout<<"group_id::null"<<std::endl;}if (item.HasMember("label") && item["label"].IsString()){std::cout<<"label::"<<item["label"].GetString()<<std::endl;}if (item.HasMember("line_color") && item["line_color"].IsNull()){std::cout<<"line_color::null"<<std::endl;}if (item.HasMember("fill_color") && item["fill_color"].IsNull()){std::cout<<"fill_color::null"<<std::endl;}}}if (document.HasMember("lineColor") && document["lineColor"].IsArray()) {std::cout << "lineColor:";for(int i(0);i<document["lineColor"].Size();i++){std::cout<< document["lineColor"][i].GetDouble()<<",";}std::cout<<std::endl;}if (document.HasMember("fillColor") && document["fillColor"].IsArray()) {std::cout << "fillColor:";for(int i(0);i<document["fillColor"].Size();i++){std::cout<< document["fillColor"][i].GetDouble()<<",";}std::cout<<std::endl;}}}int main() {string imagePath = "region.jpg";int imageHeight = 1080;int imageWidth = 1920;std::vector<RectPoint> object = {{21.64102564102564,421.56410256410254,530.6153846153846,610.025641025641,"left_restrict_region"},{1210.102564102564,424.1282051282052,1861.3846153846152,616.4358974358975,"right_restrict_region"},{533.1794871794873,422.8461538461537,1199.8461538461538,613.8717948717948,"public_region"}};std::string::size_type iPos = imagePath.find_last_of('\\') + 1;std::string base_name = imagePath.substr(iPos, imagePath.length() - iPos);std::string label_ext = base_name;std::string frame_name = label_ext.substr(0, label_ext.rfind("."));std::cout<<"----------------------------------constructJson ----------------------------------------"<<std::endl;constructJson(imagePath,frame_name, imageHeight, imageWidth,object);std::cout<<"----------------------------------parseJson ----------------------------------------"<<std::endl;parseJson( frame_name + ".json");return 0;
}

测试结果

F:\untitled10\cmake-build-debug\untitled10.exe
----------------------------------constructJson ----------------------------------------
{"version":"3.16.7","flags":{},"imageData":null,"imageWidth":1920,"imageHeight":1080,"imagePath":"region.jpg","shapes":[
{"points":[[21.64102554321289,421.5641174316406],[530.6153564453125,610.025634765625]],"shape_type":"rectangle","flags":
{},"group_id":null,"label":"left_restrict_region","line_color":null,"fill_color":null},{"points":[[1210.1025390625,424.1
282043457031],[1861.3846435546875,616.4359130859375]],"shape_type":"rectangle","flags":{},"group_id":null,"label":"right
_restrict_region","line_color":null,"fill_color":null},{"points":[[533.1795043945313,422.8461608886719],[1199.8461914062
5,613.8717651367188]],"shape_type":"rectangle","flags":{},"group_id":null,"label":"public_region","line_color":null,"fil
l_color":null}],"lineColor":[0,255,0,128],"fillColor":[255,0,0,128]}
----------------------------------parseJson ----------------------------------------
version:3.16.7
flags:{}
imageData:null
imageWidth:1920
imageHeight:1080
imagePath:region.jpg
points:21.641 530.615
points:421.564 610.026
shape_type:rectangle
flags:{}
group_id::null
label::left_restrict_region
line_color::null
fill_color::null
points:1210.1 1861.38
points:424.128 616.436
shape_type:rectangle
flags:{}
group_id::null
label::right_restrict_region
line_color::null
fill_color::null
points:533.18 1199.85
points:422.846 613.872
shape_type:rectangle
flags:{}
group_id::null
label::public_region
line_color::null
fill_color::null
lineColor:0,255,0,128,
fillColor:255,0,0,128,

测试结果(小伙伴的名字~昊天宗)

62、Window11+Clion+MinGW32+Rapidjson构造labelme的标注文件和解析标注文件相关推荐

  1. 61、Window11+Clion+MinGW32编译MNN使用

    基本思想:使用MinGW32编译一下MNN进行推理使用 18.window10+Clion2022+minGW编译opencv4.4.0+opencv_contrib4.4.0并测试_sxj73153 ...

  2. labelme标注工具实现json标注数据批量转换

    我安装的是新版本(4.5.6)的labelme,根据源码进行了修改,实现json数据的批量转换,输出到指定目录. 以下是针对labelme新版本实现批量json_to_dataset实现方法: 一.找 ...

  3. (Windows)anaconda安装Labelme并标注自己的数据集+数据集文件准备

    主要参考文章: Windows下使用anaconda安装Labelme并标注自己的数据集_wangzhwsme的博客-CSDN博客_anaconda安装labelmehttps://blog.csdn ...

  4. Winodws10 VS2019 Clion CMake 编译 OpenCV rc 系统找不到指定的文件。NMAKE : fatal error U1077

    在从源码编译开源库这条路上,怎么这么多坑给我踩? 这次是编译 OpenCV. 简单总结 在 Windows10 系统下,使用 VS2019 编译链,在 Clion 编译 OpenCV 时,出现报错,报 ...

  5. Ubuntu环境下,使用clion编译器,使用开源opensll的对称AES算法对于文件进行加密,C++代码

    前提准备条件 需要安装openssl 需要安装openssl-dev 需要配置CMakeLists.txt文件 集体内容可以参考我提供的相关参考链接 AES_file.h #include <o ...

  6. rapidjson读取json文件_SPARK入门 - json文件读取

    环境说明 spark.version=2.4.4 scala.version=2.11.12 文件示例 {"name": "Michael", "ag ...

  7. 入门android开发

    调节调试窗口字体: https://blog.csdn.net/qq_32452623/article/details/52403725 1.单元测试(未代码验证) 报出如下错误日志打印: java. ...

  8. Java_Web笔记汇总_火热更新中。。。

    零.历史和特点 1.历史 (1)作者:James-Gosling (2)主要发展历程 1995.5.23SUN公司 正式发布了Java语言 1996年1月 开发工具包JDK1.0 1997年2月 JD ...

  9. Python 标准库之 xml.etree.ElementTree xml解析

    Python 标准库之 xml.etree.ElementTree Python中有多种xml处理API,常用的有xml.dom.*模块.xml.sax.*模块.xml.parser.expat模块和 ...

  10. 3W 字的 Spring Boot 超详细总结

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 作者|CHEN川 http://www.jianshu.c ...

最新文章

  1. 敏捷开发每日报告--day5
  2. 当NLP遇见OCR:如何提升智能文档分析效果?
  3. HihoCoder - 1457 后缀自动机四·重复旋律7(后缀自动机)
  4. Oracle 表空间与数据文件
  5. Map/Reduce
  6. vue实现5秒后自动隐藏_王者荣耀:玩家选中单妲己被5楼疯狂嘲讽,发出战绩后,秒变舔狗...
  7. 如何把APP加到HTML,如何将 Microsoft 服务添加到你的应用 (HTML)
  8. mac 安装adb工具
  9. 如何使用可提高员工敬业度的绩效管理软件
  10. CSDN-markdown(文字加色加字号、背景色等)
  11. python 子域名爬取工具
  12. 【转】推荐系统入门实践:世纪佳缘会员推荐(完整版)
  13. python散点图坐标刻度_python – 散点图中的轴范围
  14. 小米门卡协议加载失败_小米门禁卡没反应怎么回事
  15. 通过LIO工具 挂载共享 rbd 块设备
  16. 理解特性阻抗、VSWR 和反射系数(二)
  17. IC高级工程会议——DVCon中国2019欢迎您的论文投稿!
  18. 小米手机怎么删除桌面计算机,小米手机如何删除桌面文件夹?
  19. ZBrush怎样快速雕刻出头发(一)
  20. 富斯,迈克,天地飞4合1接收机说明书

热门文章

  1. python给pdf放置签名图片_利用python制作电子签名
  2. 已知二叉树的前序序列跟中序序列求后序序列(C语言)
  3. BGP手动路由聚合(学习笔记+实验验证)
  4. 用python编程解决鸡兔同笼问题
  5. android ios 录音功能,iOS与Android的音频互通
  6. Chevereto网站存放图像至相应二级分类文件夹
  7. 在word上方添加页眉和页码,单双页不同(单页页码在右,页眉在左,偶页相反)
  8. oracle 导入 imp-00008,imp导入文件时报大量的imp-0008错误
  9. 土方回填施工方案范本_联投土方回填施工方案样本
  10. mybatis java 帅帅 2021年5月17日20:36:25