def train(self): dataset = DataSet('./data/') model = Model() model.read_trainData(dataset) model.build_model() model.train_model() model.evaluate_model() model.save()
class Camera_reader(object): #在初始化camera的时候建立模型,并加载已经训练好的模型 def __init__(self): self.model = Model() #self.model.load() self.img_size = 128 if os.path.exists("images\\yjd_sc"): shutil.rmtree("images\\yjd_sc") if os.path.exists("images\\yjd_deal"): shutil.rmtree("images\\yjd_deal") if os.path.exists("dataset\\yjd_21_NEU_boy_001231"): shutil.rmtree("dataset\\yjd_21_NEU_boy_001231") os.mkdir("images\\yjd_sc") os.mkdir("images\\yjd_deal") os.mkdir("dataset\\yjd_21_NEU_boy_001231") def build_camera(self): hight = 0 color = (0, 255, 0) #opencv文件中人脸级联文件的位置,用于帮助识别图像或者视频流中的人脸 face_cascade = cv2.CascadeClassifier( 'C:\\ProgramData\\Anaconda3\\Lib\\site-packages\\cv2\\data\\haarcascade_frontalface_alt2.xml' ) #打开摄像头并开始读取画面 cameraCapture = cv2.VideoCapture(0) success, frame = cameraCapture.read() name_list = read_name_list('dataset') count = 0 while success and cv2.waitKey(1) == -1: success, frame = cameraCapture.read() count += 1 if count < 100: cv2.imwrite("images/yjd_sc/" + str(count) + ".jpg", frame) elif count == 200: #将摄像头采集的钱200张图像当做原始图片进行实时建模和模型的训练 cv2.imwrite("images/yjd_sc/" + str(count) + ".jpg", frame) dealImg('images\\yjd_sc', 'images\\yjd_deal') readPicSaveFace('images\\yjd_deal', 'dataset\\yjd_21_NEU_boy_001231', '.jpg', '.JPG', 'png', 'PNG') dataset = DataSet("dataset") self.model.read_trainData(dataset) self.model.build_model() self.model.train_model() self.model.evaluate_model() self.model.save() else: #将其实时训练好的模型应用于之后检测的图像 gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) #图像灰化 faces = face_cascade.detectMultiScale(gray, 1.3, 5) #识别人脸 cv2.putText(frame, "Driver Info", (80, 25), cv2.FONT_HERSHEY_SIMPLEX, 0.8, 255, 2, 2) # 显示信息标题 if len(faces) == 0: cv2.rectangle(frame, (0, 0), (300, 100), color, 3) # 5控制绿色框的粗细 cv2.putText(frame, "No people !!!", (20, 60), cv2.FONT_HERSHEY_SIMPLEX, 1, 255, 2) # 显示陌生人信息 else: for (x, y, w, h) in faces: ROI = gray[x:x + w, y:y + h] ROI = cv2.resize(ROI, (self.img_size, self.img_size), interpolation=cv2.INTER_LINEAR) label, prob = self.model.predict( ROI) # 利用模型对cv2识别出的人脸进行比对 if prob > 0.7: # 如果模型认为概率高于70%则显示为模型中已有的label show_name = name_list[label] else: show_name = 'Stranger' # 当识别出来的不是陌生人时,需要显示出司机信息 if show_name != "Stranger": info = show_name.split('_') infoName = 'Name:' + info[0] infoAge = 'Age:' + info[1] infoUniversity = 'University:' + info[2] infoSex = 'Sex:' + info[3] infoDrivingLN = 'DriverNumber:' + info[4] cv2.rectangle(frame, (0, 0), (280, len(faces) * 220), color, 3) # 5控制绿色框的粗细 cv2.putText(frame, info[0], (x, y - 20), cv2.FONT_HERSHEY_SIMPLEX, 1, 255, 2) # 显示姓名信息 cv2.putText(frame, infoDrivingLN, (0, hight + 60), cv2.FONT_HERSHEY_SIMPLEX, 0.8, color, 2, 3) # 显示驾驶证号码 cv2.putText(frame, infoName, (0, hight + 95), cv2.FONT_HERSHEY_SIMPLEX, 0.8, color, 2, 3) # 显示名字 cv2.putText(frame, infoAge, (0, hight + 130), cv2.FONT_HERSHEY_SIMPLEX, 0.8, color, 2, 3) # 显示年龄 cv2.putText(frame, infoUniversity, (0, hight + 165), cv2.FONT_HERSHEY_SIMPLEX, 0.8, color, 2, 3) # 显示学历 cv2.putText(frame, infoSex, (0, hight + 200), cv2.FONT_HERSHEY_SIMPLEX, 0.8, color, 2, 3) # 显示性别 else: cv2.rectangle(frame, (0, 0), (300, 100), color, 3) # 5控制绿色框的粗细 cv2.putText(frame, "Stranger", (x, y - 20), cv2.FONT_HERSHEY_SIMPLEX, 1, 255, 2) # 显示陌生人信息 cv2.putText(frame, "It is a Stranger", (20, 60), cv2.FONT_HERSHEY_SIMPLEX, 1, 255, 2) # 显示陌生人信息 frame = cv2.rectangle(frame, (x, y), (x + w, y + h), color, 2) # 在人脸区域画一个正方形出来 cv2.imshow("Camera", frame) cameraCapture.release() cv2.destroyAllWindows()