Commit 109da10f authored by Wangyida's avatar Wangyida

Binary data and label generation for Caffe training

parent 2b9122cb
......@@ -64,6 +64,84 @@ Point3d getCenter(string plymodel)
data.z = data.z/numPoint;
return data;
};
void createHeader(int num_item, int rows, int cols, const char* headerPath)
{
char* a0 = new char;
strcpy(a0, headerPath);
char a1[] = "image";
char a2[] = "label";
char* headerPathimg = new char;
strcpy(headerPathimg, a0);
strcat(headerPathimg, a1);
char* headerPathlab = new char;
strcpy(headerPathlab, a0);
strcat(headerPathlab, a2);
std::ofstream headerImg(headerPathimg, ios::out|ios::binary);
std::ofstream headerLabel(headerPathlab, ios::out|ios::binary);
int headerimg[4] = {2051,num_item,rows,cols};
int headerlabel[2] = {2049,num_item};
headerImg.write(reinterpret_cast<const char*>(headerimg), sizeof(int)*4);
headerImg.close();
headerLabel.write(reinterpret_cast<const char*>(headerlabel), sizeof(int)*2);
headerLabel.close();
};
void writeBinaryfile(string filename, const char* binaryPath, const char* headerPath, int num_item)
{
int isrgb = 0;
cv::Mat ImgforBin = cv::imread(filename, isrgb);
char* A0 = new char;
strcpy(A0, binaryPath);
char A1[] = "image";
char A2[] = "label";
char* binPathimg = new char;
strcpy(binPathimg, A0);
strcat(binPathimg, A1);
char* binPathlab = new char;
strcpy(binPathlab, A0);
strcat(binPathlab, A2);
fstream img_file, lab_file;
img_file.open(binPathimg,ios::in);
lab_file.open(binPathlab,ios::in);
if(!img_file)
{
cout << "Creating the training data at: " << binaryPath << ". " << endl;
char* a0 = new char;
strcpy(a0, headerPath);
char a1[] = "image";
char a2[] = "label";
char* headerPathimg = new char;
strcpy(headerPathimg, a0);
strcat(headerPathimg,a1);
char* headerPathlab = new char;
strcpy(headerPathlab, a0);
strcat(headerPathlab,a2);
createHeader(num_item, 250, 250, binaryPath);
ofstream img_file(binPathimg,ios::out|ios::binary|ios::app);
ofstream lab_file(binPathlab,ios::out|ios::binary|ios::app);
for (int r = 0; r < ImgforBin.rows; r++)
{
img_file.write(reinterpret_cast<const char*>(ImgforBin.ptr(r)), ImgforBin.cols*ImgforBin.elemSize());
}
unsigned char templab = 0;
lab_file << templab;
}
else
{
img_file.close();
lab_file.close();
img_file.open(binPathimg,ios::out|ios::binary|ios::app);
lab_file.open(binPathlab,ios::out|ios::binary|ios::app);
cout <<"Concatenating the training data at: " << binaryPath << ". " << endl;
for (int r = 0; r < ImgforBin.rows; r++)
{
img_file.write(reinterpret_cast<const char*>(ImgforBin.ptr(r)), ImgforBin.cols*ImgforBin.elemSize());
}
unsigned char templab = 0;
lab_file << templab;
}
img_file.close();
lab_file.close();
};
int main(int argc, char *argv[]){
const String keys = "{help | | demo :$ ./sphereview_test -radius=250 -ite_depth=1 -plymodel=../ape.ply -imagedir=../data/images_ape/ -labeldir=../data/label_ape.txt, then press 'q' to run the demo for images generation when you see the gray background and a coordinate.}"
"{radius | 250 | Distanse from camera to object, used for adjust view for the reason that differet scale of .ply model.}"
......@@ -93,6 +171,7 @@ int main(int argc, char *argv[]){
bool camera_pov = (true);
/// Create a window
viz::Viz3d myWindow("Coordinate Frame");
myWindow.setWindowSize(Size(250,250));
/// Add coordinate axes
myWindow.showWidget("Coordinate Widget", viz::WCoordinateSystem());
myWindow.setBackgroundColor(viz::Color::gray());
......@@ -101,6 +180,10 @@ int main(int argc, char *argv[]){
/// Let's assume camera has the following properties
Point3d cam_focal_point = getCenter(plymodel);
Point3d cam_y_dir(0.0f,0.0f,1.0f);
int num_obj = 1;
const char* headerPath = "./header_for_";
const char* binaryPath = "./binary_";
createHeader((int)campos.size(), 250, 250, headerPath);
for(int pose = 0; pose < (int)campos.size(); pose++){
imglabel << campos.at(pose).x << ' ' << campos.at(pose).y << ' ' << campos.at(pose).z << endl;
/// We can get the pose of the cam using makeCameraPoses
......@@ -142,6 +225,7 @@ int main(int argc, char *argv[]){
filename = imagedir + filename;
filename += ".png";
myWindow.saveScreenshot(filename);
writeBinaryfile(filename, binaryPath, headerPath,(int)campos.size()*num_obj);
}
return 1;
};
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment