首页 > 编程语言 >Python+OpenCV系列:AI看图识人、识车、识万物

Python+OpenCV系列:AI看图识人、识车、识万物

时间:2024-12-16 22:59:39浏览次数:10  
标签:Python frame cap cv2 OpenCV detections AI 识别

在人工智能风靡全球的今天,用 Python 和 OpenCV 结合机器学习实现物体识别,不仅是酷炫技能,更是掌握未来的敲门砖。本篇博文手把手教你如何通过摄像头或图片输入,识别人、动物、车辆及其他物品,让你的程序瞬间具备 AI 能力。


一、什么是物体识别?

物体识别是计算机视觉中的关键任务,通过算法从图像或视频中检测并分类特定目标。例如:识别人脸、识别汽车品牌、甚至是分类宠物品种。

借助 OpenCV 和 Python,我们可以轻松构建从简单到复杂的物体识别系统,包括基于传统机器学习的模型和深度学习的预训练模型(如 MobileNet、YOLO、ResNet)。


二、实现物体识别的工作流程

  1. 数据获取
    • 从摄像头实时捕捉视频帧。
    • 从文件读取图像(支持 PNG、JPG 等格式)。
  2. 数据预处理
    • 灰度转换、尺寸缩放、归一化等。
  3. 模型加载
    • 使用预训练的 Haar 级联分类器(传统机器学习)。
    • 或加载深度学习模型(如 DNN 模块支持的 MobileNet-SSD)。
  4. 目标检测与分类
    • 检测目标区域(Bounding Box)。
    • 分类目标(如猫/狗/车辆)。

三、实现代码:检测人脸和车辆

(1)人脸检测(Haar 级联分类器)

import cv2

# 加载 Haar 级联分类器
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')

# 从摄像头捕捉视频
cap = cv2.VideoCapture(0)

