计算机视觉实战项目入门:从爬虫到求职的综合指南
大家好!我是小李,一名211高校计算机专业的研二学生。最近在帮学弟学妹们准备实习面试时,发现很多人对“计算机视觉”既向往又害怕——觉得高大上、难入门。其实我当初学的时候也是一头雾水,直到自己动手做了第一个小项目才真正理解。所以今天,我想用最通俗的语言,带你从零开始完成一个完整的计算机视觉实战项目,顺便聊聊它和爬虫、求职的关系。
这篇文章不讲复杂的数学公式,只聚焦能跑起来的代码和真实可用的技能。无论你是刚学完Python的新手,还是正在为秋招焦虑的大三学生,都能跟着一步步做出来。
一、什么是计算机视觉?它能做什么?
简单说,计算机视觉(Computer Vision)就是让机器“看懂”图片或视频。比如:
- 自动识别照片里有没有猫
- 手机人脸解锁
- 自动驾驶识别红绿灯
- 电商网站自动给商品打标签
而我们今天要做的项目是:用Python自动下载网络图片(用爬虫),然后用模型判断图中是否包含“猫”。这个项目虽小,但涵盖了数据获取、模型推理、结果输出等完整流程,非常适合作为入门练手。
更重要的是——这种“综合能力”正是企业招聘时看重的。很多同学只会调库,但不会处理真实数据;或者会写爬虫,却不知道怎么和AI结合。通过这个项目,你能同时掌握多项实用技能!
二、环境准备:5分钟搭好开发环境
⚠️ 提示:以下步骤适用于 Windows / macOS / Linux
1. 安装 Python(推荐 3.8~3.11)
如果你还没装 Python,请先去 python.org 下载安装。安装时记得勾选 “Add to PATH”。
验证是否成功:
python --version
# 应该输出类似:Python 3.10.12
2. 创建虚拟环境(避免包冲突)
# 创建名为 cv_env 的虚拟环境
python -m venv cv_env
# 激活虚拟环境(Windows)
cv_env\Scripts\activate
# 激激活虚拟环境(macOS/Linux)
source cv_env/bin/activate
看到命令行前有 (cv_env) 就表示激活成功!
3. 安装核心依赖
运行以下命令安装所需库:
pip install requests beautifulsoup4 opencv-python torch torchvision pillow
各库的作用如下:
| 库名 | 用途 |
|---|---|
requests |
发送网络请求(用于爬虫) |
beautifulsoup4 |
解析网页HTML(提取图片链接) |
opencv-python |
图像处理基础库 |
torch / torchvision |
深度学习框架,含预训练模型 |
pillow |
处理图片格式(PIL库) |
💡 我当初第一次装
torch时因为网速慢卡了半小时,建议用国内镜像源加速:pip install torch torchvision -i https://pypi.tuna.tsinghua.edu.cn/simple
三、核心概念:用大白话解释技术词
1. 爬虫是什么?
爬虫 = 自动化的浏览器。你可以让它去某个网页,把所有图片链接“抓”下来,省去手动右键保存的麻烦。
注意:爬虫必须遵守网站的
robots.txt协议,不要频繁请求,更不能用于商业盗图!
2. 预训练模型(Pre-trained Model)
这是别人已经训练好的AI模型(比如能识别1000种物体)。我们不用从头训练,直接拿来“推理”(即预测),省时省力。
我们用的是 torchvision.models.resnet18 —— 一个轻量级但效果不错的图像分类模型。
3. 图像预处理(Preprocessing)
AI模型对输入图片有固定要求(比如尺寸224x224、像素值归一化)。我们需要把原始图片“加工”成模型能吃的格式。
四、实战项目:自动识别网络图片中的猫
我们将分三步完成:
- 用爬虫下载一批猫/狗图片
- 加载预训练模型
- 对每张图进行分类并输出结果
第一步:写一个简单的图片爬虫
我们以百度图片搜索“猫”为例(实际教学中建议使用公开数据集,但为演示方便这里用爬虫)。
🔒 安全提示:本例仅用于学习,请勿大规模爬取!
# spider.py
import os
import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin
def download_images(keyword, max_images=10):
# 构造百度图片搜索URL(简化版,实际需处理JS)
search_url = f"https://image.baidu.com/search/acjson?tn=resultjson_com&word={keyword}&pn=0&rn={max_images}"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
}
# 创建保存目录
os.makedirs(f"images/{keyword}", exist_ok=True)
try:
response = requests.get(search_url, headers=headers)
response.encoding = 'utf-8'
data = response.json()
for i, item in enumerate(data['data'][:max_images]):
img_url = item.get('thumbURL')
if not img_url:
continue
# 下载图片
img_data = requests.get(img_url).content
with open(f"images/{keyword}/{keyword}_{i}.jpg", "wb") as f:
f.write(img_data)
print(f"已下载: {img_url}")
except Exception as e:
print("下载出错:", e)
# 示例:下载10张猫图
download_images("cat", 10)
📌 新手注意:百度图片接口可能变动,若失败可改用公开数据集(如Kaggle的Cat vs Dog)。重点是理解“获取数据”的思路。
第二步:加载预训练模型
# model.py
import torch
import torchvision.models as models
import torchvision.transforms as transforms
from PIL import Image
# 加载ResNet18预训练模型(ImageNet权重)
model = models.resnet18(pretrained=True)
model.eval() # 切换到评估模式
# 定义图像预处理流程
preprocess = transforms.Compose([
transforms.Resize(256),
transforms.CenterCrop(224),
transforms.ToTensor(),
transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),
])
💡
Normalize的参数是ImageNet数据集的均值和标准差,必须和训练时一致!
第三步:对图片进行分类
# classify.py
import json
# 加载ImageNet类别索引(1000个类别)
with open("imagenet_class_index.json", "r") as f:
idx_to_label = json.load(f)
def predict_image(image_path):
# 打开图片
img = Image.open(image_path).convert("RGB")
# 预处理
input_tensor = preprocess(img)
input_batch = input_tensor.unsqueeze(0) # 增加batch维度
# 推理
with torch.no_grad():
output = model(input_batch)
# 获取概率最高的类别
probabilities = torch.nn.functional.softmax(output[0], dim=0)
top_prob, top_idx = torch.topk(probabilities, 1)
# 转换为人类可读标签
idx = str(top_idx.item())
label = idx_to_label[idx][1]
prob = top_prob.item()
return label, prob
# 测试一张图
label, prob = predict_image("images/cat/cat_0.jpg")
print(f"预测结果: {label}, 置信度: {prob:.2f}")
📥 你需要下载
imagenet_class_index.json文件(GitHub搜即可),它把数字ID映射为英文标签,比如"281": ["n02123045", "tabby cat"]。
最终整合:一键运行
创建 main.py:
from spider import download_images
from classify import predict_image
import os
# 1. 下载图片
download_images("cat", 5)
# 2. 遍历所有图片并分类
for filename in os.listdir("images/cat"):
path = os.path.join("images/cat", filename)
label, prob = predict_image(path)
print(f"{filename} -> {label} ({prob:.2%})")
运行:
python main.py
你可能会看到输出:
cat_0.jpg -> tabby cat (92.34%)
cat_1.jpg -> Egyptian cat (88.12%)
...
恭喜!你完成了第一个计算机视觉综合项目!
五、新手常见问题解答
Q1:为什么我的爬虫下载不了图片?
- 百度图片现在多用动态加载(JavaScript),简单请求拿不到真实URL。建议初学者改用公开数据集,如:
Q2:模型预测不准怎么办?
- 预训练模型是在ImageNet(1000类通用物体)上训练的,对特定场景(如医疗影像)效果可能不好。
- 解决方案:后续可学习迁移学习(Transfer Learning),用少量自己的数据微调模型。
Q3:需要GPU才能跑吗?
- 不需要!ResNet18在CPU上也能运行(稍慢)。如果想加速,可安装CUDA版本的PyTorch(需NVIDIA显卡)。
Q4:这个项目对求职有用吗?
非常有用! 在简历中你可以这样写:
“独立开发计算机视觉综合项目:结合网络爬虫获取数据,利用PyTorch预训练模型实现图像分类,准确率达85%+,代码开源。”
这比“熟悉Python”“了解深度学习”有力得多!
六、下一步学习建议
完成这个项目只是起点。如果你想往计算机视觉方向求职,我建议按以下路径进阶:
夯实基础
- 学习OpenCV图像处理(滤波、边缘检测、轮廓提取)
- 掌握PyTorch/TensorFlow基本操作
做更有挑战的项目
- 目标检测(YOLO、SSD):不仅能识别猫,还能框出位置
- 图像分割(U-Net):区分猫的身体部位
- 人脸识别 + 活体检测(面试常考!)
参加比赛 & 开源
- Kaggle入门赛(如Titanic、Digit Recognizer)
- 复现经典论文代码(GitHub搜“awesome-computer-vision”)
准备面试
- 刷《百面机器学习》《深度学习500问》
- 整理项目文档,突出问题-解决-结果逻辑
结语
我当初也是从一个连“卷积”是什么都不知道的小白,靠着一个个小项目慢慢积累,最终拿到了大厂CV算法岗的offer。计算机视觉并不神秘,关键在于动手实践。
希望这篇教程能帮你迈出第一步。记住:每一个复杂的系统,都是由简单的模块组成的。你不需要一次学会所有,只要今天比昨天多懂一行代码,就已经在进步。
如果你觉得有帮助,欢迎关注我的技术博客(虚构地址:xiaoli.blog/cv-beginner)。下期我将带大家用YOLOv5做一个实时“口罩检测”系统!
加油,未来的CV工程师!

评论 0