我想用树莓派与OpenCV + yolo做智能监控系统。
问题是:当检测到& person"时,它是否会返回Ture或False,而不是在屏幕上显示一个框?
我了解到它可以成功地在屏幕上显示一个盒子在屏幕上检测到的东西。我使用了一本中文书中的代码,我担心它会违反规则,把整个代码粘贴在这里,所以我简要描述了它使用的代码。
原始代码使用以下3个yolo文件:
yolo4-tiny.cfg
coco.names
yolo4-tine.weight
和
import cv2, numpy and time
代码将图像调整为更小的帧,然后将图像放入yolo
def XXX(image, model):
classes, confs, boxes = model.detect(image, 0.6, 0.3)
return classes, confs, boxes
下一步是在图像中显示框。
def YYY(image, classes, confs, boxes, names, colors):
new_image = image.copy()
for (classid, conf, box) in zip(classes, confs, boxes):
x, y, w , h = box
label = '{}: {:.2f}'.format(names[int(classid)], float(conf))
color = colors[int(classid)]
cv2.rectangle(new_image, (x, y), (x + w, y + h), color, 2)
cv2.putText(new_image, label, (x, y - 10),
cv2.FONT_HERSHEY_SIMPLEX, 0.7, color, 2
)
return new_image
我的问题是如何在检测"人物"时返回true。谢谢你回答这个问题。
在您的情况下,(我没有使用Yolo,但我使用了OpenCV人脸检测和MTCNN),您可以使用从detect()
函数返回的变量之一。可以安全地假设,如果模型在检测函数中创建了一个边界框,那么就存在一个人。
def XXX(image, model):
classes, confs, boxes = model.detect(image, 0.6, 0.3)
return classes, confs, boxes
x, y, z = XXX(image, model)
if z is not None: # if not an iterable
# if z.any(): # <-- this might be any(z) instead of z.any()
# do something