int main(int argc, char * argv[]){ printf("Hello Xively Board\n"); Controller::init(); sketch(); return 0; }
void SketchRecognizer::readSketchsMat(const std::string &sketchs, cv::Mat &sketchsMat) { std::ifstream sketchs_in(sketchs.c_str()); uint sketchsize = 0; sketchs_in >> sketchsize; uint vocabularySize = 0; sketchs_in >> vocabularySize; Vec_f32_t sketch(vocabularySize); for(uint i = 0; i < sketchsize; i++) { cv::Mat temp = cv::Mat::zeros(1, vocabularySize, CV_32FC1); for(uint j = 0; j < vocabularySize; j++) { sketchs_in >> temp.at<float>(0, j); } sketchsMat.push_back(temp); std::cout << "read sketchs " << i <<"/" << sketchsize << "\r" <<std::flush; } std::cout << "read sketchs " << sketchsize <<"/" << sketchsize << "\n" <<std::flush; sketchs_in.close(); }
void GLWidget3D::findMatchingRule() { /* shapeFeatures.clear(); char filenames[][255] = {"simpleMass.xml", "LshapeMass.xml"}; // load features from files QDir dir("features"); QStringList filters; filters << "*.jpg"; QFileInfoList fileInfoList = dir.entryInfoList(filters, QDir::Files|QDir::NoDotAndDotDot); for (int i = 0; i < fileInfoList.size(); ++i) { QStringList list = fileInfoList[i].baseName().split("_"); int fi = list[0].toInt(); int si = list[1].toInt(); int pitch_angle = list[2].toInt(); int yaw_angle = list[3].toInt(); cv::Mat img = cv::imread(fileInfoList[i].absoluteFilePath().toUtf8().constData(), CV_LOAD_IMAGE_GRAYSCALE); shapeFeatures.resize(fi + 1); std::map<std::string, std::string> attrs; if (fi == 0) { attrs["bldg_height"] = boost::lexical_cast<std::string>(40); } else { attrs["bldg_height"] = boost::lexical_cast<std::string>(40); attrs["bldg_height_lower_ratio"] = boost::lexical_cast<std::string>((int)(si / 5) * 0.1 + 0.3); attrs["bldg_upper_width_ratio"] = boost::lexical_cast<std::string>((int)(si % 5) * 0.1 + 0.3); } shapeFeatures[fi].push_back(ShapeFeature(pitch_angle, yaw_angle, img, "../cga/" + std::string(filenames[fi]), attrs)); } std::cout << "load done." << std::endl; */ // create QImage object of the sketch QImage sketch(QSize(width(), height()), QImage::Format_RGB888); sketch.fill(QColor(255, 255, 255)); QPainter painter; painter.begin(&sketch); painter.setPen(QPen(QColor(0, 0, 0))); for (int i = 0; i < strokes.size(); ++i) { for (int k = 0; k < strokes[i].points.size() - 1; ++k) { painter.drawLine(strokes[i].points[k].x, strokes[i].points[k].y, strokes[i].points[k+1].x, strokes[i].points[k+1].y); } } painter.end(); //sketch.save("tet.jpg"); cv::Mat matSketch(sketch.height(), sketch.width(), CV_8UC3, const_cast<uchar*>(sketch.bits()), sketch.bytesPerLine()); // convert the sketch to grayscale cv::cvtColor(matSketch, matSketch, CV_BGR2GRAY); // blur the sketch cv::GaussianBlur(matSketch, matSketch, cv::Size(11, 11), 11, 11); // conver the sketch to mono color cv::threshold(matSketch, matSketch, 253, 255, 0); // rectangle cv::Rect roi = cvutils::computeBoundingBoxFromImage(matSketch); cv::Mat matSketch2; matSketch(roi).copyTo(matSketch2); cv::resize(matSketch2, matSketch2, cv::Size(matSketch2.cols * 0.2, matSketch2.rows * 0.2)); cv::imwrite("test_sketch.jpg", matSketch2); // // compare the sketch with the shape features extracted from the CGA grammars float min_diff = std::numeric_limits<float>::max(); ShapeFeature min_sf; for (int i = 0; i < shapeFeatures.size(); ++i) { cv::Mat shapeMat2; cv::resize(shapeFeatures[i].image, shapeMat2, matSketch2.size()); cv::Mat matDiff; cv::absdiff(shapeMat2, matSketch2, matDiff); float diff = cvutils::mat_sum(matDiff);// / cvutils::mat_sum(shapeMat2); if (diff < min_diff) { min_diff = diff; min_sf = shapeFeatures[i]; } } cv::imwrite("test_matched.jpg", min_sf.image); renderManager.removeObjects(); std::vector<Vertex> vertices; glm::mat4 mat = glm::translate(glm::mat4(), glm::vec3(0, -1, 0)); mat = glm::rotate(mat, (float)(-M_PI * 0.5f), glm::vec3(1, 0, 0)); glutils::drawGrid(100, 100, 2, glm::vec4(0.7, 0.7, 0.7, 1), glm::vec4(1, 1, 1, 1), mat, vertices); renderManager.addObject("grid", "", vertices); try { cga::parseRules(min_sf.cga_filename, cga_system.ruleSet); // set parameter values for (auto it = min_sf.attrs.begin(); it != min_sf.attrs.end(); ++it) { cga_system.ruleSet.attrs[it->first] = it->second; } cga_system.generate(); cga_system.render(&renderManager, true); } catch (const char* ex) { std::cout << "ERROR:" << std::endl << ex << std::endl; } camera.yrot = min_sf.yaw_angle; camera.xrot = min_sf.pitch_angle; camera.pos.z = 100; camera.updateMVPMatrix(); update(); }