手把手带你做一个计算机视觉实战项目

Docker搬运工
2026-07-16 17:55
阅读 443

写在前面:我写了5年后端代码,见过太多人想学AI但被复杂的数学公式劝退。今天这篇教程,我不讲公式,不推导理论,就带你用代码跑通一个计算机视觉项目。我当初学的时候,最需要的就是这种"别废话,直接告诉我怎么跑起来"的教程。


一、计算机视觉到底是啥?

用大白话说:计算机视觉就是让机器"看懂"图片和视频。

你拍一张猫的照片,人眼一看就知道"这是猫"。但计算机看到的只是一堆数字(像素值)。计算机视觉的任务,就是教计算机从这些数字里提取出有意义的信息。

常见的应用场景:

  • 人脸识别:手机解锁、门禁系统
  • 目标检测:自动驾驶识别行人和车辆
  • 图像分类:医学影像判断是否有病变
  • OCR文字识别:拍照翻译、票据识别

今天我们不碰这些复杂场景,从一个最基础但最实用的项目入手——用AI识别图片中的物体


二、环境准备

我当初学的时候,环境配置卡了我整整两天。所以这部分我写得特别详细,你跟着做就行。

2.1 安装Python

计算机视觉领域,Python是绝对的主流语言。

操作系统 安装方式 推荐版本
Windows 官网下载安装包 Python 3.9 - 3.11
macOS brew install python Python 3.9 - 3.11
Linux sudo apt install python3 Python 3.9 - 3.11

安装完后,打开终端验证:

python --version
# 输出类似:Python 3.10.8

2.2 创建虚拟环境

这一步很多新手会跳过,但我强烈建议你养成习惯。虚拟环境可以避免不同项目之间的依赖冲突。

# 创建项目文件夹
mkdir cv-project
cd cv-project

# 创建虚拟环境
python -m venv venv

# 激活虚拟环境
# Windows:
venv\Scripts\activate
# macOS/Linux:
source venv/bin/activate

激活后,你会看到终端前面多了 (venv) 字样。

2.3 安装核心依赖

pip install opencv-python numpy matplotlib

这里简单说一下每个库的作用:

库名 作用 类比
OpenCV 图像读取和处理 相当于你的"眼睛"
NumPy 数值计算 图像的底层就是数字矩阵
Matplotlib 图片展示 把结果"画"出来给你看

2.4 关于AI编程工具的说明

现在AI编程工具很多,我推荐新手使用 扣子(Coze) 平台来辅助学习。扣子是字节跳动推出的AI应用开发平台,它的好处是:

  • 不需要自己搭GPU环境,在线就能跑
  • 内置了很多视觉相关的插件和工作流
  • 可以把AI能力快速组装成应用

另外还有一个工具叫 OpenClaw,它是一个开源的计算机视觉工具集,封装了很多常用的视觉算法,对新手非常友好。后面实战部分我们会用到。


三、核心概念(用人话解释)

在动手之前,有几个概念你必须知道,不然看代码会一头雾水。

3.1 图像在计算机里长什么样?

一张彩色图片,在计算机里其实是一个三维的数字矩阵:

图片尺寸:宽 × 高 × 通道数
例如:640 × 480 × 3

通道含义:
- 通道0:红色(R)的强度值 0-255
- 通道1:绿色(G)的强度值 0-255
- 通道2:蓝色(B)的强度值 0-255

一个像素点的值 [255, 0, 0] 就代表纯红色。就这么简单。

3.2 什么是目标检测?

目标检测要完成两件事:

  1. 分类:图里有什么?(猫、狗、汽车...)
  2. 定位:它在哪?(用矩形框标出来)

我们用文字流程图来描述这个过程:

输入图片 → AI模型推理 → 输出结果
                          ├── 物体类别:person
                          ├── 置信度:0.95
                          └── 位置坐标:[x1, y1, x2, y2]

3.3 什么是预训练模型?

训练一个AI模型需要海量数据和算力,新手根本搞不定。好消息是,很多大佬已经训练好了模型,你直接拿来用就行。这叫预训练模型

打个比方:你不需要自己造一辆车,直接买一辆开就行。


四、实战项目:图片物体检测

好了,概念讲完了,我们开始写代码。这个项目会实现:读取一张图片,识别里面的物体,画上框,标出名称。

4.1 第一步:读取和显示图片

import cv2
import matplotlib.pyplot as plt

