در علوم کامپیوتر چه چیزی باید یاد بگیرید؟

در علوم کامپیوتر چه چیزی باید یاد بگیرید؟

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

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

آیا توسعه وب را یاد می گیرید؟ واکنش بومی؟ iOS بومی؟ اندروید؟ وحدت؟ غیر واقعی؟ PHP؟ جاوا اسکریپت؟ سوئیفت چطور؟

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

همه اینها به نظر می رسد که شما باید تصمیمات مهمی بگیرید. اگر توسعه دهنده برنامه های تلفن همراه هستید ، آیا از SwiftUI استفاده می کنید یا از آن استقبال می کنید ، یا در راه های قدیمی و عالی Objective-C ثابت قدم و ثابت قدم هستید؟

کدام درست است؟ راه تاریکی و ناامیدی کدام است؟

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

من دوست دارم آن را تفکر بر اساس ایدئولوژی یا "دلیل محض" بنامم. عده ای در فلسفه آن را "عقل گرایی" نامیده اند. > استدلال شما نیازی به اطلاع از داده ها یا شواهد از دنیای خارج ندارد. شما فقط باید در قلمرو ایده ها بمانید.

به این ترتیب ، "بحث" در مورد یک راه واقعی برای تبدیل برنامه های رایانه ای به یک روش برنامه نویسی در مقابل روش دیگر ، و راهی که می فهمید آیا ایدئولوژی مورد علاقه شما این است که استدلالهای مناسب را به نفع آن ارائه دهید.

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

برنامه نویسی حل مسئله

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

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

چگونه می توانم آن را ایجاد کنم تا شخصیت پخش کننده من با عرض و ارتفاع مناسب کشیده شود؟ < /p>

چگونه می توانم آن را با نقشه کاشی برخورد کنم؟

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

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

همه اینها مشکلات عملی هستند که باید آنها را حل کنید.

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

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

از خود بپرسید: "اگر زمین به گرد و غبار تبدیل می شد و تعداد کمی انسان زنده می ماندند ، آیا بازماندگان سرانجام این چیز را دوباره کشف می کردند؟ در حال یادگیری هستم؟ "

اگر پاسخ" بله "است ، پس ارزش یادگیری دارد.

اگر پاسخ" نه "است ، ایدئولوژی یا جزم است و بنابراین نیست باید به آن توجه کرد.

آیا حافظه فیزیکی کامپیوتر را دوباره کشف می کنیم؟

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

بدون حافظه ، توانایی خود را از دست می دهید برای ذخیره کردن چیزها ، به این معنی که نمی توانید از چیزهای هوشمندانه مانند جداول هش برای حل مشکلاتی مانند محاسبه فاکتوریل استفاده کنید. همچنین نمی توانید از پشته برنامه برای انجام بازگشت استفاده کنید. کل محاسبات به سرعت متوقف می شود.

بیشتر محاسبات بدون تصور از حافظه به سادگی امکان پذیر نیست.

بنابراین اولین کسی که حافظه رایانه را "کشف" کرد ، بنابراین ، محاسبات را تا حدی بهبود می بخشد که بارها و بارها اختراع می شود ، مهم نیست چند بار تمدن را به خاک می اندازید.

برنامه نویسی شی گرا ، مثال مثال p> این در مورد برنامه نویسی شی گرا صادق نیست.

شما می توانید هرگونه مشکل برنامه نویسی را بدون برنامه نویسی شی گرا حل کنید.

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

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

بنابراین برنامه نویسی شی گرا ضروری نیست.

لزوماً چیزی نیست که ما بارها و بارها آن را کشف کنیم ، زیرا برای حل انواع مشکلاتی که ما نیاز به حل آنها داریم ، کاملاً لازم نیست.

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

باید یاد بگیریدالگوریتم ها و تکنیک هایی که ما نمی توانیم بدون آنها انجام دهیم

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

این س yourselfال را از خود بپرسید. آیا می توان مشکلی را که من حل می کنم بدون نیاز به دانستن یا اهمیت دادن به این موضوع حل کرد؟

آیا می توانید شبیه سازی فیزیک را بر روی یک شخصیت بازی بدون نیاز به اطلاع از موناد و فانکتور انجام دهید یا " خالص ”برنامه نویسی کاربردی؟

بله. این به این دلیل است که برنامه شما با سخت افزار فیزیکی اجرا می شود. این شامل یک دنباله از دستورالعمل های سخت است که خود به شدت انتزاعی نیستند. این دستورالعمل ها کاملاً ملموس هستند. آنها باعث می شوند کامپیوتر وضعیت ترانزیستورها را که شامل بازنمایی داده هایی است که برنامه شما در آنها دستکاری می کند تغییر دهد.

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

شما نیازی به درک زیاد ندارید ریاضیات انتزاعی برای استفاده از دستورالعمل های سخت افزاری که روی CPU شما قرار دارد ، برای شبیه سازی فیزیک استفاده کنید. شما باید ریاضیات و فیزیک را بدانید ، اما هنوز هم می توانید در مورد فیزیک بدون هیچ چیز انتزاعی و شگفت انگیزی مانند مونادها استدلال کنید.

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

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

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

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

پس از آخرالزمان ، ما احتمالاً در نهایت کامپیوترهایی را خلق می کنیم که امروزه هستند. ممکن است انحرافات جزئی وجود داشته باشد ، اما موضوع کلی یکسان است.

ما دارای CPU ها ، حافظه ، GPU ها ، حافظه پنهان L1 ، L2 و L3 ، سخت افزاری برای حل مشکلات خاص ، چند رشته ای برای موازی سازی خواهیم بود. ما تا آنجا که می توانیم فیزیک را تحت فشار قرار می دهیم تا حداکثر کارایی ممکن را از ماشینهای ساخته شده بدست آوریم ، همانطور که امروز انجام می دهیم.

همه چیز به ریاضیات و فیزیک برمی گردد ، علم تجربی سختی است نظریه

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

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

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

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

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

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

دنیای نرم دنیای ایدئولوژی ها و روش شناسی برنامه نویسی است.

اسکرام است. چابک است این TDD ، برنامه نویسی جفت ، تخته کانبان ، آبشار ، "کدگذاری تمیز" است. این زبانه ها در مقابل فضاها ، مهاربندهای فرفری در انتهای خط یا مهاربندهای فرفری تحت نام تابع است. علوم رایانه از افرادی که نمی توانند حقیقت را از دروغ جدا کنند ، حمایت می کند.

