前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >从零开始学习 YOLOv8:目标检测与车牌识别实例

从零开始学习 YOLOv8:目标检测与车牌识别实例

作者头像
繁依Fanyi
发布于 2024-10-23 00:05:49
发布于 2024-10-23 00:05:49
1.5K00
代码可运行
举报
运行总次数:0
代码可运行

1. 引言

什么是目标检测?

目标检测就像是在寻找隐藏的宝藏。想象一下,你在一个巨大的图画里,里面藏着无数的物体,而你的任务是迅速找到其中的几样,比如说,一只流浪的小猫和一辆红色的小轿车。目标检测就是让计算机“眼明手快”,准确找出这些目标,甚至告诉你“喵,那个小猫正躲在花丛里!”

YOLO(You Only Look Once)概述

在目标检测的世界里,YOLO(You Only Look Once)就像是一位“侦探界的快枪手”。它不像某些方法那样耐心地逐步扫描整个图像,而是一次性快速看完,立即给出答案。可以说,YOLO 是个效率极高的工作狂,不管是监控、自动驾驶还是人脸识别,YOLO 都能帮你迅速解决问题。

YOLOv8 的发展背景

YOLOv8 是 YOLO 系列的最新版本,它在速度、精度和易用性上都有了显著提升。就像电影系列的续集一样,YOLOv8 带来了更多惊喜和更酷的特效。它不仅能处理常规的目标检测任务,还能扩展到实例分割和关键点检测,仿佛是变身为超级英雄,能够应对各种挑战。

2. YOLOv8 基础知识

YOLOv8 的架构

YOLOv8 的结构可谓是“全能选手”,主要分为三个部分:主干网络、颈部网络和头部网络。

  • 主干网络:就像是一位“特征猎人”,负责从图像中提取出各种特征。它通常使用深度卷积神经网络(CNN),能够识别出不同的物体特征。
  • 颈部网络:此部分负责将不同尺度的特征进行融合,简直就是“信息调解者”,把各方的意见汇总成最准确的结论。
  • 头部网络:最后,头部网络会输出每个物体的边界框和类别概率,完成目标的检测。它就像是一位“决策者”,告诉你每个目标在哪里,以及它是谁。

这种模块化的设计让 YOLOv8 能够灵活应对各种任务,无论是要找出一个小猫,还是识别一辆车牌。

YOLOv8 的优势
  • 速度快:YOLOv8 的速度如同子弹般迅速,几乎可以实时处理视频流,特别适合自动驾驶这样的高强度应用。
  • 精度高:在复杂的环境下,YOLOv8 的准确率也非常出色,能够准确地找到你要的目标,就像侦探们精准无误地抓住了犯罪嫌疑人。
  • 易用性:YOLOv8 提供了简单易用的 API,让你轻松上手,仿佛是在和一位友好的导师合作,指导你如何成为目标检测的高手。

3. 环境准备

安装 Python 和 Anaconda

在开始之前,确保你的计算机上安装了 Python。我们推荐使用 Anaconda,简单易用,就像是一把“万能钥匙”,为你打开数据科学的大门。

  1. 前往 Anaconda 官方网站 下载适合你操作系统的版本,放心,安装过程就像泡咖啡一样简单。
  2. 按照安装指南完成安装,然后就可以开心地开始你的 Python 之旅了。
安装必要的库

打开终端或 Anaconda Prompt,运行以下命令安装 YOLOv8 所需的库:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
conda create -n yolov8 python=3.9
conda activate yolov8
pip install torch torchvision torchaudio
pip install opencv-python
pip install numpy
pip install ultralytics

通过这些步骤,你便为 YOLOv8 的使用打下了坚实的基础。现在你就可以像拥有了一把魔法棒,随心所欲地进行目标检测了!

下载 YOLOv8 模型

使用 ultralytics 库可以直接下载 YOLOv8 模型,几乎不费吹灰之力:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from ultralytics import YOLO

