PDA

View Full Version : پردازش چهره از صفر تا ...



farhaneh
شنبه 11 اردیبهشت 1389, 00:12 صبح
سلام.
یه پیشنهاد دارم که پیگیری و ادامش بستگی به همکاری دوستان داره. من میخوام در زمینه تشخیص چهره کار کنم. اگه موافق باشید یه پروژه خوب در این رابطه شروع کنیم. منظورم اینه که مراحل کار رو مشخص کنیم و به همراه آموزش مطالب پیش بریم. هر کی رو هر مطلبی که مسلطه آموزش بده. خود من سعی میکنم تقریبا هر روز مطالب جدیدی رو که تو پروژمون به کار میاد رو آپلود کنم. از صفر تا تکمیل پروژه.
برای شروع نیاز داریم تا دوستانی که تو این زمینه کار کردن اولین مراحل رو مشخص کنن.
موفق باشید.

مصطفی ساتکی
شنبه 11 اردیبهشت 1389, 00:32 صبح
شما برای شروع در ابتدا بایستی با پردازش تصویر آشنایی داشته باشی.بعد اون برای شناسایی چهره های مشخص شده بایستی شبکه عصبی بدونید.شما دراین پروژه به mlp و متد آموزش backpropagation نیازدارید. بعد اون به PCA جهت کاهش ابعاد بردارهای مربوط به face pattern هاتون. بعد از اون یک مدل شبکه عصبی SVM رو جهت Classification مجدد بردارهاتون جهت بالابردن سرعت .به علت realtime بودن مسئله. layerin شبکتون با توجه به موارد ذکر شده 4 لایه به ترتیب از لایه ورودی 40و20و10و1 در نظر بگیرن.ابعاد تصاویر اولیه که مخاین آموزش بدین رو کمتر از 20*20 در نظر بگیرید.تصاویر رو به دو دسته چهره و غیره چهره تقسیم کنید جهت آموزش.و در ضمن جهت یکسان سازی و رفع نویز از Guassian blur استفاده کنید.

farhaneh
یک شنبه 12 اردیبهشت 1389, 01:26 صبح
پس من فکر میکنم بهتره اولش یه کم با متلب و toolbox image processing اون آشنا بشیم.
فقط قبلش چند تا نکته:
اول اینکه من از منابع مختلفی استفاده میکنم: وب، کتاب گونزالس، ترجمه خودم، help متلب و...
اگه مشکلی داشتم ممنون میشم کمک کنید و اطلاع بدین تا هم من و هم بقیه دوستان استفاده کنن.
بازم ممنون میشم دوستان آموزش دستوراتی رو که مسلطن رو بذارن تا کار سریع تر پیش بره:تشویق:

به نام خدا
1. آشنايي مقدماتي با تصاوير
1-1. تصاوير سياه و سفيد
تصاوير سياه و سفيد در واقع ماتريس هاي دو بعدي هستند كه هر بيت نمايانگر يك نقطه از تصوير است. كنار هم قرار گرفتن تمامي اين نقاط (بيت ها) در دو بعد تصوير را مي سازد. مقدار پیکسل صفر نشان دهنده رنگ سیاه و 1 نشان دهنده رنگ سفید میباشد.
1-2. تصاوير مقايس خاكستري
در اين تصاوير هر بايت (از صفر تا 255) نمايانگر يك پيكسل است. اگه مقدار بايت صفر باشد نمايانگر سياه مطلق و اگر 255 باشد نمايانگر سفيد مطلق هست و بقيه در اين رنج از رنگ سياه تا سفيد (خاكستري) قرار خواهند گرفت.
1-4. تصاوير RGB
در اين نوع تصاوير با توجه به تركيب سه رنگ قرمز R ، سبز G و آبي B بقيه رنگ ها ساخته خواهد شد.
آشنايي با Matlab و Image Processing Toolbox
متلب می‌تونه فايل‌هاي گرافيکي با فرمت‌هاي JPEG, TIFF, GIF, BMP, PNG, HDF, PCX, XWD, ICO, CUR را به عنوان فايل گرافيکي بخونه.
دستور خواندن تصاویر در متلب: imread

