برق، الکترونیک، الکتروتکنیک، مکاترونیک، پزشکی، کشاورزی

برق، الکترونیک، الکتروتکنیک، مکاترونیک، پزشکی، کشاورزی و

برق، الکترونیک، الکتروتکنیک، مکاترونیک، پزشکی، کشاورزی

برق، الکترونیک، الکتروتکنیک، مکاترونیک، پزشکی، کشاورزی و

داده هایی در مورد برق، الکترونیک، الکتروتکنیک، مکاترونیک، پزشکی، کشاورزی و

تبلیغات
آخرین نظرات

پردازش تصویر-تشخیص چهره

ShahBaz | پنجشنبه, ۲۷ خرداد ۱۳۹۵، ۰۴:۱۶ ب.ظ

تشخیص پوست بدن با OpenCV

شنبه, ۱ خرداد ۱۳۹۵، ۰۱:۵۹ ب.ظ

   در پست قبلی (تشخیص رنگ با استفاده از OpenCV و Python)، نحوه تشخیص رنگ های مختلف درون یک تصویر را با استفاده از دستور inRange آموزش دادم. اکنون با استفاده از این آموزش و کمی فیلترهای مختلف، قصد دارم برنامه ای برای تشخیص پوست بدن بنویسم. برای امتحان درستی کد از دوربین Raspberry pi استفاده می کنم. کدها توسط OpenCV 3.0.0 و Python 2.7 نوشته شده اند.

# import the necessary packages
import numpy as np
import cv2

# define the upper and lower boundaries of the HSV pixel
# intensities to be considered 'skin'
lower = np.array([0,48,80], dtype = "uint8")
upper = np.array([189,224,255], dtype = "uint8")

   ابتدا پکیج های لازم را فراخوانی می کنیم. پکیج Numpy برای Numerical Processing و پکیج cv2 برای OpenCV است.

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

camera = cv2.VideoCapture(-1)

# keep looping over the frames in the video
while True:
    # grab the current frame
    success, frame = camera.read()
 
    #convert it to the HSV color space,
    # and determine the HSV pixel intensities that fall into
    # the speicifed upper and lower boundaries
    frame=cv2.resize(frame,(300,300),cv2.INTER_AREA)
    converted = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
    skinMask = cv2.inRange(converted, lower, upper)

   چون می خواهیم از دوربین استفاده کنیم، پس با استفاده از دستور cv2.VideoCapture، استفاده از دوربین را آماده می کنیم.

   برای اینکه عملیات پردازش بر روی هر فریم سریع تر انجام شود، بهتر است ابعاد فریم ها رو کوچکتر کنیم. به همین جهت، ابعاد فریم ها را به 300 پیکسل کاهش می دهیم.

   در قسمت بعدی هر فریم را از حالت BGR به HSV تبدیل می کنیم و در آخر توسط دستور inRange یک ماسک براساس رنگ پوست می سازیم.

    # apply a series of erosions and dilations to the mask
    # using an elliptical kernel
    kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (10, 10))
    skinMask = cv2.erode(skinMask, kernel, iterations = 2)
    skinMask = cv2.dilate(skinMask, kernel, iterations = 2)
 
    # blur the mask to help remove noise, then apply the
    # mask to the frame
    skinMask = cv2.GaussianBlur(skinMask, (3, 3), 0)
    skin = cv2.bitwise_and(frame, frame, mask = skinMask)

   در برخی مواقع ممکن است قسمت های کوچک و اشتباهی در تصویر مشخص شوند. برای از بین بردن این قسمت ها از فیلترهای erode و dilate استفاده خواهیم کرد. ولی قبل از آن یک ماتریس به شکل ellipse طراحی می کنیم و ابعاد آن را 10*10 انتخاب می کنیم. توجه کنید هرچه ابعاد ماتریس بیشتر باشد عملیات پردازش کندتر ولی نتیجه با کیفیت بالاتری خواهد بوذ.

   در مرحله بعدی با استفاده از دستور cv2.bitwise_and، هر فریم را باخودش و برحسب ماسک AND خواهیم کرد.

    # show the skin in the image along with the mask
    cv2.imshow("images", np.hstack([frame, skin]))      
    # if the 'q' key is pressed, stop the loop
    if cv2.waitKey(1) & 0xFF == ord("q"):
        break
 
