栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

【opencv-ssd-python 快速实时的进行目标检测 附上全部代码】使用opencv-ssd-python进行目标检测,使能够检测特定物体并标注出来

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【opencv-ssd-python 快速实时的进行目标检测 附上全部代码】使用opencv-ssd-python进行目标检测,使能够检测特定物体并标注出来

效果


准备工作

准备好这三个文件
coco.names
中包含各种我们能够检测的类名
frozen_inference_graph.pb
ssd_mobilenet_v3_large_coco_2020_01_14.pbtxt
为配置文件和权重文件
下载链接
其中有一个压缩文件进行解压

把能检测出来的类导入一个数组中
classname = []
classfile = 'coco.names'
with open(classfile,'rt') as f:
    # rstrip()删除string字符串末尾的指定字符
    classname = f.read().rstrip('n').split('n')
print(classname)

处理结果为classname[]包含所有的类
[‘person’, ‘bicycle’, ‘car’, ‘motorcycle’, ‘airplane’, ‘bus’, ‘train’, ‘truck’, ‘boat’, ‘traffic light’, ‘fire hydrant’, ‘street sign’, ‘stop sign’, ‘parking meter’, ‘bench’, ‘bird’, ‘cat’, ‘dog’, ‘horse’, ‘sheep’, ‘cow’, ‘elephant’, ‘bear’, ‘zebra’, ‘giraffe’, ‘hat’, ‘backpack’, ‘umbrella’, ‘shoe’, ‘eye glasses’, ‘handbag’, ‘tie’, ‘suitcase’, ‘frisbee’, ‘skis’, ‘snowboard’, ‘sports ball’, ‘kite’, ‘baseball bat’, ‘baseball glove’, ‘skateboard’, ‘surfboard’, ‘tennis racket’, ‘bottle’, ‘plate’, ‘wine glass’, ‘cup’, ‘fork’, ‘knife’, ‘spoon’, ‘bowl’, ‘banana’, ‘apple’, ‘sandwich’, ‘orange’, ‘broccoli’, ‘carrot’, ‘hot dog’, ‘pizza’, ‘donut’, ‘cake’, ‘chair’, ‘couch’, ‘potted plant’, ‘bed’, ‘mirror’, ‘dining table’, ‘window’, ‘desk’, ‘toilet’, ‘door’, ‘tv’, ‘laptop’, ‘mouse’, ‘remote’, ‘keyboard’, ‘cell phone’, ‘microwave’, ‘oven’, ‘toaster’, ‘sink’, ‘refrigerator’, ‘blender’, ‘book’, ‘clock’, ‘vase’, ‘scissors’, ‘teddy bear’, ‘hair drier’, ‘toothbrush’, ‘hair brush’]

导入配置文件和权重,并给模型设置参数
configpath = 'ssd_mobilenet_v3_large_coco_2020_01_14.pbtxt'
weightpath = 'frozen_inference_graph.pb'

net = cv2.dnn_DetectionModel(weightpath,configpath)
net.setInputSize(320,320)
net.setInputScale(1.0/127.5)
net.setInputMean((127.5,127.5,127.5))
net.setInputSwapRB(True)
导入图片进行目标检测并对每一个物体进行遍历标注
img =cv2.imread('C:/Users/Lenovo/PycharmProjects/pythonProject2/fullview/3.png')
img = cv2.resize(img,(0,0),None,0.8,0.8)
classId, confs, boxs = net.detect(img,confThreshold=0.5)

print(classId, confs, boxs)
# flatten返回一个折叠成一维的数组
# zip从两个列表中分别迭代元素
for classid,confidence,box in zip(classId.flatten(),confs.flatten(),boxs):
    cv2.rectangle(img,box,color=(0,0,255),thickness=2)
    cv2.putText(img,classname[classid-1],(box[0]+10,box[1]+30),
                cv2.FONT_HERSHEY_SIMPLEX,0.5,(0,0,255),2)

cv2.imshow('img',img)
cv2.waitKey(0)

代码
import  cv2

classname = []
classfile = 'coco.names'
with open(classfile,'rt') as f:
    # rstrip()删除string字符串末尾的指定字符
    classname = f.read().rstrip('n').split('n')
print(classname)

configpath = 'ssd_mobilenet_v3_large_coco_2020_01_14.pbtxt'
weightpath = 'frozen_inference_graph.pb'

net = cv2.dnn_DetectionModel(weightpath,configpath)
net.setInputSize(320,320)
net.setInputScale(1.0/127.5)
net.setInputMean((127.5,127.5,127.5))
net.setInputSwapRB(True)

img =cv2.imread('C:/Users/Lenovo/PycharmProjects/pythonProject2/fullview/3.png')
img = cv2.resize(img,(0,0),None,0.8,0.8)
classId, confs, boxs = net.detect(img,confThreshold=0.5)

print(classId, confs, boxs)
# flatten返回一个折叠成一维的数组
# zip从两个列表中分别迭代元素
for classid,confidence,box in zip(classId.flatten(),confs.flatten(),boxs):
    cv2.rectangle(img,box,color=(0,0,255),thickness=2)
    cv2.putText(img,classname[classid-1],(box[0]+10,box[1]+30),
                cv2.FONT_HERSHEY_SIMPLEX,0.5,(0,0,255),2)

cv2.imshow('img',img)
cv2.waitKey(0)


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/883675.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号