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.
IoT-For-Beginners/translations/ar/4-manufacturing/lessons/2-check-fruit-from-device/pi-camera.md

155 lines
10 KiB

<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "c677667095f6133eee418c7e53615d05",
"translation_date": "2025-08-26T21:48:43+00:00",
"source_file": "4-manufacturing/lessons/2-check-fruit-from-device/pi-camera.md",
"language_code": "ar"
}
-->
# التقاط صورة - Raspberry Pi
في هذا الجزء من الدرس، ستقوم بإضافة مستشعر كاميرا إلى Raspberry Pi وقراءة الصور منه.
## الأجهزة
يحتاج Raspberry Pi إلى كاميرا.
الكاميرا التي ستستخدمها هي [وحدة كاميرا Raspberry Pi](https://www.raspberrypi.org/products/camera-module-v2/). تم تصميم هذه الكاميرا للعمل مع Raspberry Pi وتُوصَل عبر موصل مخصص على الجهاز.
> 💁 تستخدم هذه الكاميرا [واجهة الكاميرا التسلسلية، وهو بروتوكول من تحالف معالجات صناعة الهواتف المحمولة](https://wikipedia.org/wiki/Camera_Serial_Interface)، المعروف باسم MIPI-CSI. هذا بروتوكول مخصص لإرسال الصور.
## توصيل الكاميرا
يمكن توصيل الكاميرا بـ Raspberry Pi باستخدام كابل شريطي.
### المهمة - توصيل الكاميرا
![كاميرا Raspberry Pi](../../../../../translated_images/pi-camera-module.4278753c31bd6e757aa2b858be97d72049f71616278cefe4fb5abb485b40a078.ar.png)
1. قم بإيقاف تشغيل Raspberry Pi.
1. قم بتوصيل الكابل الشريطي الذي يأتي مع الكاميرا بالكاميرا. للقيام بذلك، اسحب برفق على المشبك البلاستيكي الأسود في الحامل بحيث يخرج قليلاً، ثم أدخل الكابل في المقبس، مع توجيه الجانب الأزرق بعيدًا عن العدسة، والشرائط المعدنية نحو العدسة. بمجرد إدخال الكابل بالكامل، ادفع المشبك البلاستيكي الأسود إلى مكانه.
يمكنك العثور على رسم متحرك يوضح كيفية فتح المشبك وإدخال الكابل في [وثائق Raspberry Pi للبدء باستخدام وحدة الكاميرا](https://projects.raspberrypi.org/en/projects/getting-started-with-picamera/2).
![الكابل الشريطي مُدخل في وحدة الكاميرا](../../../../../translated_images/pi-camera-ribbon-cable.0bf82acd251611c21ac616f082849413e2b322a261d0e4f8fec344248083b07e.ar.png)
1. قم بإزالة قبعة Grove Base Hat من Raspberry Pi.
1. مرر الكابل الشريطي عبر فتحة الكاميرا في قبعة Grove Base Hat. تأكد من أن الجانب الأزرق من الكابل يواجه المنافذ التناظرية المسمّاة **A0**، **A1** وما إلى ذلك.
![الكابل الشريطي يمر عبر قبعة Grove Base Hat](../../../../../translated_images/grove-base-hat-ribbon-cable.501fed202fcf73b11b2b68f6d246189f7d15d3e4423c572ddee79d77b4632b47.ar.png)
1. أدخل الكابل الشريطي في منفذ الكاميرا على Raspberry Pi. مرة أخرى، اسحب المشبك البلاستيكي الأسود لأعلى، أدخل الكابل، ثم ادفع المشبك إلى مكانه. يجب أن يكون الجانب الأزرق من الكابل مواجهًا لمنافذ USB والإيثرنت.
![الكابل الشريطي متصل بمنفذ الكاميرا على Raspberry Pi](../../../../../translated_images/pi-camera-socket-ribbon-cable.a18309920b11800911082ed7aa6fb28e6d9be3a022e4079ff990016cae3fca10.ar.png)
1. أعد تركيب قبعة Grove Base Hat.
## برمجة الكاميرا
يمكن الآن برمجة Raspberry Pi لاستخدام الكاميرا باستخدام مكتبة Python [PiCamera](https://pypi.org/project/picamera/).
### المهمة - تمكين وضع الكاميرا القديم
لسوء الحظ، مع إصدار نظام التشغيل Raspberry Pi OS Bullseye، تغيرت برامج الكاميرا التي تأتي مع النظام، مما يعني أن PiCamera لم تعد تعمل بشكل افتراضي. هناك بديل قيد التطوير يسمى PiCamera2، لكنه غير جاهز للاستخدام بعد.
في الوقت الحالي، يمكنك ضبط Raspberry Pi على وضع الكاميرا القديم للسماح لـ PiCamera بالعمل. كما أن منفذ الكاميرا معطل افتراضيًا، ولكن تشغيل برامج الكاميرا القديمة يُمكّن المنفذ تلقائيًا.
1. قم بتشغيل Raspberry Pi وانتظر حتى يتم الإقلاع.
1. افتح VS Code، إما مباشرة على Raspberry Pi، أو قم بالاتصال عبر امتداد Remote SSH.
1. قم بتشغيل الأوامر التالية من الطرفية:
```sh
sudo raspi-config nonint do_legacy 0
sudo reboot
```
سيقوم هذا بتبديل إعداد لتمكين برامج الكاميرا القديمة، ثم إعادة تشغيل Raspberry Pi لتفعيل هذا الإعداد.
1. انتظر حتى يتم إعادة تشغيل Raspberry Pi، ثم أعد فتح VS Code.
### المهمة - برمجة الكاميرا
قم ببرمجة الجهاز.
1. من الطرفية، قم بإنشاء مجلد جديد في دليل المستخدم `pi` يسمى `fruit-quality-detector`. قم بإنشاء ملف في هذا المجلد يسمى `app.py`.
1. افتح هذا المجلد في VS Code.
1. للتفاعل مع الكاميرا، يمكنك استخدام مكتبة Python 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` يضبط دوران الصورة. يدخل الكابل الشريطي في الجزء السفلي من الكاميرا، ولكن إذا تم تدوير الكاميرا لتسهيل توجيهها نحو العنصر الذي تريد تصنيفه، يمكنك تغيير هذا السطر إلى عدد درجات الدوران.
![الكاميرا معلقة فوق علبة مشروب](../../../../../translated_images/pi-camera-upside-down.5376961ba31459883362124152ad6b823d5ac5fc14e85f317e22903bd681c2b6.ar.png)
على سبيل المثال، إذا علقت الكابل الشريطي فوق شيء بحيث يكون في الجزء العلوي من الكاميرا، قم بضبط الدوران ليكون 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). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.