铜川网站seo,wordpress logo图片,php做企业网站管理系统,自适应式电影网站模板代码讲解
1. 导入必要的库
import cv2
import os
from pathlib import Path
import shutil
import numpy as np
import loggingcv2: OpenCV 库#xff0c;用于图像处理和计算机视觉。os: 提供了一种便携的方式使用操作系统依赖的功能。pathlib.Path: 提供了对象导向的路径处…代码讲解
1. 导入必要的库
import cv2
import os
from pathlib import Path
import shutil
import numpy as np
import loggingcv2: OpenCV 库用于图像处理和计算机视觉。os: 提供了一种便携的方式使用操作系统依赖的功能。pathlib.Path: 提供了对象导向的路径处理方法。shutil: 提供了高级文件操作如复制、移动文件等。numpy: 用于处理数组和矩阵的计算。logging: 提供了记录日志的功能。
2. 设置日志
logging.basicConfig(levellogging.INFO, format%(asctime)s - %(levelname)s - %(message)s)设置日志的基本配置使得程序可以记录信息级别的日志。
3. 加载 Haar cascade 模型
face_cascade cv2.CascadeClassifier(cv2.data.haarcascades haarcascade_frontalface_default.xml)加载 OpenCV 预训练的 Haar cascade 分类器用于检测图像中的人脸。
4. 定义文件夹
REFERENCE_DIR reference
NO_MATCH_DIR no_match
os.makedirs(REFERENCE_DIR, exist_okTrue)
os.makedirs(NO_MATCH_DIR, exist_okTrue)定义参考图像文件夹和不匹配图像的存放文件夹并确保这些文件夹存在。
5. 加载训练数据集
training_data []
labels []def load_training_data(training_dir):label 0 # 假设只有一个参考人物for root, _, files in os.walk(training_dir):for file in files:if file.endswith(.jpg) or file.endswith(.png):path os.path.join(root, file)image cv2.imread(path, cv2.IMREAD_GRAYSCALE) # 直接读取为灰度图if image is not None:training_data.append(image)labels.append(label)遍历指定的训练数据文件夹加载所有 .jpg 和 .png 图片并将它们转换为灰度图存储在 training_data 列表中标签统一为 0假设只有一个参考人物。
6. 训练人脸识别器
def train_recognizer(training_data, labels):recognizer cv2.face.LBPHFaceRecognizer_create()recognizer.train(training_data, np.array(labels))return recognizer使用 Local Binary Patterns Histograms (LBPH) 方法训练人脸识别器。
7. 检测图像中的人脸
def detect_faces(image):gray cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)face_rects face_cascade.detectMultiScale(gray, scaleFactor1.1, minNeighbors5, minSize(30, 30))return face_rects检测传入图像中的人脸位置并返回人脸矩形框。
8. 识别图像中的人脸
def recognize_face(recognizer, image):gray cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 确保图像为灰度图face_rects detect_faces(image)if len(face_rects) 0:for (x, y, w, h) in face_rects:roi_gray gray[y:yh, x:xw] # 使用灰度图label, confidence recognizer.predict(roi_gray)return label, confidencereturn None, None使用训练好的人脸识别器来识别图像中的人脸并返回标签和置信度。
9. 处理单张图片
def process_image(png_file, recognizer, threshold100):try:image cv2.imread(str(png_file))if image is None:raise FileNotFoundError(fCould not load image from {png_file})label, confidence recognize_face(recognizer, image)if label is not None and confidence threshold:logging.info(f{png_file.name} belongs to the target person.)else:logging.info(f{png_file.name} does not belong to the target person.)destination Path(NO_MATCH_DIR) / png_file.nameshutil.move(str(png_file), str(destination)) # 移动不匹配的图片except Exception as e:logging.error(fError processing {png_file.name}: {str(e)})处理单张图片识别其中的人脸如果识别结果的置信度低于阈值则移动该图片到 NO_MATCH_DIR 文件夹。
10. 处理文件夹中的所有 .png 图片
def process_images(directory, recognizer):directory_path Path(directory)png_files list(directory_path.glob(*.png))for png_file in png_files:process_image(png_file, recognizer)遍历指定目录下的所有 .png 文件并逐一处理。
11. 主程序入口
if __name__ __main__:# 加载训练数据集load_training_data(REFERENCE_DIR)# 训练人脸识别器recognizer train_recognizer(training_data, labels)# 处理目标文件夹中的图片input_directory images # 请确保这个路径是正确的process_images(input_directory, recognizer)主程序入口加载训练数据集训练人脸识别器并处理指定目录下的所有图片。
总结
这段代码实现了从一个包含参考人物的图像文件夹中加载数据训练一个简单的人脸识别器然后用这个识别器去识别另一个文件夹中的图片并将不匹配的图片移动到另一个文件夹中。通过这种方式可以有效地对大量图片进行分类处理。