اما در حقیقت ، علوم رایانه از ریاضیات و فیزیک مطلع می شود ، این قوانین جهان است که بدون تغییر باقی می ماند. اینجا هستید تا آنها را تجربه کنید یا نه.

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

اگر می توانید مشکل را به همان اندازه م knowingثر حل کنید ، بدون آنکه از یک چیز معروف مانند node.js اطلاع داشته باشید ، پس node.js بی ربط است و نیازی نیست به آن اهمیت دهید. این فقط یک اختراع فرهنگی است و مانند همه چیزهای نرم ، از مد می افتد و چیز دیگری جایگزین آن می شود.

از قلمرو نرم دور بمانید.

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

کجا مرا پیدا کنند

آموزش پایتون OpenCV-بینایی رایانه ای با OpenCV در پایتون

آموزش پایتون OpenCV-بینایی رایانه ای با OpenCV در پایتون

OpenCV آموزش - Edureka

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

ما مفاهیم زیر را بررسی می کنیم:

کامپیوتر چیست بینایی؟ رایانه چگونه تصویر را می خواند؟ OpenCV چیست؟ مبانی OpenCV تشخیص تصویر با استفاده از OpenCV آشکارساز حرکت با استفاده از OpenCV

چشم انداز رایانه ای چیست؟

برای ساده سازی پاسخ به این مورد - اجازه دهید سناریویی را در نظر بگیریم.

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

بنابراین ، فکر می کنید ویژگی برچسب خودکار چگونه کار می کند؟ به زبان ساده ، روی بینایی رایانه کار می کند.

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

ایده در اینجا این است که وظایفی را که سیستم های بصری انسان می توانند انجام دهند ، خودکار کند. بنابراین ، یک کامپیوتر باید بتواند اشیایی مانند صورت یک انسان یا چراغ چراغ یا حتی یک مجسمه را تشخیص دهد.

چگونه یک کامپیوتر یک تصویر را می خواند؟

تصویر زیر را در نظر بگیرید:

ما می توانیم بفهمیم این تصویری از خط افق نیویورک است. اما آیا یک کامپیوتر می تواند همه اینها را به تنهایی پیدا کند؟ پاسخ منفی است!

رایانه هر تصویری را در محدوده مقادیر بین 0 تا 255 می خواند.

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

برای هر رنگ اصلی یک ماتریس تشکیل می شود و بعداً این ماتریس ها ترکیب می شوند و مقدار Pixel را برای رنگهای R ، G ، B ارائه می کنند.

هر کدام عنصر ماتریس داده های مربوط به شدت روشنایی پیکسل را ارائه می دهد.

تصویر زیر را در نظر بگیرید:

همانطور که نشان داده شده است ، اندازه تصویر در اینجا می تواند B*A x 3 محاسبه شود.

توجه: برای یک تصویر سیاه و سفید ، فقط یک کانال واحد وجود دارد.

در ادامه این مقاله ، بیایید ببینیم که OpenCV در واقع چیست.

OpenCV چیست؟

< p> OpenCV یک کتابخانه پایتون است که برای حل مشکلات بینایی کامپیوتر طراحی شده است. OpenCV در ابتدا در سال 1999 توسط اینتل توسعه یافت اما بعداً توسط Willow Garage پشتیبانی شد.

OpenCV از طیف گسترده ای از زبان های برنامه نویسی مانند C ++ ، Python ، Java و غیره پشتیبانی می کند. و MacOS.

OpenCV پایتون چیزی نیست جز یک کلاس بسته بندی برای کتابخانه اصلی C ++ که با پایتون استفاده می شود. با استفاده از این ، همه ساختارهای آرایه OpenCV به/از آرایه های NumPy تبدیل می شوند.

این امر ادغام آن با سایر کتابخانه هایی که از NumPy استفاده می کنند را آسان می کند. برایبه عنوان مثال ، کتابخانه هایی مانند SciPy و Matplotlib.

در ادامه این مقاله ، اجازه دهید برخی از عملیات اساسی را که می توانیم با OpenCV انجام دهیم ، بررسی کنیم.

عملیات اساسی با OpenCV؟ < /h1>

اجازه دهید مفاهیم مختلفی را از بارگذاری تصاویر گرفته تا تغییر اندازه آنها و غیره بررسی کنیم.

بارگیری یک تصویر با استفاده از OpenCV:

 وارد کردن cv2
# تصویر رنگی
Img = cv2.imread ("Penguins.jpg" ، 1)
# سیاه و سفید (مقیاس خاکستری)
Img_1 = cv2.imread ("Penguins.jpg" ، 0)) 

همانطور که در قطعه کد بالا مشاهده شد ، اولین نیاز وارد کردن ماژول OpenCV است.

بعداً ما می تواند تصویر را با استفاده از ماژول imread بخواند. 1 در پارامترها نشان می دهد که یک تصویر رنگی است. اگر پارامتر به جای 1 ، 0 باشد ، به این معنی است که تصویر وارد شده یک تصویر سیاه و سفید است. نام تصویر در اینجا "پنگوئن ها" است. کاملاً ساده ، درست است؟

شکل تصویر/وضوح تصویر:

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

 وارد کردن cv2
# سیاه و سفید (مقیاس خاکستری)
Img = cv2.imread ("Penguins.jpg"، 0)
Print (img.shape) 

منظور از شکل تصویر ، شکل آرایه NumPy است. همانطور که در اجرای کد مشاهده می کنید ، ماتریس شامل 768 ردیف و 1024 ستون است.

نمایش تصویر:

نمایش تصویر با استفاده از OpenCV بسیار ساده و سرراست است. به زیر مراجعه کنید.

 وارد کردن cv2
# سیاه و سفید (مقیاس خاکستری)
Img = cv2.imread ("Penguins.jpg"، 0)
cv2.imshow ("پنگوئن ها" ، img)
cv2.waitKey (0)
# cv2.waitKey (2000)
cv2.destroyAllWindows () 

همانطور که مشاهده می کنید ، ابتدا تصویر را با استفاده از imread وارد می کنیم. ما برای نمایش تصاویر به یک خروجی پنجره نیاز داریم ، درست است؟

ما از تابع imshow برای نمایش تصویر با باز کردن یک پنجره استفاده می کنیم. 2 پارامتر برای تابع imshow وجود دارد که نام پنجره و تصویر مورد نظر است.

