日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > Caffe >内容正文

Caffe

使用OpenCV调用Caffe-SSD训练好的模型

發布時間:2025/3/21 Caffe 60 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用OpenCV调用Caffe-SSD训练好的模型 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

1.OpenCV3之后的dnn模型可以可以調用好多用深度學習框架的訓練好的模型。
2.這里我演示是我自己訓練的一個圍棋棋盤識別模型,使用的神經網絡是VGG16,OpenCV3.3,IDE是VS2015。
3.訓練好模型之后把標簽文件,模型文件,配置文件復制到當前工程目錄方便調用。

代碼

1.標簽文件內容:

label: 0 display_name: "background" label:1 display_name: "B" label:2 display_name: "H"

2.代碼

#pragma once #include <opencv2/opencv.hpp> #include <opencv2/dnn.hpp> #include <iostream>using namespace cv; using namespace cv::dnn; using namespace std; const int meanValues[3] = { 104, 117, 123 }; const size_t width = 300; const size_t height = 300; //得到標簽名 static Mat getMean(const size_t &w, const size_t &h); static Mat preprocess(const Mat &frame); vector<string> readLabels(string label_file); //得到棋盤 void getBarod(Mat &src, Mat &go_barod, string model_file, string model_text_file, string label_file);static Mat getMean(const size_t &w, const size_t &h) {Mat mean;vector<Mat> channels;for (int i = 0; i < 3; i++){Mat channel(h, w, CV_32F, Scalar(meanValues[i]));channels.push_back(channel);}merge(channels, mean);return mean; }static Mat preprocess(const Mat &frame) {Mat preprocessed;frame.convertTo(preprocessed, CV_32F);resize(preprocessed, preprocessed, Size(width, height));Mat mean = getMean(width, height);subtract(preprocessed, mean, preprocessed);return preprocessed; }void getBarod(Mat &src, Mat &go_barod, string model_file, string model_text_file, string label_file) {Rect rect;vector<string> obj_names = readLabels(label_file);Ptr<dnn::Importer> importer;try{importer = createCaffeImporter(model_text_file, model_file);}catch (const cv::Exception &err){cerr << err.msg << endl;}Net net;importer->populateNet(net);importer.release();Mat input_image = preprocess(src);Mat blobImage = blobFromImage(input_image);net.setInput(blobImage, "data");Mat detection = net.forward("detection_out");Mat detectionMat(detection.size[2], detection.size[3], CV_32F, detection.ptr<float>());float confidence_threshold = 0.2;for (int i = 0; i < detectionMat.rows; i++){float confidence = detectionMat.at<float>(i, 2);if (confidence > confidence_threshold){size_t objIndex = (size_t)(detectionMat.at<float>(i, 1));float tl_x = detectionMat.at<float>(i, 3) * src.cols;float tl_y = detectionMat.at<float>(i, 4) * src.rows;float br_x = detectionMat.at<float>(i, 5) * src.cols;float br_y = detectionMat.at<float>(i, 6) * src.rows;rect = Rect((int)tl_x, (int)tl_y, (int)(br_x - tl_x), (int)(br_y - tl_y));rectangle(src, rect, Scalar(i * 10, 0, 255), 2, 8, 0);putText(src, format("%s", obj_names[objIndex].c_str()), Point(tl_x, tl_y), FONT_HERSHEY_SIMPLEX, 1.0, Scalar(255, 0, 0), 2);}}namedWindow("src", 0);imshow("src",src); }//得到標簽名 void readLabels(vector<string> obj_names, string label_file) {ifstream fp(label_file);if (!fp.is_open()){printf("could not open the file...\n");exit(-1);}string name;while (!fp.eof()){getline(fp, name);if (name.length() && (name.find("display_name:") == 0)){string temp = name.substr(15);temp.replace(temp.end() - 1, temp.end(), "");obj_names.push_back(temp);}} }void adaptiveLogarithmicMapping(const Mat& img, Mat &dst) {Mat ldrDrago;img.convertTo(ldrDrago, CV_32FC3, 1.0f / 255);cvtColor(ldrDrago, ldrDrago, cv::COLOR_BGR2XYZ);Ptr<TonemapDrago> tonemapDrago = createTonemapDrago(1.f, 1.f, 0.85f);tonemapDrago->process(ldrDrago, dst);cvtColor(dst, dst, cv::COLOR_XYZ2BGR);dst.convertTo(dst, CV_8UC3, 255); }vector<string> readLabels(string label_file) {vector<string> objNames;ifstream fp(label_file);if (!fp.is_open()) {printf("could not open the file...\n");exit(-1);}string name;while (!fp.eof()){getline(fp, name);if (name.length() && (name.find("display_name:") == 0)){string temp = name.substr(15);temp.replace(temp.end() - 1, temp.end(), "");objNames.push_back(temp);}}return objNames; }