# 下载预训练模型
model = YOLO('yolov8n.pt')

你可以把这段代码想象成“快递小哥”,一键送货到家,拿到手后立刻准备使用。

4. YOLOv8 的基本使用

加载 YOLOv8 模型

加载 YOLOv8 模型就像打开一本新书,充满了未知的期待:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from ultralytics import YOLO

# 加载模型
model = YOLO('yolov8n.pt')

这段代码简直就是给你的程序插上了翅膀,准备开始探索目标检测的世界。

进行目标检测

使用 YOLOv8 进行目标检测只需几行代码。假设你有一张待检测的图像:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import cv2

# 读取图像
image = cv2.imread('your_image.jpg')

# 进行推理
results = model(image)

# 显示结果
results.show()

这段代码会迅速输出检测结果,让你看到图像中识别出的物体,简直像是在参加一场“识别大赛”,谁的目标找得快,谁就赢!

解析检测结果

一旦检测完成,你可以提取检测到的边界框和置信度。以下是如何实现的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for result in results:
    boxes = result.boxes.xyxy  # 获取边界框坐标
    confidences = result.boxes.conf  # 获取置信度
    for box, confidence in zip(boxes, confidences):
        if confidence > 0.5:  # 设置置信度阈值
            x1, y1, x2, y2 = map(int, box)  # 获取坐标
            cv2.rectangle(image, (x1, y1), (x2, y2), (255, 0, 0), 2)  # 绘制边界框

在这里,设置了一个置信度阈值,确保只绘制那些“自信满满”的目标,正如在生活中,只有那些“信心十足”的人才敢在聚光灯下大方展示自己。

5. YOLOv8 车牌检测与 EasyOCR 识别实例

车牌检测的意义

车牌检测不仅能提高停车管理效率,也广泛应用于交通监控和公共安全等领域。想象一下,停车场的管理者只需依赖智能系统,就能自动记录进出车辆的信息,省去人工抄写的繁琐。这项技术真的是一位“现代生活”的小助手!

车牌检测的原理

车牌检测的过程可以分为几个关键步骤:

  1. 图像采集:通过摄像头获取车辆图像。
  2. 目标检测:使用 YOLOv8 检测图像中的车辆和车牌区域。
  3. 车牌定位:在检测到的车辆区域中进一步定位车牌的位置。
  4. 字符分割与识别:使用 EasyOCR 对车牌中的字符进行识别,最终得到车牌号。
1. 图像采集

摄像头负责捕捉周围环境中的图像。为了确保图像质量清晰,摄像头需要根据光照条件和天气情况进行调整。

2. 目标检测

在这一阶段,我们使用 YOLOv8 模型进行目标检测。YOLOv8 会快速识别图像中的车辆和车牌区域。这一过程可以想象为侦探在图像中寻找线索,快速识别出目标。

3. 车牌定位

在车辆检测完成后,我们需要在车辆区域中进一步定位车牌的位置。这通常可以通过区域提议网络(RPN)生成可能的车牌区域。

4. 字符分割与识别

接下来,我们使用 EasyOCR 进行字符识别。EasyOCR 是一个开源的光学字符识别库,支持多种语言和字符集,特别适合车牌识别等应用。它通过深度学习模型对图像中的字符进行分析和识别,最终提取出车牌号码。

数据集准备

为了训练车牌检测模型,你需要一个标注好的数据集。可以使用以下常见数据集:

  • OpenALPR Benchmark Dataset:包含多种国家的车牌样本,适合用来训练和测试模型。
  • 自定义数据集:使用工具如 LabelImg 来标注自己的车牌数据集,收集不同环境下的车牌样本。
数据预处理

确保你的数据集格式符合 YOLO 的要求。每个图像对应一个文本文件,文件中包含每个目标的类别和边界框坐标。例如,车牌图像 plate1.jpg 的标注文件 plate1.txt 可能如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
0 0.5 0.5 0.2 0.1