بعداً منتظر یک رویداد کاربر هستیم. waitKey تا زمانی که کاربر کلیدی را فشار ندهد پنجره را ثابت می کند. پارامتری که به آن منتقل می شود زمان بر حسب میلی ثانیه است.

و در نهایت ، ما از killAllWindows برای بستن پنجره بر اساس پارامتر waitForKey استفاده می کنیم.

تغییر اندازه تصویر:

< p> به طور مشابه ، تغییر اندازه تصویر بسیار آسان است. در اینجا قطعه کد دیگری وجود دارد:

 وارد کردن cv2
# سیاه و سفید (مقیاس خاکستری)
img = cv2.imread ("Penguins.jpg"، 0)
resized_image = cv2.resize (img، (650،500))
cv2.imshow ("پنگوئن ها" ، resized_image)
cv2.waitKey (0)
cv2.destroyAllWindows () 

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

بعداً توجه داشته باشید که شیء تصویر از img به resized_image تغییر می کند ، زیرا شیء تصویر در حال حاضر تغییر کرده است.

بقیه کد برای کد قبلی بسیار ساده است ، درست است؟

من مطمئن هستم که شما کنجکاو هستید که به پنگوئن ها نگاه کنید ، درست است؟ این تصویری است که ما در تمام این مدت به دنبال خروجی آن بودیم!

روش دیگری برای انتقال پارامترها به تابع تغییر اندازه وجود دارد. به پایین مراجعه کنید.

 Resized_image = cv2.resize (img، int (img.shape [1]/2)، int (img.shape [0]/2))) 

در اینجا ، شکل تصویر جدید نصف تصویر اصلی می شود.

در ادامه این مقاله ، اجازه دهید نحوه تشخیص چهره با استفاده از OpenCV را بررسی کنیم.

تشخیص چهره با استفاده از OpenCV

این روش در ابتدا پیچیده به نظر می رسد اما بسیار آسان است. اجازه دهید کل مراحل را با شما در میان بگذارم و شما نیز همان احساس را خواهید داشت.

مرحله 1: با توجه به پیش نیازهای ما ، برای شروع به تصویر نیاز داریم. بعداً ما باید یک طبقه بندی آبشار ایجاد کنیم کهدر نهایت ویژگی های چهره را به ما می دهد.

مرحله 2: این مرحله شامل استفاده از OpenCV است که تصویر و فایل ویژگی ها را می خواند. بنابراین در این مرحله ، آرایه های NumPy در نقاط اصلی داده وجود دارد.

تنها کاری که باید انجام دهیم این است که مقادیر سطر و ستون صورت NumPy ndarray را جستجو کنیم. این آرایه با مختصات مستطیل صورت است.

مرحله 3: این مرحله نهایی شامل نمایش تصویر با کادر صورت مستطیلی است.

تصویر زیر را بررسی کنید ، در اینجا من خلاصه کرده ام 3 مرحله به شکل تصویر برای خوانایی راحت تر:

بسیار ساده ، درست است؟

ابتدا ، یک شی CascadeClassifier برای استخراج ویژگی های صورت ایجاد می کنیم ، همانطور که قبلاً توضیح داده شد. مسیر فایل XML که حاوی ویژگی های چهره است ، پارامتر اینجاست.

مرحله بعدی خواندن تصویری است که روی آن چهره وجود دارد و با استفاده از COLOR_BGR2GREY به تصویر سیاه و سفید تبدیل می شود. به دنبال آن ، مختصات تصویر را جستجو می کنیم. این کار با استفاده از deteMultiScale انجام می شود.

از چه مختصاتی می پرسید؟ این مختصات مستطیل صورت است. scaleFactor برای کاهش مقدار شکل تا 5٪ تا زمانی که صورت پیدا شود استفاده می شود. بنابراین ، در کل - هر چه مقدار کوچکتر باشد ، دقت بیشتر است.

در نهایت ، صورت روی پنجره چاپ می شود.

افزودن کادر صورت مستطیلی:

< p> این منطق بسیار ساده است - به سادگی استفاده از دستور حلقه for. تصویر زیر را ببینید.

ما تعریف روش ایجاد مستطیل با استفاده از cv2.rectangle با عبور پارامترهایی مانند شیء تصویر ، مقادیر RGB طرح کلی جعبه و عرض مستطیل.

اجازه دهید کل کد را برای تشخیص چهره بررسی کنیم: < /p>

 وارد کردن cv2
# یک CascadeClassifier Object ایجاد کنید
face_cascade = cv2.CascadeClassifier ("haarcascade_frontalface_default.xml")
# خواندن تصویر همانطور که هست
img = cv2.imread ("photo.jpg")
# خواندن تصویر به عنوان تصویر مقیاس خاکستری
gray_img = cv2.cvtColor (img ، cv2.COLOR_BGR2GRAY)
# مختصات تصویر را جستجو کنید
چهره ها = face_cascade.detectMultiScale (gray_img، scaleFactor = 1.05،
                                      حداقل همسایگان = 5)
برای x ، y ، w ، h در صورت:
    img = cv2. rectangle (img، (x، y)، (x+w، y+h)، (0،255،0)، 3)
تغییر اندازه = cv2.resize (img، (int (img.shape [1]/7)، int (img.shape [0]/7)))
cv2.imshow ("خاکستری" ، تغییر اندازه)
cv2.waitKey (0)
cv2.destroyAllWindows () 

در ادامه این مقاله ، بیایید نحوه استفاده از OpenCV برای ضبط ویدئو با وب کم کامپیوتر را بررسی کنیم.

ضبط ویدئو با استفاده از OpenCV

< p> فیلمبرداری با استفاده از OpenCV نیز بسیار ساده است. حلقه زیر ایده بهتری به شما می دهد. آن را بررسی کنید:

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

ضبط ویدئو:

تصویر زیر را مشاهده کنید:

< img src = "https://cdn-images-1.medium.com/max/426/1*AElOdTJjCzjfnWIhKwXcYA.png">

ابتدا کتابخانه OpenCV را طبق معمول وارد می کنیم. در مرحله بعد ، روشی به نام VideoCapture داریم که برای ایجاد شی VideoCapture استفاده می شود. این روش برای فعال کردن دوربین روی دستگاه کاربر استفاده می شود. پارامتر این عملکرد نشان می دهد که آیا برنامه باید از دوربین داخلی یا دوربین اضافی استفاده کند. "0" نشان دهنده دوربین داخلی استاین مورد.