# 读取图片
image = cv2.imread('test.jpg')

# 检查是否读取成功
if image is None:
    print("图片读取失败,请检查路径是否正确")
else:
    print(f"图片尺寸:{image.shape}")
    # 输出类似:(480, 640, 3) 表示 高480, 宽640, 3个通道

    # OpenCV默认是BGR格式,matplotlib需要RGB,需要转换
    image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

    # 显示图片
    plt.imshow(image_rgb)
    plt.axis('off')  # 不显示坐标轴
    plt.title('原始图片')
    plt.show()

新手常见问题:图片显示颜色不对?十有八九是BGR和RGB没转换。OpenCV用BGR,matplotlib用RGB,记住这个坑。

4.2 第二步:加载预训练模型

这里我们使用YOLOv8(目前最流行的目标检测模型之一),通过 ultralytics 库来调用:

pip install ultralytics
from ultralytics import YOLO

# 加载预训练模型(首次运行会自动下载)
# 'yolov8n.pt' 是nano版本,体积最小,速度最快
model = YOLO('yolov8n.pt')

print("模型加载成功!")
print(f"模型类型:{model.model_name}")

模型文件大约6MB,首次运行会自动从网上下载。

4.3 第三步:执行检测

# 对图片进行目标检测
results = model('test.jpg')

# 查看检测结果
for result in results:
    # 获取检测到的物体数量
    num_objects = len(result.boxes)
    print(f"共检测到 {num_objects} 个物体")

    # 遍历每个检测到的物体
    for i, box in enumerate(result.boxes):
        # 获取类别名称
        class_id = int(box.cls[0])
        class_name = model.names[class_id]

        # 获取置信度
        confidence = float(box.conf[0])

        # 获取边界框坐标
        x1, y1, x2, y2 = box.xyxy[0].tolist()

        print(f"物体{i+1}: {class_name}, "
              f"置信度: {confidence:.2f}, "
              f"位置: [{x1:.0f}, {y1:.0f}, {x2:.0f}, {y2:.0f}]")

运行后输出类似:

共检测到 3 个物体
物体1: person, 置信度: 0.92, 位置: [45, 32, 210, 410]
物体2: dog, 置信度: 0.87, 位置: [220, 280, 380, 420]
物体3: couch, 置信度: 0.76, 位置: [10, 200, 600, 470]

4.4 第四步:可视化结果

import cv2
import matplotlib.pyplot as plt
from ultralytics import YOLO

def detect_and_show(image_path):
    """检测图片中的物体并展示结果"""
    # 加载模型
    model = YOLO('yolov8n.pt')

    # 执行检测
    results = model(image_path)

    # 在图片上绘制结果
    annotated_image = results[0].plot()

    # 转换颜色格式
    annotated_rgb = cv2.cvtColor(annotated_image, cv2.COLOR_BGR2RGB)

    # 展示
    plt.figure(figsize=(12, 8))
    plt.imshow(annotated_rgb)
    plt.axis('off')
    plt.title('目标检测结果')
    plt.show()

    return results

# 运行检测
results = detect_and_show('test.jpg')

4.5 第五步:批量处理图片

实际项目中,你往往需要处理一整个文件夹的图片:

import os
import glob
from ultralytics import YOLO

def batch_detect(input_dir, output_dir):
    """批量检测文件夹中的所有图片"""
    # 创建输出目录
    os.makedirs(output_dir, exist_ok=True)

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

    # 获取所有图片文件
    image_files = glob.glob(os.path.join(input_dir, '*.jpg'))
    image_files += glob.glob(os.path.join(input_dir, '*.png'))

    print(f"找到 {len(image_files)} 张图片")

    for img_path in image_files:
        # 执行检测
        results = model(img_path)

        # 获取文件名
        filename = os.path.basename(img_path)
        output_path = os.path.join(output_dir, f'result_{filename}')

        # 保存结果图片
        results[0].save(filename=output_path)

        # 打印检测信息
        num_objects = len(results[0].boxes)
        print(f"[{filename}] 检测到 {num_objects} 个物体 -> 已保存")

    print("批量处理完成!")

# 使用示例
batch_detect('./input_images', './output_images')

4.6 进阶:用扣子平台搭建AI视觉应用

如果你想把检测能力做成一个可以分享的应用,可以用**扣子(Coze)**平台。大致流程如下:

步骤1:注册扣子账号,进入控制台
    ↓
