Basic idea: Provide a json file, analyze and transfer key information
{"video_name":"xxx.mp4","
frame_rate":10,"video_frames":1004,"frame_width":1080,"frame_height":720,"camera
_id":"xxxxx","time":"3020-01-16 20:39:18.089","frame_total":1034,"frame_
results":[{"frame_num":0,"detect_results":[]},{"frame_num":2,"detect_results":[]
},{"frame_num":4,"detect_results":[]},{"frame_num":5,"detect_results":[]},{"fram
e_num":7,"detect_results":[]},{"frame_num":8,"detect_results":[]},{"frame_num":1
0,"detect_results":[]},{"frame_num":11,"detect_results":[]},{"frame_num":13,"det
ect_results":[]},{"frame_num":14,"detect_results":[]},{"frame_num":16,"detect_re
sults":[]},{"frame_num":19,"detect_results":[]},{"frame_num":20,"detect_results"
:[]},{"frame_num":22,"detect_results":[]},{"frame_num":23,"detect_results":[]},{
"frame_num":25,"detect_results":[]},{"frame_num":26,"detect_results":[]},{"frame
_num":28,"detect_results":[]},{"frame_num":29,"detect_results":[{"class_id":3,"class":"dog","score":0.6641687750
816345,"x_min":0.5097185373306274,"y_min":0.5797778367996216,"x_max":0.593885421
7529297,"y_max":0.7383118867874146},{"class_id":1,"class":"cat","score":0.49607
405066490173,"x_min":0.6755297183990479,"y_min":0,"x_max":0.9958200454711914,"y_
max":0.12107037752866745}]},{"frame_num":
31,"detect_results":[]}]}
a.json file
File analysis and staging
The premise can use rapidjson
sudo apt-get install rapidjson-dev
#include<iostream>
#include<rapidjson/document.h>
#include <fstream>
#include <map>
#include <string>
#include<Eigen/Dense>
#include<vector>
using namespace std;
using namespace rapidjson;
using namespace Eigen;
typedef struct
{
int class_id;
string class_type;
double score;
double x_min;
double y_min;
double x_max;
double y_max;
} INFO;
int main(int argc,char **argv)
{
INFO info;
vector<INFO> vec_detect;
map<int,vector<INFO> > map_detect;
fstream file_in;
Document document;
const char* json_data="a.json";
file_in.open(json_data);
if (!file_in.is_open())
{
cout<<"open file is fail"<<endl;
}
string fileData( ( istream_iterator<char>(file_in) ), istream_iterator<char>());
if (!document.Parse(fileData.c_str()).HasParseError())
{
if (document.HasMember("video_name") && document["video_name"].IsString())
cout<<document["video_name"].GetString()<<endl;
const Value& V=document["frame_results"];
for(int i = 0; i < V.Size(); ++i){
cout<<V[i]["frame_num"].GetInt()<<endl;
const Value& v=V[i]["detect_results"];
for (int j=0;j<v.Size();j++)
{
info.class_id=v[j]["class_id"].GetDouble();
info.class_type=v[j]["class"].GetString();
info.score = v[j]["score"].GetDouble();
info.x_min=v[j]["x_min"].GetDouble();
info.y_min = v[j]["y_min"].GetDouble();
info.x_max=v[j]["x_max"].GetDouble();
info.y_max = v[j]["y_max"].GetDouble();
vec_detect.push_back(info);
}
map_detect[V[i]["frame_num"].GetInt()]=vec_detect;
}
}
// 存储json文件的内容 使用腾讯的rapidjson
//test code
map<int ,vector<INFO> >::iterator iter= map_detect.find(29);
if(iter != map_detect.end())
{
cout<<"Find, the value is"<<endl;
for(size_t i=0;i<((*iter).second).size();i++)
cout<<((*iter).second)[i].score<<endl;
}
else
cout<<"Do not Find"<<endl;
return 0;
}
ubuntu@ubuntu:~$ g++ main.cpp -o test
ubuntu@ubuntu:~$ ./test
xxx.mp4
0
2
4
5
7
8
10
11
13
14
16
19
20
22
23
25
26
28
29
31
Find, the value is
0.664169
0.496074