آموزش رزبری پایپروژه رزبری پای

تشخیص سن و جنسیت با رزبری پای و OpenCV (یادگیری عمیق)

در این آموزش ، ما می خواهیم از مدل های OpenCV و Deep Learning برای شناسایی جنسیت و سن فردی که جلوی دوربین قرار دارد استفاده کنیم. مدل سن یادگیری عمیق و آشکارساز جنسیتی که امروز قصد استفاده از آن را داریم ، توسط Levi و Hassner در 2015 اجرا و آموزش داده شد. تشخیص سن و جنسیت یک فرآیند دو مرحله ای است:

  • مرحله 1: شناسایی چهره ها در جریان فیلم ورودی
  • مرحله 2: ناحیه صورت مورد نظر (ROI) را استخراج کرده و الگوریتم سن و جنسیت را برای حدس سن و جنسیت فرد اعمال کنید.

جنسیت پیش بینی شده “مرد” یا “زن” خواهد بود و سن پیش بینی شده می تواند یکی از محدوده های زیر باشد: (0 – 2) ، (4 – 6) ، (8 – 12) ، (15 – 20) ، ( 25 – 32) ، (38 – 43) ، (48 – 53) ، (60 – 100). ما قبلاً از رزبری پای برای برخی از پروژه های پیچیده پردازش تصویر مانند تشخیص چهره با رزبری پای و شناسایی افراد با رزبری پای استفاده کردیم.

در اینجا ، ما فقط به ماژول دوربین و برد رزبری پای با OpenCV نصب شده نیاز داریم. OpenCV در اینجا برای پردازش تصویر دیجیتال استفاده می شود. رایج ترین کاربردهای پردازش تصویر دیجیتال ، تشخیص شی ، تشخیص چهره و شمارش افراد است.

نصب OpenCV

قبل از نصب OpenCV و سایر وابستگی ها ، Raspberry Pi باید کاملاً به روز شود. از دستورات زیر برای به روزرسانی Raspberry Pi به آخرین نسخه استفاده کنید:

sudo apt-get update

سپس از دستورات زیر برای نصب وابستگی های مورد نیاز برای نصب OpenCV در Raspberry Pi خود استفاده کنید.

sudo apt-get install libhdf5-dev -y 
sudo apt-get install libhdf5-serial-dev –y 
sudo apt-get install libatlas-base-dev –y 
sudo apt-get install libjasper-dev -y 
sudo apt-get install libqtgui4 –y
sudo apt-get install libqt4-test –y

پس از آن ، از دستور زیر استفاده کنید تا OpenCV را روی Raspberry Pi خود نصب کنید.

pip3 install opencv-contrib-python==4.1.0.25

قطعات مورد نیاز

  • رزبری پای
  • ماژول دوربین Pi
قطعات مورد نیاز را از فروشگاه قطعات آیرنکس تهیه کنید.

برنامه نویسی رزبری پای برای تشخیص سن و جنسیت

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

کد را با فراخوانی کردن بسته های OpenCV و math شروع کنید.

import cv2
import math

از تابع highlightFace() برای بدست آوردن مختصات صورت استفاده می شود. در سه خط اول ارتفاع و عرض قاب را تشخیص می دهیم. در خطوط بعدی مختصات صورت را استخراج میکنیم. سپس از این مختصات برای ایجاد مستطیل در اطراف صورت استفاده کنید.

def highlightFace(net, frame, conf_threshold=0.7):
    frameOpencvDnn=frame.copy()
    frameHeight=frameOpencvDnn.shape[0]
    frameWidth=frameOpencvDnn.shape[1]
    blob=cv2.dnn.blobFromImage(frameOpencvDnn, 1.0, (300, 300), [104, 117, 123], True, False)
    net.setInput(blob)
    detections=net.forward()
    faceBoxes=[]
    for i in range(detections.shape[2]):
        confidence=detections[0,0,i,2]
        if confidence>conf_threshold:
            x1=int(detections[0,0,i,3]*frameWidth)
            y1=int(detections[0,0,i,4]*frameHeight)
            x2=int(detections[0,0,i,5]*frameWidth)
            y2=int(detections[0,0,i,6]*frameHeight)
            faceBoxes.append([x1,y1,x2,y2])
            cv2.rectangle(frameOpencvDnn, (x1,y1), (x2,y2), (0,255,0), int(round(frameHeight/150)), 8)
    return frameOpencvDnn,faceBoxes

در خطوط بعدی به سراغ تشخیص جنسیت و سن میرویم.