# cleanup the camera and close any open windows
camera.release()
cv2.destroyAllWindows()

   در آخر نوبت به نمایش نتیجه می رسد. برای خروج از برنامه از کلید q استفاده خواهیم کرد. فراموش نکنید که در پایان برنامه حتما دوربین را آزاد کنید. شکل زیر نتیجه نهایی را نشان خواهد داد.

   البته این روش مشکل های زیادی دارد. به عنوان مثال برای تشخیص رنگ افراد سیاه پوست نمی توان از این روش استفاده کرد. شاید یک روش علمی و بهتر استفاده از تشخیص چهره باشد. پس از مشخص شدن محدوده صورت می توان از رنگ چهره فرد یک نمونه گرفت و با آن یک محدوده برای ماسک ساخت. در پایان می توانید کد را از لینک زیر دریافت کنید.

دریافت

حجم: 489 کیلوبایت

توضیحات: Skin Detector

================================

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

   
ویژگی های این تقویت کننده ترانزیستوری عبارت است از:

  • بهره ولتاژ حدود 100

  • امپدانس وروردی بالا

  • امپدانس خروجی پایین (در حدود 10 اهم)

   در طراحی این تقویت کننده از ترانزیستور BC107 استفاده شده است که از رایج ترین و ارزان قیمت ترین ترانزیستورهای BJT هست. همچنین از یک فیدبک ساده در این تقویت کننده استفاده شده است تا شکل موج خروجی با کیفیت بالا و تقارن بهتری تولید شود. برای شبیه سازی، از نرم افزار Pspice استفاده شده است.

دریافت

حجم: 5.01 مگابایت

توضیحات: Two Stage BJT Amplifier

============================

طراحی و ساخت برد Daisy

سه شنبه, ۱۷ فروردین ۱۳۹۵، ۱۰:۵۲ ب.ظ

   امروز تصمیم دارم شماتیک و PCB یکی از بردهایی که طراحی و ساختم رو قرار بدم. برای طراحی برد از نرم افزار Altuim Designer استفاده شده است. این برد دارای یک تراشه FPGA از خانواده Spartan-6 و یک میکروکنترلر ARM از خانواده stm32f103 می باشد، که از طریق 16 پایه با یکدیگر در ارتباط هستند. و ابعاد برد در حدود 12*5 می باشد.

  یک حافظه جانبی از شرکت ATMEL به منظور برنامه ریزی تراشه FPGA روی برد قرار داده شده است که نسبت به خود حافظه های شرکت xilinx ارزان تر و کوچکتر بوده است. کلاک مورد نیاز FPGA از طریق دو نوسان ساز تامین می شود. برای میکروکنترلر نیز یک کریستال 16MHz در نظر گرفته شده است. برنامه ریزی FPGA از طریق پروتکل JTAG انجام می شود. همچنین این روند برای میکرو از طریق پروتکل های JTAG و SW امکان پذیر می باشد. از طرفی، یک تراشه FT232 به منظور پروگرام کردن میکرو از طریق USB و BOOTLOADER استفاده شده است که در پست های آینده نحوه  این کار را توضیح خواهم داد.

   این برد از دو برد جدا از هم تشکیل شده است که طبقه اول شامل تراشه های پردازشی ، پورت های برنامه ریزی، پورت های منبع تغذیه و تعدادی LED است و برد دوم با در اختیار داشتن کلیدهای فشاری، LED، دیپ سوییچ جنبه آموزشی این برد را بر عهده دارد.

دریافت

حجم: 1.11 مگابایت

توضیحات: Daisy board-PCB & Schematic

=============================

نظرات  (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی