- //程式簡化,不用太新的C++ 語法 本版本修改Size參數(原300x300),可辨識更小比例模型
- #include <opencv2/opencv.hpp>
- #include <opencv2/dnn.hpp>
- #include <librealsense2/rs.hpp>
- #include "cv-helpers.hpp"
- #include <iostream>
- #include <string>
- using namespace cv::dnn;
- using namespace cv;
- using namespace rs2;
- using namespace std;
- int main(int argc, char** argv)
- try
- {
- cout << "本版本修改Size參數,簡化非必要參數,可辨識同時多個小比例模型\n";
- string classNames[] = {
- "background", "aeroplane", "bicycle", "bird", "boat","bottle", "bus", "car", "cat", "chair","cow",
- "diningtable", "dog", "horse","motorbike", "person", "pottedplant","sheep", "sofa", "train", "tvmonitor"
- };
- Net net = readNetFromCaffe("MobileNetSSD_deploy.prototxt",
- "MobileNetSSD_deploy.caffemodel");
- // Start streaming from Intel RealSense Camera
- pipeline pipe;
- config cfg;
- const int w = 1280, h = 720, FPS = 30;
- cfg.enable_stream(RS2_STREAM_COLOR, w, h, RS2_FORMAT_BGR8, FPS);
- cfg.enable_stream(RS2_STREAM_DEPTH, w, h, RS2_FORMAT_Z16, FPS);
- pipe.start(cfg);
- rs2::align align_to(RS2_STREAM_COLOR);
- string wname = "1280*720顯示辨識";
- namedWindow(wname);
- while (getWindowProperty(wname, WND_PROP_AUTOSIZE) >= 0)
- {
- frameset data = pipe.wait_for_frames();
- data = align_to.process(data);
- frame color_frame = data.get_color_frame();
- frame depth_frame = data.get_depth_frame();
- // Convert RealSense frame to OpenCV matrix:
- Mat color_mat(h, w, CV_8UC3, (void*)color_frame.get_data());;
- Mat depth_mat = depth_frame_to_meters(depth_frame);
- //Convert Mat to batch of images Size參數原Size(300,300)
- Mat inputBlob = blobFromImage(color_mat, 1/127.5, Size( w, h), 127.5);
- net.setInput(inputBlob, "data"); //set the network input
- Mat detection = net.forward(); //compute output
- Mat detectionMat(detection.size[2], detection.size[3], CV_32F, (float*)detection.data);
- float confidenceThreshold = 0.8;
- Vec3b color[] = {Vec3b(255,255,0), Vec3b(0, 255, 0), Vec3b(0,255, 255), Vec3b(255, 255, 127)};
- for (int i = 0; i < detectionMat.rows; i++)
- {
- putText(color_mat, "Max size of Detections: "+ to_string(detection.size[2]),
- Size(30, 30), FONT_HERSHEY_SIMPLEX, 1, Scalar(0, 0, 255));
- float confidence = detectionMat.at<float>(i, 2);
- if (confidence > confidenceThreshold)
- {
- size_t objectClass = (size_t)(detectionMat.at<float>(i, 1));
- cout <<"i="<<i<<", #"<<objectClass << "\t";
- int xLeftBottom = (int)(detectionMat.at<float>(i, 3) * color_mat.cols);
- int yLeftBottom = (int)(detectionMat.at<float>(i, 4) * color_mat.rows);
- int xRightTop = (int)(detectionMat.at<float>(i, 5) * color_mat.cols);
- int yRightTop = (int)(detectionMat.at<float>(i, 6) * color_mat.rows);
- Rect object((int)xLeftBottom, (int)yLeftBottom,
- (int)(xRightTop - xLeftBottom), (int)(yRightTop - yLeftBottom));
- object = object & Rect(0, 0, depth_mat.cols, depth_mat.rows);
- cout << object;
- // Calculate mean depth inside the detection region
- // This is a very naive way to estimate objects depth
- Scalar m = mean(depth_mat(object));
- string ss = classNames[objectClass];
- ss += " Prob=" + to_string(confidence);
- ss += " Distance= " + to_string(100 * m[0]) + " cm ";
- cout << ss << endl;
- rectangle(color_mat, object, color[i%4], 2);
- int baseLine = 0;
- Size labelSize = getTextSize(ss, FONT_HERSHEY_SIMPLEX, 0.5, 1, &baseLine);
- auto center = (object.br() + object.tl()) * 0.5;
- center.x = center.x - labelSize.width / 2;
- rectangle(color_mat, Rect(Point(center.x, center.y - labelSize.height),
- Size(labelSize.width, labelSize.height + baseLine)), color[i%4], -1);
- putText(color_mat, ss, center, FONT_HERSHEY_SIMPLEX, 0.5, Scalar(0, 0, 0));
- }
- }
- imshow(wname, color_mat);
- int k=waitKey(1);
- if (k == 27) break;
- else if (k == (int)'+') imwrite("photo.png", color_mat);
- }
- destroyAllWindows();
- pipe.stop();
- return 0;
- }
- catch (exception& e){
- cerr << e.what();
- return 1;
- }
herrDeng網內搜尋

自訂搜尋
Ads
2021年12月15日 星期三
C++ realsense opencv::dnn同時辨識多個小比例模型
訂閱:
張貼留言 (Atom)
熱門文章
-
11!=?
-
教育部為提昇全民資安素養與電腦防護能力,本部於101年9月5日至11月5日舉辦「全民資安素養自我評量」活動,請在活動期間內踴躍上網檢測資訊安全素養認知程度,並有機會參與抽獎,詳情請參閱活動網站(網址: https://isafe.moe.edu.tw/event
-
請問你所使的電腦,CPU的規格 Cache多大?其他硬體配置...... 另外, "INTEL® XEON PHI™ 處理器 7230F"的大致規格為?
-
列舉對稱、非對稱密碼各三種。
-
產生50個元素的陣列並排序
-
密文=MQKAOVJW 金鑰:Rotors: 123 初始位置: W,G,U 接線板Stecker: GR
-
Caesar挪移碼密文: MCLGZ 請破譯!
-
請完成下列輸出的程式碼 $$$$$ $$$$ $$$ $$ $
沒有留言:
張貼留言