今天老师主要讲了opencv,yolo,深度学习,AI模型代码辅助之类的例子。
上午实现了一个人脸识别相关例子,代码用AI大模型实现,打开DeepSeek,输入以下提示词:你是一个资深的深度学习工程师。写一个人脸识别的python程序,导入的第三方库是opencv和facerecognition,功能如下:1打开摄像头,检查人脸(可能有多张脸);2把摄像头出现的人脸对比一个预置的人脸库facedb文件夹,人脸库中的每个人脸照片的文件名是本人名字;3对比成功的,打印出人名。不要异常处理。
很快,DS生成了第一个版本。运行出错,需要安装那几个第三方库。
import cv2
import face_recognition
import os
import numpy as np
import time
import csv
from datetime import datetime
这几个第三方库,cv2没有,face_recognition没有,但直接安装失败。pip install opencv-python face_recognition,尤其是face_recognition需要好几个依赖库。再次查询DS,安装步骤如下:
1安装 Microsoft C++ Build Tools,在微软官方页面下载即可,运行下载的安装程序,在“工作负载” (Workloads) 标签页中,勾选“使用C++的桌面开发” (Desktop development with C++),其余默认即可。安装完成后,重启电脑。
2安装 CMake(重要),`dlib` 的编译依赖 CMake。**下载**:访问CMake官网【`cmake.org/download/`】,下载Windows下的安装程序(.msi文件)。**安装**:运行安装程序时,**务必勾选“Add CMake to the system PATH for all users”**。**验证**:安装完成后,在**新的**命令提示符中运行 `cmake --version`,能正常显示版本号即表示成功。
3安装dlib。但是直接安装dlib有问题,pip install dlib失败。只能下载whl文件,再问DS,按照提示下载安装,成功了。
4接着,就可以安装pip install face_recognition了。
安装成功后,运行代码,没有找不到库的错误了,但是又出来不支持图片的错误。用DS,豆包,元宝反复排除错误,各种修改始终不成功,把图片换了一遍也不行。
一筹莫展中,最后只好使用在我这个红米笔记本电脑中安装的ClaudeCode解决了。我把提示词告诉了它,它自动写好了程序,做测试,同样出现了不能识别图片的问题。不断地排查,最后解决了,原来是numpy和dlib的版本出现冲突导致的图片不能识别。claude把我电脑中的numpy降级了,从2降到了1。终于正确出结果了。这个python比较讨厌的地方就是各种库的版本不兼容问题。
最后,运行这个程序,它会打开摄像头,拍照你的人脸,与facedb中的图片进行对比,找出一样的图片就把图片名字输出显示。
代码如下:
import os import cv2 import face_recognition facedb_path = os.path.join(os.path.expanduser("~"), "Desktop", "facedb") # 1. 加载 facedb 中所有人脸图片,提取人脸编码 print("正在加载 facedb 中的人脸图片...\n") db_faces = [] # [(filename, encoding)] for filename in os.listdir(facedb_path): filepath = os.path.join(facedb_path, filename) if not os.path.isfile(filepath): continue img = face_recognition.load_image_file(filepath) encodings = face_recognition.face_encodings(img) if encodings: db_faces.append((filename, encodings[0])) print(f" {filename} -> 已提取人脸特征") else: print(f" {filename} -> 未检测到人脸,跳过") if not db_faces: print("facedb 中没有检测到任何人脸,程序退出。") exit() print(f"\n共加载 {len(db_faces)} 张人脸,开始摄像头比对...\n") # 2. 打开摄像头 cap = cv2.VideoCapture(0) if not cap.isOpened(): print("无法打开摄像头!") exit() print("按 SPACE 拍摄照片进行比对,按 ESC 退出程序。\n") while True: ret, frame = cap.read() if not ret: print("无法读取摄像头画面。") break cv2.imshow("摄像头 - SPACE拍照 / ESC退出", frame) key = cv2.waitKey(1) & 0xFF if key == 27: # ESC break if key == 32: # SPACE rgb_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) face_locations = face_recognition.face_locations(rgb_frame) face_encodings = face_recognition.face_encodings(rgb_frame, face_locations) if not face_encodings: print("当前画面未检测到人脸,请重试。\n") continue print(f"拍摄完成,检测到 {len(face_encodings)} 张人脸,正在比对...") # 3. 将摄像头中的每张人脸与 facedb 中的每张人脸比对 matched_names = set() for cam_encoding in face_encodings: for filename, db_encoding in db_faces: results = face_recognition.compare_faces( [db_encoding], cam_encoding, tolerance=0.5 ) if results[0]: matched_names.add(filename) # 4. 输出结果 if matched_names: print("人脸匹配成功,对应的图片:") for name in matched_names: print(f" {name}") else: print("没有匹配的图片。") print() cap.release() cv2.destroyAllWindows()