"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > منظمة العفو الدولية > اكتشاف الجنس مع OpenCV و Roboflow في Python - Analytics Vidhya

اكتشاف الجنس مع OpenCV و Roboflow في Python - Analytics Vidhya

نشر في 2025-04-29
تصفح:362

مقدمة

الكشف عن الجنس من صور الوجه هو واحد من العديد من التطبيقات الرائعة لرؤية الكمبيوتر. في هذا المشروع ، نجمع بين OpenCV لموقع المواجهة و API Roboflow لتصنيف الجنسين ، وصنع جهاز يحدد الوجوه ، ويتحقق منها ، ويتوقع جنسهم. سنستخدم Python ، وخاصة في Google Colab ، لتكتب هذا الرمز وتشغيله. يعطي هذا المباشر تجولًا سهلاً في الكود ، مما يوضح كل خطوة حتى تتمكن من فهمها وتطبيقها على مشاريعك.

هدف التعلم

  • فهم كيفية تنفيذ الكشف عن الوجه باستخدام شلال HAAR الخاص بـ OpenCV.
  • تعلم كيفية دمج API Roboflow لتصنيف الجنس.
  • استكشاف أساليب لمعالجة الصور ومعالجتها في Python.
  • تصور نتائج الكشف باستخدام matplotlib.
  • تطوير مهارات عملية في الجمع بين AI ورؤية الكمبيوتر لتطبيقات العالم الحقيقي.

تم نشر هذه المقالة كجزء من جدول المحتويات

كيفية اكتشاف الجنس باستخدام opencv و roboflow في python؟ Image

    الخطوة 4: إعداد واجهة برمجة تطبيقات الكشف عن الجنس
    • الخطوة 5: معالجة كل الوجه المكتشف
    • كيفية اكتشاف الجنس باستخدام OpenCV و Roboflow في Python؟
    • دعنا نتعلم كيفية تنفيذ OpenCV و Roboflow في Python للكشف عن الجنس:
    • الخطوة 1: استيراد المكتبات وتحميل الصورة
    • الخطوة الأساسية هي نتيجة المكتبات الحيوية. نحن نستخدم OpenCV لإعداد الصور ، Numpy للتعامل مع المجموعات ، و Matplotlib لتصور ما يأتي. قمنا أيضًا بتحميل صورة تحتوي على وجوه أردنا تحليلها.
    • من ملفات استيراد google.colab استيراد CV2 استيراد numpy مثل NP من matplotlib استيراد pyplot كما plt من الاستدلال_SDK استيراد interferendhttpclient # تحميل الصورة تم تحميله = files.upload () # تحميل الصورة لاسم الملف في تحميل. keys (): img_path = اسم الملف
    • في google colab ، فإن Files.Upload () يعمل على تمكين العملاء من نقل السجلات ، مثل الصور ، من آلات الحي إلى بيئة كولاب. عند التحميل ، يتم وضع الصورة بعيدًا في مرجع كلمة تسمى Transferred ، حيث تقارن المفاتيح بأسماء السجلات. ثم يتم استخدام حلقة لاستخراج مسار الملف لمزيد من المعالجة. للتعامل مع مهام معالجة الصور ، يتم استخدام OpenCV للكشف عن الوجوه ورسم الصناديق المحيطة بها. في الوقت نفسه ، يتم استخدام Matplotlib لتصور النتائج ، بما في ذلك عرض الصورة والوجوه المزروعة.
  • الخطوة 2: تحميل نموذج Haar Cascade للكشف عن الوجه
  • بعد ذلك ، نقوم بتكديس عرض Cascade من Opencv ، والذي تم تدريبه مسبقًا على تحديد الوجوه. يقوم هذا النموذج بمسح صورة الأنماط التي تشبه الوجوه البشرية ويعيد إحداثياتها.

# تحميل نموذج Haar Cascade للكشف عن الوجه face_cascade = cv2.cascadeclassifier (cv2.data.haarcascades 'haarcascade_frontalface_default.xml')