i=imread('coins.png
')
و یا به جای نام تصویر موجود در متلب میتونید مسیر هر تصویر دلخواهتون رو بدید.
دستور نمایش تصاویر در متلب: Imshow

imshow(i)
تا بعد...

مصطفی ساتکی
یک شنبه 12 اردیبهشت 1389, 07:26 صبح
سلام.نه نرم افزار Matlab برای پیاده سازی این پروژه به کارتون نمیاد.تا کی بگم.Matlab یه آزمایشگاه ریاضی تا بتونیم صحت ایده مون تائید کنه. من در این حالت هم از matlab استفاده نمی کنم.چون یه کتابخانه پردازش تصویر سرعت بالا طی چندین سال پیاده سازی کردم.شما برای این کار که Realtime بایستی از یک زبان برنامه نویسی مثل دلفی ،C#,C++ یا جاوا استفاده کنید. نگاه کنید در تاپیکی که بالا زدید مثل یجور وقت تلف کردن.شما بجای این کار هر چه سریعتر با تمرین کنید که بتوید با اون پردازش تصویر و شبکه عصبی رو پیدا کنید حتی شده از کامپوننت و OpenSource استفاده کنید. مطالعه کتاب گنزالس نه همه بخش هاش به بقیه کاراتون اولویت داره بعد اون هم یادگیری شبکه عصبی هاگان(Hagan) رو یگیرید مطالعه کنید تا فصل 13 البته رو فصل 12 و 13 تاکید بیشتری داشته باشید چون تو این پروژه به کارتون میاد. تا اینجا رو شروع کنید گزارش کارتونو نه Detail که یاد می گیرید رو اینجا بزارید من در ادامه راهنمایتون می کنم.سوالی هم داشتید در ادامه همین تاپیک مطرح کنید تا با هم بررسیش کنیم.البته یه بانک چهره هم بعد ها بایستی دانلود کنید.

madira
دوشنبه 20 اردیبهشت 1389, 11:19 صبح
دوست عزیز آیا برای ردیابی اشیا در تصاویر هم میتونید راهنمایی نمایید؟

ممنون از پاسخ شما.

farhaneh
پنج شنبه 23 اردیبهشت 1389, 00:45 صبح
اگه اشتباه نکنم و سوالتون رو درست متوجه شده باشم، برای این کار میتونیم از دستور های bwtraceboundary و bwboundaries استفاده کنیم. حالا فرقشون چیه؟
دستور اول مختصات سطر و ستون پیکسل های مرز یک شی از تصویر رو بر می گردونه و دستور دوم مختصات سطر و ستون پیکسل های تشکیل دهنده مرز تمامی اشیای موجود در تصویر رو بر می گردونه. اینم یه قسمت از help خود متلب در این مورد:
bwboundaries also descends into the outermost objects (parents) and traces their
children (objects completely enclosed by the parents

b=bwboundaries(bw)
ساختار b مهمه. b در واقع یه آرایه p-by-1 هستش که هر سلول در p خودش شامل ماتریسی با ابعاد q-by-2 هست که هر سطر ماتریس شامل مختصات طول و عرض یه پیکسل از مرز است و q تعداد کل پیکسل های مرز برای ناحیه مورد نظر.
در مورد مابقی سینتکس این دستورا پیشنهاد میکنم به Help متلب مراجعه کنید.
موفق باشید.

مصطفی ساتکی
پنج شنبه 23 اردیبهشت 1389, 11:31 صبح
دوست عزیز تو دنیای واقعی این طوری نیست که تصویرو رو Edge بگیری بعد بیای لبه ها رو دنبال کنی چنان سرباری داره که نپرس. معمولاً برای دنبال کردن Object های هدف ابتدا difference می گرن و سپس در همون نواحی که توش تغییرات صورت گرفته(RIO) یا نواحی هدف فیلترشونو پیدا می کنن.برای لبه گرفتن هم از لبه های رایج استفاده نمی کن چون معمولی هاش کیفیت خوبی ندارن و بهترین شون Canny در تصاویر طبیعی لبه های شلوغی رو به شما میده که این هم سرعت کار رو کاهش میده و هم دقتو. با توجه به پست های قبلی که عرض کردم از لبه گیر های Real time که یه بحث مفصلی تو پردازش تصویر پیشرفته اس مطرح میشه که معروف ترینشون CNN . تو سایت Search کنید یه چیزایی در موردش گفتم اگر اطلاعات بیشتری هم در این زمینه خواستید خدمتون عرض می کنم.
پس از اون این لبه های بدست آمده بایستی با روش مختلف بایستی شناسایی بشن.که برای این کار میتونید از Neural Network یا Neuro-Fazzy استفاده کنید .بایستی حیطه کار مشخص شه تا بعداً در مورد نظر داده بشه .با این مقوله ها به صورت کلی نمیشه رفتار کرد

farhaneh
شنبه 25 اردیبهشت 1389, 15:12 عصر
شما برای شروع در ابتدا بایستی با پردازش تصویر آشنایی داشته باشی.بعد اون برای شناسایی چهره های مشخص شده بایستی شبکه عصبی بدونید.شما دراین پروژه به mlp و متد آموزش backpropagation نیازدارید. بعد اون به PCA جهت کاهش ابعاد بردارهای مربوط به face pattern هاتون. بعد از اون یک مدل شبکه عصبی SVM رو جهت Classification مجدد بردارهاتون جهت بالابردن سرعت .به علت realtime بودن مسئله. layerin شبکتون با توجه به موارد ذکر شده 4 لایه به ترتیب از لایه ورودی 40و20و10و1 در نظر بگیرن.ابعاد تصاویر اولیه که مخاین آموزش بدین رو کمتر از 20*20 در نظر بگیرید.تصاویر رو به دو دسته چهره و غیره چهره تقسیم کنید جهت آموزش.و در ضمن جهت یکسان سازی و رفع نویز از Guassian blur استفاده کنید.
ممکنه کمی در مورد آنالیز المان های اصلی یا PCA توضیح بدین؟
مرسی.

مصطفی ساتکی
دوشنبه 27 اردیبهشت 1389, 08:48 صبح
PCA (Principal Component Analyze یک متد آماری بوده که از جهت کاهش ابعاد بردار استفاده میشه که کاربردهای متنوعی در زمینه پردازش سیگنال و تصویر داره.از جمله کاربردهاش می تونیم به فشردهسازی تصاویر ،Feature Extraction ،تشخیص چهره،تشخیص آبجکت و ... نام برد.به فرض یه تصویر یا Feature هایی از یه تصویر داریم که اونو به آرایه یک بعدی(بردار) تبدیل کردیم و قتیکه این اطلاعات حجیم باشن مسلماً در کارایی کلی برنامه تاثیر می زارن پس چه بهتره که با روشی حجم این اطلاعات یا به اصطلاح ریاضی ابعاد بردار رو کاهش بدیم .PCA برای این کار ابتدا از بردار ورودی تهیه شده Cov (کوواریانس) می گیره .به فرض بعد بردار ورودی N باشه Cov به صورت یه ماتریس بوده با ابعاد N*N .ما با استفاد از ماتریس Cov بردارهای ویژه(EigenVector) و مقادیر ویژه(EigenValue) رو بدست میاریم. PC فقط مقادیر ویژه ای مطلوبشه که دارای بیشترین واریانس باشه به مرتبشون میکنه و با در نظر گرفتن یه threshold بقیه مقادیری رو که دارای واریانس پایین هستند رو حذف می کنه که البته این روشی که من گفتم به صورت سنتی بوده و روش علمی هم برای این کار وجود داره که اون روش های تضمین می کنن .که مقادیر مطلوب از بین نرن.البته قابل ذکر که محاسبه ماتریس Cov هزینه بالایی داره به طوری پیچیدگی برابر با O(n3) که این روش زمانگیر به همین خاطر روش هایی با شبکه عصبی هم وجود داره که می تونه این کارو واسمون انجام بده که از جمله اونا Hebb بدون ناظر که این کارو می تونه واسمون انجام بده.پس از جمله مزایای اصلی pca همون کاهش ابعاد بردار ورودی یا فشرده سازیه.که تو تشخیص چهره بجای EigenValue به این بردارها می گن EigenFace.

tahaf18
یک شنبه 04 دی 1390, 23:26 عصر
سلام فکر کنم برای شروع کار استفاده از verilook SDK بهتر باشه.
خیلی کار رو راحت می کنه و نیاز به برنامه نویسی پیشرفته نداره.

ayub_coder
شنبه 29 بهمن 1390, 18:42 عصر
ببخشید اومدم وسط حرفتون.برای شروع از صفر می تونید منابعی معرفی کنید؟ در مورد پردازش تصویر؟

dousti_design
جمعه 05 اسفند 1390, 12:37 عصر
delphi_cat عزیز سلام. خیلی خوشحالم این تالار بالاخره راه اندازی شد. چند تا سوال از خدمتتون داشتم:
برای یه برنامه ocr ساده چه نوع شبکه عصبی رو پیشنهاد میکنید.
من برای تشخیص یک عدد خیلی کوچیک و ساده از پرسپترون چند لایه استفاده کردم اصلا جواب نداد(زیادم وارد نیستم).
درضمن فریمورک Aforge (http://www.codeproject.com/Articles/16859/AForge-NET-open-source-framework) رو برای کار با شبکه های عصبی( و یادگیری آن) در سی شارپ توصیه میکنید یا خیر؟
کلا برای شبکه های عصبی فریم ورکی سراغ دارید که قابلیت تغییرش هم آسون باشه؟ برای پردازش تصویر و بینایی چی؟
برای کار با تصاویر چه زبان برنامه نویسی را پیشنهاد میکنید؟ سی شارپ مناسب هست؟
با تشکر فراوان

dousti_design
جمعه 05 اسفند 1390, 13:39 عصر
ببخشید اومدم وسط حرفتون.برای شروع از صفر می تونید منابعی معرفی کنید؟ در مورد پردازش تصویر؟

کتاب ها و مقالات متعددی در این زمینه وجود دارد از جمله:
کتاب معروف گنزالز (http://www.amazon.com/Digital-Image-Processing-Rafael-Gonzalez/dp/013168728X/ref=sr_1_1?s=books&ie=UTF8&qid=1330078936&sr=1-1)
کتاب آقای ریچاد ژلیسکی (http://www.amazon.com/Computer-Vision-Algorithms-Applications-Science/dp/1848829345/)( که یکی از محققین مایکروسافت هستن)
که کتاب آقای ژلیسکی از سایت خودشون (http://szeliski.org/Book/) به صورت پی دی اف قابل دانلود (http://szeliski.org/Book/drafts/SzeliskiBook_20100903_draft.pdf)هست
کتاب آقای گنزالس: پردازش تصویر با نرم افزار متلب (http://www.amazon.com/Digital-Image-Processing-Using-MATLAB/dp/0982085400/ref=sr_1_3?s=books&ie=UTF8&qid=1330078936&sr=1-3)
و...

مصطفی ساتکی
شنبه 06 اسفند 1390, 18:24 عصر
برای یه برنامه ocr ساده چه نوع شبکه عصبی رو پیشنهاد میکنید.

البته شما از classifier های دیگر همچون SVM یا حتی رگرسیون هم می تونید استفاده کنید یا classifier های model base همانند hmm.
اما اگر فقط مد نظرتون این مورد که حتماً شبکه عصبی استفاده کنید 2 گزینه مناسب در پیش روتون دارید MLP و RBF.



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

نگاه کنید مرحله forward مطلب خاصی نداره که شما بخاید رو مانور بدید مسئله اصلی مربوط میشه به متدی تصحیح خطا که در اون بایستی وزن ها رو به گونه ای تغییر بدید که شبکه با توجه به ورودی و جواب مطلوب خروجی رو به شما بده که کمترین خطا رو نسبت به جواب مطلوب بده.
متدی های که میان وزن ها رو اصلاح می کنند در واقع روش های بهینه ساز مدل هستند که از جمله آنها می توان به روش gradient descent ، maximum liklihod ، ضرایب لاگرانژ ، روش نیوتن و بسیاری از روش های دیگر استفاده نمود . در مورد روش gradient descent در اینجا (http://barnamenevis.org/showthread.php?325494-%D9%BE%DB%8C%D8%A7%D8%AF%D9%87-%D8%B3%D8%A7%D8%B2%DB%8C-%D8%B4%D8%A8%DA%A9%D9%87-%DB%8C-%D8%B9%D8%B5%D8%A8%DB%8C-%D8%AF%D8%B1-VB6/page2)بحث شده .البته برای جزئیات بیشتر می تونید به کتاب hugan رجوع کنید.
علاوه بر مواردی که گفته شد در مورد تنظیم پارامترهای شبکه شما بایستی استراتژی آموزش هم در نظر بگیرید که نحوه در هم ریختگی داده های ورودی رو در هر گام از شبکه مشخص می نماید .البته بایستی در ابتدا بایستی از روش های segmentation خودکار بیاید داده ها ورودی تونو کلاسه بندی کنید که برای اینکار می تونید از kmean و LVQ استفاده نماید .اگر داده هاتون خیلی زیاد باشه بایستی از روش های کاهش ابعاد بردار همچون pca بردارهای ورودی تونو از نظر حجم کاهش بدید و فقط از اون قسمت از اطلاعاتشون استفاده کنید که بیشترین بار اطلاعاتی رو دارند (در همین پست که وسطش سوال پرسدید توضیح دادم) همچین بجای استفاده از یک تک شبکه می تونید برای هر کلاستر یک شبکه در نظر بگیرید همانند decision tree که اصطلاحا به آن مدل OCON گفته میشه این روش هم باعث میشه هر کدام از زیر شبکه براحتی آموزش ببینند سرعت آموزش بالاتر خطای ردرون کلاسی کمتر میشه و اگر در مینیمم محلی گیر افتادید با روش تعداد iteration می تونید همون زیر شبکه رو reset نمایید.



درضمن فریمورک Aforge (http://www.codeproject.com/Articles/16859/AForge-NET-open-source-framework) رو برای کار با شبکه های عصبی( و یادگیری آن) در سی شارپ توصیه میکنید یا خیر؟

بایستی به متد بهینه سازیش نگاه کنید و پارامترهایی که در نظر گرفته بقیه مواردی رو که خدمتون عرض کردم رو بایستی خودتون در نظر بگیرید .اگر نیازی ندارید که قسمت آموزش هم تو application باشه می تونید از MATLAB هم برای آموزش استفاده نمایید تو matlab وزن ها رو ذخیره کنید و تو برنامه خودتون اونو load کنید فقط خودتون forward رو بنویسید.



برای کار با تصاویر چه زبان برنامه نویسی را پیشنهاد میکنید؟ سی شارپ مناسب هست؟

بهترین گزینه مشتقات زبان C می باشد
موفق باشید

en-keramat
شنبه 20 اسفند 1390, 22:22 عصر
ممنون میشم منابعی برای پردازش تصویر در VB.Net نیز معرفی کنید

من یک سری از برنامه های زمبنه تخصصی خودم که مربوط به مبحث پردازش تصویر هستنش در Matlab نوشتم ، قصد دارم برنامه که تو متلب نوشتم با Vb.net باز نویسی اش کنم .

ممنون میشم راهنمایی ام کنید.