چشم انداز کامپیوتر 101: کار با تصاویر رنگی در پایتون

منبع: pexels.com

چشم انداز کامپیوتر 101: کار با تصاویر رنگی در پایتون

اصول کار با تصاویر RGB و آزمایشگاه را برای تقویت پروژه های بینایی رایانه خود بیاموزید!

هر پروژه بینایی رایانه ای - چه طبقه بندی گربه/سگ باشد یا رنگ بیاورد به تصاویر/فیلم های قدیمی - شامل کار با تصاویر می شود. و در نهایت ، مدل فقط می تواند به خوبی داده های زیر باشد - زباله داخل ، زباله بیرون. به همین دلیل است که در این پست بر توضیح اصول اولیه کار با تصاویر رنگی در پایتون ، نحوه نمایش آنها و نحوه تبدیل تصاویر از یک نمایش رنگی به دیگری متمرکز می شوم.

راه اندازی

< p> در این قسمت ، محیط پایتون را راه اندازی می کنیم. ابتدا همه کتابخانه های مورد نیاز را وارد می کنیم: از skimage.io import imread ، imshow
 import matplotlib.pyplot as plt 

ما از scikit-image استفاده می کنیم ، که کتابخانه ای از خانواده scikit-learn است که بر کار با تصاویر تمرکز دارد. روش های جایگزین زیادی وجود دارد ، برخی از کتابخانه ها شامل matplotlib ، numpy ، OpenCV ، Pillow و غیره هستند.

در مرحله دوم ، ما یک تابع کمکی برای چاپ خلاصه ای از اطلاعات در مورد تصویر - شکل و محدوده مقادیر در هر یک از لایه ها.

منطق تابع بسیار ساده است و برش ابعاد به محض توضیح نحوه ذخیره تصاویر معنا پیدا می کند.

مقیاس خاکستری

ما با ابتدایی ترین حالت ممکن ، یک تصویر مقیاس خاکستری شروع می کنیم. چنین تصاویری منحصراً از سایه های خاکستری ساخته شده است. رنگهای افراطی سیاه (ضعیف ترین کنتراست) و سفید (قوی ترین شدت) هستند. به مقیاس مقادیر برای تصاویر در مقیاس خاکستری از 0 (سیاه) تا 255 (سفید) متغیر است. تصویر زیر یک نمای کلی از مفهوم را ارائه می دهد.

منبع

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

ما با بارگذاری تصویر مقیاس خاکستری در پایتون و چاپ آن شروع می کنیم.

 image_gs = imread ('crayons.jpg' ، as_gray = True) 
 fig، ax = plt. subplots (figsize = (9، 16))
imshow (image_gs ، ax = ax)
ax.set_title ("تصویر مقیاس خاکستری")
ax.axis ('خاموش') ؛ 

از آنجا که تصویر اصلی رنگی است ، از as_gray = True برای بارگذاری آن به عنوان تصویر مقیاس خاکستری استفاده کردیم. از طرف دیگر ، می توانیم تصویر را با استفاده از تنظیمات پیش فرض imread بارگذاری کنیم (که یک تصویر RGB را بارگذاری می کند - که در قسمت بعدی آمده است) و با استفاده از تابع rgb2gray آن را به مقیاس خاکستری تبدیل کنیم.

در مرحله بعد ، کمکی را اجرا می کنیم. برای چاپ خلاصه تصویر.

 print_image_summary (image_gs، ['G']) 

اجرای کد خروجی زیر را تولید می کند: ------------ جزئیات تصویر: -------------- ابعاد تصویر: (1280 ، 1920) کانال ها: G: min = 0.0123 ، max = 1.0000

تصویر به عنوان یک ماتریس دو بعدی ، 1280 ردیف در ستون 1920 (وضوح وضوح بالا) ذخیره می شود. با مشاهده مقادیر حداقل و حداکثر ، می بینیم که آنها در محدوده [0،1] هستند. به این دلیل که آنها به طور خودکار بر 255 تقسیم می شوند ، که یک مرحله پیش پردازش معمول برای کار با تصاویر است.

RGB

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

