لیست پروژه هایی که چند هفته قبل در کلاس مطرح شد، را از فایل زیر دانلود کنید:
لیست پروژه هایی که چند هفته قبل در کلاس مطرح شد، را از فایل زیر دانلود کنید:
کتابخانه ی OpenCV (مخفف Open Computer Vision) از پرکاربردترین کتابخانه ها برای پردازش تصویر، بینایی استریو و یادگیری ماشینی است. در این کتابخانه ماژولهای متعددی از کار با تصاویر و ویدیو گرفته تا انواع طبقه بندهای هوشمند مثل شبکه عصبی و SVM وجود دارد و باتوجه به نوع توسعه آن که با همکاری برنامه نویسان از سراسر جهان اتفاق می افتد، روز به روز امکانات تازه ای به آن اضافه می شود.
این کتابخانه برای اکثر سیستم عاملها مثل ویندوز، لینوکس و اندروید در دسترس است. با توجه به اینکه OpenCV نسخه نصبی ندارد، غالبا برنامه نویسان در ابتدای کار، به مشکل می خورند. در آموزش زیر، طی چند گام، فرایند نصب یا پیکربندی OpenCV به منظور استفاده در ویژوال سی را توضیح میدهیم.
در این تمرین باید میانگین و انحراف معیار چند تصویر با درجه تفکیک 1، 2، 4، 8 و 16 مگاپیکسل را روی GPU و CPU محاسبه کرده و مقایسه کنید.
حتی الامکان تنها یک تابع کرنل برای محاسبه میانگین و انحراف معیار بنویسید ولی اگر نتوانستید، دو تابع جداگانه بنویسید.
در این تمرین باید یک ویدیوی حداقل 2MP (مثلا درجه تفکیک 1600x1200 یا 1920x1080) را به کمک کتابخانه OpenCV بخوانید و سپس فریمها را پردازش کنید. پردازش مورد نظر عملیات لبه یابی به کمک عملگر سوبل است (مقدار بیشینه سوبل افقی و عمودی را در تصویر خروجی نشان دهید). ویدیوی پردازش شده را در یک ویدیوی خروجی ذخیره کنید.
این عملیات را به سه صورت انجام داده و از نظر زمانی مقایسه کنید:
1. پردازش در GPU به کمک Buffer
2. پردازش در GPU به کمک Image2D
3. پردازش در CPU
مهلت تحویل 10 آذر
دو سری نمونه متعلق به دو کلاس، یکی درون دایره و دیگری بیرون دایره و داخل مربعی با مساحت دوبرابر مساحت دایره، در نظر بگیرید. از هر کلاس 100 نمونه. سپس در حالتهای زیر شبکه LVQ را اجرا کرده و نتایج را به صورت تصویری گزارش کنید:
1. برای هر کدام از کلاسها 4 بردار در نظر بگیرید.
2. برای هر کدام 20 بردار در نظر بگیرید.
3. برای هر کدام 50 بردار در نظر بگیرید.
1. برنامه ای بنویسید که یک رشته را در یک فایل جستجو کرده و با رشتهی دیگری تعویض کند. نتیجه در فایل دیگری ذخیره شود. برنامه باید 4 کلید داشته باشد:
• in- برای دریافت نام فایل ورودی،
• out- برای دریافت نام فایل خروجی،
• src- برای کلمه مورد جستجو
• dst- برای کلمه جایگزین
برای مثال جهت اصلاح کلمه univercity از فایل input.txt با کلمه university در فایل output.txt باید به صورت زیر عمل کنیم:
>> Replace –in input.txt –out output.txt -src univercity –dst university
>> Operation completed successfully; 21 matches found.
در مثال فوق 21 بار عبارت univercity یافت شده است.
اگر فایل ورودی وجود نداشت یا فایل خروجی را نتوانستید ایجاد کنید باید پیغام مناسب ذکر شود.
برای کار با فایل متنی از توابع fopen, fprintf, fscanf, fgets کمک بگیرید. برای جستجوی رشته هم از strstr استفاده کنید.
1. با استفاده از ساختار، برنامه ای بنویسید که ابتدا یک دستور read یا write از کاربر دریافت کند و کارهای زیر را انجام دهد:
• اگر دستور write دریافت شد: اطلاعات تعدادی دانشجو شامل: شماره دانشجو، نام و نام خانوادگی، سال تولد و معدل دیپلم را گرفته و در انتهای یک فایل متنی با نام Students.txt ذخیره کند. هرگاه شماره دانشجویی عدد منفی وارد شد، فایل را ببندد و از برنامه خارج شود. دقت کنید که اطلاعات قبلی موجود در فایل نباید پاک شود (به جای wt از at استفاده کنید)
• اگر دستور read دریافت شد: فایل متنی Students.txt را خوانده و اطلاعات آن را در یک آرایه یا اشاره گر از نوع ساختاری که تولید کرده اید، بارگذاری کند و به صورت جدول به کاربر نشان دهد.
• استثنائات را مدیریت کنید: مثلا اگر فایل تهی بود، یا معدل خارج از محدوده 0 و 20 بود یا سال تولد بیش از 1380 بود، خطا گزارش کند.
اسلایدهای مربوط به بحث شبکه عصبی کانولوشن را از آدرس زیر دانلود کنید:
این ویدیو توضیحات مثال قبلی است که متاسفانه کیفیت صدای آن در برخی لحظات خوب نیست. برخی فریمها هم ناقص ضبط شده اند.
این مثال دو بخش دارد، یکی ایجاد پایگاه داده از اطلاعات کتابها و نوشتن آنها در فایل باینری book_data.db و بخش دوم شامل خواندن اطلاعات از همین فایل و نمایش آنها. ویدیوی ضبط شده مربوط به این مثال در پست بعدی منتشر می شود.
#include "stdafx.h" #include <iostream> struct BookInfo { char name[30]; char author[30]; int nPage; float price; int year; }; void CreateDatabase() { printf("To start, enter number of books you want to store in the database\n"); int n = 0; scanf_s("%d", &n); printf("Please enter Book information for %d books as follows\n", n); printf("Name, Author, Pages, Price, Year of Publication\n"); BookInfo *books = new BookInfo[n]; for (int i = 0; i < n; i++) { std::cin.ignore(); printf("\n#%d Name: ", i + 1); gets_s(books[i].name, 30); printf("\n#%d Author: ", i + 1); gets_s(books[i].author, 30); printf("\n#%d Pages: ", i + 1); scanf_s("%d", &books[i].nPage); printf("\n#%d Price: ", i + 1); scanf_s("%f", &books[i].price); printf("\n#%d Year: ", i + 1); scanf_s("%d", &books[i].year); } FILE* fp = 0; fopen_s(&fp, "book_data.db", "wb"); if (!fp) { printf("File can't be oppened.\n"); return; } fwrite(books, sizeof(BookInfo), n, fp); fclose(fp); printf("Data saved successfully\n"); } void ReadDatabase() { int n = 2; BookInfo *books = new BookInfo[n]; FILE* fp = 0; fopen_s(&fp, "book_data.db", "rb"); if (!fp) { printf("File can't be oppened.\n"); return; } fread(books, sizeof(BookInfo), n, fp); for (int i = 0; i < n; i++) { printf("\n#%d Name: %s", i + 1, books[i].name); printf("\n#%d Author: %s", i + 1, books[i].author); printf("\n#%d Pages: %d", i + 1, books[i].nPage); printf("\n#%d Price: %.1f", i + 1, books[i].price); printf("\n#%d Year: %d", i + 1, books[i].year); printf("\n--------------------------------------------"); } fclose(fp); delete[] books; } int main() { printf("Welcome to Book Database Application:\n"); bool create_data = false; //change to false for read mode if (create_data) CreateDatabase(); else ReadDatabase(); getchar(); return 0; }