11 KiB
گرفتن تصویر - رزبری پای
در این بخش از درس، شما یک حسگر دوربین به رزبری پای خود اضافه میکنید و تصاویر را از آن میخوانید.
سختافزار
رزبری پای به یک دوربین نیاز دارد.
دوربینی که استفاده میکنید ماژول دوربین رزبری پای است. این دوربین برای کار با رزبری پای طراحی شده و از طریق یک کانکتور اختصاصی به آن متصل میشود.
💁 این دوربین از رابط سریال دوربین، یک پروتکل از اتحاد پردازنده صنعت موبایل که به MIPI-CSI معروف است، استفاده میکند. این یک پروتکل اختصاصی برای ارسال تصاویر است.
اتصال دوربین
دوربین میتواند با استفاده از یک کابل نواری به رزبری پای متصل شود.
وظیفه - اتصال دوربین
-
رزبری پای را خاموش کنید.
-
کابل نواری که همراه دوربین است را به دوربین متصل کنید. برای این کار، به آرامی گیره پلاستیکی مشکی در نگهدارنده را بکشید تا کمی بیرون بیاید، سپس کابل را در سوکت قرار دهید، به طوری که سمت آبی کابل به طرف دور از لنز و نوارهای فلزی به سمت لنز باشند. وقتی کابل کاملاً وارد شد، گیره پلاستیکی مشکی را به جای خود فشار دهید.
میتوانید یک انیمیشن که نحوه باز کردن گیره و قرار دادن کابل را نشان میدهد در مستندات شروع کار با ماژول دوربین رزبری پای پیدا کنید.
-
کلاهک Grove Base را از رزبری پای جدا کنید.
-
کابل نواری را از شکاف دوربین در کلاهک Grove Base عبور دهید. مطمئن شوید که سمت آبی کابل به سمت پورتهای آنالوگ با برچسب A0، A1 و غیره باشد.
-
کابل نواری را در پورت دوربین روی رزبری پای قرار دهید. دوباره، گیره پلاستیکی مشکی را بالا بکشید، کابل را وارد کنید، سپس گیره را به جای خود فشار دهید. سمت آبی کابل باید به سمت پورتهای USB و اترنت باشد.
-
کلاهک Grove Base را دوباره نصب کنید.
برنامهنویسی دوربین
اکنون میتوانید رزبری پای را برای استفاده از دوربین با استفاده از کتابخانه پایتون PiCamera برنامهنویسی کنید.
وظیفه - فعال کردن حالت دوربین قدیمی
متأسفانه با انتشار سیستمعامل Bullseye رزبری پای، نرمافزار دوربینی که همراه سیستمعامل بود تغییر کرد، به این معنی که به طور پیشفرض PiCamera دیگر کار نمیکند. یک جایگزین به نام PiCamera2 در دست توسعه است، اما هنوز آماده استفاده نیست.
فعلاً میتوانید رزبری پای خود را به حالت دوربین قدیمی تنظیم کنید تا PiCamera کار کند. سوکت دوربین نیز به طور پیشفرض غیرفعال است، اما فعال کردن نرمافزار دوربین قدیمی به طور خودکار سوکت را فعال میکند.
-
رزبری پای را روشن کنید و منتظر بمانید تا بوت شود.
-
VS Code را اجرا کنید، یا مستقیماً روی رزبری پای یا از طریق افزونه Remote SSH متصل شوید.
-
دستورات زیر را از ترمینال اجرا کنید:
sudo raspi-config nonint do_legacy 0 sudo reboot
این دستور یک تنظیم را برای فعال کردن نرمافزار دوربین قدیمی تغییر میدهد، سپس رزبری پای را ریبوت میکند تا این تنظیم اعمال شود.
-
منتظر بمانید تا رزبری پای ریبوت شود، سپس VS Code را دوباره اجرا کنید.
وظیفه - برنامهنویسی دوربین
دستگاه را برنامهنویسی کنید.
-
از ترمینال، یک پوشه جدید در دایرکتوری خانگی کاربر
pi
به نامfruit-quality-detector
ایجاد کنید. یک فایل در این پوشه به نامapp.py
ایجاد کنید. -
این پوشه را در VS Code باز کنید.
-
برای تعامل با دوربین، میتوانید از کتابخانه پایتون PiCamera استفاده کنید. بسته Pip مربوط به این کتابخانه را با دستور زیر نصب کنید:
pip3 install picamera
-
کد زیر را به فایل
app.py
خود اضافه کنید:import io import time from picamera import PiCamera
این کد برخی از کتابخانههای مورد نیاز، از جمله کتابخانه
PiCamera
را وارد میکند. -
کد زیر را در ادامه اضافه کنید تا دوربین را مقداردهی اولیه کنید:
camera = PiCamera() camera.resolution = (640, 480) camera.rotation = 0 time.sleep(2)
این کد یک شیء PiCamera ایجاد میکند و وضوح تصویر را به 640x480 تنظیم میکند. اگرچه وضوحهای بالاتر (تا 3280x2464) پشتیبانی میشوند، اما طبقهبندیکننده تصویر روی تصاویر بسیار کوچکتر (227x227) کار میکند، بنابراین نیازی به گرفتن و ارسال تصاویر بزرگتر نیست.
خط
camera.rotation = 0
چرخش تصویر را تنظیم میکند. کابل نواری از پایین دوربین وارد میشود، اما اگر دوربین شما برای راحتتر نشانهگیری به سمت شیء مورد نظر چرخانده شده باشد، میتوانید این خط را به تعداد درجههای چرخش تغییر دهید.برای مثال، اگر کابل نواری را از بالای چیزی آویزان کنید تا در بالای دوربین قرار گیرد، چرخش را به 180 تنظیم کنید:
camera.rotation = 180
دوربین چند ثانیه طول میکشد تا راهاندازی شود، به همین دلیل خط
time.sleep(2)
وجود دارد. -
کد زیر را در ادامه اضافه کنید تا تصویر را به صورت دادههای باینری ذخیره کنید:
image = io.BytesIO() camera.capture(image, 'jpeg') image.seek(0)
این کد یک شیء
BytesIO
برای ذخیره دادههای باینری ایجاد میکند. تصویر به صورت یک فایل JPEG از دوربین خوانده شده و در این شیء ذخیره میشود. این شیء یک نشانگر موقعیت دارد تا بداند در کجای داده قرار دارد، بنابراین خطimage.seek(0)
این موقعیت را به ابتدای داده بازمیگرداند تا تمام دادهها بعداً خوانده شوند. -
در ادامه، کد زیر را برای ذخیره تصویر در یک فایل اضافه کنید:
with open('image.jpg', 'wb') as image_file: image_file.write(image.read())
این کد یک فایل به نام
image.jpg
را برای نوشتن باز میکند، سپس تمام دادهها را از شیءBytesIO
خوانده و در فایل مینویسد.💁 میتوانید تصویر را مستقیماً در یک فایل ذخیره کنید به جای استفاده از شیء
BytesIO
با ارسال نام فایل به فراخوانیcamera.capture
. دلیل استفاده از شیءBytesIO
این است که بعداً در این درس میتوانید تصویر را به طبقهبندیکننده تصویر خود ارسال کنید. -
دوربین را به سمت چیزی نشانه بگیرید و این کد را اجرا کنید.
-
یک تصویر گرفته شده و به عنوان
image.jpg
در پوشه فعلی ذخیره میشود. این فایل را در کاوشگر VS Code خواهید دید. فایل را انتخاب کنید تا تصویر را مشاهده کنید. اگر نیاز به چرخش دارد، خطcamera.rotation = 0
را بهروزرسانی کنید و دوباره عکس بگیرید.
💁 میتوانید این کد را در پوشه code-camera/pi پیدا کنید.
😀 برنامه دوربین شما موفقیتآمیز بود!
سلب مسئولیت:
این سند با استفاده از سرویس ترجمه هوش مصنوعی Co-op Translator ترجمه شده است. در حالی که ما تلاش میکنیم دقت را حفظ کنیم، لطفاً توجه داشته باشید که ترجمههای خودکار ممکن است شامل خطاها یا نادرستیها باشند. سند اصلی به زبان اصلی آن باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حساس، ترجمه حرفهای انسانی توصیه میشود. ما مسئولیتی در قبال سوء تفاهمها یا تفسیرهای نادرست ناشی از استفاده از این ترجمه نداریم.