박민혀기
캡스톤 Face_Detection, Motor_Control 본문
Face_Detection.cpp
#include <opencv2/core.hpp>
#include <opencv2/videoio.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/objdetect.hpp>
#include <opencv2/imgproc.hpp> // cv::Canny()
#include <iostream>
using namespace cv;
using namespace std;
int main(int, char**) {
Mat frame;
cout << "Opening camera..." << endl;
VideoCapture capture(0); // open the first camera
if (!capture.isOpened()){
cerr << "ERROR: Can't initialize camera capture" << endl;
return 1;
}
cout << "Frame width: " << capture.get(CAP_PROP_FRAME_WIDTH) << endl;
cout << " height: " << capture.get(CAP_PROP_FRAME_HEIGHT) << endl;
cout << "Capturing FPS: " << capture.get(CAP_PROP_FPS) << endl;
CascadeClassifier face_classifier;
face_classifier.load("/home/ps/opencv/opencv-4.4.0/data/haarcascades/haarcascade_frontalface_default.xml");
while(1){
capture >> frame; // read the next frame from camera
if (frame.empty()){
cerr << "ERROR: Can't grab camera frame." << endl;
break;
}
flip(frame, frame, 1);
Mat gray_frame;
cvtColor(frame, gray_frame, COLOR_BGR2GRAY);
equalizeHist(gray_frame, gray_frame);
vector<Rect> faces;
face_classifier.detectMultiScale(gray_frame, faces, 1.1, 3, 0|CASCADE_SCALE_IMAGE, Size(150, 150));
for(size_t i = 0; i < faces.size(); i++){
Point Face_Center = Point(faces[i].x + (faces[i].width / 2), faces[i].y + (faces[i].height / 2));
circle(frame, Face_Center, 3, Scalar(0, 0, 255), -1);
rectangle(frame, faces[i], Scalar(0, 255, 0), 3, 4, 0);
break;
}
Point Frame_Center = Point(frame.cols / 2, frame.rows / 2);
circle(frame, Frame_Center, 3, Scalar(255, 0, 255), -1);
imshow("gray_frame", gray_frame);
imshow("frame", frame);
int key = waitKey(1);
if (key == 27/*ESC*/)
break;
}
return 0;
}
Motor_Control.cpp
#include <iostream>
#include <wiringPi.h>
#include <softPwm.h>
#define ENA 15 //ENA
#define DIR 16 //DIR
#define PUL 1 //PUL
using namespace std;
void setup(){
wiringPiSetup();
pinMode(ENA, OUTPUT);
pinMode(DIR, OUTPUT);
pinMode(PUL, OUTPUT);
// digitalWrite(ENA, LOW);
// digitalWrite(DIR, LOW);
// digitalWrite(PUL, LOW);
}
int main(){
setup();
cout << "wiring pi" << endl;
while(1){
for(int i = 0; i < 1000; i++){
digitalWrite(DIR, LOW);
digitalWrite(ENA, LOW);
digitalWrite(PUL, HIGH);
delay(1);
digitalWrite(PUL, LOW);
delay(1);
}
for(int i = 0; i < 1000; i++){
digitalWrite(DIR, HIGH);
digitalWrite(ENA, LOW);
digitalWrite(PUL, HIGH);
delay(1);
digitalWrite(PUL, LOW);
delay(1);
}
}
digitalWrite(ENA, LOW);
digitalWrite(DIR, LOW);
return 0;
}
OpenCV_Motor_Control.cpp
#include <opencv2/core.hpp>
#include <opencv2/videoio.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/objdetect.hpp>
#include <opencv2/imgproc.hpp> // cv::Canny()
#include <iostream>
#include <wiringPi.h>
#define ENA 15
#define DIR 16
#define PUL 1
using namespace cv;
using namespace std;
void Motor_Control(int dis){
if(dis < 0){
dis = dis * 4;
for(int i = 0; i > dis; i--){
digitalWrite(DIR, LOW);
digitalWrite(ENA, LOW);
digitalWrite(PUL, HIGH);
delay(1);
digitalWrite(PUL, LOW);
delay(1);
}
}
else if(dis >= 0){
dis = dis * 4;
for(int i = 0; i < dis; i++){
digitalWrite(DIR, HIGH);
digitalWrite(ENA, LOW);
digitalWrite(PUL, HIGH);
delay(1);
digitalWrite(PUL, LOW);
delay(1);
}
}
}
int Center_Dis(Point frame_center, Point face_center){
int center_dis = frame_center.y - face_center.y;
return center_dis;
}
void Pin_setup(){
wiringPiSetup();
cout << "WiringPi Ready.." << endl;
pinMode(ENA, OUTPUT);
pinMode(DIR, OUTPUT);
pinMode(PUL, OUTPUT);
digitalWrite(ENA, LOW);
digitalWrite(DIR, LOW);
digitalWrite(PUL, LOW);
}
int main(int, char**) {
Pin_setup();
Mat frame;
cout << "Opening camera..." << endl;
VideoCapture capture(0); // open the first camera
if (!capture.isOpened()){
cerr << "ERROR: Can't initialize camera capture" << endl;
return 1;
}
cout << "Frame width: " << capture.get(CAP_PROP_FRAME_WIDTH) << endl;
cout << " height: " << capture.get(CAP_PROP_FRAME_HEIGHT) << endl;
cout << "Capturing FPS: " << capture.get(CAP_PROP_FPS) << endl;
CascadeClassifier face_classifier;
face_classifier.load("/home/ps/opencv/opencv-4.4.0/data/haarcascades/haarcascade_frontalface_default.xml");
int dis;
int i = 0, j = 0;
// Max = 1000 from middle
while(1){
capture >> frame; // read the next frame from camera
if (frame.empty()){
cerr << "ERROR: Can't grab camera frame." << endl;
break;
}
flip(frame, frame, 1);
Mat gray_frame;
cvtColor(frame, gray_frame, COLOR_BGR2GRAY);
equalizeHist(gray_frame, gray_frame);
vector<Rect> faces;
face_classifier.detectMultiScale(gray_frame, faces, 1.1, 3, 0|CASCADE_SCALE_IMAGE, Size(120, 120));
Point Frame_Center = Point(frame.cols / 2, frame.rows / 2);
circle(frame, Frame_Center, 3, Scalar(255, 0, 255), -1);
if(faces.size() > 0){
Point Face_Center = Point(faces[i].x + (faces[i].width / 2), faces[i].y + (faces[i].height / 2));
circle(frame, Face_Center, 3, Scalar(0, 0, 255), -1);
rectangle(frame, faces[i], Scalar(0, 255, 0), 3, 4, 0);
if(j == 0){
dis = Center_Dis(Frame_Center, Face_Center);
Motor_Control(dis);
// j++;
}
}
imshow("gray_frame", gray_frame);
imshow("frame", frame);
int key = waitKey(10);
if (key == 27/*ESC*/)
break;
}
Motor_Control(dis * -1);
return 0;
}
'Deep Learning' 카테고리의 다른 글
RaspberryPi3 mediapipe install (0) | 2023.06.01 |
---|---|
캡스톤 Age_Perception, Face_Perception(dlib model) (0) | 2023.04.04 |
GDSC Toy 프로젝트 주요코드 (0) | 2023.04.04 |
GDSC Toy Project 글자인식, JSON 형식 소스코드, 이미지 파일 (0) | 2023.02.03 |
[OCR] Tesseract, PyTesseract Install on Windows(테스트 소스코드 포함) (0) | 2023.01.18 |