opencv-python 数据训练的开源项目运行不了
import os
import cv2
from PIL import Image
import numpy as np
def getImageAndLabels(path):
# 储存人脸数据
facesSamples = []
# 储存姓名数据
ids = []
# 储存图片信息
imagePaths = [os.path.join(path, f) for f in os.listdir(path)]
# 加载分类器
face_detector = cv2.CascadeClassifier('F:\Desktop\opencv\sources\data\haarcascades\haarcascade_frontalface_alt2.xml')
# 遍历列表中的图片
for imagePath in imagePaths:
# 打开图片,灰度化 PIL有九种不同感觉:1,L,P,RGB,RGBA,CMYK,YCbCr,I,F.
PIL_img = Image.open(imagePath).convert('L')
# 将图像转换为数组,以黑白深浅
img_numpy = np.array(PIL_img, 'uint8')
# 获取图片人脸特征
faces = face_detector.detectMultiScale(img_numpy)
# 获取每张照片的id和姓名
id = int(os.path.split(imagePath)[1].split('.')[0])
# 预防无面容照片
for x,y,w,h in faces:
ids.append(id)
facesSamples.append(img_numpy[y:y+h,x:x+w])
# 打印脸部特征和id
print('id:', id)
print('fs:', facesSamples)
return facesSamples, ids
if __name__ == '__main__':
# 图片路径
path = 'F:\python-xmu\opencv\data\pian'
# 获取图像数组和id标签数组和姓名
faces, ids = getImageAndLabels(path)
# 加载识别器
recognizer = cv2.face.LBPHFaceRecognizer_create()
# 训练
recognizer.train(faces, np.array(ids))
# 保存文件
recognizer.write('trainer/trainer.yml')
F:\python\python.exe F:\python-xmu\opencv\data\trainer\09数据训练.py
Traceback (most recent call last):
File "F:\python-xmu\opencv\data\trainer\09数据训练.py", line 38, in
faces, ids = getImageAndLabels(path)
File "F:\python-xmu\opencv\data\trainer\09数据训练.py", line 24, in getImageAndLabels
id = float(os.path.split(imagePath)[1].split('.')[0])
ValueError: could not convert string to float: 'lina'
进程已结束,退出代码1
求解答
路径要么\\,要么用/。
你这个报错要看下你的os.path.split(imagePath)[1].split('.')[0]这句切分的结果,并不是你想要的数字,而是一个字符串,字符串不能转成float。
你好,这个问题你是咋解决的啊,我给你报的错一样