و سرانجام ، از روش انتشار برای رهاسازی دوربین در چند میلی ثانیه استفاده می شود.

وقتی جلو می روید و تایپ می کنید و سعی می کنید کد فوق را اجرا کنید ، متوجه می شود که چراغ دوربین برای چند ثانیه روشن می شود و بعداً خاموش می شود. چرا این اتفاق می افتد؟

این اتفاق می افتد زیرا هیچ زمان تأخیری برای عملکرد دوربین وجود ندارد.

با نگاهی به کد بالا ، خط جدیدی به نام time.sleep (3) داریم - این باعث می شود که اسکریپت به مدت 3 ثانیه متوقف شود. توجه داشته باشید که پارامتر منتقل شده زمان در ثانیه است. بنابراین ، وقتی کد اجرا شد ، وب کم به مدت 3 ثانیه روشن می شود.

افزودن پنجره:

افزودن یک پنجره برای نمایش خروجی ویدئو بسیار ساده است و می تواند در مقایسه با روشهای مشابهی که برای تصاویر استفاده می شود. با این حال ، تغییر جزئی وجود دارد. کد زیر را بررسی کنید:

من زیبا هستم مطمئن باشید که می توانید از کد فوق جدا از یک یا دو خط بیشترین معنا را داشته باشید. آرایه قاب. /p>

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

اما برای شروع باید اولین فریم/تصویر ویدیو را بخوانیم ، درست است؟

برای انجام دقیق این کار ، ما ابتدا باید یک شیء فریم ایجاد کنید که تصاویر شیء VideoCapture را بخواند.

< /img>

همانطور که در بالا مشاهده شد ، از روش imshow برای گرفتن اولین فریم ویدئو استفاده می شود.

در تمام این مدت ، ما سعی کرده ایم اولین تصویر/قاب ویدیو را به طور مستقیم ضبط کنیم ضبط ویدئو.

بنابراین چگونه می توان فیلم را به جای اولین تصویر در OpenCV ضبط کرد؟

ضبط مستقیم فیلم:

به منظور ضبط ویدیو ، ما از حلقه while استفاده خواهیم کرد. در حالی که شرایط به گونه ای است که تا زمانی که "check" درست نباشد. اگر چنین است ، Python فریم ها را نمایش می دهد.

در اینجا تصویر قطعه کد آمده است:

ما از تابع cvtColor برای تبدیل هر فریم به تصویر در مقیاس خاکستری استفاده می کنیم ، همانطور که قبلاً توضیح داده شد.

waitKey (1) اطمینان حاصل کنید که یک فریم جدید پس از هر میلی ثانیه فاصله ایجاد می کنید.

در اینجا مهم است که توجه داشته باشید که حلقه while کاملاً در حال پخش است تا به تکرار فریم ها و در نهایت نمایش فیلم کمک کند.

ماشه رویداد کاربر نیز در اینجا وجود دارد. هنگامی که کاربر کلید 'q' را فشار می دهد ، پنجره برنامه بسته می شود.

درک OpenCV بسیار آسان است ، درست است؟ من شخصاً دوست دارم که خوانایی آن چقدر خوب است و چگونه یک مبتدی می تواند کار با OpenCV را به سرعت شروع کند.

در ادامه این مقاله ، بیایید نحوه استفاده از یک مورد کاربرد جالب آشکارساز حرکت با استفاده از OpenCV را بررسی کنیم.

مورد استفاده: تشخیص حرکت با استفاده از OpenCV

بیان مشکل:

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

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

در نظر بگیرید نمودار زیر:

در ابتدا ، ما ذخیره می کنیم تصویر در یک قاب خاص.

مرحله بعدی شامل تبدیل تصویر به تصویر تار Gaussian است. این کار به منظور اطمینان از محاسبه تفاوت محسوس بین تصویر تار و تصویر واقعی انجام می شود.

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

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

در نهایت ، ما زمان نمایش و خروج شی از قاب را محاسبه می کنیم.

بسیار آسان است ، درست است؟

در اینجا قطعه کد آمده است:

< img src = "https://cdn-images-1.medium.com/max/426/1*tkoLRNbYxGMYGgSHx-eZTA.png">

همین اصل در اینجا نیز رعایت می شود. ابتدا بسته را وارد می کنیم و شیء VideoCapture را ایجاد می کنیم تا از ضبط ویدئو با استفاده از وب کم اطمینان حاصل کنیم.

حلقه while از طریق فریم های جداگانه ویدیو تکرار می شود. ما قاب رنگ را به یک تصویر در مقیاس خاکستری تبدیل می کنیم و بعداً این تصویر را در مقیاس خاکستری به محو گاوس تبدیل می کنیم.

ما باید اولین تصویر/قاب ویدیو را ذخیره کنیم ، درست است؟ ما فقط از عبارت if برای این منظور استفاده می کنیم.

اکنون ، اجازه دهید کمی بیشتر در کد وارد شویم:

ما از تابع absdiff برای محاسبه تفاوت بین اولین فریم رخ داده و همه فریم های دیگر استفاده می کنیم.

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

بعداً ، از تابع findContours برای تعیین ناحیه کانتور برای تصویر خود استفاده می کنیم. و در این مرحله نیز مرزها را اضافه می کنیم.

عملکرد contourArea ، همانطور که قبلاً توضیح داده شد ، صداها و سایه ها را حذف می کند. برای ساده تر ، فقط آن قسمت را سفید نگه می دارد ، که مساحت آن بیشتر از 1000 پیکسل است ، همانطور که برای آن تعریف کرده ایم.

بعداً ، یک جعبه مستطیلی در اطراف شیء خود در قاب کار ایجاد می کنیم. .

و به دنبال آن این کد ساده وجود دارد:

همانطور که قبلاً بحث شد ، فریم هر 1 میلی ثانیه تغییر می کند و هنگامی که کاربر "q" را وارد می کند ، حلقه شکسته می شود و پنجره بسته می شود.

ما همه موارد اصلی را پوشش داده ایم. جزئیات این وبلاگ آموزش OpenCV Python. موردی که در مورد مورد استفاده ما باقی می ماند این است که ما باید زمانی را که شیء در مقابل دوربین قرار داشت محاسبه کنیم.

محاسبه زمان:

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

هنگامی که شیء در شکل بالا مشخص می شود ، پرچم وضعیت را به 1 تغییر می دهیم. بسیار ساده ، درست است؟