这表示类别为 0(车牌),中心点在图像的 (0.5, 0.5) 位置,宽度和高度分别为 0.2 和 0.1。标注信息就像宝藏的坐标,指引着你找到目标。

训练模型

准备好数据集后,可以开始训练 YOLOv8 模型。确保数据集路径和标签文件正确。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from ultralytics import YOLO

# 加载预训练模型
model = YOLO('yolov8n.pt')

# 训练模型
model.train(data='path/to/your/data.yaml', epochs=50)

在这里,data.yaml 文件应包含数据集的详细信息,包括训练集和验证集的路径,以及类别信息。

测试与识别车牌

训练完成后,使用测试图像验证模型性能并识别车牌。以下是如何结合 YOLOv8 和 EasyOCR 实现车牌检测与识别的代码示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import cv2
from ultralytics import YOLO
import easyocr

# 加载模型
model = YOLO('yolov8n.pt')
reader = easyocr.Reader(['en'], gpu=False)  # 初始化 EasyOCR,使用英文识别

# 读取测试图像
test_image = cv2.imread('test_plate.jpg')

# 进行推理
results = model(test_image)

# 获取车牌区域并识别
for result in results:
    boxes = result.boxes.xyxy  # 获取边界框坐标
    confidences = result.boxes.conf  # 获取置信度
    for box, confidence in zip(boxes, confidences):
        if confidence > 0.5:  # 设置置信度阈值
            x1, y1, x2, y2 = map(int, box)  # 获取坐标
            plate_region = test_image[y1:y2, x1:x2]  # 提取车牌区域

            # 使用 EasyOCR 识别车牌字符
            results = reader.readtext(plate_region)
            plate_number = ""
            for (bbox, text, prob) in results:
                plate_number += text + " "  # 合并识别出的字符

            # 绘制边界框并显示识别结果
            cv2.rectangle(test_image, (x1, y1), (x2, y2), (255, 0, 0), 2)
            cv2.putText(test_image, plate_number.strip(), (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 0, 0), 2)

