PyCharm环境下RFID验证通过后调用执行人脸识别代码的实现方案
解决方案
方案1:单文件整合(推荐,上手最快)
核心思路:将人脸识别逻辑封装为独立函数,在RFID序列号验证通过的分支直接调用该函数即可,运行时人脸识别结束后会自动回到RFID等待验证状态。
完整整合代码
import serial import time import pandas as pd import cv2 import pickle # 人脸识别逻辑封装为独立函数 def run_face_recognition(): face_cascade = cv2.CascadeClassifier('C:/Users/Person/PycharmProjects/pythonProject/cascade/haarcascade_frontalface_default.xml') recognizer = cv2.face.LBPHFaceRecognizer_create() recognizer.read("recognizer/training.yml") labels = {} with open("labels.pickle", 'rb') as f: og_labels = pickle.load(f) labels = {v: k for k, v in og_labels.items()} cap = cv2.VideoCapture(0) while True: ret, frame = cap.read() if not ret: break gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(gray, scaleFactor=1.5, minNeighbors=5) for(x, y, w, h) in faces: roi_gray = gray[y:y+h, x:x+w] roi_color = frame[y:y+h, x:x+w] id_, conf = recognizer.predict(roi_gray) if conf>=73 and conf <=100: print(labels[id_]) print("face recognized") font = cv2.FONT_HERSHEY_SIMPLEX name = labels[id_] color = (255, 255, 255) stroke = 2 cv2.putText(frame, name, (x, y), font, 1, color, stroke, cv2.LINE_AA) img_item = "person.png" cv2.imwrite(img_item, roi_gray) color = (255, 0, 0) stroke = 2 end_cord_x = x + w end_cord_y = y + h cv2.rectangle(frame, (x, y), (end_cord_x, end_cord_y), color, stroke ) cv2.imshow("Video Capture", frame) if cv2.waitKey(20) & 0xff == ord('q'): break cap.release() cv2.destroyAllWindows() # RFID读取与验证逻辑 if __name__ == "__main__": device = 'COM6' # 可扩展添加多个授权RFID序列号 authorized_rfid = [b'213 237 169 54\r\n'] try: print(f"Connecting to device {device}") arduino = serial.Serial(device, 9600) except: print(f"Failed to connect on {device}") exit() while True: time.sleep(1) try: data = arduino.readline() if not data: continue print(data) if data in authorized_rfid: print("Approved, starting face recognition...") # 验证通过直接调用人脸识别流程 run_face_recognition() print("Face recognition ended, waiting for next RFID card...") except Exception as e: print(f"Processing error: {e}")
方案2:多文件分离调用(适合后续功能迭代)
如果需要保留两个独立的代码文件,按以下步骤操作即可:
- 将人脸识别代码保存为
face_recog_module.py,把全部人脸识别逻辑封装为run_face_recognition()函数,结构和方案1中封装的函数一致 - 在Arduino RFID读取代码的同级目录下,导入该模块的对应函数,验证通过后直接调用:
from face_recog_module import run_face_recognition # 原有RFID逻辑省略 if data == b'213 237 169 54\r\n': print("Approved") run_face_recognition()
注意事项
- 提前安装全部依赖:
pip install pyserial pandas opencv-python opencv-contrib-python,LBPH人脸识别依赖opencv-contrib-python扩展包 - 新增授权RFID卡时直接在
authorized_rfid列表中添加对应字节串即可,无需修改核心逻辑 - 人脸识别过程中按
q键即可退出识别,回到RFID卡等待验证状态
内容的提问来源于stack exchange,提问作者mar
相关产品推荐
相关产品推荐