ما قصد داریم فهرستی از وضعیت برای هر فریم اسکن شده تهیه کنید و بعداً تاریخ و زمان را با استفاده از زمان داده در یک لیست در صورت تغییر و مکان ایجاد کنید.

و مقادیر زمان را در یک DataFrame ذخیره می کنیم ، همانطور که در نمودار توضیحی بالا نشان داده شده است. ما با نوشتن DataFrame در یک فایل CSV مطابق شکل به پایان می رسانیم.

رسم نمودار تشخیص حرکت:

آخرین مرحله در مورد استفاده ما برای نمایش نتایج. ما نمودار را نشان می دهیم که حرکت را در 2 محور نشان می دهد. کد زیر را در نظر بگیرید:

برای شروع ، ما DataFrame را از فایل motion_detector.py وارد می کنیم.

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

در نهایت ، مقادیر زمانی DataFrame رسم می شود در مرورگر با استفاده از نمودارهای بوکه.

خروجی:

امیدوارم این مقاله به شما در یادگیری تمام اصول اولیه مورد نیاز برای شروع کار با OpenCV با استفاده از پایتون کمک کند.

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

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

به دنبال مقالات دیگر این سری باشید که جنبه های مختلف دیگر پایتون و علم داده را توضیح می دهد.

1. آموزش پایتون 2. زبان برنامه نویسی پایتون 3. توابع پایتون 4. مدیریت فایل در پایتون 5. آموزش پایتون Numpy 6. Scikit Learn Machine Learning 7. آموزش پایتان پایتون 8. آموزش Matplotlib 9. آموزش Tkinter 10. آموزش درخواست 11. آموزش PyGame 12. تراشیدن وب با پایتون 13. آموزش PyCharm 14. آموزش یادگیری ماشین 15. الگوریتم رگرسیون خطی از ابتدا در پایتون 16. پایتون برای علم داده 17. پایتون Regex 18. حلقه ها در Python 19. پروژه های پایتون 20. پروژه های یادگیری ماشین 21. آرایه ها در پایتون 22. مجموعه در پایتون 23. چند رشته ای در پایتون 24. سوالات مصاحبه پایتون 25. جاوا در مقابل پایتون 26. چگونه می توان توسعه دهنده پایتون شد؟ 27. توابع پایتون لامبدا 28. Netflix چگونه از پایتون استفاده می کند؟ 29. برنامه نویسی سوکت در پایتون 30 چیست. اتصال پایگاه داده پایتون 31. گلانگ در مقابل پایتون 32. آموزش Python Seaborn 33. فرصتهای شغلی پایتون

در ابتدا در www.edureka.co در 8 فوریه 2019 منتشر شد.

دانش آموزان Udacity با شبکه های عصبی و بینایی رایانه آزمایش می کنند

دانش آموزان Udacity با شبکه های عصبی و بینایی رایانه آزمایش می کنند

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

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

دفتر خاطرات مهندس خودروهای خودران-4

اندرو ویلکی

اندرو دارای تصاویر زیادی در این پست وبلاگ است ، از جمله صفحه گسترده ای از همه عملکردهای مختلفی که در ساختن خود استفاده کرده است طبقه بندی علائم راهنمایی و رانندگی با TensorFlow!

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

پیچیدگی های طبقه بندی علائم راهنمایی و رانندگی با TensorFlow

Param Aggarwal

در این پست ، پارام مراحل یافتن ترکیب مناسب پیش پردازش ، افزایش و معماری شبکه را به صورت مرحله به مرحله طی می کند. برای طبقه بندی علائم راهنمایی و رانندگی 54 معماری شبکه عصبی در کل! می خواستم گریه کنم. یک مدل پایه خطی 85 درصد به من می داد و در اینجا از جدیدترین لایه های پیچشی استفاده می کنم و نمی توانم مطابقت داشته باشم. چرت زدم. h1>

جاناتان میچل

< p> انتشار مجدد دشوارترین و خسته کننده ترین مفهوم برای درک شبکه های عصبی عمیق است. پس از انتشار مجدد ، همه چیز دیگر یک تکه کیک است. در این پست مختصر ، جاناتان در چند پاراگراف یک جمع بندی خلاصه می کند.

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

استفاده از GPU جادو است. مانند این است که به یک نفر در بیابان کوکاکولا بدهید. یا برای خرید یک ماشین جدید - احساس "چگونه از آن ماشین قدیمی استفاده می کردم". یا برای پیدا کردن میانبر در مسیر رفتن به دفتر: دیگر هرگز از مسیر طولانی استفاده نخواهید کرد. یا برای پیدا کردن یک کد مخفی در یک بازی که به ابرقدرتها می دهد… //cdn-images-1.medium.com/max/426/1*MPuXLawlZxYfCVkHjPf3oA.png">

عصمات طرح منظمی از موضوع Finding Lane Lines Porject و خط دید رایانه ای خود را ارائه می دهد استفاده شده. به طور خاص ، او توضیحات خوبی در مورد تغییر Hough ، که یک مفهوم حیله گر است ، ارائه می دهد!

خط احتمالی Hough ، اجرای کارآمدتر از Hough transform را تغییر می دهد. این خروجی خطوط تشخیص داده شده (x0 ، y0 ، x1 ، y1) را به عنوان خروجی نشان می دهد. تشخیص خطوط مستقیم که بخشی از منحنی هستند دشوار است زیرا بسیار بسیار کوچک هستند. برای تشخیص چنین خطوطی مهم است که همه پارامترهای Hough transform را به درستی تنظیم کنیم. دو مورد از مهمترین آنهاپارامترها عبارتند از: تعداد آرا و حداکثر فاصله بین نقاطی که باید برای ایجاد یک خط به هم متصل شوند. هر دو پارامتر در حداقل مقدار خود تنظیم شده اند.

معرفی Motoko Playground ، یک محیط توسعه آنلاین برای رایانه اینترنتی

معرفی Motoko Playground ، یک محیط توسعه آنلاین برای رایانه اینترنتی

زمین بازی Motoko به کاربران امکان می دهد قراردادهای هوشمند Canister را مستقیماً در یک مرورگر وب ایجاد و مستقر کنند.

توسط یان چن ، مهندس ارشد نرم افزار | DFINITY

برای ساده سازی تجربه توسعه دهندگان با استفاده از رایانه اینترنتی ، تیم زبان بنیاد DFINITY انتشار منبع باز Motoko Playground ، یک محیط توسعه یکپارچه (IDE) را که بر روی بلاک چین رایانه اینترنتی اجرا می شود ، اعلام می کند.