while True:
    ret, frame = cap.read()
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5)

    for (x, y, w, h) in faces:
        cv2.rectangle(frame, (x, y), (x+w, y+h), (255, 0, 0), 2)

    cv2.imshow('Face Detection', frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

在这里插入图片描述

(2)车辆识别(深度学习 MobileNet-SSD)

import cv2

# 加载 MobileNet-SSD 模型
prototxt_path = 'MobileNetSSD_deploy.prototxt'
model_path = 'MobileNetSSD_deploy.caffemodel'
net = cv2.dnn.readNetFromCaffe(prototxt_path, model_path)

# 类别标签
CLASSES = ["background", "aeroplane", "bicycle", "bird", "boat", "bottle", 
           "bus", "car", "cat", "chair", "cow", "diningtable", "dog", "horse", 
           "motorbike", "person", "pottedplant", "sheep", "sofa", "train", "tvmonitor"]

cap = cv2.VideoCapture(0)

while True:
    ret, frame = cap.read()
    h, w = frame.shape[:2]
    blob = cv2.dnn.blobFromImage(frame, 0.007843, (300, 300), 127.5)
    net.setInput(blob)
    detections = net.forward()

    for i in range(detections.shape[2]):
        confidence = detections[0, 0, i, 2]
        if confidence > 0.5:
            idx = int(detections[0, 0, i, 1])
            box = detections[0, 0, i, 3:7] * [w, h, w, h]
            (startX, startY, endX, endY) = box.astype("int")
            label = f"{CLASSES[idx]}: {confidence:.2f}"
            cv2.rectangle(frame, (startX, startY), (endX, endY), (0, 255, 0), 2)
            cv2.putText(frame, label, (startX, startY - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)

    cv2.imshow('Object Detection', frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

四、扩展功能

  1. 多对象识别:通过循环逐帧检测,实现实时多目标跟踪。
  2. 自定义分类:用 TensorFlow 或 PyTorch 训练自定义数据集,替换预训练模型。
  3. GPU 加速:用 CUDA 提高实时检测性能(支持 NVIDIA 显卡)。

五、总结

借助 Python 和 OpenCV,你可以轻松实现从简单到复杂的物体识别。无论是用传统方法还是现代深度学习模型,OpenCV 都提供了丰富的工具。赶紧尝试,在 AI 的道路上迈出第一步!

标签:Python,frame,cap,cv2,OpenCV,detections,AI,识别
From: https://blog.csdn.net/bayinglong/article/details/144520032

相关文章

  • python装饰器详解
    一、函数装饰器 #上面是装饰器,下面是原函数defifren(p):#p是额外带来的参数,因为要带参数p所以多了一层函数嵌套defplusnihao(f):defwraper():#核心装饰器代码,f代指sayhello函数,是由上一层传入进来的,本层负责增加前后功能f()......
  • Python系统教程008-条件判断(二)
    知识回顾1、if语句的基本语法?2、常用的比较运算符有哪些?3、注释的分类以及格式4、else处理条件不满足的情况练习:地板上有n个石子,猫头鹰和小兔子正在玩取石子的游戏,从猫头鹰开始,轮流取石子,每次每个动物取走一个石子,猫头鹰能获胜吗?规则如下:流程图:输入格式:一个正整......
  • Python速成脚本小子(附20道基础题)
    当今社会,编程已经成为了一种必备的技能。而Python,作为一门高效简洁的编程语言,备受大家的喜爱。Python语言易学易用,非常适合初学者入门,同时也是各大公司招聘的必备技能之一。那么,如何快速入门Python,成为一个Python速成脚本小子呢?以下是一些建议:1.学习基本语法Python语法......
  • Python中的列表,元组
    列表列表的特点:有序,可重复,长度可变(增删改查),异构,可切片,可遍历。列表的基本语法:列表名=[元素]list=['apple','banana','pineapple']列表的作⽤是⼀次性存储多个数据,并且列表可以存储不同类型的数据一:列表的增删改查:增加:append():增加指定数据到列表中names=['1',......
  • 一文读懂:AI创业和投融资领域常见专有名词缩写详解
    ===预计悦读时间:3分钟|......
  • [python]使用flask-caching缓存数据
    简介Flask-Caching是Flask的一个扩展,为任何Flask应用程序添加了对各种后端的缓存支持。它基于cachelib运行,并通过统一的API支持werkzeug的所有原始缓存后端。开发者还可以通过继承flask_caching.backends.base.BaseCache类来开发自己的缓存后端。官方文档-https:......
  • 如何用编码检测代理ip是否有效?( Python语言)
    基于requests库(简单的HTTP请求检测)首先,需要安装requests库。如果没有安装,可以在命令行中使用pipinstallrequests进行安装。以下是一个简单的函数来检测代理IP是否有效:importrequestsdefcheck_proxy(proxy):try:proxies={"http":"http:/......
  • AIGC与虚拟现实(VR)的结合与应用前景分析例子解析
    代码示例:在探讨AIGC(人工智能生成内容)与虚拟现实(VR)的结合与应用前景时,我们可以从以下几个详细例子进行分析:1.教育培训AIGC与VR的结合在教育培训领域展现出巨大潜力。例如,学生可以通过VR技术走进历史场景,配合AIGC自动生成的讲解和角色对话,增强学习的趣味性和有效性。这种......
  • 使用方法重载实现Python访问者模式
    Python上的访问者模式,看了一下网上其他人的例子,一般都是类似下面的代码。fromabcimportABC,abstractmethod#抽象访问者classAnimalVisitor(ABC):@abstractmethoddefvisit_dog(self,dog:"Dog"):pass@abstractmethodd......
  • mysql9.1.0.msi的安装报错——Database_initialization_failed
    报错LogBeginningconfigurationstep:WritingconfigurationfileSavingmy.iniconfigurationfile...Savedmy.iniconfigurationfile.Endedconfigurationstep:WritingconfigurationfileBeginningconfigurationstep:UpdatingWindowsFirewallrulesA......