1. Trang chủ
  2. » Ngoại Ngữ

C++ install and configure opencv project in ubuntu C++ install and configure opencv project in ubuntu

19 289 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 19
Dung lượng 527,41 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

C++ install and configure opencv project in ubuntu is presented with content: Install JVM openjdk8jdk, install OpenCV, configure project for OpenCV, example. Invite you to consult the document details.

Trang 1

INSTALL AND CONFIGURE

OPENCV PROJECT IN

UBUNTU

Author: Nguyen Van Ca

Distributed Computing and Networking Research Laboratory

Email: nguyenvanca2110@gmail.com

Trang 2

I Install JVM openjdk-8-jdk

II Install OpenCV

III Configure project for OpenCV

IV Example

Trang 3

I Intall open JDK 8

1 sudo add-apt-repository ppa:openjdk-r/ppa

2 sudo apt-get update

3 sudo apt-get install openjdk-8-jdk

4 sudo update-alternatives config java

II Install OpenCV

1 sudo apt-get upgrade

2 sudo apt-get update

3 sudo apt-get install cmake

sudo apt-get install build-essential

sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev

sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

4 sudo apt-get install libgtk2.0-dev

5 sudo apt-get install python-numpy

6 mkdir release

7 cd release

8 cmake -D CMAKE_BUILD_TYPE=RELEASE -D

BUILD_NEW_PYTHON_SUPPORT=ON -D

CMAKE_INSTALL_PREFIX=/usr/local

Or

cmake -D CMAKE_BUILD_TYPE=Release -D

CMAKE_INSTALL_PREFIX=/usr/local

or

cmake -D CMAKE_BUILD_TYPE=RELEASE -D

CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D

WITH_V4L=ON -D WITH_QT=ON -D WITH_OPENGL=ON

-DCUDA_NVCC_FLAGS="-D_FORCE_INLINES"

9 make

10 sudo make install

Trang 4

III Configure for OpenCV project

Debug Mode

1 Creat new project: Hello C++

2 Click Properties of the project

3 In C/C++ Build

a Choise Setting: GCC C++ Complier  Includes

Trang 5

b GCC C++ Complier  Includes

Add new Path: /usr/local/include/opencv

/usr/local/include/opencv2

Because when we make OpenCV have: -D CMAKE_INSTALL_PREFIX=/usr/local

c GCC C++ Linker  Libraries

Add:

opencv_calib3d

opencv_contrib

opencv_core

opencv_features

opencv_flann

opencv_gpu

opencv_highgui

opencv_imgproc

opencv_legacy

Trang 6

opencv_ml

opencv_nonfree opencv_objdetect opencv_ocl opencv_photo opencv_stitching opencv_superres opencv_ts

opencv_video opencv_videostab

Trang 8

Release Mode is same with Debug Mode

Trang 9

Build OpenCV in Command Line

1 Complier

g++ DS_OpenCV.cpp -o DS_OpenCV `pkg-config opencv cflags libs`

2 And then type

sudo ldconfig

3 Run OpenCV in Command Line

./DS_OpenCV

Trang 10

// Library of OpenCV

#include<opencv2/objdetect/objdetect.hpp>

#include<opencv2/highgui/highgui.hpp>

#include<opencv2/imgproc/imgproc.hpp>

#include<opencv2/core/core.hpp>

#include<opencv2/contrib/contrib.hpp>

//==============================================

// Library of C++

#include <stdio.h>

#include <stdlib.h>

#include <sstream>

#include <string>

#include <netdb.h>

#include <iostream>

#include <unistd.h>

#include <string.h>

//==============================================

// Library of Socket

#include <sys/types.h>

#include <sys/socket.h>

#include <netinet/in.h>

using namespace cv;

using namespace std;

//==============================================

//Declare Function to process

string to_string(int i);

void receiveImage(int sock, int idimage);

void recognizeGender(Mat image, string hardKey);

void sendPOST(string harwareKey, int id_gender);

//==============================================

//Declare global variables

static int idImage = 0;

static string face_cascade_name =

"/usr/local/share/OpenCV/lbpcascades/lbpcascad e_frontalface.xml";

static string eyes_cascade_name =

"/usr/local/share/OpenCV/haarcascades/haarcasc ade_eye_tree_eyeglasses.xml";

Trang 11

//String to create POST message

static string man = "gender=man&nPersons=1&HK=";

static string woman = "gender=woman&nPersons=1&HK="; static string crowed = "gender=crowed&nPersons=1&HK=";

static string length;

static string space = "\r\n\r\n";

static string content, contentSend;

static int lengthContent;

static const char* httpRequest1;

static const char* httpRequest2;