# 显示检测结果
cv2.imshow('Detected Plates', test_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这个代码示例中,我们首先通过 YOLOv8 检测车牌区域,然后利用 EasyOCR 对提取到的车牌图像进行字符识别。通过这种结合,你可以准确地提取车牌号码,并在图像上绘制边界框及识别结果。

6. 封装成 API

6.1 环境准备

首先,确保你已经安装了 Flask 和其他所需库。如果还没有,可以通过以下命令安装:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install flask ultralytics easyocr opencv-python
6.2 创建 Flask 应用

接下来,我们可以创建一个简单的 Flask 应用,接收上传的图像并返回识别的车牌号码。以下是完整的代码示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from flask import Flask, request, jsonify
import cv2
from ultralytics import YOLO
import easyocr

app = Flask(__name__)

# 加载模型
model = YOLO('yolov8n.pt')
reader = easyocr.Reader(['en'], gpu=False)

@app.route('/detect_plate', methods=['POST'])
def detect_plate():
    if 'file' not in request.files:
        return jsonify({'error': 'No file part'}), 400
    
    file = request.files['file']
    if file.filename == '':
        return jsonify({'error': 'No selected file'}), 400

    # 将上传的图像读取为 NumPy 数组
    in_memory_file = file.read()
    np_arr = np.frombuffer(in_memory_file, np.uint8)
    test_image = cv2.imdecode(np_arr, cv2.IMREAD_COLOR)

    # 进行推理
    results = model(test_image)
    plate_number = ""

    # 获取车牌区域并识别
    for result in results:
        boxes = result.boxes.xyxy  # 获取边界框坐标
        confidences = result.boxes.conf  # 获取置信度
        for box, confidence in zip(boxes, confidences):
            if confidence > 0.5:  # 设置置信度阈值
                x1, y1, x2, y2 = map(int, box)  # 获取坐标
                plate_region = test_image[y1:y2, x1:x2]  # 提取车牌区域

                # 使用 EasyOCR 识别车牌字符
                ocr_results = reader.readtext(plate_region)
                for (_, text, _) in ocr_results:
                    plate_number += text + " "  # 合并识别出的字符

    return jsonify({'plate_number': plate_number.strip()}), 200

if __name__ == '__main__':
    app.run(debug=True)
6.3 代码解析
  • Flask 应用:我们创建了一个 Flask 应用,定义了一个 /detect_plate 路由,接收 POST 请求。
  • 文件处理:应用检查请求中是否包含文件,并读取上传的图像。
  • YOLOv8 检测:将图像传递给 YOLOv8 模型进行检测,提取车牌区域。
  • EasyOCR 识别:使用 EasyOCR 对提取到的车牌区域进行字符识别。
  • 返回结果:识别结果以 JSON 格式返回,包括识别到的车牌号码。
6.4 启动 API

运行 Flask 应用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python app.py

默认情况下,API 将在 http://127.0.0.1:5000 运行。

6.5 测试 API

你可以使用 Postman 或 cURL 测试这个 API。以下是使用 cURL 的示例命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
curl -X POST -F "file=@test_plate.jpg" http://127.0.0.1:5000/detect_plate

API 将返回识别的车牌号码,例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{"plate_number": "ABC 1234"}

结语

通过以上步骤,我们成功将车牌检测与识别功能封装成了一个 API。这使得车牌识别的过程变得更加灵活和易于集成,无论是用于实时监控还是其他应用场景。

希望这个 API 能为你提供便利,并激励你在计算机视觉的旅程中继续探索更多可能性!如果有任何问题或建议,欢迎留言交流,咱们一起“侦探”到底!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-10-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
WP-PostViews Plus统计插件在TwentyTen主题下的使用
为了博客的文章浏览统计,让我这个不怎么熟悉 PHP 的菜鸟硬是从昨晚折腾到现在! 主要原因是我不太熟悉 PHP 的结构,结果被网上的教程搞得云里雾里,通过度娘搜到关于WP-PostViews Plus
张戈
2018/03/26
1K0
WordPress浏览次数统计插件:WP-PostViews Plus
wp-postviews-plus,该插件可以统计每篇文章的浏览次数,根据展示次数显示历史最热或最衰的文章排行、展示范围可以是全部文章和页面,并且启用插件后自动在外观-小工具中生成浏览数排行的小工具,你可以把它拖到边栏中构建阅读排行、热门收藏等待栏目。wp-postviews-plus 可以设置统计对象:任何人、匿名访客、已登录用户,可以排除统计蜘蛛爬虫。最新版的wp-postviews-plus已经支持缓存并且已经支持中文,即使你使用了 WP Super Cache 等缓存插件缓存,它照样可以正常统计。
zhangdd
2018/08/01
1.7K0
wordpress显示文章浏览量&&显示阅读排行榜-用插件实现
WP-PostViews 插件可轻松实现文章阅读数统计功能,而且还可以实现侧边栏 Widget 以及显示最受欢迎(阅读数最多)文章、某分类下最受欢迎(阅读数最多)文章等功能。
超级小可爱
2023/02/17
1.8K0
WordPress阅读量作弊随机增加教程
本教程是为了解决那些刚刚创建的网站,被访客浏览时,网站文章阅读量数字显示个位或是十位数的尴尬,以下内容只针对于主题安装或是集成了wp-postviews插件的wordpress主题,通过以下wordpress插件的修改方法与wordpress主题的修改方法实现流量爆棚的效果。经测试,完美兼容dux主题。
主机测评
2019/04/26
2.1K0
WordPress阅读量作弊随机增加教程
inove主题 wp-postviews 后续完善.显示阅读次数
作者:matrix 被围观: 3,634 次 发布时间:2011-07-16 分类:Wordpress 兼容并蓄 | 一条评论 »
HHTjim 部落格
2022/09/26
2750
使用 WP-Postviews 统计日志浏览次数
WP-Postviews 是我一直推荐的插件之一,它可以在统计每篇日志被浏览的次数,通过对每篇日志的统计,这样我就可以知道哪些日志受读者欢迎,并且可以实现博客日志流量 Top 10 等功能,非常方便和强大。并且最新版的 Postviews 还支持缓存,在你的博客使用 WP Super Cache 等缓存插件缓存之后,它照样还可以进行统计。
Denis
2023/04/15
7090
解决启用WP-Super-Cache后出现的几个问题
近期,随着新版互推联盟自适应 iframe 代码的推出,调用的博友也慢慢增加了 ,这是很高兴的事情,也有博友反应调用的这个页面加载会有点慢。我来说明一下,因为这个互推联盟这个页面是纯动态页面,也就是每次刷新都要重新从数据库查询并输出,而且随着成员越来越多,这加载速度也会越来越慢,而且,对玛思阁的服务器也会造成更大的负载。这是一个需要解决的问题。 第一时间,我就想到使用静态缓存此页面的方法来解决加载过慢的问题。于是就安装了 WP-Super-Cache 这个插件,并根据实际情况设置了下,发现效果还不错!但还是
张戈
2018/03/23
2.8K0
解决启用WP-Super-Cache后出现的几个问题
如何给WordPress添加阅读计数
显示文章的阅读次数对 SEO 是有很大好处的,因为每次点击都会对文章进行一次小小的更新,我们可以用 WP-PostViews 这个插件来实现这个功能。
超超不会飞
2020/10/28
9810
如何给WordPress添加阅读计数
WPJAM Basic一键式全站优化插件WordPress
WPJAM Basic 我多年来一直喜欢水煮鱼博客WordPress 一键式全站优化插件,WPJAM Basic 有三个主要功能:
Hello-1
2022/08/30
9160
WordPress 如何统计并显示文章阅读量?
WP-PostViews 是一款免费且简洁的 WordPress 浏览量统计插件,截止本文发稿,有超过十万的站点正在使用。
轩辕镜像
2024/09/29
6750
WordPress 如何统计并显示文章阅读量?
安装WP-PostViews Plus插件,显示文章的阅读次数
启用WP-PostViews Plus插件 插件后,可以显示每篇文章的浏览次数,不用去查看外挂统计了。
星哥玩云
2022/06/11
5920
安装WP-PostViews Plus插件,显示文章的阅读次数
WordPress非插件添加文章浏览次数统计功能
本文最后更新于2021年9月6日,已超过1年没有更新,如果文章内容或图片资源失效,请留言反馈,我们会及时处理,谢谢!
回忆大大
2023/03/09
8080
WordPress后台删除wp-postviews插件文章浏览次数被清空
之前一直使用wp-postviews插件来统计文章浏览次数,考虑到使用wp-postviews插件要修改排版和样式会比较麻烦,于是就决定不再使用插件实现文章浏览次数,直接免插件实现Wordpress文章浏览阅读次数。
文曦
2022/06/24
6910
WordPress后台删除wp-postviews插件文章浏览次数被清空
Next -4- 增加站点访客、文章阅读量、字符统计、阅读时间统计与对应词条翻译
本文介绍增加Next主题文章阅读数量和访客数量的方法。 不蒜子站点访客、文章阅读量 修改主题配置文件不蒜子enable的开关为true: # Show Views / Visitors of the website / page with busuanzi. # Get more information on http://ibruce.info/2015/04/04/busuanzi busuanzi_count: enable: true total_visitors: true
为为为什么
2022/08/04
7180
Next -4- 增加站点访客、文章阅读量、字符统计、阅读时间统计与对应词条翻译
解决网站静态缓存后WP-PostViews插件不计数的问题
突然发现文章浏览计数功能失效了,文章发了几个月才几十上百的浏览数,本以为是因为最近发的文章都比较冷门,不受欢迎。但是发布了几个月,才不到 2 百的访问量,这就不合理了。 一、发现问题 于是花时间分析了
张戈
2018/03/26
1.3K0
解决网站静态缓存后WP-PostViews插件不计数的问题
WordPress 自定义字段(Custom Fields)详细介绍和使用
我们在使用 WordPress 撰写日志或者页面的时候,都会在编辑框下面看到自定义字段(Custom Fields),那么什么是自定义字段呢?这个 WordPress 自定义字段又是干什么的?
Denis
2023/04/14
3.7K0
WordPress 自定义字段(Custom Fields)详细介绍和使用
WordPress免插件仅代码实现文章浏览次数的方法(1)
在WordPress中为每一篇文章提供个“浏览次数”计数,一来可以间接地给访客一种文章有价值的暗示,二来方便自己获取相关数据(访客的内容偏好等等),三貌似想不到了。实现文章浏览次数很多人使用如wp-postviews 这类WordPress插件,但是使用wordpress的一条黄金准则是“少用插件,能用代码实现不用插件”。网络上有不少方法,现在提供一下目前本站正在使用的方法: 原理:通过自定义字段来保存浏览次数,每执行一次主循环loop,数据+1。 一、将下面的代码丢入主题下的funtions.php的文件
Jeff
2018/01/19
1K0
如何美化自己的博客,wordpress 主题编辑入门教程。
学习本文的知识前提:略懂html和css,已经能搭建一个wordpress的博客。搭建不会的请看我的《关于配置lamp和wordpress》。本文不是高手教程,不过是自己在美化优化博客的过程中,边学边记录而已。
十四君
2019/11/24
3.6K0
GeneratePress主题如何添加文章浏览量(阅读量),详细教程
GeneratePress主题如何添加文章浏览量(阅读量),刚开始使用GeneratePress主题的小伙伴可能遇到这种问题,面对GeneratePress的模板一头雾水,因为模板里面都是一堆参数代码,不像国内那些主题模板有div标签,能够识别自行修改添加标签。这恰恰就是GeneratePress主题的强大之处,一旦你熟悉了操作,你可以为此添加修改主题外观的任何地方。
超级小可爱
2023/02/20
8120
晒一晒本站所用插件
WordPress作为建站程序,用的人多、技术文章多、主题多、插件多,其中插件对新手的诱惑很大,本人刚接触Wordpress 时也与众多新手一样没技术没经验,除了到处找主题模板,就是返来复去安装测试各种插件,最多时后台安装二、三十个,最后连自己都不知道这些插件是干麻用的了。可能新手总是好奇想知道我这个老鸟都用什么插件,那就晒一晒本站所用插件:
星哥玩云
2022/08/13
4150
推荐阅读
相关推荐
WP-PostViews Plus统计插件在TwentyTen主题下的使用
更多 >
LV.1
腾讯高级工程师
目录
  • 1. 引言
    • 什么是目标检测?
    • YOLO(You Only Look Once)概述
    • YOLOv8 的发展背景
  • 2. YOLOv8 基础知识
    • YOLOv8 的架构
    • YOLOv8 的优势
  • 3. 环境准备
    • 安装 Python 和 Anaconda
    • 安装必要的库
    • 下载 YOLOv8 模型
  • 4. YOLOv8 的基本使用
    • 加载 YOLOv8 模型
    • 进行目标检测
    • 解析检测结果
  • 5. YOLOv8 车牌检测与 EasyOCR 识别实例
    • 车牌检测的意义
    • 车牌检测的原理
      • 1. 图像采集
      • 2. 目标检测
      • 3. 车牌定位
      • 4. 字符分割与识别
    • 数据集准备
    • 数据预处理
    • 训练模型
    • 测试与识别车牌
  • 6. 封装成 API
    • 6.1 环境准备
    • 6.2 创建 Flask 应用
    • 6.3 代码解析
    • 6.4 启动 API
    • 6.5 测试 API
  • 结语
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档