python opencv 规定区域手势识别_目标检测和识别:Python+OpenCV+Yolov3

1 说明:

=====

1.1 熟悉Python+OpenCV+Yolov3的目标检测和识别,以上三个都是强大的计算机视觉编程语言和库。

1.2 本代码注释清楚,小白秒懂。

1.3 图片来源今日头条正版免费图库。

1.4 原图:

ff3c713545a2513ce57eec187503f8c7.png
f6b116da251028758ce6492872ba034b.png
f24d38ce8f8d380da38b76b617dabfdd.png
30c50855923826edf2d712176c9083d9.png

1.5 效果图:

017155c18035960b9bc46a246ffddeb9.png
f7eaa266ee0ece86582e95b720c57f96.png
fcc94a53eeb5c41c78c1ae1eae644c3a.png
72256048fcff7b610f443321be8d8e92.png

2 准备:

=====

2.1 环境:python3.8+OpenCV4.2.0

2.2 三个文件:yolov3.cfg、coco.names和yolov3.weights.

Weight file:这是训练有素的模型,是检测物体的算法的核心。

Cfg file: 它是配置文件,其中包含算法的所有设置。

Name files: 包含算法可以检测到的对象的名称。

2.2.1 yolov3.cfg和coco.names,简单。

https://github.com/jielingao/yolov3  #下载地址

2.2.2 yolov3.weights文件较大,下载较慢。

#文件很大,官网下载很慢https://pjreddie.com/media/files/yolov3.weights#感谢网友提供,指定下载yolov3.weights,较快https://pan.baidu.com/s/1__zDF-pC-0eXcZc1gm6kFA#提取码:jnhn (永久有效)

3 注释版的代码main.py:

==================

3.1 第1步:导入模块

import cv2import numpy as np

3.2 第2步:加载yolov3文件(3个文件,注意路径)

#权重和配置net =  cv2.dnn.readNet('/home/xgj/Desktop/pyyolo/yolov3.weights','/home/xgj/Desktop/pyyolo/yolov3.cfg')#定义一个空的列表存放名字classes = []#打开文件并读取with open('/home/xgj/Desktop/pyyolo/coco.names','r') as f:    classes = [ line.strip() for line in f.readlines() ]layer_names = net.getLayerNames()outputlayers = [layer_names[i[0] - 1] for i in net.getUnconnectedOutLayers()]

3.3 第3步:相关设置颜色和读取图片

# 颜色设置:随机色colors= np.random.uniform(0,255,size=(len(classes),3))#字体设置font = cv2.FONT_HERSHEY_PLAIN#读取需要检测图片,注意路径img = cv2.imread('/home/xgj/Desktop/pyyolo/pic4.jpeg')#获取图片的高、宽和通道height,width,channels = img.shape

3.4 第4步:侦测物体

# Blob用于提取图片中的特征并调整其大小。 YOLO接受三种尺寸:#320×320  很小,所以精度较低,但速度快#609×609 很大,因此精度高、但速度慢 #416×416位于中间,两者的折中。blob = cv2.dnn.blobFromImage(img,0.00392,(416,416),(0,0,0),True,crop=False)net.setInput(blob)#Outs是一个数组,包含有关所检测对象的所有信息,它们的位置以及对检测的置信度的信息outs = net.forward(outputlayers)#初始化定义三个空列表class_ids=[]  #有时候叫Label:它是检测到的对象的名称confidences=[]  #从0到1的检测置信度。boxes=[]    #包含围绕检测到的对象的矩形的坐标。#遍历列表读取,存入三个列表中for out in outs:    for detection in out:        scores = detection[5:]        class_id = np.argmax(scores)        confidence = scores[class_id]        if confidence > 0.5:            #onject detected                        center_x= int(detection[0]*width)            center_y= int(detection[1]*height)            w = int(detection[2]*width)            h = int(detection[3]*height)            x=int(center_x - w/2)            y=int(center_y - h/2)                        #存入列表中            boxes.append([x,y,w,h]) #put all rectangle areas            confidences.append(float(confidence)) #how confidence was that object detected and show that percentage            class_ids.append(class_id) #name of the object tha was detected#执行检测时,碰巧我们在同一物体上有更多的BOX,因此我们应该使用另一个函数来消除这种“噪音”。 称为非最大限制indexes = cv2.dnn.NMSBoxes(boxes,confidences,0.4,0.6)

3.5 第5步:绘制框

font = cv2.FONT_HERSHEY_PLAINfor i in range(len(boxes)):    if i in indexes:        x,y,w,h = boxes[i]        label = str(classes[class_ids[i]])        color = colors[i]        cv2.rectangle(img,(x,y),(x+w,y+h),color,2)        #显示颜色255,255,255=白色;绿色=0,255,0        #3为字体大小,默认为1        cv2.putText(img,label,(x,y+30),font,3,(0,255,0),2)

3.6 第6步:显示效果图片

 cv2.imshow("Image",img)cv2.waitKey(0)cv2.destroyAllWindows()

4 小结:

=====

4.1 猴子没有检测出来,小bug。

4.2 漏掉一个人,没检测出来,小bug。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值