Files
AdvancedVision/NeuralDetector/Main.cpp
T
2017-12-20 12:21:17 +01:00

132 lines
2.7 KiB
C++

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
#include "Training.h"
#include "Camera.h"
#include "FeatureExtractor.h"
using namespace std;
using namespace cv;
int run();
int main(int argc, char** argv)
{
Camera cam(1);
Training tr;
cout << "Welcome to Jarvis" << endl;
cout << "Would you like to calibrate the camera (c), take pictures (p), train the network (t) or run the neural network (r)?" << endl;
char c;
cin >> c;
switch (c) {
case 'c':
cam.Calibrate();
break;
case 'p':
tr.CreateTrainingSet();
break;
case 't':
tr.LoadTrainingSet();
break;
case 'r':
run();
break;
default:
return 0;
}
cout << "The program has finished, press enter to exit" << endl;
cin.ignore();
return 0;
}
int run()
{
Camera cam = Camera(1);
NeuralNetwork bpn;
bpn.Read();
while (true)
{
//Take picture and pre-process
Mat image, gray_image, binaryImage;
image = cam.takeImage();
cvtColor(image, gray_image, CV_BGR2GRAY);
//Find contour
vector<Point> contour;
FeatureExtractor::findContour(gray_image, contour);
//Extrax features
FeatureExtractor ext = FeatureExtractor(contour);
Mat descriptors = Mat_<double>();
ext.Extract(descriptors);
descriptors = transpose(descriptors);
string cls;
bpn.Predict(descriptors, cls);
cout << "It\'s a " << cls << endl;
// teken de contouren
Point2f vertices2f[4];
ext.Rectangle().points(vertices2f);
// Convert them so we can use them in a fillConvexPoly
Point vertices[4];
for (int i = 0; i < 4; ++i) {
vertices[i] = vertices2f[i];
}
// Now we can fill the rotated rectangle with our specified color
fillConvexPoly(image, vertices, 4, Scalar(0, 0, 255));
vector<vector<Point>> contours;
contours.push_back(contour);
drawContours(image, contours, -1, CV_RGB(0, 255, 0), 4);
putText(image, cls, cvPoint(15, 30),
FONT_HERSHEY_COMPLEX, 1.0, cvScalar(0, 0, 0), 1, CV_AA);
imshow("Neural detection", image);
waitKey(0);
destroyAllWindows();
}
}
/*
// Creeer een witte image
IplImage* iplimage = cvCreateImage(cvSize(binaryImage.cols, binaryImage.rows), IPL_DEPTH_8U, 3);
Mat contourImage = cvarrToMat(iplimage);
contourImage = Scalar(255, 255, 255);
// teken de contouren op de witte image
vector<vector<Point>> contours;
contours.push_back(contour);
Point2f vertices2f[4];
ext.Rectangle().points(vertices2f);
// Convert them so we can use them in a fillConvexPoly
Point vertices[4];
for (int i = 0; i < 4; ++i) {
vertices[i] = vertices2f[i];
}
// Now we can fill the rotated rectangle with our specified color
fillConvexPoly(contourImage, vertices, 4, Scalar(0, 255, 0));
drawContours(contourImage, contours, -1, CV_RGB(255, 0, 0));
imshow("Features", contourImage);
waitKey(0);
*/