物体检测已成为人工智能最令人兴奋的应用之一,使机器能够理解和解释视觉数据。在本教程中,我们将逐步介绍使用 yolo(只看一次)算法创建实时对象检测应用程序的步骤。这个强大的模型可以快速准确地检测图像和视频中的对象,使其适用于从监控到自动驾驶车辆的各种应用。
目录
- 什么是物体检测?
- 了解 yolo
- 设置您的环境
- 安装依赖项
- 构建对象检测应用程序
- 潜在用例
- 结论
什么是物体检测?
对象检测是一项计算机视觉任务,涉及识别和定位图像或视频流中的对象。与仅确定存在哪些对象的图像分类不同,对象检测提供检测到的对象周围的边界框及其类标签。
了解 yolo
yolo,代表“you only look once”,是一种最先进的实时目标检测算法。 yolo 的主要优点是速度;它实时处理图像,同时保持高精度。 yolo 将输入图像划分为网格,并预测每个网格单元的边界框和概率,使其能够在一次传递中检测多个对象。
设置您的环境
在我们深入研究代码之前,请确保您已安装以下软件:
- python 3.x:从 python.org 下载。
- opencv:计算机视觉任务的库。
- numpy:数值计算库。
- tensorflow 或 pytorch:取决于您运行 yolo 模型的偏好。
创建虚拟环境(可选)
创建虚拟环境可以帮助有效管理依赖关系:
python -m venv yolovenv source yolovenv/bin/activate # on windows use yolovenvscriptsctivate
登录后复制
安装依赖项
使用 pip 安装所需的库:
pip install opencv-python numpy
登录后复制
对于yolo,您可能需要下载预训练的权重和配置文件。您可以在 yolo 官方网站上找到 yolov3 权重和配置。
构建对象检测应用程序
现在,让我们创建一个使用 yolo 进行实时对象检测的 python 脚本。
第1步:加载yolo
创建一个名为 object_detection.py 的新 python 文件,并首先导入必要的库并加载 yolo 模型:
import cv2 import numpy as np # load yolo net = cv2.dnn.readnet("yolov3.weights", "yolov3.cfg") layer_names = net.getlayernames() output_layers = [layer_names[i[0] - 1] for i in net.getunconnectedoutlayers()]
登录后复制
第2步:处理视频流
接下来,我们将从网络摄像头捕获视频并处理每一帧以检测对象:
# capture video from webcam cap = cv2.videocapture(0) while true: ret, frame = cap.read() height, width, channels = frame.shape # prepare the image for yolo blob = cv2.dnn.blobfromimage(frame, 0.00392, (416, 416), (0, 0, 0), true, crop=false) net.setinput(blob) outs = net.forward(output_layers) # process the detections class_ids = [] confidences = [] 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: # adjust confidence threshold as needed # object detected center_x = int(detection[0] * width) center_y = int(detection[1] * height) w = int(detection[2] * width) h = int(detection[3] * height) # rectangle coordinates x = int(center_x - w / 2) y = int(center_y - h / 2) boxes.append([x, y, w, h]) confidences.append(float(confidence)) class_ids.append(class_id) # apply non-max suppression indexes = cv2.dnn.nmsboxes(boxes, confidences, 0.5, 0.4) # draw bounding boxes and labels on the frame for i in range(len(boxes)): if i in indexes: x, y, w, h = boxes[i] label = str(classes[class_ids[i]]) cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2) cv2.puttext(frame, label, (x, y + 30), cv2.font_hershey_plain, 3, (0, 255, 0), 3) cv2.imshow("image", frame) if cv2.waitkey(1) & 0xff == ord('q'): break cap.release() cv2.destroyallwindows()
登录后复制
第 3 步:运行应用程序
要运行应用程序,请执行脚本:
python object_detection.py
登录后复制
您应该看到一个显示网络摄像头源的窗口,其中检测到的对象实时突出显示。
潜在用例
实时物体检测具有广泛的应用,包括:
- 监控系统:自动检测安全录像中的入侵者或异常活动。
- 自动驾驶车辆:识别行人、交通标志和其他车辆以进行导航。
- 零售分析:分析商店中的客户行为和流量模式。
- 增强现实:通过检测现实世界的物体并与之交互来增强用户体验。
结论
恭喜!您已经使用 yolo 成功构建了实时对象检测应用程序。这种强大的算法为各个领域的应用开辟了多种可能性。当您进一步探索时,请考虑深入研究更高级的主题,例如针对特定对象检测任务微调 yolo 或将此应用程序与其他系统集成。
如果您有兴趣从事 ai 职业,并想了解如何成为一名成功的 ai 工程师,请查看此成为成功的 ai 工程师路线图,了解详细路线图。
请随时在下面的评论中分享您的想法、问题或经验。快乐编码!
以上就是使用 YOLO 构建实时目标检测应用程序的详细内容,更多请关注其它相关文章!