步骤2:创建一个Bot,选择"图像理解"能力
    ↓
步骤3:配置工作流
    ├── 输入节点:接收用户上传的图片
    ├── 处理节点:调用视觉AI模型
    └── 输出节点:返回检测结果
    ↓
步骤4:测试并发布

扣子的优势在于你可以用自然语言来编排AI工作流,不需要写太多代码,非常适合快速验证想法。

4.7 补充:OpenClaw工具简介

OpenClaw 是一个面向开发者的开源视觉AI工具集。它的特点是:

特性 说明
模块化 每个算法独立封装,按需引入
文档友好 提供大量示例代码
社区活跃 持续更新新算法
易于部署 支持Docker一键部署

安装方式:

pip install openclaw

基础使用示例:

import openclaw as oc

# 初始化视觉引擎
engine = oc.VisionEngine()

# 加载模型
engine.load_model('yolov8')

# 执行推理
result = engine.detect('test.jpg')

# 获取结果
print(result.summary())

OpenClaw帮你封装了很多底层细节,让你可以更专注于业务逻辑。我当初学的时候,如果能有这样的工具,至少能省一周的踩坑时间。


五、常见问题解答

Q1:运行时报错 ModuleNotFoundError

# 确认虚拟环境已激活
# 重新安装依赖
pip install -r requirements.txt

# 或者单独安装缺失的模块
pip install 缺失的模块名

Q2:模型下载太慢或失败

# 方法1:手动下载模型文件放到项目目录
# 从 https://github.com/ultralytics/assets/releases 下载

# 方法2:设置代理
import os
os.environ['HTTP_PROXY'] = 'http://127.0.0.1:7890'
os.environ['HTTPS_PROXY'] = 'http://127.0.0.1:7890'

Q3:检测精度不够怎么办?

方案 说明 适用场景
换用更大模型 yolov8s → yolov8m → yolov8l 精度优先
调整置信度阈值 model.predict(conf=0.3) 减少漏检
调整IOU阈值 model.predict(iou=0.5) 减少重复框
使用自定义训练模型 用自己的数据微调 特定场景

Q4:电脑没有GPU能跑吗?

能跑,只是慢一些。YOLOv8n(nano版本)在CPU上也能达到实时检测的速度。如果确实需要GPU加速:

# 安装GPU版本的PyTorch
pip install torch torchvision --index-url https://download.pytorch.org/whl/cu118

六、学习建议和避坑指南

我踩过的坑,你不要再踩

  1. 不要一上来就啃论文。先跑通代码,建立直觉,再回头看理论。
  2. 不要忽视环境配置。80%的新手问题都出在环境上。用虚拟环境,用虚拟环境,用虚拟环境。
  3. 不要追求完美模型。先用现成的预训练模型跑通流程,再考虑优化。
  4. 善用AI编程工具。像扣子这样的平台,可以帮你快速验证想法,不要什么都自己从头写。

下一步学习路径

当前阶段(你在这里)
    ├── 能跑通基础检测项目
    ├── 理解图像在计算机中的表示
    └── 会使用预训练模型
         ↓
下一阶段
    ├── 学习图像预处理(缩放、裁剪、增强)
    ├── 了解CNN卷积神经网络基本原理
    └── 尝试用OpenClaw做更复杂的视觉任务
         ↓
进阶阶段
    ├── 学习模型微调(Fine-tuning)
    ├── 掌握模型部署(Docker + API服务)
    └── 探索视频流实时检测

推荐资源

  • 练手项目:用扣子搭一个"拍照识物"的小应用
  • 开源工具:关注OpenClaw的GitHub仓库,跟着示例学习
  • 社区交流:加入相关的技术社群,遇到问题及时问

总结

今天我们完成了这些内容:

  • 理解了计算机视觉的基本概念
  • 搭建了完整的开发环境
  • 用YOLOv8实现了图片物体检测
  • 学会了批量处理图片
  • 了解了扣子和OpenClaw这两个实用工具

整个项目的核心代码其实不到50行。AI编程没有你想象的那么难,关键是先跑起来,再慢慢理解

我当初学的时候,也是从这样的小项目开始的。跑通第一个项目的那一刻,你会突然觉得:"哦,原来就这么回事。"

去试试吧,有问题随时回来翻这篇教程。祝你学习顺利!

评论 0

最热最新
暂无评论
Docker搬运工Lv.1
0
影响力
0
文章
0
粉丝