// ----------------------------------------------------------------- // Name : readAny // ----------------------------------------------------------------- JoS_Element * JoSon::readAny(std::stringstream * stream) { char nextc = getNextChar(stream); switch (nextc) { case '{': return readMap(stream); case '[': return readList(stream); default: streamUnget(stream); return readLeaf(stream); } }
void FacemarkKazemiImpl :: loadModel(String filename){ if(filename.empty()){ String error_message = "No filename found.Aborting...."; CV_Error(Error::StsBadArg, error_message); return ; } ifstream f(filename.c_str(),ios::binary); if(!f.is_open()){ String error_message = "No file with given name found.Aborting...."; CV_Error(Error::StsBadArg, error_message); return ; } uint64_t len; f.read((char*)&len, sizeof(len)); char* temp = new char[(size_t)len+1]; f.read(temp, len); temp[len] = '\0'; string s(temp); delete [] temp; if(s.compare("cascade_depth")!=0){ String error_message = "Data not saved properly.Aborting....."; CV_Error(Error::StsBadArg, error_message); return ; } uint64_t cascade_size; f.read((char*)&cascade_size,sizeof(cascade_size)); loaded_forests.resize((unsigned long)cascade_size); f.read((char*)&len, sizeof(len)); temp = new char[(unsigned long)len+1]; f.read(temp, len); temp[len] = '\0'; s = string(temp); delete [] temp; if(s.compare("pixel_coordinates")!=0){ String error_message = "Data not saved properly.Aborting....."; CV_Error(Error::StsBadArg, error_message); return ; } loaded_pixel_coordinates.resize((unsigned long)cascade_size); uint64_t num_pixels; f.read((char*)&num_pixels,sizeof(num_pixels)); for(unsigned long i=0 ; i < cascade_size ; i++){ loaded_pixel_coordinates[i].resize((unsigned long)num_pixels); readPixels(f,i); } f.read((char*)&len, sizeof(len)); temp = new char[(unsigned long)len+1]; f.read(temp, len); temp[len] = '\0'; s = string(temp); delete [] temp; if(s.compare("mean_shape")!=0){ String error_message = "Data not saved properly.Aborting....."; CV_Error(Error::StsBadArg, error_message); return ; } uint64_t mean_shape_size; f.read((char*)&mean_shape_size,sizeof(mean_shape_size)); meanshape.resize((unsigned long)mean_shape_size); f.read((char*)&meanshape[0], meanshape.size() * sizeof(Point2f)); if(!setMeanExtreme()) exit(0); f.read((char*)&len, sizeof(len)); temp = new char[(unsigned long)len+1]; f.read(temp, len); temp[len] = '\0'; s = string(temp); delete [] temp; if(s.compare("num_trees")!=0){ String error_message = "Data not saved properly.Aborting....."; CV_Error(Error::StsBadArg, error_message); return ; } uint64_t num_trees; f.read((char*)&num_trees,sizeof(num_trees)); for(unsigned long i=0;i<cascade_size;i++){ for(unsigned long j=0;j<num_trees;j++){ regtree tree; f.read((char*)&len, sizeof(len)); char* temp2 = new char[(unsigned long)len+1]; f.read(temp2, len); temp2[len] = '\0'; s =string(temp2); delete [] temp2; if(s.compare("num_nodes")!=0){ String error_message = "Data not saved properly.Aborting....."; CV_Error(Error::StsBadArg, error_message); return ; } uint64_t num_nodes; f.read((char*)&num_nodes,sizeof(num_nodes)); tree.nodes.resize((unsigned long)num_nodes+1); for(unsigned long k=0; k < num_nodes ; k++){ f.read((char*)&len, sizeof(len)); char* temp3 = new char[(unsigned long)len+1]; f.read(temp3, len); temp3[len] = '\0'; s =string(temp3); delete [] temp3; tree_node node; if(s.compare("split")==0){ splitr split; readSplit(f,split); node.split = split; node.leaf.clear(); } else if(s.compare("leaf")==0){ vector<Point2f> leaf; readLeaf(f,leaf); node.leaf = leaf; } else{ String error_message = "Data not saved properly.Aborting....."; CV_Error(Error::StsBadArg, error_message); return ; } tree.nodes[k]=node; } loaded_forests[i].push_back(tree); } } f.close(); isModelLoaded = true; }