标注数据导出文件是json格式的,也就是python的dict格式,需要读取标注结果,可以使用c++或者python,本文使用c++实现的。
JsonCpp简介
JsonCpp是一种轻量级的数据交换格式,是个跨平台的开源库,可以从
github
和
sourceforge
上下载源码。查找资料的过程中发现另一个开源库
RapidJson
,有时间可以了解一下。
JsonCpp使用
1.安装JsonCpp开源库;
$ sudo apt-get install libjsoncpp-dev
2.根据json文件编辑测试程序读取json数据;
/read_json$ ls
eye_state_20181102_20181106_095415.json read_json.cpp
3.编译调试测试程序;
/read_json$ g++ -o read_json read_json.cpp -ljsoncpp
/read_json$ ./read_json
* AMY
* read_json.cpp
* Date: 20181106
#include <iostream>
#include
<fstream>
#include
<jsoncpp/json/json.h>
int
main()
Json::Reader reader;
Json::Value root;
std::ifstream ifs;
ifs.open(
"
eye_state_20181102_20181106_095415.json
"
, std::ios::binary);
std::
string
line;
while
(std::getline(ifs, line))
if
(!reader.parse(line, root))
return
-
1
;
std::
string
url_image = root[
"
url_image
"
].asString();
std::cout
<<
"
root.size():
"
<< root.size() <<
std::endl;
std::size_t pos
= url_image.find(
"
/zrj_close
"
);
std::
string
image_name =
url_image.substr(pos);
std::cout
<<
"
image_name:
"
<< image_name <<
std::endl;
std::cout
<<
"
data:
"
<<
std::endl;
for
(
int
i=
0
; i<root[
"
result
"
].size(); i++
)
Json::Value data
= root[
"
result
"
][i][
"
data
"
];
std::cout
<<
"
val:
"
<<
std::endl;
for
(
int
j=
0
; j<data.size(); j++
)
int
val =
data[j].asInt();
std::cout
<< val <<
"
---
"
;
std::cout
<<
"
\n
"
;
line.clear();
ifs.close();
return
0
;
View Code
fatal error: json/json.h: No such file or directory
compilation terminated.
原因:没有正确安装JsonCpp开源库,或者头文件的路径不匹配。
[100%] Linking CXX executable read_json
CMakeFiles/read_json.dir/read_json.cpp.o: In function `main':
read_json.cpp:(.text.startup+0x2a): undefined reference to `Json::Reader::Reader()'
read_json.cpp:(.text.startup+0x34): undefined reference to `Json::Value::Value(Json::ValueType)'
参照
here
的方法实现的,将源码中的json和lib_json文件夹置于同一目录,使用Cmake编译过程中出现错误,即使添加了JsonCpp的include路径和‘-ljsoncpp’,这个问题暂时还没有解决,改用其他方法(g++直接编译)完成。
CMakeLists.txt
#1.cmake verson,指定cmake版本
cmake_minimum_required(VERSION 2.8)
set(CMAKE_CXX_COMPILER "g++")
list(APPEND CMAKE_CXX_FLAGS "-O3 -DNDEBUG -ffast-math -Wall -pthread -fopenmp -std=c++11 -ljsoncpp")
#2.project name,指定项目的名称,一般和项目的文件夹名称对应
project(read_json)
SET_PROPERTY(GLOBAL PROPERTY USE_FOLDERS ON)
#3.head file path,头文件目录
INCLUDE_DIRECTORIES(include; /lib/opencv2413/opencv-2.4.13.4/build/include; /usr/include)
#aux_source_directory("src/include" SOURCES_FILE)
#4.source directory,源文件目录
AUX_SOURCE_DIRECTORY(src DIR_SRCS)
#5.set environment variable,设置环境变量,编译用到的源文件全部都要放到这里,否则编译能够通过,但是执行的时候会出现各种问题,比如"symbol lookup error xxxxx , undefined symbol"
#SET(TEST_MATH${DIR_SRCS})
SET(OpenCV_DIR /lib/opencv2413/opencv-2.4.13.4/build)
FIND_PACKAGE(OpenCV REQUIRED)
#6.add executable file,添加要编译的可执行文件
#ADD_EXECUTABLE(${PROJECT_NAME} ${DIR_SRCS})
#7.add link library,添加可执行文件所需要的库,比如我们用到了libm.so(命名规则:lib+name+.so),就添加该库的名称
ADD_EXECUTABLE(read_json read_json.cpp)
TARGET_LINK_LIBRARIES(read_json ${OpenCV_LIBS})
View Code
使用Cmake的方法编译调试有问题,以后有时间遇到再解决。
3.注意json文件每条数据的层级关系,以及如何层层获取数据信息。
4.如果对JsonCpp库的某个函数调用有疑问可以查看源码学习。
1.
从文件提取json数据
;
2.
How to install and use Jsoncpp library on Ubuntu
;
3.
Jsoncpp详解
;
4.
通过Jsoncpp类库读写JSON文件
;
5.
JSON文件的读取和生成
;
6.
open-source-parsers-jsoncpp-github
;
各美其美,美美与共,不和他人作比较,不对他人有期待,不批判他人,不钻牛角尖。
心正意诚,做自己该做的事情,做自己喜欢做的事情,安静做一枚有思想的技术媛。
版权声明,转载请注明出处:https://www.cnblogs.com/happyamyhope/