AI大模型应用开发-计算机视觉(CV)简单应用:人脸检测、车牌识别(用现成工具包)
人脸检测用 OpenCV 自带的 Haar 级联分类器(无需额外安装),车牌识别用 easyocr + OpenCV(一站式识别字符),所有代码可直接复制运行,小白 15 分钟就能跑通两个场景。
一、前置核心认知:两个应用的本质
人脸检测、车牌识别都是目标检测 + 字符识别(仅车牌需要) 的细分场景,不用懂神经网络、不用手动训练,核心逻辑是:
调用现成工具包 → 输入图片 → 工具自动定位目标(人脸 / 车牌)→ 输出位置 + 识别结果(车牌需额外识别字符)
- 人脸检测:只需 “定位人脸位置”,用 OpenCV 自带工具即可完成;
- 车牌识别:先 “定位车牌位置”,再 “识别车牌上的字符”,用 easyocr 一站式搞定(封装了定位 + 字符识别)。
二、应用 1:人脸检测(OpenCV Haar 级联分类器,零额外安装)
1. 核心定位
OpenCV 内置的 Haar 级联分类器 = 小白友好的人脸检测器,官方预训练好的 “人脸模板”,能快速在图片中定位所有人脸,用方框标注,无需额外下载模型(OpenCV 已自带核心文件)。
2. 小白通俗理解
就像你在图片里用眼睛找人脸 —— 计算机用 “人脸模板”(比如眼睛、鼻子、嘴巴的特征)在图片里逐一匹配,找到后用方框标出来,速度快、门槛低。
3. 完整代码(直接复制,仅改图片路径)
python
import cv2
# 第一步:加载OpenCV自带的人脸检测级联分类器(无需手动下载,OpenCV已内置)
# haarcascade_frontalface_default.xml 是官方预训练的人脸模板文件
face_cascade = cv2.CascadeClassifier(
cv2.data.haarcascades + "haarcascade_frontalface_default.xml"
)
# 第二步:读取图片(替换成你的图片路径,无中文/空格!)
img_path = "D:\\Desktop\\4.png" # Windows路径用双反斜杠
img = cv2.imread(img_path)
if img is None:
print("错误:图片读取失败!检查路径是否正确/有无中文。")
else:
# 第三步:预处理(灰度化,提升检测准确率)
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 第四步:检测人脸(核心函数)
# scaleFactor=1.1:每次搜索窗口缩放比例,越小越精准但越慢;
# minNeighbors=5:匹配次数,越大越严格,减少误识别;
faces = face_cascade.detectMultiScale(img_gray, scaleFactor=1.1, minNeighbors=5)
# 第五步:标注人脸(画方框+计数)
face_count = 0
for (x, y, w, h) in faces: # x,y=左上角坐标;w=宽度;h=高度
face_count += 1
# 画矩形框:参数=图片、左上角、右下角、颜色(BGR)、线宽
cv2.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 2)
# 标注“人脸+序号”
cv2.putText(img, f"Face {face_count}", (x, y-10),
cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0, 255, 0), 2)
# 第六步:显示+保存结果
print(f"检测到 {face_count} 个人脸!")
cv2.imshow("Face Detection Result", img)
cv2.imwrite("D:\\Desktop\\4.1.png", img) # 保存标注后的图片
cv2.waitKey(0)
cv2.destroyAllWindows()
4. 结果解读
- 终端输出:
检测到 1 个人脸!(根据图片实际人脸数变化); - 弹出窗口:图片中的人脸被绿色方框标注,方框上方显示 “Face 1”;
- 本地生成:
D:\Desktop\4.1.png,保存标注后的图片(图片为网上找的,如有侵权请联系删除)。
5. 小白避坑指南
- 检测不到人脸:
- 确保图片中人脸清晰、正面(侧脸 / 模糊人脸易漏检);
- 调低
scaleFactor(比如 1.05)或minNeighbors(比如 3),降低检测严格度;
- 误识别(把非人脸标成人脸):调高
minNeighbors(比如 7),提升匹配要求。
三、应用 2:车牌识别(easyocr + OpenCV,一站式识别字符)
1. 核心定位
easyocr = 开源免费的 OCR 工具包(Optical Character Recognition,光学字符识别),封装了 “定位车牌 + 识别字符” 全流程,支持中文 / 英文车牌,无需手动写定位逻辑,小白只需调用 API。
2. 小白通俗理解
就像你先在图片里找到车牌位置,再读出车牌上的数字 / 字母 / 汉字 ——easyocr 自动完成这两步,直接输出 “粤 A12345” 这类结果。
3. 环境准备(安装 easyocr)
# 安装easyocr(核心)+ OpenCV(辅助),国内源加速
pip install easyocr opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple
⚠️ 首次运行代码时,easyocr 会自动下载约 1.5GB 的语言模型(支持中文 + 英文),速度慢的可以先手动下载语言模型到本地,耐心等待(下载一次即可,后续复用)。
4. 完整代码(直接复制,仅改图片路径)
python
import easyocr
import cv2
# 第一步:初始化easyocr阅读器(指定语言:ch=中文,en=英文,适配车牌)
reader = easyocr.Reader(['ch', 'en']) # 首次运行会下载模型,耐心等待
# 第二步:读取图片(替换成你的车牌图片路径,无中文/空格!)
img_path = "C:\\Users\\XXX\\Desktop\\test_plate.jpg"
img = cv2.imread(img_path)
if img is None:
print("错误:图片读取失败!检查路径是否正确/有无中文。")
else:
# 第三步:调用easyocr识别车牌(核心函数)
# detail=1:返回详细信息(位置+字符+置信度);detail=0:仅返回字符
results = reader.readtext(img_path)
# 第四步:解析并标注车牌
plate_text = "" # 存储识别到的车牌号码
for (bbox, text, conf) in results:
# 过滤非车牌字符(可选,提升准确率)
if len(text) >= 7 and len(text) <= 8: # 中文车牌长度7-8位(如粤A12345/京B678901)
plate_text = text
# 提取车牌位置(bbox是四个角的坐标,取左上角和右下角)
(top_left, top_right, bottom_right, bottom_left) = bbox
top_left = (int(top_left[0]), int(top_left[1]))
bottom_right = (int(bottom_right[0]), int(bottom_right[1]))
# 画车牌方框(红色)
cv2.rectangle(img, top_left, bottom_right, (0, 0, 255), 2)
# 标注车牌号码(红色)
cv2.putText(img, plate_text, (top_left[0], top_left[1]-10),
cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0, 0, 255), 2)
# 第五步:输出结果+保存图片
if plate_text:
print(f"识别到车牌号码:{plate_text}")
else:
print("未识别到有效车牌!")
cv2.imshow("License Plate Recognition", img)
cv2.imwrite("C:\\Users\\XXX\\Desktop\\plate_result.jpg", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
5. 结果解读
- 终端输出:
识别到车牌号码:粤A88888(根据图片实际车牌变化); - 弹出窗口:图片中的车牌被红色方框标注,方框上方显示车牌号码;
- 本地生成:
plate_result.jpg,保存标注后的图片。
6. 小白避坑指南
- 车牌识别失败 / 错误:
- 确保车牌图片清晰,无遮挡(比如被雨 / 泥挡住);
- 图片中车牌占比不要太小(可先用 OpenCV 裁剪车牌区域后再识别);
- 模型下载慢 / 失败:
- 手动下载 easyocr 模型(百度搜 “easyocr 中文模型下载”),放到指定目录;
- 临时关闭防火墙 / 代理,避免下载中断;
- 识别出无关字符:
- 增加字符长度过滤(代码中已加
len(text)>=7 and len(text)<=8),适配中文车牌长度。
- 增加字符长度过滤(代码中已加
四、扩展:实时摄像头识别(人脸 / 车牌)
只需修改 “图片路径” 为 “摄像头源”,即可实现实时识别,小白可选尝试:
1. 实时人脸检测
python
import cv2
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml")
cap = cv2.VideoCapture(0) # 0=默认摄像头
while True:
ret, frame = cap.read()
if not ret:
break
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 1.1, 5)
for (x,y,w,h) in faces:
cv2.rectangle(frame, (x,y), (x+w,y+h), (0,255,0), 2)
cv2.imshow("Real-Time Face Detection", frame)
if cv2.waitKey(1) & 0xFF == ord('q'): # 按q退出
break
cap.release()
cv2.destroyAllWindows()
2. 实时车牌识别(摄像头)
python
import easyocr
import cv2
reader = easyocr.Reader(['ch', 'en'])
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
if not ret:
break
# 每5帧识别一次(降低CPU占用)
if int(cap.get(cv2.CAP_PROP_POS_FRAMES)) % 5 == 0:
results = reader.readtext(frame)
for (bbox, text, conf) in results:
if len(text)>=7 and len(text)<=8:
(tl, tr, br, bl) = bbox
tl = (int(tl[0]), int(tl[1]))
br = (int(br[0]), int(br[1]))
cv2.rectangle(frame, tl, br, (0,0,255), 2)
cv2.putText(frame, text, (tl[0], tl[1]-10), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0,0,255), 2)
cv2.imshow("Real-Time Plate Recognition", frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
总结
- 人脸检测用 OpenCV 自带的 Haar 级联分类器,无需额外安装,核心是
detectMultiScale()定位人脸,用方框标注即可; - 车牌识别用 easyocr 工具包,一站式完成 “定位 + 字符识别”,只需初始化
Reader(['ch','en']),调用readtext()即可输出车牌号码; - 核心避坑点:图片路径无中文 / 空格、保证目标(人脸 / 车牌)清晰无遮挡、首次运行耐心等待模型下载;
- 扩展技巧:修改
source为摄像头源(0),即可实现实时人脸 / 车牌识别,适合小白动手实践。
更多推荐


所有评论(0)