استفاده از Motoko ، یک زبان برنامه نویسی Motoko Playground که برای پشتیبانی یکپارچه از مدل برنامه نویسی رایانه اینترنتی طراحی شده است ، به کاربران اجازه می دهد بدون نیاز به بارگیری SDK DFINITY Canister یا راه اندازی کیف پول ، قراردادهای هوشمند Canister را مستقیماً در مرورگر وب ایجاد و مستقر کنند. از آنجا که توسعه دهندگان نیازی به ایجاد محیط توسعه خود ندارند ، این تجربه کامل در مرورگر به همه این امکان را می دهد که هنگام آزمایش برنامه نویسی در رایانه اینترنتی از هر کجا ، Motoko را کاوش و یاد بگیرند.

شروع به کار با Motoko زمین بازی

پس از ورود به dapp ، می توانید انتخاب کنید که می خواهید با چه پروژه ای کار کنید و در رایانه اینترنتی مستقر شوید. در زیر نمونه کار استفاده از زمین بازی Motoko آمده است.

مرحله شماره 1: یک پروژه نمونه را انتخاب کنید.

برای کمک به شروع سریع توسعه دهندگان جدید ، چندین پروژه Motoko از پیش نمایش نمونه های DFINITY از جمله پیشخوان ، دفترچه تلفن ، پیچ و خم تصادفی و ناشر از قبل انتخاب شده اند. /خدمات مشترکین همچنین می توانید هر کد Motoko را از Github وارد کنید.

بیایید می گویند که مثال Counter از لیست بالا انتخاب شده است. در پیوند "Main.mo" در ناوبری ، می توانید کد را مشاهده کنید.

مرحله دوم: پس از انتخاب پروژه ، روی دکمه "استقرار" در گوشه سمت راست بالا کلیک کنید تا برنامه ایجاد و استقرار شود. قوطی در رایانه اینترنتی.

پس از کلیک روی "استقرار ، ”نام قوطی را که می خواهید مستقر کنید ، مشخص کنید. در این مورد ، نام قوطی ای که مایل به استقرار آن هستید "اصلی" است. استقرار چندین ثانیه طول می کشد ، زیرا باید یک شناسه Canister رایگان از رایانه اینترنتی دریافت کرده و ماژول کامپایل شده WebAssembly (Wasm) را نصب کنید.

مرحله 3: پس از استقرار Canister ، رابط کاربری Candid در سمت راست می توان برای آزمایش کد استفاده کرد.

با استفاده از رابط کاربری Candid ، می توانید از طریق مرورگر با Canister ارتباط برقرار کنید - می توانید مقدار اولیه را پرس و جو کنید ، شمارنده را افزایش دهید و غیره. (در صورت تمایل ، می توانید از ابزارهای رابط خط فرمان ، مانند dfx یا ic-repl ، برای تعامل با قوطی استفاده کنید.)

مرحله 4: اگر می خواهید تغییراتی در کد را می توانید در ویرایشگر انجام دهید. به عنوان مثال ، در زیر ما روش را به get2 () تغییر داده ایم.

مرحله 5: برای استقرار مجدد ، دوباره دکمه "استقرار" را فشار دهید. از آنجا که سیستم قبلاً می داند که شما یک قوطی به نام "Main" دارید ، باید مشخص کنید که آیا می خواهید قوطی موجود را ارتقا دهید یا یک قوطی جدید را به طور کامل نصب کنید. با مثال زیر ، قوطی موجود را ارتقا می دهیم.

مرحله 6: از آنجا که شمارنده در حافظه پایدار است ، پس از ارتقا ، هنگامی که روش جدید get2 را فرا می گیرید ، شمارنده را برمی گردانداز آخرین بار (به جای 0) به عنوان مقدار اولیه.

< مرحله 7: زمین بازی Motoko از آرگومان های نصب پشتیبانی می کند. در مثال زیر ، می توانید یک کلاس بازیگر برای شمارنده اضافه کنید.

< /img>

مرحله 8: هنگامی که می خواهید قوطی خود را مستقر کنید ، سیستم می داند که یک آرگومان نصب وجود دارد و مقدار شروع شمارنده را درخواست می کند. در مثال ، مقدار شروع در حال حاضر 42 است و می توانید قوطی را دوباره نصب کنید.

مرحله 9: اکنون ، هنگامی که مقدار اولیه را درخواست می کنید ، شمارنده مقدار 42 را باز می گرداند ، همانطور که در هنگام استقرار مشخص کرده بودید.

برای پروژه های بزرگ ، توسعه دهندگان معمولاً باید از کتابخانه های Motoko شخص ثالث استفاده کنند. زمین بازی Motoko از مجموعه بسته کشتی ، که مجموعه ای از کتابخانه های Motoko است که از جامعه نگهداری می شود ، پشتیبانی می کند. شما می توانید این کتابخانه ها ، مانند تجزیه ، SHA256 و کتابخانه های مختلف ساختار داده را با کلیک روی دکمه "+" در بخش بسته ها در ستون سمت چپ وارد کنید.

Motoko Playground از ویژگی های مشابه شما پشتیبانی می کند. محیط توسعه محلی ، مانند فراخوان های بین کانتری ، ارتقاء کانیستر ، نصب کلاس بازیگر با آرگومان های راه اندازی اولیه و کتابخانه های شخص ثالث. به عنوان یک تمرین جالب ، توسعه دهندگان تشویق می شوند که مخزن CanCan را وارد کنند ، کتابخانه "sequence" را از قسمت بسته اضافه کنند و قوطی پشتی را در زمین بازی Motoko در داخل یک مرورگر وب بسازند.

علاوه بر این نسخه مستقل Motoko Playground ، یک نسخه تعبیه شده نیز وجود دارد که در دفترچه راهنمای زبان Motoko استفاده می شود. این یک نسخه سبک از Motoko Playground است که در آن کاربران می توانند به صورت تعاملی کد موجود در اسناد را تغییر داده و بدون نیاز به نصب کد در رایانه اینترنتی ، کد را فوراً در مرورگر اجرا (تفسیر) کنند.

چگونه زمین بازی Motoko