static const char* httpRequest3;

static string httpRequest = "POST

/xibo-cms/listener.php HTTP/1.1\r\n"

"Host: dcn402.asuscomm.com \r\n"

"Content-Type: application/x-www-form-urlencoded\r\n"

"Content-Length: ";

// Can move to Main functions

// -

begin -static Ptr<FaceRecognizer> model =

createLBPHFaceRecognizer();

// Load Database trained

//model->load("database_gender.xml");

//Create model to recognize Face

// Detect Face to recognize

static CascadeClassifier face_cascade;

//face_cascade.load(face_cascade_name);

static CascadeClassifier eyes_cascade;

//eyes_cascade.load(eyes_cascade_name)

//if (!face_cascade.load(face_cascade_name))

// printf(" (!)Error loading\n");

//if (!eyes_cascade.load(eyes_cascade_name))

// printf(" (!)Error loading\n");

//lbph_cascade.load(face_cascade_name);

Trang 12

// Check for invalid input

// -end -//==============================================

// Main Function

int main() {

// Preprocessing for recognize face

model->load("database_gender.xml");

face_cascade.load(face_cascade_name);

eyes_cascade.load(eyes_cascade_name);

//=====================

//Socket to receive Image

int sockfd, newsockfd, pid;

socklen_t clilen;

// For Local Network

int portno = 22222;

// For DCN Cloud

//int portno = 20222

struct sockaddr_in serv_addr, cli_addr;

sockfd = socket(AF_INET, SOCK_STREAM, 0);

if (sockfd < 0)

perror("ERROR opening socket");

bzero((char *) &serv_addr, sizeof(serv_addr));

serv_addr.sin_family = AF_INET;

serv_addr.sin_addr.s_addr = INADDR_ANY;

serv_addr.sin_port = htons(portno);

if (bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0)

perror("ERROR on binding");

listen(sockfd, 10);

clilen = sizeof(cli_addr);

for (;;) {

idImage++;

newsockfd = accept(sockfd, (struct sockaddr *)

&cli_addr, &clilen);

if (newsockfd < 0) {

Trang 13

perror("ERROR on accept");

exit(1);

} // Create child process pid = fork();

if (pid < 0) {

perror("ERROR on fork");

exit(1);

}

if (pid == 0) {

/* This is the client process */

close(sockfd);

receiveImage(newsockfd, idImage);

exit(0);

} else {

close(newsockfd);

} }

return 0;

}

//==============================================

void receiveImage(int newsockfd, int idimage) {

//idImage++;

cout <<

"=======================BEGIN================ " << endl;

// Creat variables for processing

string keyHardware;

int ptr = 0;

int bytes;

char key[255];

Mat img = Mat::zeros(480, 640, CV_8UC3);

int imgSize = img.total() * img.elemSize();

uchar sockData[imgSize];

for (int i = 0; i < imgSize; i += bytes) {

if ((bytes = recv(newsockfd, sockData + i,

Trang 14

imgSize - i, 0)) == -1) {

perror("ERROR on accept");

} }

// Assign pixel value to img

for (int i = 0; i < img.rows; i++) {

for (int j = 0; j < img.cols; j++) {

img.at<cv::Vec3b>(i, j) = cv::Vec3b(sockData[ptr + 0],

sockData[ptr + 1], sockData[ptr + 2]);

ptr = ptr + 3;

} }

// Get Key Hardware

bytes = recv(newsockfd, key, 255, 0);

key[bytes] = '\0';

keyHardware = key;

cout << "ID Client = " << keyHardware << endl;

//For Local Network

string pidImage = to_string(idImage) + ".jpg";

cout << "Image received: " << pidImage << endl; imwrite(pidImage, img);

// For DCN Cloud

recognizeGender(img, keyHardware);

cout << "===============END===================="

<< endl;

}

//==============================================