عادة ما تكون استراتيجية سائدة للكشف عن الكائنات. يحدد الحواف والقوام والأنماط المرتبطة بالكائن (في هذه الحالة ، الوجوه). يوفر OpenCV نموذجًا للكشف عن الوجه مسبقًا ، والذي يتم تحميله باستخدام `cascadeclassifier.``

الخطوة 3: اكتشاف الوجوه في الصورة

] بعد ذلك ، نستخدم كاشف الوجه للعثور على وجوه في الصورة.

# قم بتحميل الصورة وتحويلها إلى رمادي IMG = cv2.imread (img_path) رمادي = cv2.cvtcolor (img ، cv2.color_bgr2gray) # اكتشف الوجوه في الصورة الوجوه = face_cascade.detectmultiscale (رمادي ، ScaleFactor = 1.1 ، minneighbors = 5 ، minsize = (30 ، 30))
from google.colab import files
import cv2
import numpy as np
from matplotlib import pyplot as plt
from inference_sdk import InferenceHTTPClient

# Upload image
uploaded = files.upload()

# Load the image
for filename in uploaded.keys():
    img_path = filename

تحميل الصور وتحويلها:

استخدم cv2.imread () لتكديس الصورة المنقولة.

# Load the Haar Cascade model for face detection
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades   'haarcascade_frontalface_default.xml')

اكتشاف الوجوه:

# Load the image and convert to grayscale
img = cv2.imread(img_path)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# Detect faces in the image
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))
    تعمل الوظيفة على توسيع نطاق الصورة وتتحقق من المجالات المختلفة لأنماط الوجه.
  • معلمات مثل ScaleFactor و Minneighbors تعدل حساسية الكشف والدقة.
    • الخطوة 4: إعداد واجهة برمجة تطبيقات الكشف عن الجنس
    الآن بعد أن اكتشفنا الوجوه ، نهيئة واجهة برمجة تطبيقات roboflow باستخدام IndeventHttpClient للتنبؤ بجنس كل الوجه المكتشف.
  • # تهيئة interferendhttpclient للكشف بين الجنسين العميل = interferendhttpclient ( api_url = "https://detect.roboflow.com" ، api_key = "use_your_api" )
    • يقوم InventionHttPclient بتبسيط التفاعل مع نماذج Roboflow التي تم تدريبها مسبقًا من خلال تكوين عميل باستخدام url url API ومفتاح API. يتيح هذا الإعداد إرسال الطلبات إلى نموذج اكتشاف الجنس المستضاف على Roboflow. يعمل مفتاح API كمعرف فريد للمصادقة ، مما يتيح الوصول الآمن إلى API Roboflow واستخدامه.
    • الخطوة 5: معالجة كل وجه مكتشف
    • نحلق من خلال كل وجه مكتشف ، ورسم مستطيل حوله ، ونقص صورة الوجه لمزيد من المعالجة. يتم حفظ كل صورة للوجه المزروعة مؤقتًا وإرسالها إلى API Roboflow ، حيث يتم استخدام نموذج الكشف عن الجنس-QIYYG/2 للتنبؤ بالجنس.
  • نموذج الكشف بين الجنسين-QIYYG/2 هو نموذج التعلم العميق المدربين مسبقًا مُحسّنًا لتصنيف الجنس على أنه ذكر أو أنثى على أساس ميزات الوجه. إنه يوفر تنبؤات مع درجة الثقة ، مما يشير إلى مدى تأييد النموذج حول التصنيف. تم تدريب النموذج على مجموعة بيانات قوية ، مما يسمح له بإجراء تنبؤات دقيقة عبر مجموعة واسعة من صور الوجه. يتم إرجاع هذه التنبؤات بواسطة واجهة برمجة التطبيقات وتستخدم لتسمية كل وجه مع مستوى الجنس والثقة المحدد.

# تهيئة عدد الوجه face_count = 0 # قائمة لتخزين صور الوجه المزروعة مع الملصقات croped_faces = [] # معالجة كل وجه تم اكتشافه لـ (x ، y ، w ، h) في الوجوه: Face_count = 1 # ارسم المستطيلات حول الوجوه المكتشفة cv2.Rectangle (IMG ، (x ، y) ، (x w ، y h) ، (255 ، 0 ، 0) ، 2) # استخراج منطقة الوجه face_img = img [y: y h ، x: x w] # احفظ صورة الوجه مؤقتًا face_img_path = 'temp_face.jpg' cv2.imwrite (face_img_path ، face_img) # اكتشف الجنس باستخدام interferendhttpclient النتيجة = client.infer (face_img_path ، model_) إذا كانت "التنبؤات" في النتيجة والنتيجة ["التنبؤات"]: التنبؤ = النتيجة ["التنبؤات"] [0] الجنس = التنبؤ ['فئة'] الثقة = التنبؤ ["الثقة"] # تسمية المستطيل مع الجنس والثقة label = f '{الجنس} ({الثقة: .2f})' ' cv2.puttext (img ، label ، (x ، y - 10) ، cv2.font_hershey_simplex ، 0.8 ، (255 ، 0 ، 0) ، 2) # أضف الوجه المزروع مع تسمية إلى القائمة croped_faces.append ((face_img ، label))

لكل وجه معترف به ، يرسم النظام مربعًا محيطًا باستخدام CV2.Rectangle () لتمييز الوجه بصريًا في الصورة. ثم يحرق منطقة الوجه باستخدام التقطيع (face_img = img [y: y h ، x: x w]) ، وعزلها لمزيد من المعالجة. بعد توفير الوجه المقطوع مؤقتًا ، يرسله النظام إلى نموذج Roboflow عبر Client.infer () ، والذي يعيد التنبؤ بين الجنسين مع درجة الثقة. يضيف النظام هذه النتائج كملصقات نصية فوق كل وجه باستخدام cv2.uttext () ، مما يوفر تراكبًا واضحًا وغنيًا بالمعلومات.

# Initialize InferenceHTTPClient for gender detection
CLIENT = InferenceHTTPClient(
    api_url="https://detect.roboflow.com",
    api_key="USE_YOUR_API"
)

أخيرًا ، نتصور الإخراج. نقوم أولاً بتحويل الصورة من BGR إلى RGB (حيث يستخدم OpenCV BGR افتراضيًا) ، ثم نعرض الوجوه المكتشفة والتنبؤات بين الجنسين. بعد ذلك ، نظهر الوجوه الفرد المزروعة مع ملصقات كل منها. اكتشاف الجنس مع OpenCV و Roboflow في Python - Analytics Vidhya

# تحويل الصورة من BGR إلى RGB للعرض img_rgb = cv2.cvtcolor (img ، cv2.color_bgr2rgb) # عرض الصورة مع الوجوه المكتشفة وعلامات الجنس plt.Figure (التين = (10 ، 10)) plt.imshow (img_rgb) plt.axis ('Off') plt.title (f "الوجوه المكتشفة: {face_count}") plt.show () # عرض كل وجه محصور مع ملصقه أفقيا التين ، محاور = plt.subplots (1 ، face_count ، التين = (15 ، 5)) بالنسبة إلى i ، (face_img ، label) في التعداد (croped_faces): face_rgb = cv2.cvtcolor (face_img ، cv2.color_bgr2rgb) محاور [i] .imshow (face_rgb) محاور [i] .Axis ('OFF') محاور [i] .set_title (label) plt.show ()

تحويل الصورة:

نظرًا لأن OpenCV يستخدم تنسيق BGR افتراضيًا ، نقوم بتحويل الصورة إلى RGB باستخدام cv2.cvtcolor () لعرض الألوان الصحيح في matplotlib.

عرض النتائج:

# Initialize face count
face_count = 0

# List to store cropped face images with labels
cropped_faces = []

# Process each detected face
for (x, y, w, h) in faces:
    face_count  = 1
    # Draw rectangles around the detected faces
    cv2.rectangle(img, (x, y), (x   w, y   h), (255, 0, 0), 2)
    
    # Extract the face region
    face_img = img[y:y h, x:x w]
    
    # Save the face image temporarily
    face_img_path = 'temp_face.jpg'
    cv2.imwrite(face_img_path, face_img)
    
    # Detect gender using the InferenceHTTPClient
    result = CLIENT.infer(face_img_path, model_)
    
    if 'predictions' in result and result['predictions']:
        prediction = result['predictions'][0]
        gender = prediction['class']
        confidence = prediction['confidence']
        
        # Label the rectangle with the gender and confidence
        label = f'{gender} ({confidence:.2f})'
        cv2.putText(img, label, (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (255, 0, 0), 2)
        
        # Add the cropped face with label to the list
        cropped_faces.append((face_img, label))
نستخدم matplotlib لعرض الصورة مع الوجوه المكتشفة والعلامات الجنسانية فوقها.

نعرض أيضًا كل صورة للوجه المزروعة وتسمية الجنس المتوقعة في مخطط فرعي منفصل.

# Convert image from BGR to RGB for display
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

# Display the image with detected faces and gender labels
plt.figure(figsize=(10, 10))
plt.imshow(img_rgb)
plt.axis('off')
plt.title(f"Detected Faces: {face_count}")
plt.show()

# Display each cropped face with its label horizontally
fig, axes = plt.subplots(1, face_count, figsize=(15, 5))
for i, (face_img, label) in enumerate(cropped_faces):
    face_rgb = cv2.cvtColor(face_img, cv2.COLOR_BGR2RGB)
    axes[i].imshow(face_rgb)
    axes[i].axis('off')
    axes[i].set_title(label)
plt.show()
  • بيانات الإخراج بيانات
  • خاتمة

في هذا الدليل ، قمنا بنجاح بتطوير اكتشاف قوي بين الجنسين مع OpenCV و Roboflow في Python. من خلال تطبيق OpenCV للكشف عن الوجه و Roboflow للتنبؤ بين الجنسين ، أنشأنا نظامًا يمكنه تحديد الجنس وتصنيفه بدقة في الصور. عززت إضافة Matplotlib للتصور مشروعنا بشكل أكبر ، مما يوفر عروضًا واضحة وذات ثاقبة للنتائج. يسلط هذا المشروع الضوء على فعالية الجمع بين هذه التقنيات ويوضح فوائدها العملية في تطبيقات العالم الحقيقي ، مما يوفر حلًا قويًا لمهام الكشف عن النوع الاجتماعي.

مفتاح الوجبات السريعة اكتشاف الجنس مع OpenCV و Roboflow في Python - Analytics Vidhya

يوضح المشروع نهجًا فعالًا للكشف عن الجنس وتصنيفه من الصور باستخدام نموذج الذكاء الاصطناعي تم تدريبه مسبقًا. يميز العرض التوضيحي بالتحديد على وجه اليقين طويلًا ، ويظهر جودته الثابتة.

من خلال الجمع بين أجهزة مثل roboflow لخصم الذكاء الاصطناعي ، OpenCV لإعداد الصور ، و matplotlib للتصور ، يجمع المشروع بشكل فعال بين الابتكارات المختلفة لتحقيق أهدافها. اكتشاف الجنس مع OpenCV و Roboflow في Python - Analytics Vidhya

قدرة النظام على التمييز وتصنيف جنس مختلف الأشخاص في صورة واحدة تبرز حياته ومرونته ، مما يجعله مناسبًا لتطبيقات مختلفة.

اكتشاف الجنس مع OpenCV و Roboflow في Python - Analytics Vidhya يضمن استخدام مظاهرة تم تدريبه مسبقًا الدقة الطويلة في التنبؤات ، كما ثبت من خلال درجات اليقين الواردة في المجيء. هذه الدقة أمر بالغ الأهمية للتطبيقات التي تتطلب تصنيفًا موثوقًا للجنسين.

يستخدم المشروع تقنيات التصور لتوضيح الصور مع الوجوه المكتشفة والأجناس المتوقعة. هذا يجعل النتائج أكثر قابلية للتفسير وقيمة لمزيد من التحليل. اكتشاف الجنس مع OpenCV و Roboflow في Python - Analytics Vidhya

اقرأ أيضًا: تحديد الجنس المستند إلى النوع الاجتماعي باستخدام NLP و Python

أسئلة يتم طرحها بشكل متكرر

    Q1.
  • ما هو الغرض من المشروع؟
  • a. يهدف المشروع إلى اكتشاف وتصنيف الجنس من الصور باستخدام الذكاء الاصطناعي. إنه يعزز النماذج التي تم تدريبها مسبقًا لتحديد وتسمية الجنسين للأفراد في الصور.
  • Q2.
  • ما هي التقنيات والأدوات المستخدمة؟
  • a. استخدم المشروع نموذج الكشف عن جنس Roboflow لاستدلال الذكاء الاصطناعي ، OpenCV لمعالجة الصور ، و Matplotlib للتصور. كما استخدم Python للبرمجة البرمجة النصية ومعالجة البيانات.

Q3. كيف يعمل نموذج الكشف عن الجنس؟

a. يحلل النموذج الصور للكشف عن الوجوه ثم يصنف كل وجه تم اكتشافه على أنه ذكر أو أنثى استنادًا إلى خوارزميات AI المدربة. إنه يخرج درجات الثقة للتنبؤات.

Q4. ما مدى دقة الكشف عن الجنس؟

a. يوضح النموذج دقة عالية مع درجات الثقة التي تشير إلى تنبؤات موثوقة. على سبيل المثال ، كانت درجات الثقة في النتائج أعلى من 80 ٪ ، والتي تظهر أداءً قوياً.

Q5. ما نوع الصور التي يمكن أن تعالجها النموذج؟

الوسائط الموضحة في هذه المقالة ليست مملوكة بواسطة Analytics Vidhya وتستخدم وفقًا لتقدير المؤلف.
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3