Opencv C++ 调用 tensorflow 模型caffe模型

Posted Gendan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Opencv C++ 调用 tensorflow 模型caffe模型相关的知识,希望对你有一定的参考价值。

include<opencv2\\opencv.hpp>

include<opencv2\\dnn.hpp>

include <iostream>

include<map>

include<string>

include<time.h>

using namespace std;
using namespace cv;
const char* classNames[]= {"background", "person", "bicycle", "car", "motorcycle", "airplane", "bus", "train", "truck", "boat", "traffic light",
"fire hydrant", "background", "stop sign", "parking meter", "bench", "bird", "cat", "dog", "horse", "sheep", "cow", "elephant", "bear", "zebra", "giraffe", "background", "backpack",
"umbrella", "background", "background", "handbag", "tie", "suitcase", "frisbee","skis", "snowboard", "sports ball", "kite", "baseball bat","baseball glove", "skateboard", "surfboard", "tennis racket",
"bottle", "background", "wine glass", "cup", "fork", "knife", "spoon","bowl", "banana", "apple", "sandwich", "orange","broccoli", "carrot", "hot dog", "pizza", "donut",
"cake", "chair", "couch", "potted plant", "bed", "background", "dining table", "background", "background", "toilet", "background","tv", "laptop", "mouse", "remote", "keyboard",
"cell phone", "microwave", "oven", "toaster", "sink", "refrigerator", "background","book", "clock", "vase", "scissors","teddy bear", "hair drier", "toothbrush"};
int main()
{

String weights = "models/frozen_inference_graph.pb";
String prototxt = "models/ssd_mobilenet_v1_coco.pbtxt";
const size_t width = 300;
const size_t height = 300;
VideoCapture capture;
capture.open(0);
namedWindow("input", CV_WINDOW_AUTOSIZE);
int w = capture.get(CAP_PROP_FRAME_WIDTH);
int h = capture.get(CAP_PROP_FRAME_HEIGHT);
printf("frame width : %d, frame height : %d", w, h);
// set up net
dnn::Net net = cv::dnn::readNetFromTensorflow(weights, prototxt);
Mat frame;
/*
while (1)    // 模式1:测试单张图像
{
    frame = imread("models/car.jpg");
    imshow("input", frame);
*/
while (capture.read(frame))        // 模式2:调用摄像头
{
    //预测
    cv::Mat inputblob = cv::dnn::blobFromImage(frame, 1. / 255, Size(width, height));
    net.setInput(inputblob);
    Mat output = net.forward();
    //检测
    Mat detectionMat(output.size[2], output.size[3], CV_32F, output.ptr<float>());
    float confidence_threshold = 0.5;
    for (int i = 0; i < detectionMat.rows; i++) {
        float confidence = [Skrill下载](https://www.gendan5.com/wallet/Skrill.html)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) * frame.cols;
            float tl_y = detectionMat.at<float>(i, 4) * frame.rows;
            float br_x = detectionMat.at<float>(i, 5) * frame.cols;
            float br_y = detectionMat.at<float>(i, 6) * frame.rows;
            Rect object_box((int)tl_x, (int)tl_y, (int)(br_x - tl_x), (int)(br_y - tl_y));
            rectangle(frame, object_box, Scalar(0, 255, 0), 2, 8, 0);
            putText(frame, format("%s", classNames[objIndex]), Point(tl_x, tl_y), FONT_HERSHEY_SIMPLEX, 1.0, Scalar(0, 255, 0), 2);
        }
    }
    imshow("ssd-video-demo", frame);
    char c = waitKey(5);
    if (c == 27) 
    { // ESC退出
        break;
    }
}
capture.release();
waitKey(0);
return 0;

}

以上是关于Opencv C++ 调用 tensorflow 模型caffe模型的主要内容,如果未能解决你的问题,请参考以下文章

加载自定义模型时 Tensorflow keras 模型到 opencv 错误(C++)

TensorFlow NN 嵌入 C++ 项目

Tensorflow实现LeNet5网络并保存pb模型,实现自定义的手写数字识别(附opencv-python调用代码)

c++ tensorflow调用与BERT实战

无法在 OpenCV 中应用 tensorflow 模型

有没有办法知道在tensorflow中调用了哪个c++核心函数?