تدريب YOLOv5 على بيانات مخصصة
📚 يشرح هذا الدليل كيفية تدريب مجموعة البيانات المخصصة الخاصة بك باستخدام نموذج YOLOv5 🚀. يعد تدريب النماذج المخصصة خطوة أساسية في تصميم حلول الرؤية الحاسوبية لتطبيقات واقعية محددة تتجاوز اكتشاف الكائنات العام.
قبل أن تبدأ
أولاً، تأكد من إعداد البيئة الضرورية. استنسخ مستودع YOLOv5 وقم بتثبيت التبعيات المطلوبة من requirements.txt
. أ بايثون >=3.8.0 بيئة مع PyTorch >=1.8 ضروري. يتم تنزيل النماذج ومجموعات البيانات تلقائيًا من أحدث YOLOv5 إصدار إذا لم يتم العثور عليها محليًا.
git clone https://github.com/ultralytics/yolov5 # Clone the repository
cd yolov5
pip install -r requirements.txt # Install dependencies
التدريب على بيانات مخصصة
يعد تطوير نموذج الكشف عن الكائنات المخصص عملية تكرارية:
- جمع وتنظيم الصور: اجمع الصور ذات الصلة بمهمتك المحددة. البيانات المتنوعة عالية الجودة أمر بالغ الأهمية. راجع دليلنا حول جمع البيانات والتعليقات التوضيحية.
- تصنيف الكائنات: ضع علامات توضيحية دقيقة على الكائنات التي تهمك داخل صورك.
- تدريب نموذج: استخدم البيانات المصنفة لتدريب نموذج YOLOv5 الخاص بك. استفد من التعلم بالنقل من خلال البدء بأوزان مُدرَّبة مسبقًا.
- النشر والتنبؤ: استخدم النموذج المدرب للاستدلال على بيانات جديدة غير مرئية.
- جمع الحالات الشاذة: حدد السيناريوهات التي يكون فيها أداء النموذج ضعيفًا (الحالات الشاذة) وأضف بيانات مماثلة إلى مجموعة البيانات الخاصة بك لتحسين المتانة. كرر الدورة.
يقدم Ultralytics HUB حلاً مبسطًا بدون تعليمات برمجية لدورة عمليات تعلم الآلة (MLOps) بأكملها، بما في ذلك إدارة مجموعة البيانات وتدريب النموذج ونشره.
تقدم Ultralytics خيارين للترخيص:
توفر Ultralytics خيارين للترخيص لاستيعاب سيناريوهات الاستخدام المتنوعة:
- رخصة AGPL-3.0: هذه الرخصة مفتوحة المصدر المعتمدة من OSI مثالية للطلاب والباحثين والمتحمسين الشغوفين بالتعاون المفتوح وتبادل المعرفة. وهي تتطلب مشاركة الأعمال المشتقة بموجب نفس الترخيص. راجع ملف الترخيص (LICENSE) للحصول على التفاصيل الكاملة.
- ترخيص مؤسسي: تم تصميم هذا الترخيص للتطبيقات التجارية، ويسمح بالتكامل السلس لبرامج Ultralytics ونماذج الذكاء الاصطناعي في المنتجات والخدمات التجارية دون اشتراطات المصدر المفتوح لـ AGPL-3.0. إذا كان مشروعك يتطلب نشرًا تجاريًا، فاطلب ترخيصًا مؤسسيًا.
استكشف خيارات الترخيص الخاصة بنا بشكل أكبر على صفحة ترخيص Ultralytics.
قبل البدء في التدريب، يعد إعداد مجموعة البيانات أمرًا ضروريًا.
1. إنشاء مجموعة بيانات
تتطلب نماذج YOLOv5 بيانات مُصنَّفة لتعلم الخصائص المرئية لفئات الكائنات. يعد تنظيم مجموعة البيانات الخاصة بك بشكل صحيح أمرًا أساسيًا.
1.1 إنشاء dataset.yaml
ملف تكوين مجموعة البيانات (على سبيل المثال، coco128.yaml
) يحدد هيكل مجموعة البيانات وأسماء الفئات ومسارات إلى مجلدات الصور. COCO128 بمثابة مجموعة بيانات مثال صغيرة، تتكون من أول 128 صورة من COCO مجموعة البيانات. إنه مفيد للاختبار السريع لخط أنابيب التدريب وتشخيص المشكلات المحتملة مثل التجاوز.
في dataset.yaml
يتضمن هيكل الملف:
path
: الدليل الجذر الذي يحتوي على مجموعة البيانات.train
,val
,test
: مسارات نسبية منpath
إلى الدلائل التي تحتوي على صور أو ملفات نصية تسرد مسارات الصور لمجموعات التدريب والتحقق والاختبار.names
: قاموس يربط بين فهارس الفئات (بدءًا من 0) وأسماء الفئات المقابلة لها.
فيما يلي بنية coco128.yaml
(عرض على GitHub):
# Dataset root directory relative to the yolov5 directory
path: coco128
# Train/val/test sets: specify directories, *.txt files, or lists
train: images/train2017 # 128 images for training
val: images/train2017 # 128 images for validation
test: # Optional path to test images
# Classes (example using 80 COCO classes)
names:
0: person
1: bicycle
2: car
# ... (remaining COCO classes)
77: teddy bear
78: hair drier
79: toothbrush
1.2 الاستفادة من النماذج لترميز تلقائي
في حين أن وضع العلامات يدويًا باستخدام الأدوات هو نهج شائع، إلا أن العملية قد تستغرق وقتًا طويلاً. توفر التطورات الأخيرة في النماذج الأساسية إمكانيات لأتمتة أو شبه أتمتة عملية التعليقات التوضيحية، مما قد يؤدي إلى تسريع إنشاء مجموعة البيانات بشكل كبير. فيما يلي بعض الأمثلة على النماذج التي يمكن أن تساعد في إنشاء التسميات:
- Google Gemini: تتمتع النماذج الكبيرة متعددة الوسائط مثل Gemini بقدرات قوية لفهم الصور. يمكن مطالبتها بتحديد وتحديد مواقع الكائنات داخل الصور، وإنشاء مربعات إحاطة أو أوصاف يمكن تحويلها إلى تسميات بتنسيق YOLO. استكشف إمكاناتها في دفتر البرنامج التعليمي المتوفر.
- SAM2 (نموذج تقسيم أي شيء 2): يمكن لنماذج الأساس التي تركز على التقسيم، مثل SAM2، تحديد الكائنات وتحديدها بدقة عالية. في حين أن الأقنعة الناتجة مخصصة في المقام الأول للتقسيم، إلا أنه يمكن تحويلها غالبًا إلى تعليقات توضيحية للمربعات المحيطة المناسبة لمهام الكشف عن الكائنات.
- YOLOWorld: يقدم هذا النموذج إمكانات الكشف عن المفردات المفتوحة. يمكنك تقديم أوصاف نصية للكائنات التي تهتم بها، ويمكن لـ YOLOWorld تحديد موقعها في الصور بدون تدريب مسبق على تلك الفئات المحددة. يمكن استخدام هذا كنقطة انطلاق لإنشاء تسميات أولية، والتي يمكن بعد ذلك تحسينها.
يمكن أن يوفر استخدام هذه النماذج خطوة "التسمية المسبقة"، مما يقلل من الجهد اليدوي المطلوب. ومع ذلك، من الضروري مراجعة وتنقيح الملصقات التي يتم إنشاؤها تلقائيًا لضمان الدقة والاتساق، حيث تؤثر الجودة بشكل مباشر على أداء نموذج YOLOv5 المدرب. بعد إنشاء الملصقات (وربما تنقيحها)، تأكد من أنها تلتزم بـ تنسيق YOLO: واحد *.txt
ملف لكل صورة، مع تمثيل كل سطر لكائن كـ class_index x_center y_center width height
(إحداثيات مُطوَّرة، فئة مفهرسة بصفر). إذا لم تكن هناك كائنات مهمة في الصورة، فلا يوجد *.txt
هناك حاجة إلى ملف.
تنسيق YOLO *.txt
مواصفات الملف دقيقة:
- صف واحد لكل مربع إحاطة للكائن.
- يجب أن يحتوي كل صف على:
class_index x_center y_center width height
. - يجب أن تكون الإحداثيات طبيعي إلى نطاق بين 0 و 1. لتحقيق ذلك، قسّم قيم البكسل الخاصة بـ
x_center
وwidth
بإجمالي عرض الصورة، وقسمةy_center
وheight
بإجمالي ارتفاع الصورة. - فهارس الفئات مفهرسة من الصفر (أي أن الفئة الأولى ممثلة بـ
0
، والثاني بواسطة1
، وما إلى ذلك).
ملف التصنيف المطابق للصورة أعلاه، والذي يحتوي على كائنين 'person' (فهرس الفئة 0
) وكائن 'tie' واحد (فهرس الفئة 27
)، سيبدو هكذا:
1.3 تنظيم الدلائل
هيكلة مجموعات البيانات الدليل كما هو موضح أدناه. بشكل افتراضي، تتوقع YOLOv5 دليل مجموعة البيانات (على سبيل المثال، /coco128
) ليقيم داخل /datasets
المجلد الموجود بجوار ال /yolov5
دليل المستودع.
تحدد YOLOv5 تلقائيًا تسميات كل صورة عن طريق استبدال المثيل الأخير من /images/
في مسار الصورة مع /labels/
. على سبيل المثال:
../datasets/coco128/images/im0.jpg # Path to the image file
../datasets/coco128/labels/im0.txt # Path to the corresponding label file
هيكل الدليل الموصى به هو:
/datasets/
└── coco128/ # Dataset root
├── images/
│ ├── train2017/ # Training images
│ │ ├── 000000000009.jpg
│ │ └── ...
│ └── val2017/ # Validation images (optional if using same set for train/val)
│ └── ...
└── labels/
├── train2017/ # Training labels
│ ├── 000000000009.txt
│ └── ...
└── val2017/ # Validation labels (optional if using same set for train/val)
└── ...
2. تحديد نموذج
اختر نموذجًا مُدرَّبًا مسبقًا لبدء عملية التدريب. البدء بأوزان مُدرَّبة مسبقًا يسرع التعلم ويحسن الأداء بشكل كبير مقارنةً بالتدريب من البداية. يوفر YOLOv5 أحجام نماذج مختلفة، يوازن كل منها بين السرعة والدقة بشكل مختلف. على سبيل المثال، YOLOv5s هو ثاني أصغر وأسرع نموذج، وهو مناسب للبيئات محدودة الموارد. راجع جدول README للحصول على مقارنة تفصيلية لجميع النماذج المتاحة.
3. تدريب
ابدأ تدريب النموذج باستخدام train.py
نص برمجي. تتضمن الحجج الأساسية:
--img
: يحدد المدخلات حجم الصورة (على سبيل المثال،--img 640
). الأحجام الأكبر تعطي عمومًا دقة أفضل ولكنها تتطلب المزيد من ذاكرة وحدة معالجة الرسومات GPU.--batch
: يحدد حجم الدفعة (على سبيل المثال،--batch 16
). اختر أكبر حجم يمكن أن تتعامل معه وحدة معالجة الرسومات GPU الخاصة بك.--epochs
: يحدد العدد الإجمالي للتدريب حقبة (على سبيل المثال،--epochs 100
). تمثل الحقبة الواحدة مرورًا كاملاً على مجموعة بيانات التدريب بأكملها.--data
: مسار إلىdataset.yaml
ملف (مثل:--data coco128.yaml
).--weights
: مسار إلى ملف الأوزان الأولي. باستخدام الأوزان المدربة مسبقًا (على سبيل المثال،--weights yolov5s.pt
) موصى به للغاية لتحقيق تقارب أسرع ونتائج فائقة. للتدريب من البداية (لا يُنصح به إلا إذا كانت لديك مجموعة بيانات كبيرة جدًا واحتياجات محددة)، استخدم--weights '' --cfg yolov5s.yaml
.
يتم تنزيل الأوزان المدربة مسبقًا تلقائيًا من أحدث إصدار YOLOv5 إذا لم يتم العثور عليها محليًا.
# Example: Train YOLOv5s on the COCO128 dataset for 3 epochs
python train.py --img 640 --batch 16 --epochs 3 --data coco128.yaml --weights yolov5s.pt
تحسين سرعة التدريب
💡 استخدم --cache ram
أو --cache disk
لتخزين صور مجموعة البيانات مؤقتًا في ذاكرة الوصول العشوائي (RAM) أو القرص المحلي، على التوالي. هذا يسرع التدريب بشكل كبير، خاصة عندما تكون عمليات إدخال/إخراج البيانات (I/O) تشكل عنق الزجاجة. لاحظ أن هذا يتطلب مساحة كبيرة من ذاكرة الوصول العشوائي (RAM) أو مساحة القرص.
تخزين البيانات محليًا
💡 قم دائمًا بالتدريب باستخدام مجموعات البيانات المخزنة محليًا. يمكن أن يكون الوصول إلى البيانات من محركات أقراص الشبكة (مثل Google Drive) أو التخزين عن بُعد أبطأ بشكل ملحوظ ويعيق أداء التدريب. غالبًا ما يكون نسخ مجموعة البيانات الخاصة بك إلى SSD محلي هو أفضل ممارسة.
يتم حفظ جميع مخرجات التدريب، بما في ذلك الأوزان والسجلات، في runs/train/
الدليل. تنشئ كل جلسة تدريب دليلًا فرعيًا جديدًا (على سبيل المثال، runs/train/exp
, runs/train/exp2
، إلخ). للحصول على تجربة عملية وتفاعلية، استكشف قسم التدريب في دفاتر البرامج التعليمية الرسمية الخاصة بنا:
4. التصور
يتكامل YOLOv5 بسلاسة مع أدوات متنوعة لتصور التقدم المحرز في التدريب، وتقييم النتائج، ومراقبة الأداء في الوقت الفعلي.
تسجيل وأتمتة ClearML 🌟 جديد
Comet متكامل تمامًا لتتبع التجارب الشامل. تصور المقاييس مباشرة، واحفظ المعلمات الفائقة، وقم بإدارة مجموعات البيانات ونقاط تفتيش النموذج، وحلل تنبؤات النموذج باستخدام لوحات Comet المخصصة التفاعلية.
البدء سهل ومباشر:
pip install comet_ml # 1. Install Comet library
export COMET_API_KEY=YOUR_API_KEY_HERE # 2. Set your Comet API key (create a free account at Comet.ml)
python train.py --img 640 --epochs 3 --data coco128.yaml --weights yolov5s.pt # 3. Train your model - Comet automatically logs everything!
تعمق أكثر في الميزات المدعومة في دليل تكامل Comet. تعرف على المزيد حول إمكانات Comet من خلال الموقع الرسمي الخاص بهم الوثائقجرّب دفتر Comet Colab التفاعلي للاطلاع على عرض توضيحي مباشر:
تسجيل محلي
يتيح تكامل ClearML تتبعًا تفصيليًا للتجارب وإدارة إصدارات مجموعة البيانات وحتى التنفيذ عن بُعد لعمليات التدريب. قم بتنشيط ClearML بهذه الخطوات البسيطة:
- تثبيت الحزمة:
pip install clearml
- تهيئة ClearML: تشغيل
clearml-init
مرة واحدة للاتصال بخادم ClearML الخاص بك (إما المستضاف ذاتيًا أو المستوى المجاني).
يلتقط ClearML تلقائيًا تفاصيل التجربة، وتحميلات النموذج، والمقارنات، وتغييرات التعليمات البرمجية غير الملتزم بها، والحزم المثبتة، مما يضمن إمكانية إعادة الإنتاج الكاملة. يمكنك بسهولة جدولة مهام التدريب على الوكلاء عن بعد وإدارة إصدارات مجموعات البيانات باستخدام ClearML Data. استكشف دليل تكامل ClearML للحصول على تفاصيل شاملة.
الخطوات التالية
يتم تسجيل نتائج التدريب تلقائيًا باستخدام TensorBoard وحفظ باسم CSV الملفات داخل دليل التجربة المحدد (على سبيل المثال، runs/train/exp
). تتضمن البيانات المسجلة:
- فقدان التدريب والتحقق من الصحة ومقاييس الأداء.
- صور sample_images توضح الزيادات المطبقة (مثل الفسيفساء).
- تسميات الحقائق الأساسية جنبًا إلى جنب مع تنبؤات النموذج للفحص البصري.
- مقاييس التقييم الرئيسية مثل منحنيات الدقة-الاسترجاع (PR).
- مصفوفات الارتباك لتحليل تفصيلي للأداء حسب الفئة.
في results.csv
يتم تحديث الملف بعد كل حقبة ويتم رسمه كـ results.png
بمجرد انتهاء التدريب. يمكنك أيضًا رسم أي results.csv
الملف يدويًا باستخدام وظيفة الأداة المساعدة المتوفرة:
from utils.plots import plot_results
# Plot results from a specific training run directory
plot_results("runs/train/exp/results.csv") # This will generate 'results.png' in the same directory
5. الخطوات التالية
عند الانتهاء بنجاح من التدريب، فإن أفضل نقطة تفتيش لنموذج الأداء (best.pt
) ويتم حفظه وجاهزًا للنشر أو لمزيد من التحسين. تتضمن الخطوات التالية المحتملة:
- قم بتشغيل الاستدلال على صور أو مقاطع فيديو جديدة باستخدام النموذج المدرب عبر CLI أو Python.
- إجراء التحقق لتقييم دقة النموذج وقدرات التعميم على تقسيمات بيانات مختلفة (مثل، مجموعة اختبار محجوزة).
- تصدير النموذج إلى تنسيقات نشر مختلفة مثل ONNX أو TensorFlow SavedModel أو TensorRT للاستدلال الأمثل على منصات متنوعة.
- استخدم تقنيات ضبط المعلمات الفائقة لاحتمالية الحصول على مكاسب إضافية في الأداء.
- استمر في تحسين النموذج الخاص بك باتباع نصائح للحصول على أفضل نتائج التدريب وإضافة المزيد من البيانات المتنوعة والصعبة بشكل متكرر بناءً على تحليل الأداء.
البيئات المدعومة
توفر Ultralytics بيئات جاهزة للاستخدام ومجهزة بالتبعيات الأساسية مثل CUDA و cuDNN و Python و PyTorch، مما يسهل البدء السلس.
- دفاتر ملاحظات GPU مجانية:
- المنصات السحابية:
- Google Cloud: دليل البدء السريع في GCP
- Amazon AWS: دليل البدء السريع لـ AWS
- Microsoft Azure: دليل البدء السريع لـ AzureML
- إعداد محلي:
- Docker: دليل البدء السريع لـ Docker
- Docker: دليل البدء السريع لـ Docker
حالة المشروع
تشير هذه الشارة إلى أن جميع اختبارات إجراءات GitHub التكامل المستمر (CI) الخاصة بـ YOLOv5 تمر بنجاح. تغطي اختبارات CI الصارمة هذه الوظائف الأساسية، بما في ذلك التدريب و التحقق و الاستدلال و التصدير و المعايير، عبر أنظمة التشغيل macOS و Windows و Ubuntu. يتم تنفيذ الاختبارات تلقائيًا كل 24 ساعة وعند كل التزام بالتعليمات البرمجية، مما يضمن استقرارًا ثابتًا وأداءً مثاليًا.
الأسئلة الشائعة
الأسئلة الشائعة
ما الأدوات التي يمكنني استخدامها لتمييز مجموعة بيانات YOLOv5 الخاصة بي؟
يتضمن تدريب YOLOv5 على مجموعة بيانات مخصصة عدة خطوات رئيسية:
- إعداد مجموعة البيانات الخاصة بك: اجمع الصور وقم بتعليقها. تأكد من أن التعليقات التوضيحية بالتنسيق المطلوب تنسيق YOLO. قم بتنظيم الصور والتسميات في
train/
وval/
(و اختيارياtest/
) directories. ضع في اعتبارك استخدام نماذج مثل Google Gemini, SAM2، أو YOLOWorld للمساعدة في عملية التصنيف أو أتمتتها (انظر القسم 1.2). - إعداد البيئة الخاصة بك.: استنسخ مستودع YOLOv5 وثبت التبعيات باستخدام
pip install -r requirements.txt
.git clone https://github.com/ultralytics/yolov5 cd yolov5 pip install -r requirements.txt
- إنشاء تكوين مجموعة البيانات: حدد مسارات مجموعة البيانات وعدد الفئات وأسماء الفئات في
dataset.yaml
ملف. - ابدأ التدريب: نفّذ
train.py
نص برمجي، مع توفير مسارات إلىdataset.yaml
، الأوزان المدربة مسبقًا المطلوبة (مثل،yolov5s.pt
)، وحجم الصورة، وحجم الدفعة، وعدد الحقب.python train.py --img 640 --batch 16 --epochs 100 --data path/to/your/dataset.yaml --weights yolov5s.pt
كيف يمكنني تحويل البيانات التي تم تمييزها إلى تنسيق YOLOv5؟
Ultralytics HUB عبارة عن نظام أساسي شامل مصمم لتبسيط دورة حياة تطوير نموذج YOLO بأكملها، غالبًا دون الحاجة إلى كتابة أي تعليمات برمجية. تشمل الفوائد الرئيسية ما يلي:
- تدريب مبسط: يمكنك تدريب النماذج بسهولة باستخدام بيئات مُعدة مسبقًا وواجهة مستخدم سهلة.
- إدارة البيانات المتكاملة: قم بتحميل مجموعات البيانات الخاصة بك والتحكم في إصداراتها وإدارتها بكفاءة داخل النظام الأساسي.
- المراقبة في الوقت الفعلي: تتبع تقدم التدريب وتصور مقاييس الأداء باستخدام أدوات متكاملة مثل Comet أو TensorBoard.
- ميزات التعاون: تسهل العمل الجماعي من خلال الموارد المشتركة وأدوات إدارة المشاريع ومشاركة النماذج بسهولة.
- النشر بدون تعليمات برمجية: انشر النماذج المدربة مباشرة إلى أهداف مختلفة.
للحصول على شرح عملي، تحقق من منشور المدونة الخاص بنا: كيفية تدريب النماذج المخصصة الخاصة بك باستخدام Ultralytics HUB.
كيف يمكنني تحويل بياناتي المشروحة إلى تنسيق YOLOv5؟
سواء كنت تقوم بالتعليق يدويًا أو تستخدم أدوات آلية (مثل تلك المذكورة في القسم 1.2)، يجب أن تكون العلامات النهائية بتنسيق YOLO المحدد المطلوب بواسطة YOLOv5:
- إنشاء واحد
.txt
ملف لكل صورة. يجب أن يتطابق اسم الملف مع اسم ملف الصورة (على سبيل المثال،image1.jpg
يتوافق معimage1.txt
). ضع هذه الملفات فيlabels/
دليل موازٍ لـimages/
الدليل (على سبيل المثال،../datasets/mydataset/labels/train/
). - كل سطر داخل
.txt
يمثل الملف تعليقًا توضيحيًا لكائن واحد ويتبع التنسيق:class_index center_x center_y width height
. - إحداثيات (
center_x
,center_y
,width
,height
) يجب أن يكون طبيعي (قيم بين 0.0 و 1.0) بالنسبة لأبعاد الصورة. - فهارس الفئات هي ذو أساس صفري (الفئة الأولى هي
0
، والثاني هو1
، إلخ).
توفر العديد من أدوات التعليقات التوضيحية اليدوية تصديرًا مباشرًا إلى تنسيق YOLO. في حالة استخدام النماذج الآلية، ستحتاج إلى برامج نصية أو عمليات لتحويل مخرجاتها (مثل إحداثيات المربع المحيط، وأقنعة التجزئة) إلى هذا التنسيق النصي المحدد المعياري. تأكد من أن هيكل مجموعة البيانات النهائية الخاصة بك يتوافق مع المثال المقدم في الدليل. لمزيد من التفاصيل، راجع دليل جمع البيانات والتعليقات التوضيحية الخاص بنا.
📚 يشرح هذا الدليل كيفية تدريب مجموعة البيانات المخصصة الخاصة بك باستخدام YOLOv5 🚀.
توفر Ultralytics تراخيص مرنة مصممة خصيصًا لتلبية الاحتياجات المختلفة:
- رخصة AGPL-3.0: هذه الرخصة مفتوحة المصدر مناسبة للبحث الأكاديمي والمشاريع الشخصية والحالات التي يكون فيها الامتثال مفتوح المصدر مقبولاً. وهي تفرض أن تكون التعديلات والأعمال المشتقة مفتوحة المصدر أيضًا بموجب AGPL-3.0. راجع تفاصيل رخصة AGPL-3.0.
- ترخيص مؤسسي: ترخيص تجاري مصمم للشركات التي تدمج YOLOv5 في المنتجات أو الخدمات الاحتكارية. يزيل هذا الترخيص التزامات المصدر المفتوح لـ AGPL-3.0، مما يسمح بتوزيع التعليمات البرمجية المغلقة. تفضل بزيارة صفحة الترخيص الخاصة بنا لمزيد من التفاصيل أو لطلب ترخيص مؤسسي.
حدد الترخيص الذي يتوافق بشكل أفضل مع متطلبات مشروعك ونموذج التوزيع.