در scikit-image ، این مدل پیش فرض برای بارگذاری تصاویر با استفاده از imread است:

 image_rgb = imread ('crayons.jpg') 

قبل از چاپ تصاویر ، بیایید خلاصه را بررسی کنیم تا نحوه ذخیره سازی تصویر در پایتون را درک کنیم.

 print_image_summary (image_rgb، ['R'، 'G'، 'B']) 

اجرای کد خلاصه زیر را ایجاد می کند:

 ----------- ---
جزئیات تصویر:
--------------
ابعاد تصویر: (1280 ، 1920 ، 3)
کانال ها:
R: دقیقه = 0.0000 ، حداکثر = 255.0000
G: دقیقه = 0.0000 ، حداکثر = 255.0000
B: min = 0.0000 ، max = 255.0000 

در مقایسه با تصویر مقیاس خاکستری ، این بار تصویر به صورت 3D np.ndarray ذخیره می شود. بعد اضافی هر یک از 3 کانال رنگی را نشان می دهد. مانند قبل ، شدت رنگ در مقیاس 0-255 ارائه شده است. اغلب به دامنه [0،1] تغییر می یابد. سپس ، مقدار پیکسل 0 در هر یک از لایه ها نشان می دهد که هیچ رنگی در آن کانال خاص برای آن پیکسل وجود ندارد.

یک نکته مفید: هنگام استفاده از عملکرد imread OpenCV ، تصویر به عنوان BGR بارگیری می شود. به جای RGB برای سازگاری آن با کتابخانه های دیگر ، باید ترتیب کانال ها را تغییر دهیم.

زمان چاپ تصویر و کانال های رنگی مختلف فرا رسیده است:

 fig، ax = plt . subplots (1 ، 4 ، figsize = (18 ، 30)) 
 ax [0] .imshow (image_rgb/255.0)
ax [0] .axis ("خاموش")
ax [0] .set_title ('RGB اصلی') 
 for i، lab in enumerate (['' R '،' G '،' B ']، 1):
    temp = np.zeros (image_rgb.shape)
    temp [:،:، i - 1] = image_rgb [:،:، i - 1]
    ax [i] .imshow (temp/255.0)
    ax [i] .axis ("خاموش")
    ax [i] .set_title (lab) 
 plt.show () 

در تصویر زیر می توانیم تصویر اصلی و 3 کانال رنگی را جداگانه مشاهده کنیم. آنچه در مورد این تصویر دوست دارم این است که با تمرکز روی مداد رنگی ، می توانیم ببینیم کدام رنگ از کانال های RGB و در چه نسبت هایی رنگ نهایی را در تصویر اصلی ایجاد می کند.

متناوبا ، ما می توانیم کانال های رنگی جداگانه را به صورت زیر ترسیم کنیم:

 fig، ax = plt.subplots (1 ، 4 ، figsize = (18 ، 30)) 
 ax [0] .imshow (image_rgb)
ax [0] .axis ("خاموش")
ax [0] .set_title ('RGB اصلی') 
 برای i ، cmap in enumerate ([[قرمزها ، سبزها ، آبی ها]]):
    ax [i+1] .imshow (image_rgb [:،:، i]، cmap = cmap)
    ax [i+1] .axis ("خاموش")
    ax [i+1] .set_title (cmap [0]) 
 plt.show () 

چه چیزی خروجی زیر را تولید می کند:

آنچه که من در مورد این نوع ترسیم کانالهای RGB ترجیح می دهم این است که تشخیص آنها آسان تر است رنگهای مختلف (به دلیل روشن و شفاف بودن سایرین) و شدت آنها بیشتر برجسته می شوند. هنگام استفاده از شبکه های عصبی کانولوشنال (CNN) برای آن کار ، باید همه عملیات را روی هر 3 کانال رنگی اعمال کنیم. در این مقاله ، نحوه استفاده از CNN ها برای کار با مشکل طبقه بندی تصویر باینری را نشان می دهم.

آزمایشگاه

در کنار RGB ، یکی دیگر از روش های رایج برای نمایش تصاویر رنگی استفاده از رنگ آزمایش است. space (همچنین به عنوان CIELAB شناخته می شود).

قبل از پرداختن به جزئیات بیشتر ، منطقی است که تفاوت بین مدل رنگ و فضای رنگ را مشخص کنید. مدل رنگ یک روش ریاضی برای توصیف رنگ ها است. فضای رنگ روش نگاشت رنگهای واقعی و قابل مشاهده بر روی مقادیر گسسته مدل رنگ است. برای جزئیات بیشتر ، لطفاً به این پاسخ مراجعه کنید.(سیاه) تا 100 (سفید) ، که در واقع یک تصویر در مقیاس خاکستری است a: طیف رنگ سبز -قرمز ، با مقادیر مختلف از -128 (سبز) تا 127 (قرمز) < uli> b: طیف رنگ آبی -زرد ، با مقادیر از -128 (آبی) تا 127 (زرد)

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

با تبدیل تصویر از RGB به آزمایشگاه و چاپ خلاصه تصویر شروع می کنیم:

 image_lab = rgb2lab (image_rgb/255) 

تابع rgb2lab فرض می کند که RGB به مقادیر بین 0 تا 1 استاندارد شده است ، به همین دلیل است که همه مقادیر را بر 255 تقسیم می کنیم. از خلاصه زیر ، می بینیم که دامنه مقادیر آزمایشگاه در مقادیر ذکر شده در بالا قرار می گیرد.

- -------------
جزئیات تصویر:
--------------
ابعاد تصویر: (1280 ، 1920 ، 3)
کانال ها:
L: دقیقه = 0.8618 ، حداکثر = 100.0000
a: min = -73.6517 ، حداکثر = 82.9795
b: min = -94.7288 ، max = 91.2710 

در مرحله بعد ، تصویر را تجسم می کنیم-آزمایشگاه و هر یک از کانال ها به طور جداگانه.

 fig، ax = plt. subplots (1 ، 4 ، figsize = (18 ، 30)) 
 ax [0] .imshow (image_lab)
ax [0] .axis ("خاموش")
ax [0] .set_title ('Lab') 
 for i، col in enumerate (['' L '،' a '،' b ']، 1):
    imshow (image_lab [:،:، i-1]، ax = ax [i])
    ax [i] .axis ("خاموش")
    ax [i] .set_title (col) 
 fig.show () 
اولین تلاش برای ترسیم تصویر آزمایشگاه

خوب ، اولین تلاش برای تجسم فضای رنگ آزمایشگاه بسیار موفق نبود. اولین تصویر تقریباً غیرقابل تشخیص است ، لایه L در مقیاس خاکستری نیست. پس از درک این پاسخ ، برای چاپ صحیح ، مقادیر آزمایشگاه باید در محدوده [0،1] افزایش یابد. این بار ، لایه اول متفاوت از دو لایه اخیر است.

#مقیاس تصویر آزمایشگاه
image_lab_scaled = (image_lab + [0، 128، 128])/[100، 255، 255] 
 fig، ax = plt. subplots (1، 4، figsize = (18، 30)) 
 ax [0] .imshow (image_lab_scaled)
ax [0] .axis ("خاموش")
ax [0] .set_title ('Lab scaled') 
 for i، col in enumerate (['' L '،' a '،' b ']، 1):
    imshow (image_lab_scaled [:،: ، i-1] ، ax = ax [i])
    ax [i] .axis ("خاموش")
    ax [i] .set_title (col)
    
fig.show () 

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

دومین تلاش برای ترسیم تصویر آزمایشگاه

در آخرین تلاش ، نقشه های رنگی را به لایه های a و b تصویر آزمایشگاه اعمال می کنیم.

 fig، ax = plt.subplots (1 ، 4 ، figsize = (18 ، 30)) 
 ax [0] .imshow (image_lab_scaled)
ax [0] .axis ("خاموش")
ax [0] .set_title ("آزمایشگاه مقیاس بندی شده") 
 imshow (image_lab_scaled [:،:، 0]، ax = ax [1])
ax [1] .axis ("خاموش")
ax [1] .set_title ('L') 
 ax [2] .imshow (image_lab_scaled [:،،: 1]، cmap = 'RdYlGn_r')
ax [2] .axis ("خاموش")
ax [2] .set_title ('a') 
 ax [3] .imshow (image_lab_scaled [:،،: 2]، cmap = 'YlGnBu_r')
ax [3] .axis ("خاموش")
ax [3] .set_title ('b')
    
plt.show () 

این بار نتایج رضایت بخش است. ما می توانیم رنگهای مختلف را در لایه های a و b به وضوح تشخیص دهیم. آنچه هنوز می تواند بهبود یابد ، خود نقشه ها هستند. برای سادگی ، از نقشه های رنگ از پیش تعریف شده استفاده کردم ، که حاوی رنگی بین دو رنگ فوق العاده است (زرد برای لایه a ، سبز در لایه b). یک راه حل بالقوه کدگذاری نقشه های رنگی است.

سومین تلاش برای ترسیم تصویر آزمایشگاه

معمولاً هنگام کار با مشکلات رنگ آمیزی تصویر ، مانند DeOldify معروف ، با تصاویر آزمایشگاهی روبرو می شوید.

نتیجه گیری

در این مقاله ، رفتم اصول کار با تصاویر رنگی در پایتون با استفاده از تکنیک های ارائه شده ، می توانید به تنهایی کار روی مشکل بینایی رایانه را شروع کنید. من معتقدم درک آن مهم استنحوه ذخیره سازی تصاویر و نحوه تبدیل آنها به نمایش های مختلف ، به طوری که هنگام آموزش شبکه های عصبی عمیق با مشکلات غیرمنتظره روبرو نشوید.

یکی دیگر از فضاهای رنگی محبوب XYZ است. scikit-image همچنین دارای عملکردهایی برای تبدیل تصاویر RGB یا آزمایشگاه به XYZ است.

می توانید کد مورد استفاده برای این مقاله را در GitHub من بیابید. مثل همیشه ، از هر گونه بازخورد سازنده استقبال می شود. می توانید در توییتر یا نظرات با من تماس بگیرید.

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

منابع

[1] https://ai.stanford.edu/~syyeung/cvweb/tutorial1.html

[2] https://github.com/scikit-image/scikit-image/issues/1185

بینایی کامپیوتری توسط اندرو نگ - 11 درس آموخته

بینایی کامپیوتری توسط اندرو نگ - 11 درس آموخته

من اخیراً دوره بینایی رایانه اندرو نگ را در Coursera به پایان رساندم. Ng در توضیح بسیاری از ایده های پیچیده مورد نیاز برای بهینه سازی هرگونه کار بینایی رایانه ، کار بسیار خوبی انجام می دهد. جزء مورد علاقه من در این دوره ، انتقال سبک عصبی بود (به درس 11 مراجعه کنید) ، که به شما امکان می دهد آثار هنری ایجاد کنید که سبک کلود مونه را با محتوای هر تصویر که می خواهید ترکیب کند. این نمونه ای از کارهایی است که می توانید انجام دهید:

در این مقاله ، من 11 درس کلیدی که در این دوره آموختم را مورد بحث قرار خواهم داد. توجه داشته باشید که این چهارمین دوره تخصصی Deep Learning است که توسط deeplearning.ai منتشر شده است. اگر می خواهید در مورد 3 دوره قبلی اطلاعات کسب کنید ، توصیه می کنم این وبلاگ را بررسی کنید.

درس 1: چرا بینایی کامپیوتر در حال پیشرفت است؟

داده های بزرگ و پیشرفت های الگوریتمی باعث می شود خطای آزمایش سیستم های هوشمند به خطای بهینه بیز همگرا شود. این امر باعث می شود هوش مصنوعی در همه زمینه ها ، از جمله وظایف ادراک طبیعی ، از سطح انسانی فراتر رود. نرم افزار منبع باز TensorFlow به شما امکان می دهد از آموزش انتقال برای پیاده سازی سریع سیستم تشخیص شی برای هر شیء استفاده کنید. با یادگیری انتقال ، شما فقط به 100 تا 500 مثال نیاز دارید تا سیستم نسبتاً خوب کار کند. برچسب گذاری دستی 100 نمونه کار چندان زیادی نیست ، بنابراین شما سریعاً حداقل محصول قابل استفاده را خواهید داشت.

درس 2: چگونه عمل می کند؟

Ng نحوه پیاده سازی را توضیح می دهد عملگر convolution و نشان می دهد که چگونه می تواند لبه های یک تصویر را تشخیص دهد. او فیلترهای دیگر مانند فیلتر Sobel را که بر پیکسل های مرکزی لبه وزن بیشتری می گذارند توضیح می دهد. Ng سپس توضیح می دهد که وزن فیلتر را نباید با دست طراحی کرد بلکه باید با استفاده از الگوریتم صعود از تپه مانند شیب نزولی یاد گرفت.

درس 3: چرا پیچیدگی ها؟

Ng دلایل فلسفی متعددی ارائه می دهد که چرا پیچیدگی ها در کارهای تشخیص تصویر بسیار خوب عمل می کنند. وی 2 دلیل مشخص را بیان می کند. اولین مورد به عنوان اشتراک پارامتر شناخته می شود. این ایده وجود دارد که یک آشکارساز ویژگی که در قسمتی از تصویر مفید است احتمالاً در قسمت دیگری از تصویر مفید است. به عنوان مثال ، آشکارساز لبه احتمالاً در بسیاری از قسمت های تصویر مفید است. به اشتراک گذاری پارامترها اجازه می دهد تا تعداد پارامترها کوچک باشد و همچنین امکان تغییر ناپذیری ترجمه قوی را فراهم می آورد. تغییر ناپذیری ترجمه این تصور است که گربه جابجا شده و می چرخد ​​هنوز تصویری از گربه است. این ایده این است که هر لایه خروجی فقط تابعی از تعداد کمی ورودی است (به ویژه اندازه فیلتر در مربع). این امر تعداد پارامترهای موجود در شبکه را تا حد زیادی کاهش می دهد و امکان آموزش سریعتر را فراهم می آورد.

درس 3: چرا پدینگ؟

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

درس 4: چرا حداکثر جمع آوری؟

از طریق تجربیتحقیقات نشان داده است که حداکثر ترکیب در شبکه های CNN بسیار مثر است. با نمونه برداری کوچک از تصویر ، تعداد پارامترها را کاهش می دهیم که باعث تغییر ویژگی ها در مقیاس یا تغییرات جهت می شود.

درس 5: معماری شبکه های کلاسیک

Ng 3 معماری شبکه کلاسیک از جمله LeNet را نشان می دهد. -5 ، AlexNet و VGG-16. ایده اصلی او این است که شبکه های م oftenثر اغلب دارای لایه هایی با اندازه کانال افزایش و کاهش عرض و ارتفاع هستند.

درس 6: چرا ResNets کار می کند؟

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

درس 7: از آموزش انتقال استفاده کنید!

آموزش شبکه های بزرگ ، مانند شروع ، از ابتدا می تواند در GPU چند هفته طول بکشد. شما باید وزنه ها را از یک شبکه از پیش آماده شده بارگیری کرده و فقط آخرین لایه softmax (یا چند لایه آخر) را مجددا آموزش دهید. این امر زمان تمرین را تا حد زیادی کاهش می دهد. دلیل این کار این است که لایه های قبلی تمایل دارند در همه تصاویر مانند لبه ها و خطوط منحنی با مفاهیم مرتبط باشند.

درس 8: نحوه برنده شدن در مسابقات بینایی رایانه

Ng توضیح می دهد که شما باید چندین شبکه را به طور مستقل آموزش دهید و خروجی آنها را متوسط ​​کنید تا عملکرد بهتری داشته باشید. تکنیک های افزایش داده مانند برداشتن تصادفی تصاویر ، چرخاندن تصاویر در مورد محورهای افقی و عمودی نیز ممکن است به عملکرد کمک کند. در نهایت ، برای شروع و سپس تنظیم دقیق پارامترها برای برنامه خاص خود ، باید از پیاده سازی منبع باز و مدل از پیش استفاده شده استفاده کنید.

درس 9: نحوه پیاده سازی تشخیص شی

شروع به کار Ng با توضیح ایده تشخیص نقطه عطف در یک تصویر. اساساً ، این نشانه ها از نمونه های خروجی آموزش شما جدا می شوند. با برخی از دستکاری های پیچیده پیچیدگی ، یک حجم خروجی دریافت می کنید که به شما احتمال می دهد که جسم در یک منطقه خاص و محل جسم قرار دارد. او همچنین نحوه ارزیابی اثربخشی الگوریتم تشخیص شی با استفاده از فرمول تقاطع روی اتحاد را توضیح می دهد. سرانجام ، Ng همه این اجزا را برای توضیح الگوریتم معروف YOLO کنار هم قرار می دهد.

درس 10: نحوه پیاده سازی تشخیص چهره

تشخیص صورت یک مشکل یادگیری یک مرحله ای است ، زیرا شما فقط ممکن است یک تصویر مثال برای شناسایی شخص داشته باشید. راه حل این است که یک تابع شباهت را یاد بگیرید که میزان تفاوت بین دو تصویر را نشان می دهد. بنابراین اگر تصاویر مربوط به یک شخص هستند ، می خواهید تابع تعداد کمی را تولید کند و برعکس برای افراد مختلف. ایده این است که دو شخص را جداگانه وارد یک شبکه کنید و سپس خروجی های آنها را مقایسه کنید. اگر خروجی ها مشابه باشند ، احتمالاً افراد یکسان هستند. شبکه به گونه ای آموزش دیده است که اگر دو تصویر ورودی از یک شخص باشند ، فاصله بین رمزگذاری آنها نسبتاً کم است. ایده این است که شما سه تصویر (Anchor (A) ، Positive (P) و Negative (N)) داشته باشید و شبکه را طوری آموزش دهید که فاصله خروجی بینA و P بسیار کوچکتر از فاصله بین A و N است.

درس 11: نحوه ایجاد آثار هنری با استفاده از سیستم عصبی Style Transfer

Ng نحوه ایجاد تصویر با ترکیب محتوا و سبک را توضیح می دهد. نمونه های زیر را مشاهده کنید.

کلید عصبی Style Transfer به منظور درک بازنمایی های بصری برای هر چیزی است که هر لایه در یک شبکه متحرک در حال یادگیری است. به نظر می رسد لایه های قبلی ویژگی های ساده مانند لبه ها و ویژگی های بعدی اشیاء پیچیده مانند صورت ، پا و ماشین را یاد می گیرند.

برای ایجاد یک تصویر انتقال سبک عصبی ، شما به سادگی یک تابع هزینه تعریف می کنید که ترکیبی محدب است شباهت در محتوا و سبک. به طور خاص ، تابع هزینه عبارت است از: تصویر ، C تصویر محتوا و S تصویر سبک است. الگوریتم یادگیری به سادگی از نزول گرادیان استفاده می کند تا تابع هزینه را نسبت به تصویر ایجاد شده به حداقل برساند. G.

مراحل به شرح زیر است: oli> از درجه شیب برای کاهش J (G) استفاده کنید ، یعنی G را بنویسید: = G-dG (J (G)). مرحله 2 را تکرار کنید.

نتیجه گیری

با تکمیل این دوره ، به درک بصری بخش بزرگی از ادبیات بینایی رایانه دست خواهید یافت. تکالیف خانه نیز به شما این امکان را می دهد که خودتان این ایده ها را اجرا کنید. پس از اتمام این دوره ، شما در زمینه بینایی رایانه ای متخصص نخواهید شد ، اما این دوره ممکن است ایده و حرفه بالقوه ای را که ممکن است در بینایی رایانه داشته باشید ، آغاز کند. برای به اشتراک گذاشتن ، در نظرات زیر به من اطلاع دهید. خوشحال می شوم در مورد همکاری احتمالی در پروژه های جدید بحث کنم.

این همه افراد است - اگر تا اینجا موفق شده اید ، لطفاً در زیر نظر دهید و مرا در LinkedIn اضافه کنید.

Github من اینجاست.