برنامه نویسی

سیستم حضور و غیاب با تشخیص ماسک صورت با استفاده از API Azure Face

در دنیای پس از فهرست ، بسیاری از سازمان ها علاوه بر تأیید هویت برای حضور ، به کارمندان یا بازدید کنندگان خود نیاز دارند که ماسک بپوشند. این پست وبلاگ نحوه ساخت یک ساده را توضیح می دهد سیستم حضور در تشخیص چهره با تشخیص ماسک صورت با استفاده از Azure ai face apiبشر

با چهره Azure AI ، می توانیم:

  1. چهره ها را تشخیص دهید در یک تصویر
  2. بررسی کنید که آیا شخصی ماسک پوشیده است (و اگر بینی و دهان پوشانده شده است).
  3. شناسایی کردن اگر چهره ای شناسایی شده در لیست شناخته شده ما از افراد مجاز قرار داشته باشد.
  4. حضور را فقط در صورت شناختن شخص علامت گذاری کنید وت پوشیدن ماسک

این وبلاگ شامل دو قطعه کد اصلی است:

  1. شناخت صورت و بررسی اینکه آیا متعلق به یک گروه آموزش دیده از افراد مجاز است.
  2. تشخیص اینکه آیا شخصی ماسک پوشیده است و مارک حضور

پیش نیازهای

  1. اشتراک لاجورد

    • برای ایجاد یک اشتراک Azure فعال نیاز دارید خدمات شناختی لاجورد منبع با API صورت.

