You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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:多文件分离调用(适合后续功能迭代)

如果需要保留两个独立的代码文件,按以下步骤操作即可:

  1. 将人脸识别代码保存为face_recog_module.py,把全部人脸识别逻辑封装为run_face_recognition()函数,结构和方案1中封装的函数一致
  2. 在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 01:24:05