1、opencv3.3以上版本安装

    1. 忽略,见博客

    效果图
    树莓派实现目标实时检测opencv-Moblenet_人工智能_xiao__run的博客-CSDN博客 - 图1
    在OpenCV3.3版本发布中把DNN模块从扩展模块移到了OpenCV正式发布模块中,当前DNN模块最早来自Tiny-dnn,可以加载预先训练好的Caffe模型数据,OpenCV做了近一步扩展支持所有主流的深度学习框架训练生成与导出模型数据加载,常见的有如下:
    Caffe
    TensorFlow
    Torch/PyTorch
    OpenCV中DNN模块已经支持与测试过这些常见的网络模块
    AlexNet
    GoogLeNet v1 (also referred to as Inception-5h)
    ResNet-34/50/…
    SqueezeNet v1.1
    VGG-based FCN (semantical segmentation network)
    ENet (lightweight semantical segmentation network)
    VGG-based SSD (object detection network)
    MobileNet-based SSD (light-weight object detection network)
    一:GoogleNet Caffe模型数据说明
    OpenCV通过支持加载这些预先训练好的模型,实现图像分类、对象检测、语义分割、风格迁移等功能。支持Android/iOS等移动端平台开发。下面我们就以OpenCV3.3 使用Caffe的GoogleNet数据模型为例,实现对图像常见分类,OpenCV3.3的DNN模块使用的模型支持1000种常见图像分类、googlenet深度学习网络模型是2014图像分类比赛的冠军、首先是下载相关的数据模型文件
    bvlc_googlenet.caffemodel
    bvlc_googlenet.prototxt
    其中prototxt是一个文本的JSON文件、一看就明白啦,另外一个文件二进制文件。文本文件只有你下载了OpenCV3.3解压缩之后就会在对应的目录发现。模型文件需要从以下地址下载即可: http://dl.caffe.berkeleyvision.org/bvlc_googlenet.caffemodel

    接下来我们用python调用Moblenet

    1. import numpy as np
    2. import argparse
    3. import cv2
    4. ap = argparse.ArgumentParser()
    5. ap.add_argument("-i", "--image", required=True,
    6. help="path to input image")
    7. ap.add_argument("-p", "--prototxt", required=True,
    8. help="path to Caffe 'deploy' prototxt file")
    9. ap.add_argument("-m", "--model", required=True,
    10. help="path to Caffe pre-trained model")
    11. ap.add_argument("-c", "--confidence", type=float, default=0.2,
    12. help="minimum probability to filter weak detections")
    13. args = vars(ap.parse_args())
    14. CLASSES = ["background", "aeroplane", "bicycle", "bird", "boat",
    15. "bottle", "bus", "car", "cat", "chair", "cow", "diningtable",
    16. "dog", "horse", "motorbike", "person", "pottedplant", "sheep",
    17. "sofa", "train", "tvmonitor"]
    18. COLORS = np.random.uniform(0, 255, size=(len(CLASSES), 3))
    19. print("[INFO] loading model...")
    20. net = cv2.dnn.readNetFromCaffe(args["prototxt"], args["model"])
    21. image = cv2.imread(args["image"])
    22. (h, w) = image.shape[:2]
    23. blob = cv2.dnn.blobFromImage(cv2.resize(image, (300, 300)), 0.007843, (300, 300), 127.5)
    24. print("[INFO] computing object detections...")
    25. net.setInput(blob)
    26. detections = net.forward()
    27. for i in np.arange(0, detections.shape[2]):
    28. confidence = detections[0, 0, i, 2]
    29. if confidence > args["confidence"]:
    30. idx = int(detections[0, 0, i, 1])
    31. box = detections[0, 0, i, 3:7] * np.array([w, h, w, h])
    32. (startX, startY, endX, endY) = box.astype("int")
    33. label = "{}: {:.2f}%".format(CLASSES[idx], confidence * 100)
    34. print("[INFO] {}".format(label))
    35. cv2.rectangle(image, (startX, startY), (endX, endY),
    36. COLORS[idx], 2)
    37. y = startY - 15 if startY - 15 > 15 else startY + 15
    38. cv2.putText(image, label, (startX, y),
    39. cv2.FONT_HERSHEY_SIMPLEX, 0.5, COLORS[idx], 2)
    40. cv2.imshow("Output", image)
    41. cv2.waitKey(0)