You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
153 lines
11 KiB
153 lines
11 KiB
<!--
|
|
CO_OP_TRANSLATOR_METADATA:
|
|
{
|
|
"original_hash": "c677667095f6133eee418c7e53615d05",
|
|
"translation_date": "2025-08-25T20:58:35+00:00",
|
|
"source_file": "4-manufacturing/lessons/2-check-fruit-from-device/pi-camera.md",
|
|
"language_code": "fa"
|
|
}
|
|
-->
|
|
# گرفتن تصویر - رزبری پای
|
|
|
|
در این بخش از درس، شما یک حسگر دوربین به رزبری پای خود اضافه میکنید و تصاویر را از آن میخوانید.
|
|
|
|
## سختافزار
|
|
|
|
رزبری پای به یک دوربین نیاز دارد.
|
|
|
|
دوربینی که استفاده میکنید [ماژول دوربین رزبری پای](https://www.raspberrypi.org/products/camera-module-v2/) است. این دوربین برای کار با رزبری پای طراحی شده و از طریق یک کانکتور اختصاصی به آن متصل میشود.
|
|
|
|
> 💁 این دوربین از [رابط سریال دوربین، یک پروتکل از اتحاد پردازنده صنعت موبایل](https://wikipedia.org/wiki/Camera_Serial_Interface) که به MIPI-CSI معروف است، استفاده میکند. این یک پروتکل اختصاصی برای ارسال تصاویر است.
|
|
|
|
## اتصال دوربین
|
|
|
|
دوربین میتواند با استفاده از یک کابل نواری به رزبری پای متصل شود.
|
|
|
|
### وظیفه - اتصال دوربین
|
|
|
|

|
|
|
|
1. رزبری پای را خاموش کنید.
|
|
|
|
1. کابل نواری که همراه دوربین است را به دوربین متصل کنید. برای این کار، به آرامی گیره پلاستیکی مشکی در نگهدارنده را بکشید تا کمی بیرون بیاید، سپس کابل را در سوکت قرار دهید، به طوری که سمت آبی کابل به طرف دور از لنز و نوارهای فلزی به سمت لنز باشند. وقتی کابل کاملاً وارد شد، گیره پلاستیکی مشکی را به جای خود فشار دهید.
|
|
|
|
میتوانید یک انیمیشن که نحوه باز کردن گیره و قرار دادن کابل را نشان میدهد در [مستندات شروع کار با ماژول دوربین رزبری پای](https://projects.raspberrypi.org/en/projects/getting-started-with-picamera/2) پیدا کنید.
|
|
|
|

|
|
|
|
1. کلاهک Grove Base را از رزبری پای جدا کنید.
|
|
|
|
1. کابل نواری را از شکاف دوربین در کلاهک Grove Base عبور دهید. مطمئن شوید که سمت آبی کابل به سمت پورتهای آنالوگ با برچسب **A0**، **A1** و غیره باشد.
|
|
|
|

|
|
|
|
1. کابل نواری را در پورت دوربین روی رزبری پای قرار دهید. دوباره، گیره پلاستیکی مشکی را بالا بکشید، کابل را وارد کنید، سپس گیره را به جای خود فشار دهید. سمت آبی کابل باید به سمت پورتهای USB و اترنت باشد.
|
|
|
|

|
|
|
|
1. کلاهک Grove Base را دوباره نصب کنید.
|
|
|
|
## برنامهنویسی دوربین
|
|
|
|
اکنون میتوانید رزبری پای را برای استفاده از دوربین با استفاده از کتابخانه پایتون [PiCamera](https://pypi.org/project/picamera/) برنامهنویسی کنید.
|
|
|
|
### وظیفه - فعال کردن حالت دوربین قدیمی
|
|
|
|
متأسفانه با انتشار سیستمعامل Bullseye رزبری پای، نرمافزار دوربینی که همراه سیستمعامل بود تغییر کرد، به این معنی که به طور پیشفرض PiCamera دیگر کار نمیکند. یک جایگزین به نام PiCamera2 در دست توسعه است، اما هنوز آماده استفاده نیست.
|
|
|
|
فعلاً میتوانید رزبری پای خود را به حالت دوربین قدیمی تنظیم کنید تا PiCamera کار کند. سوکت دوربین نیز به طور پیشفرض غیرفعال است، اما فعال کردن نرمافزار دوربین قدیمی به طور خودکار سوکت را فعال میکند.
|
|
|
|
1. رزبری پای را روشن کنید و منتظر بمانید تا بوت شود.
|
|
|
|
1. VS Code را اجرا کنید، یا مستقیماً روی رزبری پای یا از طریق افزونه Remote SSH متصل شوید.
|
|
|
|
1. دستورات زیر را از ترمینال اجرا کنید:
|
|
|
|
```sh
|
|
sudo raspi-config nonint do_legacy 0
|
|
sudo reboot
|
|
```
|
|
|
|
این دستور یک تنظیم را برای فعال کردن نرمافزار دوربین قدیمی تغییر میدهد، سپس رزبری پای را ریبوت میکند تا این تنظیم اعمال شود.
|
|
|
|
1. منتظر بمانید تا رزبری پای ریبوت شود، سپس VS Code را دوباره اجرا کنید.
|
|
|
|
### وظیفه - برنامهنویسی دوربین
|
|
|
|
دستگاه را برنامهنویسی کنید.
|
|
|
|
1. از ترمینال، یک پوشه جدید در دایرکتوری خانگی کاربر `pi` به نام `fruit-quality-detector` ایجاد کنید. یک فایل در این پوشه به نام `app.py` ایجاد کنید.
|
|
|
|
1. این پوشه را در VS Code باز کنید.
|
|
|
|
1. برای تعامل با دوربین، میتوانید از کتابخانه پایتون PiCamera استفاده کنید. بسته Pip مربوط به این کتابخانه را با دستور زیر نصب کنید:
|
|
|
|
```sh
|
|
pip3 install picamera
|
|
```
|
|
|
|
1. کد زیر را به فایل `app.py` خود اضافه کنید:
|
|
|
|
```python
|
|
import io
|
|
import time
|
|
from picamera import PiCamera
|
|
```
|
|
|
|
این کد برخی از کتابخانههای مورد نیاز، از جمله کتابخانه `PiCamera` را وارد میکند.
|
|
|
|
1. کد زیر را در ادامه اضافه کنید تا دوربین را مقداردهی اولیه کنید:
|
|
|
|
```python
|
|
camera = PiCamera()
|
|
camera.resolution = (640, 480)
|
|
camera.rotation = 0
|
|
|
|
time.sleep(2)
|
|
```
|
|
|
|
این کد یک شیء PiCamera ایجاد میکند و وضوح تصویر را به 640x480 تنظیم میکند. اگرچه وضوحهای بالاتر (تا 3280x2464) پشتیبانی میشوند، اما طبقهبندیکننده تصویر روی تصاویر بسیار کوچکتر (227x227) کار میکند، بنابراین نیازی به گرفتن و ارسال تصاویر بزرگتر نیست.
|
|
|
|
خط `camera.rotation = 0` چرخش تصویر را تنظیم میکند. کابل نواری از پایین دوربین وارد میشود، اما اگر دوربین شما برای راحتتر نشانهگیری به سمت شیء مورد نظر چرخانده شده باشد، میتوانید این خط را به تعداد درجههای چرخش تغییر دهید.
|
|
|
|

|
|
|
|
برای مثال، اگر کابل نواری را از بالای چیزی آویزان کنید تا در بالای دوربین قرار گیرد، چرخش را به 180 تنظیم کنید:
|
|
|
|
```python
|
|
camera.rotation = 180
|
|
```
|
|
|
|
دوربین چند ثانیه طول میکشد تا راهاندازی شود، به همین دلیل خط `time.sleep(2)` وجود دارد.
|
|
|
|
1. کد زیر را در ادامه اضافه کنید تا تصویر را به صورت دادههای باینری ذخیره کنید:
|
|
|
|
```python
|
|
image = io.BytesIO()
|
|
camera.capture(image, 'jpeg')
|
|
image.seek(0)
|
|
```
|
|
|
|
این کد یک شیء `BytesIO` برای ذخیره دادههای باینری ایجاد میکند. تصویر به صورت یک فایل JPEG از دوربین خوانده شده و در این شیء ذخیره میشود. این شیء یک نشانگر موقعیت دارد تا بداند در کجای داده قرار دارد، بنابراین خط `image.seek(0)` این موقعیت را به ابتدای داده بازمیگرداند تا تمام دادهها بعداً خوانده شوند.
|
|
|
|
1. در ادامه، کد زیر را برای ذخیره تصویر در یک فایل اضافه کنید:
|
|
|
|
```python
|
|
with open('image.jpg', 'wb') as image_file:
|
|
image_file.write(image.read())
|
|
```
|
|
|
|
این کد یک فایل به نام `image.jpg` را برای نوشتن باز میکند، سپس تمام دادهها را از شیء `BytesIO` خوانده و در فایل مینویسد.
|
|
|
|
> 💁 میتوانید تصویر را مستقیماً در یک فایل ذخیره کنید به جای استفاده از شیء `BytesIO` با ارسال نام فایل به فراخوانی `camera.capture`. دلیل استفاده از شیء `BytesIO` این است که بعداً در این درس میتوانید تصویر را به طبقهبندیکننده تصویر خود ارسال کنید.
|
|
|
|
1. دوربین را به سمت چیزی نشانه بگیرید و این کد را اجرا کنید.
|
|
|
|
1. یک تصویر گرفته شده و به عنوان `image.jpg` در پوشه فعلی ذخیره میشود. این فایل را در کاوشگر VS Code خواهید دید. فایل را انتخاب کنید تا تصویر را مشاهده کنید. اگر نیاز به چرخش دارد، خط `camera.rotation = 0` را بهروزرسانی کنید و دوباره عکس بگیرید.
|
|
|
|
> 💁 میتوانید این کد را در پوشه [code-camera/pi](../../../../../4-manufacturing/lessons/2-check-fruit-from-device/code-camera/pi) پیدا کنید.
|
|
|
|
😀 برنامه دوربین شما موفقیتآمیز بود!
|
|
|
|
**سلب مسئولیت**:
|
|
این سند با استفاده از سرویس ترجمه هوش مصنوعی [Co-op Translator](https://github.com/Azure/co-op-translator) ترجمه شده است. در حالی که ما تلاش میکنیم دقت را حفظ کنیم، لطفاً توجه داشته باشید که ترجمههای خودکار ممکن است شامل خطاها یا نادرستیها باشند. سند اصلی به زبان اصلی آن باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حساس، ترجمه حرفهای انسانی توصیه میشود. ما مسئولیتی در قبال سوء تفاهمها یا تفسیرهای نادرست ناشی از استفاده از این ترجمه نداریم. |