شرح تصویر

  1. پایتون 3.7+

    • اطمینان حاصل کنید که Python 3.7 (یا بالاتر) روی سیستم شما نصب شده است.
  2. Azure AI Vision (Face) SDK

     pip install azure-ai-vision
    
  3. Face API Key & Endpoint

    • پس از ایجاد یک منبع صورت در پورتال لاجورد ، بازیابی:
      • نقطه پایانی (به عنوان مثال ، https://.cognitiveservices.azure.com/)
      • کلید API (یک کلید 32 کاراکتر)

معماری با یک نگاه

  1. گروه شخص بزرگ (LPG):

    • شما یک گروه بزرگ برای ذخیره افراد شناخته شده ایجاد می کنید (به عنوان مثال ، کارمندان ، دانشجویان).
    • LPG را آموزش دهید تا بتواند بعداً این چهره ها را تشخیص دهد.
  2. شناسایی و شناسایی:

    • وقتی کسی سعی در حضور در حضور دارد ، سیستم یک عکس را بارگذاری می کند.
    • چهره لاجورد چهره ها را تشخیص می دهد ، ویژگی های بازده از جمله شناسه صورتبا ماسک خواص ، و (به صورت اختیاری) کیفیت برای تشخیص.
    • اگر بالاتر از آستانه اطمینان خاص شناخته شود وت با پوشیدن ماسک ، این سیستم حضور دارد.
  3. پیشرفت های دنیای واقعی:

    • برای ضبط تصاویر در زمان واقعی از یک فید دوربین استفاده کنید.
    • با نرم افزار حضور موجود یا یک پایگاه داده ادغام شوید.

قطعه کد شماره 1: کنترل دسترسی به درب با تشخیص چهره

این قطعه نشان می دهد که چگونه تشخیص دادن صورت و بررسی کنید که آیا قبلاً در یک مورد شناخته شده است آموزش دیده گروه بزرگ شخص. در صورت تشخیص ، با چاپ یک پیام خوش آمدید ، باز کردن یک درب را شبیه سازی می کنیم. در غیر این صورت ، ما دسترسی را انکار می کنیم.

نام پرونده: door_access_control_local_upload.py

import os
from azure.core.credentials import AzureKeyCredential
from azure.ai.vision.face import FaceAdministrationClient, FaceClient
from azure.ai.vision.face.models import (
    FaceAttributeTypeRecognition04,
    FaceDetectionModel,
    FaceRecognitionModel,
    QualityForRecognition
)

FACE_API_KEY = os.environ.get("FACE_APIKEY")  # Or replace with your API key as a string
FACE_ENDPOINT = os.environ.get("FACE_ENDPOINT")  # Or replace with your endpoint

# Must match the ID you used when creating/training the Large Person Group
LARGE_PERSON_GROUP_ID = "my-lpg-local-upload"

def check_access(face_client, face_id, confidence_threshold=0.7):
    """
    Identify the face_id against the Large Person Group.
    Return (True, person_id) if recognized >= threshold, else (False, None).
    """
    identify_results = face_client.identify_from_large_person_group(
        face_ids=[face_id],
        large_person_group_id=LARGE_PERSON_GROUP_ID
    )
    if not identify_results:
        return (False, None)

    result = identify_results[0]
    if not result.candidates:
        return (False, None)

    top_candidate = result.candidates[0]
    if top_candidate.confidence >= confidence_threshold:
        return (True, top_candidate.person_id)
    return (False, None)

def open_door_simulation(person_name):
    """
    In a real system, trigger door unlock. 
    Here, just print a message for demonstration.
    """
    print(f"[ACCESS GRANTED] Welcome, {person_name}! The door is now unlocked.")

def deny_access_simulation():
    """Simulate denying access."""
    print("[ACCESS DENIED] Unrecognized or unauthorized individual.")

def main():
    print("Door Access Control (Local Photo Upload)")

    # Create clients
    face_client = FaceClient(
        endpoint=FACE_ENDPOINT,
        credential=AzureKeyCredential(FACE_API_KEY)
    )
    face_admin_client = FaceAdministrationClient(
        endpoint=FACE_ENDPOINT,
        credential=AzureKeyCredential(FACE_API_KEY)
    )

    # Provide path to the image you want to check
    image_path = "path/to/test_image.jpg"
    if not os.path.exists(image_path):
        print(f"Error: File not found => {image_path}")
        return

    with open(image_path, "rb") as f:
        img_bytes = f.read()

    try:
        # DETECT face
        detected_faces = face_client.detect(
            image=img_bytes,
            detection_model=FaceDetectionModel.DETECTION03,
            recognition_model=FaceRecognitionModel.RECOGNITION04,
            return_face_id=True,
            return_face_attributes=[FaceAttributeTypeRecognition04.QUALITY_FOR_RECOGNITION]
        )

        if not detected_faces:
            print("No faces detected in the image. Access denied.")
            return

        # For simplicity, just use the first face
        face = detected_faces[0]
        if face.face_attributes.quality_for_recognition == QualityForRecognition.LOW:
            print("Face quality too low for recognition. Access denied.")
            return

        recognized, person_id = check_access(face_client, face.face_id)

        if recognized and person_id:
            # Retrieve the person's details to say hello by name
            person_info = face_admin_client.large_person_group.get_person(
                large_person_group_id=LARGE_PERSON_GROUP_ID,
                person_id=person_id
            )
            # Greet by name
            open_door_simulation(person_info.name)
        else:
            deny_access_simulation()

    except Exception as e:
        print(f"Error: {e}")

if __name__ == "__main__":
    main()

حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

چگونه کار می کند

  • تشخیص شامل هر دو ویژگی ماسک و کیفیت_FOR_RECOGNITION است.
  • ما قبل از اقدام به شناخت ، از NOSE_AND_MOUTH_COVERED == صحیح اطمینان می دهیم.
  • اگر به رسمیت شناخته شود (اعتماد به نفس> = 0.7) ، ما یک پیام موفقیت را چاپ می کنیم. در غیر این صورت ، ما حضور را انکار می کنیم.

تشخیص وب کم در زمان واقعی

برای تشخیص مداوم (مانند دروازه ورودی یا محل پذیرش) ، می توانید با استفاده از OpenCV قاب هایی را از وب کم خود ضبط کنید ، سپس با Azure Face تماس بگیرید تا ماسک و شناخت را در زمان واقعی بررسی کنید.

نام پرونده: RealTime_WebCam_Detection.py

import os
import cv2
import time
from azure.core.credentials import AzureKeyCredential
from azure.ai.vision.face import FaceClient
from azure.ai.vision.face.models import (
    FaceDetectionModel,
    FaceRecognitionModel,
    FaceAttributeTypeDetection03,
    FaceAttributeTypeRecognition04,
    QualityForRecognition
)

# Replace with your actual values or environment variables
FACE_API_KEY = os.environ.get("FACE_APIKEY") or ""
FACE_ENDPOINT = os.environ.get("FACE_ENDPOINT") or ""

# Must match your trained Large Person Group
LARGE_PERSON_GROUP_ID = "my-lpg-local-upload"

def identify_person(face_client, face_id, threshold=0.7):
    """Identify the face in the LPG. Returns (True, person_id) if recognized."""
    results = face_client.identify_from_large_person_group(
        face_ids=[face_id],
        large_person_group_id=LARGE_PERSON_GROUP_ID
    )
    if not results or not results[0].candidates:
        return (False, None)

    candidate = results[0].candidates[0]
    return (candidate.confidence >= threshold, candidate.person_id)

def main():
    print("[INFO] Starting Real-Time Face Mask & Recognition Detection")

    # Create FaceClient
    face_client = FaceClient(
        endpoint=FACE_ENDPOINT,
        credential=AzureKeyCredential(FACE_API_KEY)
    )

    # Open the default webcam
    cap = cv2.VideoCapture(0)
    if not cap.isOpened():
        print("[ERROR] Could not open webcam.")
        return

    try:
        while True:
            ret, frame = cap.read()
            if not ret:
                print("[ERROR] Failed to read frame from webcam.")
                break

            # Encode current frame to JPEG
            _, img_encoded = cv2.imencode('.jpg', frame)
            img_bytes = img_encoded.tobytes()

            # Detect faces
            try:
                faces = face_client.detect(
                    image=img_bytes,
                    detection_model=FaceDetectionModel.DETECTION03,
                    recognition_model=FaceRecognitionModel.RECOGNITION04,
                    return_face_id=True,
                    return_face_attributes=[
                        FaceAttributeTypeDetection03.MASK,
                        FaceAttributeTypeRecognition04.QUALITY_FOR_RECOGNITION
                    ]
                )
            except Exception as e:
                print(f"[ERROR] Azure Face detection error: {e}")
                continue

            # For each face, check mask & recognition
            for face in faces:
                # Draw bounding box
                rect = face.face_rectangle
                top, left, width, height = rect.top, rect.left, rect.width, rect.height
                cv2.rectangle(frame, (left, top), (left + width, top + height), (0, 255, 0), 2)

                # Default label
                msg = "No Mask Detected"

                # Check mask coverage
                mask_data = face.face_attributes.mask
                if mask_data and mask_data.nose_and_mouth_covered:
                    # Check face quality
                    if face.face_attributes.quality_for_recognition != QualityForRecognition.LOW:
                        recognized, person_id = identify_person(face_client, face.face_id)
                        if recognized:
                            msg = "Recognized + Masked"
                            # If you want the person's actual name:
                            # (You’d need the FaceAdministrationClient here)
                            # person_info = face_admin_client.large_person_group.get_person(
                            #     LARGE_PERSON_GROUP_ID, person_id
                            # )
                            # msg = f"{person_info.name} + Masked"
                        else:
                            msg = "Unknown, Masked"
                    else:
                        msg = "Low Quality Face"
                else:
                    msg = "No/Improper Mask"

                # Put text on frame
                cv2.putText(frame, msg, (left, top - 10), cv2.FONT_HERSHEY_SIMPLEX, 
                            0.5, (0, 255, 255), 2)

            # Show the result
            cv2.imshow('Real-Time Mask & Recognition', frame)

            # Press 'q' to quit
            if cv2.waitKey(1) & 0xFF == ord('q'):
                break

            time.sleep(0.3)  # Slight delay to reduce API calls

    except KeyboardInterrupt:
        print("[INFO] Interrupted by user.")
    finally:
        cap.release()
        cv2.destroyAllWindows()

if __name__ == "__main__":
    main()

حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

چگونه کار می کند

  • OpenCV قاب هایی را از وب کم بدست می آورد.
  • تشخیص چهره لاجورد شامل ماسک و ویژگی های با کیفیت است.
  • جعبه های محدود: ما مستطیل ها و متن را در فیلم ترسیم می کنیم.
  • اگر صورت به رسمیت شناخته شده و ماسک شود ، ما آنها را “شناخته شده + نقاب دار” برچسب می زنیم. در غیر این صورت ، ما آنها را “ناشناخته ، نقاب” یا “ماسک بدون/نادرست” برچسب می زنیم.

ادغام با یک پایگاه داده حضور

در تولید ، شما:

  • ورود به سیستم در یک پایگاه داده با Timestamps (به عنوان مثال ، SQL ، Cosmos DB).
  • سیستم های کنترل دسترسی را در صورت تشخیص و نقاب زدن.
  • اگر یک فرد ناشناخته یا ناشناخته تشخیص داده شود ، اعلان ها یا منطق سفارشی را کنترل کنید.

عیب یابی و بهترین روشها

آستانه اعتماد به نفس
0.7 را تنظیم کنید تا تعادل کاذب را در مقابل رد رد کنید. در سناریوهای با امنیت بالاتر ، بالاتر بروید (به عنوان مثال ، 0.8).

شرایط کم نور
نورپردازی ضعیف ممکن است دقت و کیفیت تشخیص چهره را کاهش دهد. نور محیط یا دوربین IR را در محیط های کم نور فراهم کنید.

محدودیت نرخ API
ردیف رایگان محدودیت های فراخوانی در هر دقیقه دارد. اگر 30 فریم در ثانیه ضبط می کنید ، به سرعت از آن فراتر می روید!
از THROTTLING (TIME.SLEEP (…)) یا یک ردیف خدمات بالاتر استفاده کنید.

حریم خصوصی و امنیت
تشخیص چهره تابع قوانین حمایت از داده ها (GDPR ، HIPAA و غیره) است.
داده های Face را به طور ایمن ذخیره کرده و کلید API خود را ایمن نگه دارید (به عنوان مثال ، طاق Key Azure).

پشتیبانی منطقه از ماسک
اسناد لاجورد را بررسی کنید تا اطمینان حاصل شود که منطقه شما از ویژگی ماسک پشتیبانی می کند.
پایان

با ترکیب Azure AI Face و OpenCV ، می توانید یک سیستم حضور و غیاب قوی بسازید که هم هویت و هم ماسک را تأیید می کند. این دستورالعمل های بهداشتی مدرن را برآورده می کند ، بدون لمس است و می تواند به ورود به سیستم در زمان واقعی یا کنترل نقاط دسترسی فیزیکی گسترش یابد.

مراحل بعدی:

  • کار ، ورود به سیستم ، ورود به سیستم و حسابرسی را بهبود بخشید.
  • با سخت افزار برای یک سیستم قفل درب واقعی یا چرخ دستی ادغام شوید.
  • در صورت نیاز به توان بالاتر یا عملیات مستقل از اینترنت ، راه حل های آفلاین یا داخل آن را کاوش کنید.

ساختمان مبارک!

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا