0.概述
1.原理介绍
2.代码实现
#include <iostream>
#include <opencv2/opencv.hpp>
int main() {
// Load pre-trained MobileNet SSD model and configuration
std::string model = "path_to_mobilenet_iter_73000.caffemodel";
std::string config = "path_to_deploy.prototxt";
cv::dnn::Net net = cv::dnn::readNetFromCaffe(config, model);
// Use webcam for real-time detection
cv::VideoCapture cap(0);
if (!cap.isOpened()) {
std::cerr << "Error: Couldn't open the webcam." << std::endl;
return -1;
}
while (true) {
cv::Mat frame;
cap >> frame;
// Prepare the frame for the neural network
cv::Mat blob = cv::dnn::blobFromImage(frame, 0.007843, cv::Size(300, 300), 127.5);
net.setInput(blob);
// Forward pass
cv::Mat detection = net.forward();
// Process the detection
for (int i = 0; i < detection.size[2]; i++) {
float confidence = detection.at<float>(0, 0, i, 2);
if (confidence > 0.2) { // Threshold for confidence
int classId = static_cast<int>(detection.at<float>(0, 0, i, 1));
int left = static_cast<int>(detection.at<float>(0, 0, i, 3) * frame.cols);
int top = static_cast<int>(detection.at<float>(0, 0, i, 4) * frame.rows);
int right = static_cast<int>(detection.at<float>(0, 0, i, 5) * frame.cols);
int bottom = static_cast<int>(detection.at<float>(0, 0, i, 6) * frame.rows);
// Draw bounding box for detected object
cv::rectangle(frame, cv::Point(left, top), cv::Point(right, bottom), cv::Scalar(0, 255, 0), 2);
}
}
// Display the frame with detections
cv::imshow("Real-time Object Detection", frame);
// Exit on pressing 'q'
if (cv::waitKey(1) == 'q') break;
}
cap.release();
cv::destroyAllWindows();
return 0;
}