主函數:

#include "function.h"string label_file = "weiqi.txt"; string model_file = "weiqi.caffemodel"; string model_text_file = "weiqi.prototxt";int main(void) {Mat backbackground = imread("b1.jpg");if (backbackground.empty()){cout<<"could not load image...\n")<<endl;return -1;}Mat frame, go_barod,standard_barod;getBarod(backbackground, go_barod,model_file,model_text_file, label_file);waitKey(0);return 0; }

測試結果:

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的使用OpenCV调用Caffe-SSD训练好的模型的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久草免费福利 | 国产真实乱在线更新 | 一级欧美一级日韩 | 免费欧美一级视频 | 娇小的粉嫩xxx极品 国产精品人人爽人人爽 | 日韩精品1 | 色男人在线 | 今天最新中文字幕mv高清 | 欧美性做爰猛烈叫床潮 | 天堂av观看 | 丝袜诱惑一区 | 国产婷婷在线观看 | 中文字幕免费高清 | 亚洲第1页 | 日本亚洲色大成网站www久久 | 精品人妻一区二区三区蜜桃视频 | 99这里都是精品 | 先锋影音av资源站 | 久久精品国产亚洲av嫖农村妇女 | 在线视频在线观看 | 人人超碰在线 | 亚洲精选一区二区三区 | 污片网站在线观看 | 天堂网视频在线观看 | 日韩在线播放中文字幕 | 亚洲欧美日韩精品在线 | 51自拍视频 | 亚洲五月网| 乱亲女h秽乱长久久久 | www四虎| 天天干天天谢 | 日本精品视频在线观看 | 激情视频免费在线观看 | 久久99精品久久久久久国产越南 | 窝窝午夜精品一区二区 | 免费观看一级黄色片 | h在线播放| 国产第五页 | 国产三级a | 成人av免费网站 | 女人18岁毛片 | 亚洲一卡二卡三卡四卡 | 亚洲一级片免费 | 亚洲最大色网站 | 韩国三级丰满少妇高潮 | 国产精品有码 | 国产精品视频入口 | 亚洲理论片 | 草草影院最新 | 日韩成人黄色片 | 1024你懂的日韩 | 操xxxx | 国产精品欧美一区喷水 | 欧美男女激情 | 亚洲性喷水 | 日韩精品在线观看一区二区三区 | 欧洲成人在线观看 | 精品人妻午夜一区二区三区四区 | 九九免费精品视频 | 激情伦成人综合小说 | 99精品久久久久久久 | 国产一区欧美二区 | 特级西西444www | 一区二区精彩视频 | 久久精品一 | 精国产人伦一区二区三区 | 色综合av| 久色福利| 性网址| 国产成人精品一区二区色戒 | 一级黄色片在线观看 | 秋霞中文字幕 | 日本欧美一级 | 亚洲高清成人 | 日韩经典在线观看 | 国产cao| 已满18岁免费观看电视连续剧 | 在线中文视频 | 黄色网在线播放 | 天堂色av| 国产美女无遮挡免费视频 | 东北少妇不戴套对白第一次 | 国产欧美一区二区精品性色99 | 亚洲第一页在线观看 | 色狠狠一区二区 | 欧美日韩高清一区 | 999免费| 亚洲第一成年网 | 人妻 校园 激情 另类 | 91桃色在线观看 | 国产精品1 | 成人一区二区三区在线观看 | 久久久久久久国产精品毛片 | 特级性生活片 | 免费黄视频在线观看 | 久久嫩草| 成人区人妻精品一区 | 日本久操 | 老司机久久精品视频 |