همه کد منبع بازی Motoko اکنون عمومی است. توسعه دهنده ای که کد را مرور می کند ، یک برنامه وب کامل با یک جاوا اسکریپت جلویی و یک قوطی پشتی پیدا می کند که چرخه های رایگان را که در Motoko و Rust نوشته شده است مدیریت می کند.

برخلاف اکثر موارد آنلاین IDE ها ، کامپایلر Motoko به لطف کامپایلر js-of-ocaml در قسمت جلویی میزبانی می شود. این به طور خودکار نگرانی های امنیتی و مقیاس پذیری را برطرف می کند ، زیرا کامپایلر به جای سرور از راه دور در مرورگر کاربر اجرا می شود. به طور خاص ، قسمت جلویی از اجزای زیر تشکیل شده است: برجسته سازی و اعتبار سنجی نحو Motoko. یک مدیر بسته کشتی که کتابخانه های شخص ثالث را از مجموعه بسته کشتی بارگیری می کند. یک ماژول استقرار که نصب/ارتقاء Canister ، کلاس بازیگر و رابط کاربری واضح. ماژول وارد کردن کد که اجازه وارد کردن هر کد Motoko از Github را می دهد.

چرخه های رایگان و قسمت پشتی

برای پشتیبانی از پذیرش برنامه نویس ، DFINITY تهیه چرخه های رایگان برای قوطی های مستقر در زمین بازی Motoko ، به طوری که کاربران جدید مجبور نباشند یک کیف پول چرخه برای کاوش Motoko و رایانه اینترنتی تنظیم کنند.

قوطی پشتی به Motoko نوشته شده است و مدیریت می کند چرخه های رایگان که توسط قوطی های مستقر استفاده می شود. برای اطمینان از استفاده عادلانه از این چرخه های رایگان ، محدودیت هایی برای قوطی های مستقر وجود دارد: هر قوطیتعادل چرخه اولیه 0.5T است و فقط می تواند 10 دقیقه اجرا شود. انتقال چرخه از طریق قوطی ها نیز مجاز نیست.

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

برای اطمینان از انصاف منابع ، می خواهیم از انتقال تعداد زیادی چرخه به کاربران جلوگیری کنیم. قوطی های مخصوص خودشان به عنوان مثال ، می توانید به راحتی با فراخوانی روش depos_cycles در قوطی مدیریتی ، همه چرخه های موجود در قوطی بازی مستقر در زمین بازی را به قوطی مورد نظر منتقل کنید. برای جلوگیری از این حمله ، ما تمام ماژول های ارائه شده Wasm را بازرسی کرده و دستورالعمل های انتقال چرخه را در سطح Wasm حذف می کنیم. از آنجا که Motoko در حال حاضر کتابخانه تجزیه و تحلیل Wasm ندارد ، برای دستیابی به این هدف از قوطی Rust استفاده می شود. هر بار که Motoko درخواست نصب دریافت می کند ، ماژول Wasm را برای بازرسی به Rust Rust ارسال می کند. این در واقع الگوی جالبی است که از پشتیبانی FFI در Motoko تقلید می کند.

در آینده ، وقتی کاربران کیف پول خود را برای استقرار تهیه کنند ، که موارد استفاده پیشرفته تری را امکان پذیر می کند ، این محدودیت ها کاهش می یابد.

< p> ما قصد داریم بسیاری از ویژگی های دیگر را اضافه کنیم تا Motoko Playground را به عنوان یک IDE وب کامل برای رایانه اینترنتی تبدیل کنیم. از مشارکت های جامعه استقبال زیادی می شود!

در همین حال ، امیدواریم از جستجوی راحت Motoko ، زبان مادری رایانه اینترنتی ، مستقیماً در مرورگر وب ، بدون بارگیری SDK لذت ببرید. توسعه دهندگان علاقه مند همچنین تشویق می شوند تا کد منبع باز Motoko Playground را مرور کنند. ____ شروع به ساختن در sdk.dfinity.org کنید و به انجمن توسعه دهندگان ما در forum.dfinity.org بپیوندید.

چرا ارزش گذاری املاک به چشم انداز رایانه ای نیاز دارد

چرا ارزش گذاری املاک به چشم انداز رایانه ای نیاز دارد

در مقاله اخیر من یک ابزار تجزیه و تحلیل برنامه وام مسکن ارائه کردم که از AI برای اعتبارسنجی برنامه ها استفاده می کند. پس از خواندن آن مقاله ، مشتری که سال گذشته با او کار کردیم (Vin Vomero ، بنیانگذار Foxy AI) تماس گرفت تا ببیند آیا می توانم مقاله ای مشابه در مورد کارهایی که برای ارزیابی املاک و مستغلات برای آنها انجام دادیم ، بنویسم.

< p> مشکلی که ما سال گذشته روی آن کار کردیم یک مشکل شگفت انگیز بود: برآورد قیمت خانه بد است. لیست ها دائماً بیش از حد یا کم ارزش می شوند و ارزش گذاری یک خانه یک عامل کلیدی نه تنها برای خریدار و فروشنده بلکه برای ضامن وام مسکن است که خانه برای آن وثیقه است. مدلهای ارزیابی خودکار (AVM) اغلب توسط م institutionsسسات مالی برای تصمیم گیری در مورد همه چیز ، از وامهای صاحب منزل تا محدودیت کارت اعتباری استفاده می شود. این فقط مربوط به فروش خانه نیست. درک ارزش خانه برای کاهش ضرر و مدیریت ریسک اعتباری بسیار مهم است.

بهترین راه برای ارزیابی ارزش خانه چیست؟ بلکه یک ضرورت رقابتی است. به زودی ، مدلهای ارزشیابی بدون سطح هوش مصنوعی منسوخ می شوند.

به نقل از راب می ، مدیرعامل و بنیانگذار Talla ، "من را شگفت زده می کند که برخی از شرکتها به دلیل نداشتن هوش مصنوعی دیر به کار می گیرند. مطمئن باشید کجا باید آن را اعمال کنید یا چقدر خوب کار می کند. من فکر می کنم آنها نمی فهمند که تا زمانی که این چیزها مشخص شود ، بسیار عقب خواهند ماند. AVM هایی که در سراسر جهان استفاده می شوند باید بسیار بهتر باشند ، زیرا تا کنون به طور عینی وحشتناک بوده اند. این واقعیت که هوش مصنوعی می تواند 15 درصد در پیش بینی قیمت بهبود یابد ، نشان می دهد که مدل های سنتی تا به حال چقدر ضعیف عمل می کردند.

