حس بینایی چه تاثیری در تصمیمات و اندازهگیریهای ما دارد؟ شاید اغراق نباشد اگر بگوییم دوربین برای وسایل الکترونیکی مانند چشم برای انسانها عمل میکند. در واقع با استفاده از تصاویر میتوانید درک عمیق و بالاتری از محیط اطراف خود داشته باشید. این ویژگی در پروژههای رباتیکی، بهخصوص هوش مصنوعی کاربرد فراوانی دارد. پس توانایی کار کردن با تصاویر میتواند یک قابلیت بسیار مهم و کاربردی تلقی شود. اما صرف نظر از پروژههای سطح بالا، کار کردن با دوربین همیشه جذاب است. عکس برداری، فیلمبرداری، Time-Lapse و ساخت یک دوربین مدار بستهی آنلاین که از هرجایی توسط اینترنت بتوانید تصاویر آن را مشاهده کنید، به خودی خود بسیار جالب است. (شاید بگی دوربین و Webcam توی بازار زیاده! ولی این که خودت بسازی یه چیز دیگس!) اگر بدانید انجام این کارها با رزبریپای مثل آب خوردن است و فقط لازم دارید چند دقیقه روی آن وقت بگذارید، جالبتر هم میشود. پس با من همراه باشید تا در عرض چند دقیقه تمام موارد زیر را با هم انجام بدیم:
- آموزش کار با دوربین رزبریپای با استفاده از لینوکس (فیلمبرداری و عکسبرداری)
- آموزش کار با دوربین رزبریپای با استفاده از پایتون (فیلمبرداری و عکسبرداری)
- آموزش ساخت ویدئوی Time-Lapse با استفاده از رزبریپای
- مشاهدهی زندهی تصویر دوربین با لپتاپ و موبایل از طریق شبکهی محلی (Local)
- مشاهدهی زندهی تصویر دوربین با لپتاپ و موبایل از طریق اینترنت در هر نقطه از جهان! (بدون نیاز به Port Forwarding)
- آموزش ساخت دوربین حساس به حرکت با استفاده از کتابخانهی Motion
قطعات مورد نیاز:
برد رزبریپای
ماژول دوربین رزبریپای
کارت حافظه SD CARD با ظرفیت حداقل 8 GB
مقدمه: مشخصات دوربین
دوربینهای رزبریپای بهصورت رسمی در دو نسخهی ۵ (در سال ۲۰۱۳) و ۸ مگاپیکسلی (در سال ۲۰۱۶( توسط شرکت رزبریپای به بازار معرفی شدند. این دوربینها کاملاً با بردهای رزبریپای سازگار بوده و به سادگی با دستوراتی که در ادامه معرفی میکنیم، راهاندازی میشوند. از ویژگیهای این ماژول میتوان به ابعاد کوچک ( ۹*۲۴*۲۵ میلیمتر) و وزن سبک آن ( تقریباً ۳ گرم !!!) اشاره کرد که این دوربین را برای انجام انواع پروژهها، بهخصوص رباتیک بسیار ایدهآل میکند. اما جالب است بدانید طبق اطلاعات ارائه شده توسط رزبریپای، ار این محصولات بیشتر برای ساخت سیستمهای امنیتی خانهها (البته بیشتر بهصورت DIY) و همچنین تصویربرداری در محیط زیست استفاده شده است. خب این یعنی کاربرد دوربینها فقط به پروژههای رباتیکی و دانشگاهی محدود نمیشود و هرکسی به سادگی میتواند ار آن برای عملی کردن ایدههای خلاقانهی خود استفاده کند. قبل از این که سراغ آموزش بریم، اجازه بدید در جدول زیر مشخصات این دوربینها را بررسی کنیم:
Camera Module V2 |
Camera Module V1 |
مدل |
20mm * 25 mm * 9 mm |
20mm * 25 mm * 9 mm |
اندازه |
3g |
3g |
وزن |
8 Megapixels |
5 Megapixels |
کیفیت |
3280 * 2464 Pixels |
2592 * 1944 Pixels |
رزولوشن |
1080p @ 30fps, 720p @ 60fps and 640x480p 60/90fps |
1080p @ 30fps, 720p @ 60fps and 640x480p 60/90fps |
فیلمبرداری |
علاوهبر مدلهای بالا، نسخهی Pi NoIR Camera هم وجود دارد که برای تصویربرداری در محیطهای کم نور مناسب است. این دوربین بین طرفداران جانوران و محیط زیست بسیار محبوب بوده و ار آن برای مانیتور کردن فعالیت حیوانات و گیاهان در محیط زیست و حتی منازل، استفاده میشود. خب کمکم بریم سراغ نصب و راهاندازی !
چطور دوربین را به برد وصل کنم؟
یکی از ویژگیهای برد و دوربین رزبریپای، راهاندازی و نصب بسیار سادهی آنها است. برای این کار کافیست:
- ابتدا لبههای پلاستیکی پورت CSI را طبق شکل زیر بالا بکشید.
- سپس روبان اتصال دوربین را داخل پورت قرار دهید.
- لبه را به پایین فشار دهید تا روبان در پورت محکم شود.
توجه کنید که روبان را مطابق شکل، از سمت صحیح وارد پورت کنید (نوار آبی به سمت پورت USB و Ethernet قرار بگیرد). با توجه به این که پورت DSI و CSI به هم مشابهاند، دقت کنید که روبان را به DSI وصلنکنید.
با توجه به این که برد رزبریپای بهصورت خام و بدون قاب تولید میشود، بهمنظور جلوگیری از آسیبهای ناشی از تخلیهی الکترو استاتیکی (ESD)، برای نصب اتصالات، برد را خاموش کرده و فقط از لبههای آن در دست خود بگیرید.
پس از نصب سختافزار، نوبت به تنظیمات نرمافزاری میرسد. برای این کار میتوانید از بخش Raspberry Pi Configuration در منوی start و در Interfaces، رابط دوربین را فعال کنید.
در این آموزش فرض شده که رزبریپای شما از قبل دارای سیستمعامل است. در غیر این صورت برای نصب سیستمعامل میتوانید به آموزش راهاندازی رزبریپای ۴ با نصب سیستمعامل رزبین مراجعه کنید.
همچنین میتوانید از طریق ترمینال لینوکس، برای ورود به تنظیمات و Configuration برد، دستور زیر را وارد کنید:
$ sudo raspi-config
سپس از بخش Interfacing Options، Camera را انتخاب و آن را فعال کنید. برای اعمال تنظیمات، بهتر است برد را یک بار راهاندازی مجدد کنید. پس از انجام تنظیمات بالا، دوربین شما فعال است. حالا ببینیم با چه دستوراتی میتوانیم از آن استفاده کنیم.
قبل ازاین که از دوربین استفاده کنید، با استفاده از raspi-config وارد منوی Advanced Options شده و با انتخاب Expand Filesystem، حافظهی کافی برای ذخیرهی فیلم و عکسها آزاد کنید.
آموزش استفاده از دوربین رزبریپای با استفاده از Command-Line لینوکس
عکس از رزبری پای و دوربین و لینوکس
برای عکسبرداری و فیلمبرداری با ماژول دوربین، دو راه داریم: از دستورات لینوکس استفاده کنیم، یا کد پایتون بنویسیم. در اینجا ابتدا کار را با دستورات خط فرمان لینوکس شروع میکنیم. این دستورات نسبت به پایتون سادهتر بوده و به راحتی توسط یک خط میتوانید از سوژهی مورد نظر خود، عکس یا فیلم بگیرید. برای این کار دو دستور معروف raspistill و raspivid را به شما معرفی میکنم.
اگر با لینوکس آشنا نیستید، نگران نباشید! کافیست بخش آموزش لینوکس برای کار با رزبریپای را مطالعه کنید.
raspistill: برای عکسبرداری با دوربین رزبریپای از دستور پرکاربرد و معروف raspistill استفاده میشود. این دستور دارای سوییچهای مختلفی است که در ادامه تعدادی از آنها را بررسی میکنیم. برای اطلاعات بیشتر و مشاهدهی راهنمای کامل این دستور میتوانید raspistill را به تنهایی اجرا کنید:
$ raspistill
ذخیرهی عکس : با توجه به راهنمای rasistill، برای گرفتن یک عکس ساده و ذخیرهی آن میتوانید از دستور زیر استفاده کنید:
$ raspistill -o نام و مسیر ذخیرهی فایل عکس
برای مثال توجه شما را به عکس پرسنلی جغد دانای صنعت بازار که با پرینتر سه بعدی ساختیم، جلب میکنم:
$ raspistill -o ~/Pictures/owl.jpg
Command بالا بهصورت خودکار پس از ۵ ثاتیه عکسبرداری میکند.
برای باز کردن فایل تصویر در Command-Line میتوانید دستور نام و آدرس فایل تصویری $ xdg-open را اجرا کنید. البته برای مشاهدهی فایلهای گرافیکی باید با VNC یا LCD به دسکتاپ سیستمعامل دسترسی داشته باشید.
ایجاد تاخیر : در صورت نیاز میتوانید زمان تاخیر را با سوییچ -t تغییر دهید:
$ raspistill -t 10000 -o ~/Pictures/owl.jpg
این زمان بر حسب میلی ثانیه محاسبه میشود. بنابراین در مثال بالا، پس از ۱۰ ثانیه تاخیر، عکسبرداری انجام میشود.
چرخش تصویر: برای Rotate کردن تصویر میتوانید از سوییچ -rot با فرمت زیر استفاده کنید. با استفاده از این دستور، تصویر مورد نظرتان را میتوانید ۰، ۹۰، ۱۸۰ و ۲۷۰ درجه بچرخانید.
$ raspistill -rot زاویهی مورد نظر -o ~/Pictures/owl.jpg
تغییر سایر تصویر : از دو سوییچ -w و -h برای تغییر سایز و اندازهی تصاویر گرفته شده استفاده میشود (-w برای width و -h برای height). برای مثال میخواهیم تصویری با ابعاد 640 * 480 ایجاد کنیم:
$ raspistill -w 640 -h 480 -o ~/Pictures/owl.jpg
تغییر فرمت ذخیرهسازی : با استفاده از سوییچ -e میتوانید فرمت ذخیرهسازی تصاویر را انتخاب کنید.
$ raspistill -o ~/Pictures/Test.jpg -e jpg
$ raspistill -o ~/Pictures/Test.bmp -e bmp
$ raspistill -o ~/Pictures/Test.png -e png
$ raspistill -o ~/Pictures/Test.gif -e gif
تنظیم کیفیت تصویر : q معرف Quality بوده و با استفاده از آن، میتوان کیفیت تصویر را بین ۰ تا ۱۰۰ تنظیم کرد. برای مثال، از جغد پیر با کیفیت 10 عکس میگیریم:
$ raspistill -o ~/Pictures/owl.jpg -q 10
هرچه کیفیت پایینتری انتخاب کنید، عکس شما حجم کمتری از حافظه را اشغال میکند.
تنظیم کنتراست تصویر: با سویچ -co میتوانید Contrast تصویر را بین ۱۰۰- تا ۱۰۰ تغییر دهید. برای مثال ما در اینجا contrast را روی 70 تنظیم میکنیم:
$ raspistill -o ~/Pictures/owl.jpg -co 70
تنظیم روشنایی و اشباع تصویر: سوییچ -br معرف Brightness و -sa معرف Saturation تصویر است. مقدار این پارامترها را میتوانید بین ۰ تا ۱۰۰ تغییر دهید.
تعیین محیط و شرایط تصویربرداری: دوربینهای رزبریپای شاید ساده به نظر برسند، اما بیشتر قابلیتهای یک دوربین حرفهای و موبایل را میتوانید با آنها اجرا کنید. یکی از این تواناییها، تنظیم پارامترهای تصویر با توجه به محیط و شرایط تصویربرداری است (Exposure). این کار با تعیین پارامتر سوییچ -ex انجام میشود. این پارامتر میتواند snow برای هوای برفی، night برای عکاسی در شب و ... تنظیم شود. برای آشنایی با exposure های مختلف، به راهنمای raspistill مراجعه کنید. برای مثال این دستور را برای حالت برفی اجرا میکنیم:
$ raspistill -o ~/Pictures/owl.jpg -ex snow
این پارامتر را میتوانید روی auto قرار دهید تا برد متناسب با نور محیط، -ex مناسب را اعمال کند.
اعمال Effect: رسیدیم به جذابترین سوییچ دوربین یعنی effect ها. بله با استفاده از raspistill میتوانید Effectهای مختلفی را روی تصویر خود پیاده کنید. این کار با سوییچ -ifx انجام میشود. برای مثال در اینجا effectهای sketch و negative را روی جغد دانا پیاده میکنیم. برای آشنایی با effectهای بیشتر، raspistill را اجرا و راهنمای آن را مطالعه کنید.
$ raspistill -o ~/Pictures/owl.jpg -ifx negative
$ raspistill -o ~/Pictures/owl.jpg -ifx sketch
برچسب تاریخ و زمان: از سویچ -a 4 برای نمایش زمان، -a 8 برای نمایش تاریخ و -a 12 برای نمایش هر دو روی تصاویر استفاده میشود. برای مثال از -a 12 برای نمایش زمان و تاریخ عکسبرداری استفاده میکنیم.
$ raspistill -o ~/Pictures/owl.jpg -a 12
فرمت تاریخ بهصورت سال/روز/ماه میباشد. در صورت نیاز میتوانید تاریخ یا هر متن دیگری را با سوییچ -a بهصورت دستی وارد کنید. مثال:
$ raspistill -o ~/Pictures/owl.jpg -a “SanatBazar-1398/9/1”
شات با Enter : با اعمال سوییچ -k در صورتی که توسط کیبورد، کلید Enter را فشار دهید، عکاسی انجام میشود. البته برای این کار باید تاخیر در عکسبرداری را روی بینهایت تنظیم کنید. میتوانید این کار را با -t 0 انجام دهید.
$ raspistill -o ~/Pictures/owl.jpg -t 0 -k
خب تا اینجا با دستور raspistill و تعدادی از سویچهای مهم و کاربردی آن آشنا شدیم. برای اطلاعات بیشتر میتوانید به Help این دستور مراجعه کنید. از اینجا به بعد میخواهم دستور raspivid را به شما معرفی کنم.
raspivid: مشابه raspistill، برای فیلمبرداری با رزبریپای، از دستور raspivid استفاده میشود. در اینجا هم با وارد کردن raspivid بهتنهایی، میتوانید راهنمای این دستور و سوییچهای آن را مطالعه کنید.
ذخیرهی ویدئوی خروجی : مشابه بخش قبلی، از سوییچ -o برای ذخیرهی فیلم با پسوند h264. استفاده میشود:
$ raspivid -o نام و آدرس فایل ویدئو
در حالت عادی و بدون سوییچ، این دستور ۵ ثانیه فیلم گرفته و در آدرس وارد شده ذخیره میکند.
تنظیم مدت زمان فیلمبرداری : با استفاده از سوییج -t میتوانید مدت فیلمبرداری را تغییر دهید(برحسب میلیثانیه)
تنظیم bitrate: از سوییچ -b برای تغییر bitrate تصویر برداری استفاده میشود. هرچه bitrate شما بیشتر باشد، ویدئو از کیفیت و حجم بالاتری برخوردار است. به طور معمول از برای فایلهای 1080p30 از نرخ 15Mbit/s استفاده میشود. در حالت حداکثر، bitrate را میتوانید روی 25Mbit/s تنظیم کنید اما عملاً از 17Mbit/s بیشتر، تغییر قابل ملاحظهای حس نمیشود. بهعنوان مثال bitrate را روی 10Mbit/s تنظیم میکنیم:
$ raspivid -o test.h264 -b 10000000
تغییر سایز تصویر : مشابه raspistill، از سوییچهای -w و -h برای تنظیم ابعاد تصویر استفاده میشود.
تنظیم frame rate : برای تنظیم frame rate از سوییچ -fps استفاده میشود. این مقدار میتواند بین 2 fps تا 30fps متغیر باشد. بهصورت استاندارد برای نمایش فیلمها و برنامههای تلوزیونی از نرخ 24 fps استفاده میشود. هرچه مقدار frame rate شما بیشتر باشد، تصویر شما به slow motion نزدیکتر است.
تصویر برداری با Enter: در صورت استفاده از -k، با هر باز زدن کلید Enter، ضبط ویدئو شما pause و play میشود. برای توقف ضبط باید x را وارد و سپس Enter را بزنید.
خب تا اینجا با دستورات لینوکس برای کار با دوربین رزبریپای آشنا شدیم. در این قسمت سعی کردم تا حد امکان ویژگیهای مهم و کاربردی کار با این ماژول را به شما معرفی کنم. اما همانطور که گفته شد، در صورت نیاز میتوانید برای آشنایی بیشتر با سوییچها و Optionهای دو دستور raspistill و raspivid به Help آنها مراجعه کنید. در ادامه قصد داریم نحوهی ارتباط با دوربین را از طریق برنامهنویسی و کدهای پایتون بررسی کنیم.
آموزش استفاده از دوربین رزبریپای با استفاده از پایتون
عکس از رزبری پای و دوربین و پایتون
اگر فقط قصد دارید عکاسی و فیلمبرداری کنید، دستورات گفته شده کار شما را راه میاندازد. اما اگر از دوربین برای انجام پروژههای حرفهای مانند رباتیک، پردازش تصویر و هوش مصنوعی میخواهید استفاده کنید، بدون شک استفاده از پایتون پیشنهاد بهتری است. چرا که با همان محیط و زبان کدنویسی، میتوانید از دوربین استفاده کرده و نتایج را با دستورات پایتون پردازش کنید.
اگر پایتون بلد نیستید هم نگران نباشید! در بخش آموزش پایتون برای کار با رزبریپای هر آنچه نیاز دارید، آموزش داده شده است.
مشاهدهی پیشنمایش: در قدم اول میخواهیم پیشنمایشی از تصویر دوربین بدون گرفتن عکس ببینیم. پس ابتدا با دستور $ nano یک فایل متنی با نام camera.py ایجاد میکنیم. سپس دستورات زیر را در آن مینویسیم (برای مشاهدهی این پیشنمایش باید برد رزبریپای را مستقیم به مانیتور یا LCD متصل کنید. در غیر این صورت تصویری مشاهده نخواهید کرد):
form picamera import PiCamera
import time
c=PiCamera()
c.start_preview()
time.sleep(5)
c.stop_preview()
از این پس دستورات جدید بهصورت Bold شده نشان داده میشوند.
برای راهاندازی و استفاده از دوربین رزبریپای باید از شیء PiCamera در کتابخانهی picamera استفاده کنید. پس در قدم اول این کتابخانه را فراخوانی میکنیم. همچنین برای ایجاد تاخیر بین دستورات، به کتابخانهی time نیاز دارید. سپس متغیر دلخواه c را بهعنوان متغیر دوربین در نظر گرفته و دستورات لازم جهت باز و بسته کردن پنجرهی پیشنمایش را وارد میکنیم. پس از اجرای دستور $ python camera.py، پنجرهی پیش نمایش به مدت ۵ ثانیه نمایش داده میشود.
عکاسی با پایتون: در مرحلهی بعدی قصد داریم کد گرفتن یک عکس ساده را با پایتون بنویسیم:
form picamera import PiCamera
import time
c=PiCamera()
c.capture(‘test.jpg’)
همانطور که مشاهده میکنید، با دستور capture، تصویر مورد نظر را گرفته و با نام test.jpg ذخیره کردیم.
تغییر رزولوشن تصویر: در صورت نیاز میتوانید رزولوشن تصویر را با دستور زیر تغییر دهید:
form picamera import PiCamera
import time
c=PiCamera()
c.resolution=(1024,768)
c.capture(‘test.jpg’)
برای اعمال تغییرات رزولوشن، کنتراست و ...، باید کد آنها را قبل از capture() وارد کنید. در غیر این صورت اثر آنها را مشاهده نخواهید کرد. بنابراین ابتدا تغییرات را وارد کنید سپس کد تصویربرداری را اعمال کنید.
برای مثال ما در اینجا دستور بالا را برای عکس گرفتن از آدم فضایی صنعت بازار اجرا کردیم:
چرخش تصویر: با استفاده از rotation میتوانید تصویر مورد نظر را rotate کنید:
form picamera import PiCamera
import time
c=PiCamera()
c.rotation(180)
c.capture(‘test.jpg’)
مقدار چرخش را میتوانید ۰، ۹۰، ۱۸۰ یا ۲۷۰ تعیین کنید.
تغییر سایز تصویر: در کنار گرفتن عکس توسط دستور capture() میتوانید Option تغییر سایز تصویر را نیز به آن اضافه کنید. برای مثال اندازهی تصویر خروجی را 240*320 در نظر میگیریم:
form picamera import PiCamera
import time
c=PiCamera()
c.capture(‘test.jpg’,resize=(320,240))
تغییر فرمت ذخیرهسازی: از دیگر قابلیتهای دستور capture()، تغییر فرمت ذخیرهسازی است. برای این کار کافیست مشابه دستور بالا به جای resize، فرمت را وارد کنید:
form picamera import PiCamera
import time
c=PiCamera()
c.capture(‘test.jpg’,format=’png’)
سایر پسوندهای ذخیرهسازی: jpeg, gif, bmp, rgb, rgba, yuv, bgr, bgra, raw
افزودن متن به تصویر: برای این کار کافیست کد annotate_text(‘….’) را اضافه کنید. علاوهبر این، با دستوراتی که در کد زیر میبینید، رنگ متن، رنگ پسزمینهی متن و اندازهی آن را نیز تغییر دادیم. برای تغییر رنگ لازم است Color را از کتابخانهی picamera، import کنید:
from picamera import PiCamera, Color
from time import sleep
c = PiCamera()
c.annotate_background = Color('black')
c.annotate_foreground = Color('white')
c.annotate_text_size = 20
c.annotate_text = "SanatBazar"
c.capture('/home/pi/Pictures/python/test.jpg')
تنظیم کنتراست، روشنایی و اشباع: برای تنظیم Contrast، Brightness و Saturation تصویر از دستور زیر استفاده میکنیم:
form picamera import PiCamera
import time
c=PiCamera()
c.contrast = 50
c.brightness = 20
c.saturation = 10
c.annotate_background = Color('black')
c.annotate_foreground = Color('white')
c.annotate_text_size = 20
c.annotate_text = "SanatBazar"
c.capture('/home/pi/Pictures/python/test.jpg')
افزودن Effect : برای این منظور کافیست دستور زیر را به کد خود اضافه کنید:
form picamera import PiCamera
import time
c=PiCamera()
c.image_effect=’نام افکت’
c.capture('/home/pi/Pictures/python/test.jpg')
در اینجا ما از افکت watercolor استفاده کردیم.
شما میتوانید به جای آن از افکتهای زیر هم استفاده کنید:
None, negative, solarize, sketch, denoise, emboss, oilpaint, hatch, gpen, pastel, watercolor, film, blur, saturation, colorswap, washedout, posterise, colorpoint, colorbalance, cartoon, deinterlace1, deinterlace2
تنظیم محیط و شرایط تصویربرداری: مشابه raspistill توسط پایتون نیز میتوانید exposure تصویربرداری را تنظیم کنید. برای این کار کافیست دستورات زیر را در رزبریپای خود اجرا کنید. ما در اینجا برای مثال از exposure برفی استفاده میکنیم.
form picamera import PiCamera
import time
c=PiCamera()
c,exposure_mode = ‘snow ’
c.capture('/home/pi/Pictures/python/test.jpg')
Exposureهای قابل استفاده:
off, night, nightpreview, blacklight, spotlight, sports, snow, beach, verylong, dixedfps, antishake, firework
فیلمبرداری با دستورات پایتون: خب پس از آشنایی با دستورات پایتون برای عکاسی، نوبت به بررسی دستورات فیلمبرداری با ماژول دوربین میرسد. مشابه عکاسی، فیلمبرداری با این روش هم کار سختی نیست. برای یک فیلمبرداری ساده از دستورات زیر استفاده میکنیم:
from picamera import PiCamera
import time
c=PiCamera()
c.start_recording(‘test.h264’)
time.sleep(10)
c.stop_recording( )
با این دستور، برد رزبریپای به مدت ۱۰ ثانیه فیلمبرداری میکند.
تغییر bitrate: مشابه raspivid با اضافه کردن ویژگی bitrate به دستور start_recording، میتوانید bitrate فیلمبرداری خود را تنظیم کنید. بهعنوان مثال این مقدار را روی 10 Mbps تنظیم میکنیم:
from picamera import PiCamera
import time
c=PiCamera()
c.start_recording(‘test.h264’,bitrate=10000000)
time.sleep(10)
c.stop_recording( )
تغییر frame rate: برای ایجاد ویدئوهای سریع یا Slow Motion، کافیست framerate را مطابق دستور زیر تغییر دهید:
from picamera import PiCamera
import time
c=PiCamera()
c.framerate = 24
c.start_recording(‘test.h264’,bitrate=10000000)
time.sleep(10)
c.stop_recording( )
اولین پروژه: تایم لپس (Time Lapse) با رزبریپای
پس از این که با دستورات لینوکس و پایتون برای کار با دوربین رزبریپای آشنا شدید، میخواهیم با استفاده از چیزهایی که تا الان یاد گرفتیم، چند پروژهی ساده و جذاب انجام بدیم. در اولین پروژه قصد داریم نحوهی ایجاد تایم لپس با دوربین رزبریپای را با هم بینیم. تایم لپس در انگلیسی به معنای گذر زمان است و از آن برای فیلمبرداری سریع از فعالیتهای بسیار کند استفاده میشود. به بیان ساده، تایم لپس را میتوان معکوس Slow Motion در نظر گرفت. حتماً تا به حال تصاویر زیبای طلوع و غروب خورشید، حرکت ابرها، جابهجایی شب و روز یا رشد یک گیاه را در مستندهای طبیعت و حیات وحش دیدید. با توجه به این که سرعت این پدیدهها بسیار کند است، فیلمبرداری معمولی از آنها نیز بسیار طولانی و حجیم خواهد بود. بنابراین بهجای فیلمبرداری، در بازههای زمانی مناسب از آنها عکسبرداری شده و در نهایت، تصاویر با سرعت بالایی مانند یک فیلم سریع نمایش داده میشوند. با استفاده از رزبریپای، گرفتن یک فیلم نایم لپس مثل آب خوردنه! پس با یاد گرفتن آن میتوانید تصاویر جالب و خلاقانهای تولید کنید.
در ادامه فرض کردیم که شما مطالب ابتدای این صفحه را مطالعه و رابط دوربین را فعال کردهاید.
برای ایجاد تایم لپس، از دستور raspistill استفاده میکنیم. راه حل دیگر استفاده از raspivid با frame rate بسیار پایین است. در آن صورت به حافظهی بیشتری نیاز دارید. این در حالی است که با raspistill حجم نهایی بسیار کمتر بوده و کنترل بیشتری روی زمان عکسبرداری خود دارید. اجازه بدید نحوهی استفاده از این دستور را دز مثال زیر ببینیم:
$ raspistill -t 300000 -tl 500 -o -bm image%04d.jpg
سوییچ -t مدت زمان عکسبرداری و سوییچ -tl گام عکسبرداری را مشخص میکند. به عبارت دیگر، در مثال بالا هر۵۰۰ میلی ثانیه تا مدت ۳۰۰۰۰۰ میلی ثانیه (معادل ۵ دقیقه) عکسبرداری انجام میشود. نکتهی مهم، نحوهی نامگذاری تصاویر است که در مرحلهی بعدی به ما کمک خواهد کرد. در واقع عبارت %04d در image%04d.jpg تعیین میکند که نامگذاری تصاویر به ترتیب از image0001.jpg شروع شود. )عدد 4 تعداد ارقام را مشخص میکند. یعنی image%03d.jpg نامگذاری را با اعداد سه رقمی) انجام میدهد.
خب همانطور که در تصویر زیر مشاهده میکنید مطابق انتظار، دستور بالا ۶۰۰ عکس ایجاد کرده است. اما ما فیلم میخواستیم! برای تبدیل این عکسها به فیلم از پکیج ffmpegاستفاده میکنیم.
پس برای نصب و تبدیل، دستورات زیر را وارد کنید:
$ sudo apt-get install ffmpeg
$ ffmpeg -framerate 25 -start_number 5 -i image%04d.jpg time_lapse2.mp4
در دستور فوق، عکسهای گرفتهشده به یک فایل ویدئو به نام time_lapse2.mp4 با Frame Rate ۲۵، کیفیت 720p و فرمت .mp4 تبدیل میشوند. شما میتوانید کیفیت را با 1920:1080 روی 1080p تنظیم کنید.
دوربین مدار بسته: دسترسی از شبکهی داخلی
کار جالب دیگری که میتوان با رزبریپای و دوربین انجام داد، ایجاد یک دوربین مدار بسته برای مشاهدهی آنلاین تصاویر است. به طوری که اگر لپتاپ و رزبریپای شما به یک شبکه و مودم متصل باشند، به راحتی میتوانید تصاویر دوربین را به صورت زنده مشاهده و حتی ضبط کنید. برای این کار کافیست دستور زیر را در Command Line لینوکس وارد نمایید:
$ raspivid -o - -t 0 | cvlc -vvv stream:///dev/stdin –sout ‘#rtp{sdp=rtsp://:8554/}’ :demux=h264
ما در اینجا برای مشاهدهی تصویر خروجی از نرمافزار VLC استفاده میکنیم. شما میتوانید از هر Media Player دیگری که قابلیت Stream کردن تصاویر آنلاین را داشته باشد استفاده کنید. پس VLC را در لپتاپ خود باز کرده و از بخش Media، Open Network Stream را انتخاب کنید.
در مرحلهی بعدی کافیست ip رزبریپای خود را به شکل زیر وارد کنید:
rtsp://your ip:8554
با کلیک روی Play، تصویر دوربین نمایش داده میشود. با این کار میتوانید حیوانات خانگی، اتاقهای منزل یا کوچه و خیابان را زیر نظر بگیرید.
برای این کار از دستور raspivid استفاده کردیم. پس تمامی سوییچهای توضیح داده شده برای فیلمبرداری، در اینجا هم قابل استفاده هستند.
یکی از ویژگیهای بسیار جالب VLC، قابلیت ضبط تصاویر در حین مشاهدهی آنلاین آن است. برای این کار هم کافیست از بخش Playback گزینهی Record را انتخاب کنید. با زدن Stop هم میتوانید ضبط تصویر را متوقف کنید. فایل ضبط شده در My Computer (یا This PC) در فولدر Videos ذخیره میشود. از دوربین مدار بستهی خود لذت ببرید!
آموزش بالا فقط از شبکهی محلی و داخلی قابل اجراست. در ادامه روشی را بررسی میکنیم تا از هرجایی و با هر اینترنتی بتوانید به تصویر دوربین دسترسی داشته باشید!
دوربین مدار بسته: دسترسی از طریق اینترنت (از هرجایی که دلت خواست!)
خب میخواهیم یک پروژهی بسیار باحال و کاربردی انجام بدیم: از هرجایی که خواستی با لپتاپ یا گوشی به اینترنت وصل شو و تصویر دوربین رزبریپای را ببین! حتی اگر خواستی ضبط کن!! یک پروژهی بسیار جالب برای کارهای امنیتی و مچگیری!! برای انجام این کار هیچ نیازی به Port Forwarding و تنظیمات مودم و شبکه هم ندارید! اجازه بدید قدم به قدم با هم پیش بریم:
برای این کار ابتدا باید دوربین را به عنوان یک دیوایس USB به رزبریپای معرفی کنیم. (این کار برای اجرا شدن دستورات بعدی ضروری است) پس لازم است که دستور زیر را اجرا کنید:
$ sudo modprobe bcm2835-v4l2
برای اطمینان از درستی این کار، دستور زیر را اجرا کنید. اگر دستور به درستی اجرا شده باشد، باید خروجی video0 را ببینید.
$ ls /dev | grep vid
سپس دستورات زیر را برای نصب پکیج مورد نیاز اجرا کنید:
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install libjpeg8-dev imagemagick libv4l-dev
$ sudo apt-get install build-essential imagemagick libv4l-dev libjpeg-dev cmake -y
$ mkdir dataplicity
$ git clone https://github.com/jacksonliam/mjpeg-streamer.git
$ cd mjpeg-streamer/mjpeg-streamer-experimental
$ make
$ sudo make install
مراحل بالا تنها یک بار برای نصب پکیجهای مورد نیاز باید اجرا شوند. از این پس، هر بار برای Stream کردن تصویر دوربین کافیست مراحل زیر اجرا کنید:
$ cd ~/dataplicity/mjpeg-streamer/mjpg-streamer-experimental
$ sudo ./mjpeg_streamer -i “./input_uvc.so -f 10 -r 640*320 -n -y” -o “./output_http.so -w ./www -p 80
در صورت اجرای صحیح دستورات فوق، نتایج زیر را باید مشاهده کنید:
با تغییر سوییچهای -f (Frame Rate) و -r (Resolution) میتوانید سرعت و کیفیت تصویر را متناظر با سرعت اینترنت و نیاز خود تغییر دهید.
خب تا اینجا تصویر را روی اینترنت بارگذاری کردیم. در قدم بعدی برای مشاهدهی آن میخواهیم از سایت dataplicity استفاده کنیم. اگر مطالب قبلی ما را مطالعه کرده باشید، از این سایت و پکیج، قبلاً برای دسترسی به Command-Line رزبریپای از طریق اینترنت استفاده کردهایم. معرفی و آموزش استفاده از این پکیج در صفحهی آموزش اتصال به رزبری¬پای (Raspberry Pi) از هر نقطه در جهان بهطور مفصل موجود است. در اینجا با فرض نصب و آشنایی شما با این پکیج، قصد داریم از آن برای مشاهدهی تصویر دوربین استفاده کنیم. برای این کار کافیست به سایت dataplicity.com مراجعه و وارد حساب کاربری خود شوید. سپس برد رزبریپای را انتخاب کرده و قابلیت Wormhole را فعال کنید.
روی لینک تولید شده کلیک کنید تا وارد صفحهی زیر شوید. در صفحهی جدید، با انتخاب گزینهی Stream، میتوانید تصویر دوربین را بهصورت زنده مشاهده کنید. در صورت نیاز میتوانید نرمافزار dataplicity را روی موبایل خود نصب و تصویر دوربین را از طریق موبایل خود نیز دریافت کنید. با این کار در هر جایی تنها با دسترسی به اینترنت میتوانید فضای خانه یا محل کار خود را تماشا کنید!
میتوانید همزمان با مشاهده، تصویر را ضبط کنید، برای این کار مانند حالت Local از نرمافزار VLC استفاده کنید. در این صورت باید لینک Stream را از بخش VideoLAN، در Open Network Stream نرمافزار VLC، کپی کنید. نحوهی ضبط و مشاهدهی تصویر توسط VLC دقیقاً مشابه حالت Local است، با این تفاوت که به جای IP برد باید لینک موجود در VideoLAN را به VLC معرفی کنید.
تا اینجا با دستورات ماژول دوربین و نحوهی Stream تصاویر آن از طریق شبکهی محلی و اینترنت را دیدیم. در ادامه میخواهم شما را با پکیج مهم و کاربردی Motion آشنا کنم. با استفاده از آن میتوانید هر تغییر و حرکت ناگهانی را در تصویر تشخیص دهید. به چه دردی میخوره؟ میتوانید صحنهی ورود مجرم و اقدام او به جرم را با این پکیج تشخیص و ضبط کنید!
تشخیص حرکت در تصویر با استفاده از کتابخانهی Motion
آخرین و شاید امنیتیترین و جذابترین پروژهای که در این بخش، ساخت دوربین مدار بستهی حساس به حرکت با رزبریپای است. فکرش را بکنید در اتاق خود یک دوربین دارید که وقتی در خانه نیستید، اگر کسی وارد آنجا شد از او عکس بگیرد! شاید همهی ما از بچگی چنین ایدههای داشتهایم. اما همیشه تصور سخت بودن عملی کردن این ایدهها، مانع از انجام و ساخت آنها شده است. اینجا داستان فرق میکند. تا چند دقیقهی دیگر میبینید که این کارها اصلاً هم سخت نیست! برای ساخت این ایده مثل پروژههای قبلی، تنها از دوربین و برد رزبریپای استفاده میکنیم. تفاوت اصلی این پروژه با پروژههای قبلی، تشخیص حرکت در تصویر است که آن را به کمک کتابخانهی Motion انجام میدهیم. این کتابخانه اساساْ برای این کار ساخته شده و در صورت تشخیص حرکت میتواند دستور خاص و از پیش تعیین شدهای مانند آژیر کشیدن یا حتی ارسال SMS را فعال کند. برای نصب آن ابتدا دستور زیر را اجرا میکنیم:
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install motion
برای تنظیمات این کتابخانه، باید فایل Configuration آن را تغییر دهیم. ابتدا این فایل را باز میکنیم:
$ sudo nano /etc/motion/motion.conf
در صورت اجرای دستور بالا، صفحه زیر را مشاهده خواهید کرد:
در ادامه برخی از موارد مفید و کاربردی که میتوانید در این فایل پیکربندی تغییر دهید را بررسی میکنیم:
Width و height: از این دو گزینه میتوانید برای تنظیم ابعاد تصویر خود استفاده کنید.
Frame rate: حداکثر تعداد تصویری که در هر ثانبه گرفته میشود. این مقدار را میتوانید بین ۲ تا ۱۰۰ تصویر تنظیم کنید.
Brightness، Saturation، Contrast و Hue: پارامترهای تنظیم زوشنایی، اشباع، کنتراست و رنگ تصویر دوربین. در صورت نیاز میتوانید این مقادیر را بین ۰ تا ۲۵۵ تغییر دهید.
Area detect value: فرض کنید دوربین را جلوی درب منزل یا حیاط و پارکینگ خود قرار دادهاید. فکر میکنید چه مشکلی پیش خواهد آمد؟ با هر باد، درختان تکان خورده و دوربین با تشخیص حرکت آنها، دادهی ناخواستهای را ارسال میکند! برای حل این مشکل میتوانید حوزهی تشخیص حرکت را محدود کنید. در واقع این گزینه تصویر شما را به ۹ قسمت به شکل زیر تقسیم میکند و شما میتوانید هر قسمتی که مد نظرتان است، برای تشخیص حرکت، انتخاب کنید.
1 2 3
4 5 6
7 8 9
Quality: با این گزینه میتوانید کیفیت تصاویر ذخیره شده بین ۰تا ۱۰۰ انتخاب کنید.
Local_Motion_mode: با On کردن این گزینه میتوانید بخش حرکت کرده را با مربع سفید مشخص کنید.
Target_dir: تعیین محل ذخیرهسازی تصاویر. به صورت پیشفرض: /var/lib/motion
Stream_port: پورت ارسال تصاویر زنده روی اینترنت. این مقدار بهصورت پبشفرض روی 8081 تنظیم شده است.
on_motion_detected: این گزینه، همان بخشی است که تعیین میکنید پس از تشخیص حرکت، چه اتفاقی رخ دهد. برای این کار میتوانید یک فایل پایتون نوشته و آن را در این قسمت معرفی کنید. گزینههای بعدی مشابهاند. با این تفاوت که زمان اجرای فایل کد در آنها متفاوت است. این گزینهها به صورت on_event_end،On_event_start_ ، on_picture_save، ،on_area_detected ،on_movie_start ،on_movie_end ،on_camera_lost و on_camera_found.
برای تشخیص حرکت در منطقهی خاص (همون قضیهی باد و درخت و ...) فایل پایتون یا C++ خود را باید در on_area_detected معرفی کنید.
خب حالا که با تواناییهای این کتایخانه آشنا شدیم، بریم یک نمونه پروژه انجام بدیم. البته در اینجا فقط تعدادی از ویژگیهای پرکاربرد این کتابخانه آورده شده و شما میتوانید سایر ویژگیهای آن را هم بررسی کنید.
من در این پروژه تنظیمات زیر را در نظر گرفتهام:
daemon on
width 640
height 480
framerate 25
locate_motion_mode on
target_dir /home/pi/camera/motion
stream_localhost off
خب همانطور که میبینید، ابتدا یک دایرکتوری برای ذخیرهی فیلمها در ~/camera/motion ایجاد میکنم. سپس تنظیمات دلخواه را اعمال و از آنجایی که میخواهم تصویر را از طریق اینترنت هم مشاهده کنم، stream_localhost را روی off قرار میدهم. پس از انجام تغییرات بالا در فایل پیکربندی، برد را reboot کنید تا تغییرات اعمال شوند. پس از boot شدن، دستور زیر را برای اجرای motion اجرا میکنیم:
$ sudo motion
سپس برای مشاهدهی تصویر کافیست ip برد و port تعیین شده را در مرورگر خود وارد کنید. این کار را میتوانید مشابه پروژههای قبلی در نرمافزار VLC هم انجام بدید.
همانطور که مشاهده میکنید، بخش متحرک تصویر با مربع سفید مشخص شده است. حالا طبق چیزی که تعیین کردیم، انتظار داریم ویدئوی لحظهی تشخیص حرکت را در دایرکتوری مورد نظرمان ببینیم:
نتیجهگیری
خب در این قسمت نحوهی اتصال و کار با دوربین رزبریپای را خیلی مفصل بررسی کردیم. از ویژگیها و سوییچهای عکاسی و فیلمبرداری گرفته تا مشاهدهی تصویر بهصورت آنلاین از طریق لپتاپ و موبایل. در آخر هم با استفاده از کتابخانهی Motion نحوهی ساختن دوربین مدار بستهی حساس به حرکت را با هم دیدیم. از این قسمت به بعد، میخواهیم کمی تخصصیتر وارد دنیای برق و الکترونیک شویم. به طور دقیقتر، میخواهیم در هر قسمت با نحوهی راهاندازی انواع سنسور و ماژولهای کاربردی و مهم حوزهی الکترونیک و IoT آشنا شده و سپس با مطالبی که یاد گرفتیم، یک پروژهی باحال DIY انجام بدیم. در قدم اول قصد داریم نحوهی کار با GPIO های رزبریپای را با روشهای مختلف بررسی کنیم. پس در بخش بعدی با من همراه باشید تا نحوهی دستور دادن به پابههای رزبریپای را خیلی ساده و از ابتدا یاد بگیریم.
نظرات شما باعث بهبود محتوای آموزشی ما میشود. اگر این آموزش را دوست داشتید، همینطور اگر سوالی در مورد آن دارید، از شنیدن نظراتتان خوشحال خواهیم شد.
نظرات (0)