faceProto="face_detector/opencv_face_detector.pbtxt"
faceModel="face_detector/opencv_face_detector_uint8.pb"
ageProto="age_detector/age_deploy.prototxt"
ageModel="age_detector/age_net.caffemodel"
genderProto="gender_detector/gender_deploy.prototxt"
genderModel="gender_detector/gender_net.caffemodel"

لیستی از تصاویر مربوط به مرد و زن و سن را وارد میکنیم.

MODEL_MEAN_VALUES=(78.4263377603, 87.7689143744, 114.895847746)
ageList=['(0-2)', '(4-6)', '(8-12)', '(15-20)', '(25-32)', '(38-43)', '(48-53)', '(60-100)']
genderList=['Male','Female']

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

faceNet=cv2.dnn.readNet(faceModel,faceProto)
ageNet=cv2.dnn.readNet(ageModel,ageProto)
genderNet=cv2.dnn.readNet(genderModel,genderProto)

سپس جریان ویدئوی ورودی را دریافت میکنیم.

video=cv2.VideoCapture(0)

در داخل loop، فریم ها را از جریان ویدئو دریافت کرده و سپس تابع ()highlightFace را با پارامتر faceNet و frame فراخوانی میکنیم.

hasFrame,frame=video.read()
resultImg,faceBoxes=highlightFace(faceNet,frame)

پس از بدست آوردن باکس صورت ، یک تکه 4 بعدی از تصویر ایجاد می کنیم. با انجام این کار ، آن را مقیاس بندی می کنیم ، اندازه آن را تغییر می دهیم.

اگر در مورد این مطلب سوالی دارید در قسمت نظرات بپرسید
blob=cv2.dnn.blobFromImage(face, 1.0, (227,227), MODEL_MEAN_VALUES, swapRB=False)

اکنون ، داده را از مدل تشخیص جنسیت عبور داده و جنسیت را مشخص میکنیم.

genderNet.setInput(blob)
genderPreds=genderNet.forward()
gender=genderList[genderPreds[0].argmax()]

سپس ما همین روش را برای تشخیص سن دنبال می کنیم.

ageNet.setInput(blob)
agePreds=ageNet.forward()
age=ageList[agePreds[0].argmax()]

اکنون ، پس از دریافت نتایج سن و جنسیت، جنسیت و سن را با استفاده از عملکرد cv2.putText() به تصویر حاصل اضافه کرده و با imshow() نمایش می دهیم.

text = "{}:{}".format(gender, age)
cv2.putText(resultImg, text,(faceBox[0], faceBox[1]-10), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0,255,255), 2, cv2.LINE_AA)
cv2.imshow("Detecting age and gender", resultImg)

تست پروژه طبقه بندی سن و جنسیت با رزبری پای

قبل از اجرای اسکریپت پایتون ، ماژول دوربین Raspberry Pi Camera را مطابق تصویر زیر به رزبری پای متصل کنید.

اتصال دوربین به رزبری پای

اکنون ، بررسی کنید که دوربین Pi کار می کند یا خیر. پس از بررسی دوربین ، اسکریپت پایتون را اجرا کنید ، پنجره ای پیدا می کنید که در آن ویدیوی شما ظاهر می شود. هنگامی که رزبری پاای سن و جنسیت را تشخیص داد ، آن را در صفحه چاپ می کند.

تست پروژه طبقه بندی سن و جنسیت با رزبری پای

به این ترتیب می توانید سن و جنسیت را با استفاده از OpenCV و Python تشخیص دهید.

موارد موجود در فایل : سورس کامل

5 (1 نفر)

برای دریافت مطالب جدید کانال تلگرام یا پیج اینستاگرام ما را دنبال کنید.

محمد رحیمی

محمد رحیمی هستم. سعی میکنم در آیرنکس مطالب مفید قرار بدهم. سوالات مربوط به این مطلب را در قسمت نظرات همین مطلب اعلام کنید. سعی میکنم در اسرع وقت به نظرات شما پاسخ بدهم.

برای ارسال تصاویر از انجمن سایت استفاده کنید.

سوالات فنی را در انجمن سایت مطرح کنید تا در مسابقه شرکت کنید. ورود به انجمن

1 دیدگاه

  1. سلام
    ارور دریافت میکنم موقع اجرا
    برنامه اجرا نمیشه
    Traceback (most recent call last):
    File “/home/pi/A&G.py”, line 1, in
    import cv2
    File “/home/pi/.local/lib/python3.7/site-packages/cv2/__init__.py”, line 3, in
    from .cv2 import *
    ImportError: libcblas.so.3: cannot open shared object file: No such file or directory

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

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