وضعیت خانه فراتر از تعداد اتاق خواب و حمام و مربع است فیلم یک مدل ارزش گذاری باید فهرست را مشاهده کند.

چرا ارزش گذاری خانه بد است؟ آنها بر داده های قدیمی ، داده های عددی ، داده های سرشماری ، داده های IRS و داده های فروش ایالتی/منطقه ای تکیه می کنند که ممکن است منعکس کننده سرمایه گذاری انجام شده در خانه نباشد. حتی گره زدن همه این منابع داده با هم گاهی تصویری ناقص به شما می دهد. اگرچه مدلهای سنتی AVM سریع و ارزان هستند ، اما نمی توانند کیفیت و وضعیت یک ملک را بدون در نظر گرفتن واقعی آن در نظر بگیرند و در نتیجه دقت یک ابزار کلیدی در صنعت خدمات مالی را محدود کنند.

< p> چرا این مشکل سختی است؟ خوب ، الگوریتم های رایانه ای سنتی دوست دارند اعداد را با استفاده از فرمول ها پردازش کنند ، نه تصاویر خانه ها. هیچ فیلدی در فهرست "یک زنگ در پشت بام گم شده است" وجود ندارد. برای درک درست ، مدل هوش مصنوعی باید به تصاویر نگاه کند و بفهمد که تصاویر چگونه بر قیمت تأثیر می گذارند. به طور خاص ، مدل باید در مورد اتاق مورد نظر خود بیاموزد ، بافتها ، رنگها را درک کند ،و اشیاء داخلی/خارجی این راه حل را مانند یک نوآوری در وب سایت دوستیابی در نظر بگیرید که در آن تا به حال ، هیچکس نمی توانست تصاویر پروفایل افراد را مشاهده کند ، و در عوض آنها فقط قد ، وزن و سایر داده های زیست پزشکی را مشاهده می کردند. واضح است که یک تصویر به هزار کلمه می ارزد. حتی وقتی به عنوان یک راه حل هوش مصنوعی پیاده سازی می شود ، بدست آوردن یک مدل رگرسیونی برای درک این همه اطلاعات در مورد یک لیست و درک آن در مورد همه موارد و استثنائات خاص ، کمی کابوس است. من از جزئیات راه حل فنی درباره ساختن AVM سخت می گذرم و در عوض روی موارد استفاده جدیدی که Foxy AI به میز می آورد تمرکز می کنم.

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

ما نمونه اولیه اولیه را سال گذشته تحویل دادیم. نمونه اولیه ای که برای Foxy AI توسعه دادیم اکنون بسیار بالغ شده است و بر روی یک مجموعه داده واقعاً نفس گیر آموزش دیده است. در حال حاضر ، به لطف پیشرفت در الگوریتم ها و قدرت محاسباتی ، می توانیم از ابزارها به نحوی استفاده کنیم که قبلاً امکان پذیر نبود. درک گرادیان در کیفیت در میلیون ها ویژگی در حال حاضر یک واقعیت است.

تحقیقات Foxy AI این رویکرد AVM جدید را با ترکیب بینایی رایانه و یادگیری عمیق به بازار عرضه کرده است تا کیفیت و وضعیت املاک مسکونی را ارزیابی کند. کل سیستم از طریق API ها در معرض دید قرار می گیرد تا بتوانید آن را بر روی سایر مواردی که استفاده می کنید بچسبانید. این محصول از تکنیک های آموزشی پیشرفته و مجموعه ای از مدلهای پیش بینی داخلی برای طبقه بندی نوع اتاقهایی که مجموعه تصویر ارائه شده را تشکیل می دهند و کیفیت و وضعیت ویژگی موضوع را تعیین می کند ، برای افزایش دقت ارزیابی استفاده می کند.

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

اگر به AVM های سنتی اعتماد دارید و در حال دریافت هستید پایان ارزیابی های نادرست ، ارزیابی این راه حل برای شما واقعاً جالب خواهد بود. میلیاردها دلار به معنای واقعی کلمه در خطر است ، بنابراین حتی افزایش ناچیز دقت نیز واقعاً بر شاخص های کلیدی عملکرد (KPI) برایکاهش ریسک وام دهی ، افزایش قدرت وام دهی و غیره. اگر می خواهید خودتان این جادو را تجربه کنید ، در بتا خصوصی ثبت نام کنید.

در اینجا پیوندی به Foxy در رسانه متوسط ​​وجود دارد و امیدوارم درک کنید که چرا اینقدر جالب است. این فناوری امکانات جدیدی را باز می کند مانند شبیه سازی آنچه که یک خانه خیالی برای آن می فروشد و استفاده از آن برای انجام کار ناک دان و ایجاد برآورد به عنوان پیمانکار. قابلیت های بسیار جذاب ماشین حساب وجود دارد که به سادگی تا به حال وجود نداشت. راه حل همه در یک API ساده پیچیده شده است: https://www.foxyai.com/doc-api/#api-endpoints

و بنابراین ، در نتیجه ، AVM ها مختل می شوند و موسسات مالی باید توجه داشته باشید.

اگر از این مقاله در مورد AI برای ارزیابی املاک و مستغلات خوشتان آمد ، دکمه دنبال کردن را فشار دهید ، دست بزنید و به برخی از خواندنی ترین مقاله های گذشته من نگاه کنید ، مانند "چگونه قیمت پروژه AI »و« نحوه استخدام مشاور هوش مصنوعی ». همچنین ، Foxy AI را بررسی کنید. علاوه بر مقالات مرتبط با کسب و کار ، مقالاتی نیز تهیه کرده ام که درمورد مسائل دیگری که شرکت هایی که به دنبال یادگیری عمیق ماشین هستند ، مانند "یادگیری ماشین بدون ابر یا API" با آنها روبرو شده است.

در مقاله ای آینده ، چیزی را که مدتی است روی آن کار می کنیم ، ارائه می دهد که به شرکت ها کمک می کند تجزیه و تحلیل گزارش های بدون ساختار خود را در طول ممیزی داخلی خودکار کنند.

تا دفعه بعد!

-دانیل

daniel@lemay.ai ← سلام کنید. Lemay.ai 1 (855) LEMAY-AI

سایر مقالاتی که ممکن است از آنها لذت ببرید:

هوش مصنوعی و داده های بد مجموعه داده های تصویر برای هوش مصنوعی هوش مصنوعی: از کاربران خود بخواهید اطلاعات شما را برچسب گذاری کنند