void recognizeGender(Mat image, string key) {

cout << " -Begin Recognizing -"

<< endl;

/*

// Can move to Main functions

//begin

Ptr<FaceRecognizer> model =

createLBPHFaceRecognizer();

Trang 15

// Load Database trained

model->load("database_gender.xml");

//Create model to recognize Face

// Detect Face to recognize

CascadeClassifier face_cascade;

CascadeClassifier eyes_cascade;

if (!face_cascade.load(face_cascade_name))

printf(" (!)Error loading\n");

if (!eyes_cascade.load(eyes_cascade_name))

printf(" (!)Error loading\n");

//lbph_cascade.load(face_cascade_name);

// Check for invalid input

*/

if (!image.data) {

cout << "Could not open or find the image" << endl;

}

Mat testSample, grayImage;

cvtColor(image, grayImage, CV_BGR2GRAY);

equalizeHist(grayImage, testSample);

vector<Rect_<int> > faces;

face_cascade.detectMultiScale(testSample, faces, 1.1, 4,

CV_HAAR_DO_CANNY_PRUNING | CV_HAAR_SCALE_IMAGE, Size(20, 20),

Size(200, 200));

if (faces.size() == 1) {

cout << "Size = 1" << endl;

// Process face by face Rect face_i = faces[0];

Mat face = testSample(face_i);

vector<Rect> eyes;

eyes_cascade.detectMultiScale(face, eyes);

if (eyes.size() > 0) {

Trang 16

Mat face_resized;

resize(face, face_resized, Size(200, 200), 1.0, 1.0, INTER_CUBIC);

//rectangle(image, face_i, CV_RGB(0, 255, 0), 10);

int predictedLabel =

model->predict(face_resized);

//Send POST message to DS Server sendPOST(key, predictedLabel);

if (predictedLabel == 0)

cout << "\n Gender = MAN" << endl; else

cout << "\n Gender = WOMAN" << endl; } else {

cout << "DO NOT HAVE ANYONE" << endl;

cout << "DO NOT SEND MESSAGE" << endl; }

} else if (faces.size() > 1) {

cout << "\n Size = " << faces.size() << endl; //sendPOST(key, 2);

Mat face_resized;

unsigned int i, n = 0;

for (i = 0; i < faces.size(); i++) {

// For the face processing Rect face_i = faces[i];

Mat face = testSample(face_i);

// To recognize eyes vector<Rect> eyes;

eyes_cascade.detectMultiScale(face, eyes);

if (eyes.size() > 0) {

n++;

resize(face, face_resized, Size(200, 200), 1.0, 1.0,

INTER_CUBIC);

} }

if (n > 1) {

cout << "\n CROWDED" << endl;

sendPOST(key, 2);

}

Trang 17

if (n == 1) {

int predictedLabel =

model->predict(face_resized);

sendPOST(key, predictedLabel);

if (predictedLabel == 0)

cout << "\n Gender = MAN instead CROWED" << endl;

else

cout << "\n Gender = WOMAN instead CROWED" << endl;

} } else {

cout << "DO NOT HAVE ANYONE" << endl;

cout << "DO NOT SEND MESSAGE" << endl;

}

cout << " -End Recognizing -"

<< endl;

}

//==============================================

void sendPOST(string harwareKey, int id_gender) {

//Create new socket variables

int sockfd;

int portno = 20180;

struct sockaddr_in serv_addr;

struct hostent *server;

//Create socket to send POST message

sockfd = socket(AF_INET, SOCK_STREAM, 0);

if (sockfd < 0)

perror("ERROR opening socket");

server = gethostbyname("dcn402.asuscomm.com");

if (server == NULL) {

fprintf(stderr, "ERROR, no such host\n"); exit(0);

}

bzero((char *) &serv_addr, sizeof(serv_addr)); serv_addr.sin_family = AF_INET;

bcopy((char *) server->h_addr,

(char *)&serv_addr.sin_addr.s_addr,

Trang 18

serv_addr.sin_port = htons(portno);

if (connect(sockfd, (struct sockaddr *)

&serv_addr, sizeof(serv_addr)) < 0)

perror("ERROR connecting");

//Send data to DS server

switch (id_gender) {

case 0:

content = man + harwareKey;

lengthContent = int(content.length());

length = to_string(lengthContent);

contentSend = httpRequest + length + space + content;

httpRequest1 = contentSend.c_str();

send(sockfd, httpRequest1, strlen(httpRequest1), 0);

//cout << httpRequest1 << endl;

break;

case 1:

content = woman + harwareKey;

lengthContent = int(content.length());

length = to_string(lengthContent);

contentSend = httpRequest + length + space + content;

httpRequest2 = contentSend.c_str();

send(sockfd, httpRequest2, strlen(httpRequest2), 0);

//cout << httpRequest2 << endl;

break;

default:

content = crowed + harwareKey;

lengthContent = int(content.length());

length = to_string(lengthContent);

contentSend = httpRequest + length + space + content;

httpRequest3 = contentSend.c_str();

//cout << "httpRequest3" <<

strlen(httpRequest3) << endl;

send(sockfd, httpRequest3, strlen(httpRequest3), 0);

Trang 19

//cout << httpRequest3 << endl;

}

close(sockfd);

//cout << "Connected.\n" << endl;

// -END -}

//==============================================

string to_string(int i) {

std::stringstream ss;

ss << i;

return ss.str();

}

Ngày đăng: 14/05/2017, 06:54

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w