روبیکا من : https://rubika.ir/artinkarimian3 سایت من : https://sites.google.com/view/artin-karimian
پروژه ششم پایتون : تشخیص لبخند

شرح مختصر پروژه
این پروژه یه برنامه خیلی سادهست با پایتون و OpenCV که با مدلهای آمادهی Haar Cascade اول صورت رو پیدا میکنه، بعد اگه لبخند بزنی تشخیص میده و روی تصویر پیام SMILE :) نشون میده. فقط OpenCV رو نصب کن، کد رو اجرا کن و جلوی وبکم قرار بگیر—برای خروج هم کلید q رو بزن.
توضیحات پروژه
توی این پروژه یک برنامه خیلی ساده میسازیم که با وبکم (و یا با دریافت عکس)، صورت را تشخیص میده و بعد لبخند را روی صورت شناسایی میکنه.
روش ما «کلاسیک» بوده و با Haar Cascade کار میکنه (سریع و سبک، مناسب پروژههای آموزشی).
پیش نیاز ها
پایتون
نصب کتابخانه OpenCV
نصب OpenCV
توی CMD / Terminal این دستور رو بزنید:
pip install opencv-pythonحالا بعد نصب این کتابخانه کد زیر را در پایتون بزنید و اجرا کنید .
import cv2
def main():
# بارگذاری مدلهای Haar از مسیر داخلی OpenCV
face_cascade = cv2.CascadeClassifier(
cv2.data.haarcascades + "haarcascade_frontalface_default.xml"
)
smile_cascade = cv2.CascadeClassifier(
cv2.data.haarcascades + "haarcascade_smile.xml"
)
# وبکم
cap = cv2.VideoCapture(0)
if not cap.isOpened():
print("❌ وبکم باز نشد. شماره وبکم را تغییر دهید (0/1) یا دسترسی را بررسی کنید.")
return
print("✅ برای خروج، کلید q را بزنید.")
while True:
ret, frame = cap.read()
if not ret:
print("❌ فریم دریافت نشد.")
break
# برای سرعت و دقت Haar بهتر است خاکستری کنیم
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# تشخیص صورتها
faces = face_cascade.detectMultiScale(
gray,
scaleFactor=1.2,
minNeighbors=5,
minSize=(80, 80)
)
for (x, y, w, h) in faces:
# کادر صورت
cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)
# ناحیه صورت برای تشخیص لبخند
roi_gray = gray[y:y + h, x:x + w]
roi_color = frame[y:y + h, x:x + w]
# تشخیص لبخند (در ناحیه صورت)
smiles = smile_cascade.detectMultiScale(
roi_gray,
scaleFactor=1.7,
minNeighbors=20,
minSize=(25, 25)
)
if len(smiles) > 0:
cv2.putText(frame, "SMILE :)", (x, y - 10),
cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0, 255, 255), 2)
# (اختیاری) نمایش کادر لبخندها
for (sx, sy, sw, sh) in smiles:
cv2.rectangle(roi_color, (sx, sy), (sx + sw, sy + sh), (255, 0, 0), 2)
cv2.imshow("Smile Detector - Press q to quit", frame)
if cv2.waitKey(1) & 0xFF == ord("q"):
break
cap.release()
cv2.destroyAllWindows()
if __name__ == "__main__":
main()حالا وقتی بخندید دور صورتتون سبز میشه .
نکات مهم برای بهتر کار کردن
روبهروی دوربین و در نور مناسب باشید.
اگر زیاد خطا میدهد:
مقدار
minNeighborsدر لبخند را کمی کم کنید (مثلاً 15)یا
scaleFactorلبخند را کمی کمتر کنید (مثلاً 1.5)
سوالات پرتکرار (FAQ)
چرا لبخند تشخیص نمیدهد؟
نور کم است یا زاویه صورت مناسب نیست. همچنین minNeighbors زیاد سختگیر است.
2) چرا اشتباه لبخند تشخیص میدهد؟
Haar روش کلاسیک است و روی برخی چهرهها/نورها خطا دارد. minNeighbors را بالا ببرید.
3) آیا میشود دقیقترش کرد؟
بله. روشهای جدیدتر مثل MediaPipe یا مدلهای یادگیری عمیق (CNN) دقت بالاتری دارند.
برای دانلود همین پایتون یا فایل تبدیل شده به برنامه روی نوشته لینک بزنید و 15ثانیه صبر کنید و فایل را دریافت کنید .
اگر ایده یا پروژه ای دارید در نظرات بگید .
مطلبی دیگر از این انتشارات
جادوی نهفته در کدها: وقتی منطق با هنر در هم میآمیزد — سفری به عمق دنیای دیجیتال
مطلبی دیگر از این انتشارات
پروژه دوم پایتون : ساعت جهانی
مطلبی دیگر از این انتشارات
راهنمای جامع ورود به شغل برنامه نویس؛ هر آنچه که کارجویان باید بدانند