python写一个分类算法,我提供图片来学习,学习后生成一个模型文件。然后这个模型文件可以用来调用,只需要提供图片就可以返回图片中的人是谁
时间: 2024-03-26 12:40:49 浏览: 106
好的,以下是一个简单的 Python 代码,可以使用支持向量机 (SVM) 算法来进行人脸识别。你可以通过提供不同人的图片来训练模型,并将训练好的模型保存到文件中。然后,你可以使用保存的模型来识别一张新的人脸图片。
```python
import cv2
import os
import numpy as np
from sklearn import svm
from sklearn.externals import joblib
# 读取图像和标签
def read_images(folder):
images = []
labels = []
for filename in os.listdir(folder):
label = filename.split('.')[0]
img = cv2.imread(os.path.join(folder,filename))
if img is not None:
images.append(img)
labels.append(label)
return images, labels
# 提取特征向量
def extract_features(images):
features = []
for img in images:
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
hist = cv2.calcHist([gray],[0],None,[256],[0,256])
features.append(hist.flatten())
return features
# 读取图像和标签
images, labels = read_images('images')
# 提取特征向量
features = extract_features(images)
# 训练模型
clf = svm.SVC()
clf.fit(features, labels)
# 保存模型到文件
joblib.dump(clf, 'model.pkl')
# 加载模型
clf = joblib.load('model.pkl')
# 预测新图像
img = cv2.imread('test.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
hist = cv2.calcHist([gray],[0],None,[256],[0,256])
features = np.array(hist.flatten()).reshape(1, -1)
label = clf.predict(features)[0]
print('识别结果:', label)
```
在这个代码中,你需要将不同人的图片放在名为 `images` 的文件夹中。`read_images` 函数将读取这些图像和它们的标签。`extract_features` 函数将提取这些图像的特征向量。然后,使用 `svm.SVC` 函数训练模型,并使用 `joblib.dump` 函数将模型保存到文件中。最后,使用 `joblib.load` 函数加载保存的模型,并使用 `predict` 函数预测新图像的标签。
你可以根据自己的需求修改这个代码,例如使用其他分类学习算法、调整参数等。同时,你可以提供更多的图片来训练模型,以获得更好的识别效果。
阅读全文