توصیه شده, رزبری پای, هوش مصنوعی

تشخیص اشیاء با استفاده از Raspberry Pi B+ 2014 – قسمت اول

تشخیص اشیاء با استفاده از Raspberry Pi B+ 2014 - قسمت اول

در این مجموعه مقاله قصد دارم تا نشون بدم چطوری میشه با استفاده از تنسورفلو لایت (نسخه مخصوص موبایل) روی Raspberry Pi B+ 2014 (رزبری دوران عهد عتیق) اشیاء موجود در تصویر رو شناسایی کرد!

 

کسایی که می‌خوان هوش مصنوعی رو با شبکه‌های عصبی / یا شبکه‌های عصبی عمیق کنند، (برای مثال در بینایی ماشین و تشخیص اشیاء ) معمولاً به سراغ یکی از دو غول فریم ورک شبکه‌های عصبی، PyTorch یا TensorFlow میرن.

 

 

یک تاریخچه خیلی کوتاه

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

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

تنسورفلو از نسخه 2 به بعد تغییرات بنیادی در API خودش داد و استفاده ازش به شدت ساده شد. پایتورچ از نسخه 1.3 به بعد موبایل رو هم پشتیبانی میکنه و البته قبلتر هم کسانی بودند که پایتورچ رو برای پردازنده های معروف بیلد گرفته باشند. با نسخه های فعلی این دو فریم ورک و بهینه سازی هایی که شدند، اینکه چه فریم ورکی استفاده کنید، شاید بیشتر سلیقه ای باشه!

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

 

نسخه های جدیدتر رزبری

خوب، قرار شد با یه رزبری پای قدیمی، یه پروژه تشخیص اشیاء انجام بدیم. اگه پردازنده رزبری شما ARMv7 به بعد باشه و دیسترو (Distro) مبتنی بر Debian روش نصب کرده باشین، با دستورات زیر میتونین کتابخانه تنسورفلو لایت (TensorFlow Lite) رو برای پایتون نصب کنین:

 

اگه دیسترو دیگه ای دارین (مثلا Fedora و …) باید از دستور زیر استفاده کنین:

 

به جز جستجو در اینترنت، چطوری بفهمیم پردازنده رزبری ما چیه؟

این دستور رو استفاده کنید:

 

رزبری گوشه انباری برای تشخیص اشیاء

اگه پردازنده رزبری شما ARMv6 باشه، با دستورات قبلی کتابخانه برای شما غیر قابل استفادست، چونکه Instruction Set ها با هم در این دو پردازنده متفاوته.

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

سیستمی که برای بیلد استفاده میکنم یک ماشین مجازی Ubuntu 20.04 با 8 گیگابایت رم و یک پردازنده 2 هسته ایه.

 

بیلد گرفتن TensorFlow Lite برای ARMv6 جهت استفاده در یک پروژه سی پلاس پلاس

اول باید cmake و مجموعه ابزار و کتابخانه های مورد نیاز کامپایل رو نصب کنین:

(مطمئن بشین که git رو هم نصب داشته باشین)

 

الان باید ریپازیتوری تنسورفلو رو کلون کنیم:

 

بعد پوشه های بیلد رو میسازیم و واردش میشیم:

 

و حالا باید toolchain مناسب برای معماری ARMv6 رو دانلود کنیم:

 

خوب رسیدیم به مرحله آماده سازی قبل از بیلد:

و هم اکنون، مرحله بیلد:

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

 

در نتیجه یک کتابخانه استاتیک ایجاد میشه به اسم libtensorflow-lite.a که برای استفاده ازش توی پروژتون میتونین از این لینک کمک بگیرین.

 

بیلد گرفتن TensorFlow Lite برای ARMv6 جهت استفاده در یک پروژه پایتون

احتمالا نسخه پایتون روی دیسترویی که روی رزبری استفاده میکنید، 3.7 باشه، با اجرای دستور python3 –version از این مطمئن بشید.

باید داکر (Docker) رو نصب کنیم:

 

باید بریم به ریپازیتوری که کلون کردیم:

 

بعد این دستور رو برای بیلد میزنیم (یک ایمیج داکر رو دانلود میکنه و بیلد اونجا انجام میشه):

اون rpi0 که در آخر دستور اومده، یعنی داریم برای Raspberry Pi Zero که پردازندش ARMv6 هست بیلد میگیریم.

 

خوب یک نکته، اینجا هم ممکنه حافظه کم بیاره سیستمتون، پس فایل build_pip_package_with_cmake.sh رو باید ویرایش کنیم و در خطی که دستور بیلد هست (خط 118) جلوی سوییچ -j به جای ${BUILD_NUM_JOBS} عدد مناسب، مثلا 2 رو بذاریم.

 

وقتی که کار بیلد تموم بشه، فایل با پسوند whl در این مسیر قرار میگیره:

 

با توجه به نسخه سورسی که دانلود کردین، این فایل میتونه به این اسم باشه: tflite_runtime-2.6.0-cp37-cp37m-linux_armv6l.whl

در رزبری برای استفاده از این فایل در پایتون، باید در ابتدا با pip نصبش کنید:

 

اگه دستور pip نصب نبود، از این دستور استفاده کنید:

 

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

منتظر قسمت بعدی باشید…

انتشار مطالب با ذکر نام و آدرس وب سایت سیسوگ، بلامانع است.

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

4 دیدگاه در “تشخیص اشیاء با استفاده از Raspberry Pi B+ 2014 – قسمت اول

  1. Avatar for مهدی شرفی مهدی شرفی گفت:

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

    1. Avatar for Sisoog Os Sisoog Os گفت:

      سلام دوست عزیز
      این نظر لطف شماست و ممنون بابت این همه انرژی

  2. Avatar for رضا مرتضوی رضا مرتضوی گفت:

    سلام
    خیلی عالی
    اگر ممکنه بفرمایید آیا میشه مراحل build را در یک کامیپوتر مجازی روی سیستم خودمان انجام دهیم و بعد image مربوط را به رزبری انتقال دهیم؟
    لطفا در مورد سوئیچ‌های مورد استفاده هم توضیح دهید و اینکه کار کلی toolchain‌ چی هست. در حد یک خط آموزنده خواهد بود.

    1. Avatar for علی اشتهاری پور علی اشتهاری پور گفت:

      سلام،
      بله در مقاله گفته‌ام که این کارو رو روی ماشین مجازی اوبونتو انجام میدم.
      این toolchain یعنی ابزار و کتابخانه‌های مورد نیاز برای Compile کردن برای معماری مورد نظر.

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

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *