تقوم OpenCV بجمع الأموال لإبقاء المكتبة مجانية للجميع، ونحن بحاجة إلى دعم المجتمع بأكمله للقيام بذلك. تبرع لـ OpenCV على Github لإظهار دعمك.
حزم OpenCV المعدة مسبقًا لوحدة المعالجة المركزية فقط لـ Python.
تحقق من قسم البناء اليدوي إذا كنت ترغب في تجميع الارتباطات من المصدر لتمكين وحدات إضافية مثل CUDA.
إذا كان لديك إصدار سابق/آخر مثبت يدويًا (= غير مثبت عبر pip
) من OpenCV مثبتًا (على سبيل المثال وحدة cv2 في جذر حزم موقع Python)، فقم بإزالته قبل التثبيت لتجنب التعارضات.
تأكد من أن إصدار pip
الخاص بك محدث (19.3 هو الحد الأدنى للإصدار المدعوم): pip install --upgrade pip
. تحقق من الإصدار باستخدام pip -V
. على سبيل المثال، يتم شحن توزيعات Linux عادةً بإصدارات pip
جدًا تسبب الكثير من المشكلات غير المتوقعة خاصة مع تنسيق manylinux
.
حدد الحزمة المناسبة لبيئتك:
هناك أربع حزم مختلفة (انظر الخيارات 1 و2 و3 و4 أدناه) ويجب عليك اختيار واحدة منها فقط . لا تقم بتثبيت عدة حزم مختلفة في نفس البيئة. لا توجد بنية إضافية: جميع الحزم تستخدم نفس مساحة الاسم ( cv2
). إذا قمت بتثبيت عدة حزم مختلفة في نفس البيئة، فقم بإلغاء تثبيتها جميعًا باستخدام pip uninstall
وأعد تثبيت حزمة واحدة فقط.
أ. حزم لبيئات سطح المكتب القياسية (Windows، وmacOS، وأي توزيعة GNU/Linux تقريبًا)
pip install opencv-python
pip install opencv-contrib-python
(راجع قائمة الوحدات المساهمة/الإضافية من وثائق OpenCV)ب. حزم لبيئات الخادم (بدون رأس) (مثل Docker والبيئات السحابية وما إلى ذلك)، ولا توجد تبعيات لمكتبة واجهة المستخدم الرسومية
هذه الحزم أصغر من الحزمتين الأخريين أعلاه لأنها لا تحتوي على أي وظيفة لواجهة المستخدم الرسومية (لم يتم تجميعها باستخدام Qt / مكونات واجهة المستخدم الرسومية الأخرى). وهذا يعني أن الحزم تتجنب سلسلة التبعية الثقيلة لمكتبات X11 وسيكون لديك على سبيل المثال صور Docker أصغر نتيجة لذلك. يجب عليك دائمًا استخدام هذه الحزم إذا كنت لا تستخدم cv2.imshow
et al. أو أنك تستخدم حزمة أخرى (مثل PyQt) غير OpenCV لإنشاء واجهة المستخدم الرسومية الخاصة بك.
pip install opencv-python-headless
pip install opencv-contrib-python-headless
(راجع قائمة الوحدات المساهمة/الإضافية من وثائق OpenCV)استيراد الحزمة:
import cv2
تحتوي جميع الحزم على ملفات Haar المتتالية. يمكن استخدام cv2.data.haarcascades
كاختصار لمجلد البيانات. على سبيل المثال:
cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml")
اقرأ وثائق OpenCV
قبل فتح عدد جديد، اقرأ الأسئلة الشائعة أدناه وألقِ نظرة على الإصدارات الأخرى المفتوحة بالفعل.
س: هل أحتاج إلى تثبيت OpenCV أيضًا بشكل منفصل؟
ج: لا، الحزم عبارة عن حزم ثنائية خاصة وهي تحتوي بالفعل على ثنائيات OpenCV مبنية بشكل ثابت.
س: فشل تثبيت النقطة مع ModuleNotFoundError: No module named 'skbuild'
؟
منذ الإصدار 4.3.0.* من opencv-python
، تم استبدال manylinux1
عجلات Linux1 بالعديد من عجلات manylinux2014
. إذا كانت النقطة الخاصة بك قديمة جدًا، فستحاول استخدام توزيع المصدر الجديد المقدم في 4.3.0.38 لإنشاء OpenCV يدويًا لأنه لا يعرف كيفية تثبيت manylinux2014
عجلات Linux2014. ومع ذلك، سيفشل إنشاء المصدر أيضًا بسبب وجود pip
قديمة جدًا لأنه لا يفهم تبعيات البناء في pyproject.toml
. لاستخدام عجلات manylinux2014
الجديدة المعدة مسبقًا (أو البناء من المصدر)، يجب أن يكون إصدار pip
لديك >= 19.3. الرجاء ترقية pip
باستخدام pip install --upgrade pip
.
س: فشل الاستيراد على نظام التشغيل Windows: ImportError: DLL load failed: The specified module could not be found.
؟
ج: إذا فشلت عملية الاستيراد على نظام التشغيل Windows، فتأكد من تثبيت Visual C++ القابل لإعادة التوزيع 2015. إذا كنت تستخدم إصدار Windows أقدم من Windows 10 ولم يتم تثبيت آخر تحديثات النظام، فقد تكون Universal C Runtime مطلوبة أيضًا.
لا تتضمن إصدارات Windows N وKN حزمة ميزات الوسائط المطلوبة بواسطة OpenCV. إذا كنت تستخدم إصدار Windows N أو KN، فيرجى تثبيت Windows Media Features Pack أيضًا.
إذا كان لديك Windows Server 2012+، فمن المحتمل أن تكون ملفات DLL الخاصة بالوسائط مفقودة أيضًا؛ الرجاء تثبيت الميزة المسماة "Media Foundation" في مدير الخادم. احذر، تنصح بعض المنشورات بتثبيت "Windows Server Essentials Media Pack"، ولكن هذا يتطلب دور "Windows Server Essentials Experience"، وسيؤثر هذا الدور بشدة على تكوين Windows Server الخاص بك (من خلال فرض تكامل الدليل النشط وما إلى ذلك)؛ لذا فإن مجرد تثبيت "Media Foundation" يجب أن يكون خيارًا أكثر أمانًا.
إذا لم يساعدك ما سبق، فتحقق مما إذا كنت تستخدم Anaconda. تحتوي إصدارات Anaconda القديمة على خطأ يسبب الخطأ، راجع هذه المشكلة لإصلاحها يدويًا.
إذا كنت لا تزال تواجه الخطأ بعد التحقق من جميع الحلول السابقة، فقم بتنزيل التبعيات وافتح ملف cv2.pyd
(الموجود عادةً في C:UsersusernameAppDataLocalProgramsPythonPythonXXLibsite-packagescv2
) معه لتصحيح مشكلات DLL المفقودة.
س: لدي بعض أخطاء الاستيراد الأخرى؟
ج: تأكد من إزالة التثبيتات اليدوية القديمة لروابط OpenCV Python (cv2.so أو cv2.pyd في حزم الموقع).
س: تقوم الدالة foo() أو شريط الطريقة() بإرجاع نتيجة خاطئة أو طرح استثناء أو تعطل المترجم. ماذا علي أن أفعل؟
ج: يحتوي المستودع على نصوص برمجية لبناء حزمة OpenCV-Python فقط، وليس OpenCV نفسه. تم تطوير روابط Python لـ OpenCV في مستودع OpenCV الرسمي وهو أفضل مكان للإبلاغ عن المشكلات. يرجى أيضًا مراجعة موقع OpenCV wiki ومنتدى OpenCV الرسمي قبل تقديم أخطاء جديدة.
س: لماذا لا تتضمن الحزم خوارزميات غير حرة؟
ج: لا يتم تضمين الخوارزميات غير الحرة مثل SURF في هذه الحزم لأنها حاصلة على براءة اختراع/غير مجانية وبالتالي لا يمكن توزيعها كثنائيات مدمجة. لاحظ أنه تم تضمين SIFT في الإصدارات بسبب انتهاء صلاحية براءة الاختراع منذ إصدارات OpenCV 4.3.0 و3.4.10. راجع هذه المسألة لمزيد من المعلومات: رقم 126
س: لماذا تختلف الحزمة والاستيراد (opencv-python مقابل cv2)؟
ج: من الأسهل على المستخدمين فهم opencv-python
مقارنة بفهم cv2
كما يسهل عليهم العثور على الحزمة باستخدام محركات البحث. cv2
(تم تسمية الواجهة القديمة في إصدارات OpenCV القديمة باسم cv
) هو الاسم الذي اختاره مطورو OpenCV عندما قاموا بإنشاء مولدات الربط. يتم الاحتفاظ بهذا كاسم الاستيراد ليكون متوافقًا مع أنواع مختلفة من البرامج التعليمية عبر الإنترنت. قد يكون تغيير اسم الاستيراد أو سلوكه أمرًا مربكًا أيضًا للمستخدمين ذوي الخبرة الذين اعتادوا على import cv2
.
الهدف من هذا المستودع هو توفير وسائل لحزم كل إصدار OpenCV جديد لإصدارات ومنصات Python الأكثر استخدامًا.
تم تصميم المشروع مثل حزمة Python العادية مع ملف setup.py
القياسي. تكون عملية الإنشاء لإدخال واحد في مصفوفات الإنشاء كما يلي (انظر على سبيل المثال ملف .github/workflows/build_wheels_linux.yml
):
في إصدار Linux وMacOS: احصل على تبعيات C الاختيارية لـ OpenCV والتي نقوم بتجميعها وفقًا لها
مستودع الخروج والوحدات الفرعية
ابحث عن إصدار OpenCV من المصادر
بناء OpenCV
إعادة ترتيب نتيجة بناء OpenCV وإضافة ملفاتنا المخصصة وإنشاء العجلة
يتم تحويل عجلات Linux وmacOS باستخدام عجلة التدقيق ويتم تخصيصها وفقًا لذلك
قم بتثبيت العجلة التي تم إنشاؤها
اختبر أن بايثون يمكنها استيراد المكتبة وإجراء بعض اختبارات السلامة
استخدم الخيوط لتحميل العجلة التي تم إنشاؤها إلى PyPI (فقط في إصدارات الإصدار)
يتم التعامل مع الخطوات من 1 إلى 4 بواسطة pip wheel
.
يمكن تخصيص البناء مع متغيرات البيئة. بالإضافة إلى أي متغيرات يقبلها بناء OpenCV، فإننا ندرك:
CI_BUILD
. اضبط على 1
لمحاكاة سلوك بناء بيئة CI. يتم استخدامه فقط في إصدارات CI لفرض علامات بناء معينة في setup.py
. لا تستخدم هذا إلا إذا كنت تعرف ما تفعله.ENABLE_CONTRIB
و ENABLE_HEADLESS
. اضبط على 1
لإنشاء نسخة المساهمة و/أو بدون رأسENABLE_JAVA
، اضبط على 1
لتمكين إنشاء عميل Java. تم تعطيل هذا بشكل افتراضي.CMAKE_ARGS
. وسائط إضافية لاستدعاء CMake الخاص بـ OpenCV. يمكنك استخدام هذا لإنشاء بناء مخصص.راجع القسم التالي لمزيد من المعلومات حول الإصدارات اليدوية خارج بيئة CI.
إذا لم يتم تمكين بعض التبعيات في العجلات المعدة مسبقًا، فيمكنك أيضًا تشغيل البناء محليًا لإنشاء عجلة مخصصة.
git clone --recursive https://github.com/opencv/opencv-python.git
cd opencv-python
git
للتحقق من بعض الإصدارات الأخرى من OpenCV في الوحدات الفرعية opencv
و opencv_contrib
إذا لزم الأمرexport CMAKE_ARGS="-DSOME_FLAG=ON -DSOME_OTHER_FLAG=OFF"
(في نظام التشغيل Windows، تحتاج إلى تعيين متغيرات البيئة بشكل مختلف اعتمادًا على سطر الأوامر أو PowerShell)ENABLE_CONTRIB
و ENABLE_HEADLESS
: أي export ENABLE_CONTRIB=1
إذا كنت ترغب في إنشاء opencv-contrib-python
pip wheel . --verbose
. ملاحظة: تأكد من أن لديك أحدث إصدار pip
، حيث يحل أمر pip wheel
محل أمر python setup.py bdist_wheel
القديم الذي لا يدعم pyproject.toml
.setup.py
فسيتم وضع حزمة العجلة في مجلد dist
. الحزمة جاهزة ويمكنك أن تفعل بها ما تريد.manylinux
كمضيفي بناء إذا كانت هناك حاجة إلى أقصى قدر من قابلية النقل وقم بتشغيل auditwheel
للعجلة بعد الإنشاءdelocate
(مثل auditwheel
ولكن لنظام التشغيل macOS) لتحسين إمكانية النقل من أجل إنشاء opencv-python
في بناء تصحيح غير محسّن، تحتاج إلى تجاوز العملية العادية قليلاً.
scikit-build
و numpy
عبر النقطة.python setup.py bdist_wheel --build-type=Debug
.dist/
باستخدام pip install dist/wheelname.whl
.إذا كنت ترغب في أن ينتج البناء جميع أوامر المترجم، فقد تم اختبار المجموعة التالية من العلامات ومتغيرات البيئة للعمل على Linux:
export CMAKE_ARGS='-DCMAKE_VERBOSE_MAKEFILE=ON'
export VERBOSE=1
python3 setup.py bdist_wheel --build-type=Debug
وانظر هذه المسألة لمزيد من المناقشة: رقم 424
منذ الإصدار 4.3.0 من OpenCV، يتم أيضًا توفير توزيعات المصدر في PyPI. هذا يعني أنه إذا كان نظامك غير متوافق مع أي من العجلات في PyPI، فستحاول pip
إنشاء OpenCV من المصادر. إذا كنت بحاجة إلى إصدار OpenCV غير متوفر في PyPI كتوزيع مصدر، فيرجى اتباع إرشادات البناء اليدوية أعلاه بدلاً من هذا.
يمكنك أيضًا إجبار pip
على بناء العجلات من توزيع المصدر. بعض الأمثلة:
pip install --no-binary opencv-python opencv-python
pip install --no-binary :all: opencv-python
إذا كنت بحاجة إلى وحدات مساهمة أو إصدار بدون رأس، فما عليك سوى تغيير اسم الحزمة (ليست هناك حاجة للخطوة 4 في القسم السابق). ومع ذلك، يمكن توفير أي علامات CMake إضافية عبر متغيرات البيئة كما هو موضح في الخطوة 3 من قسم الإنشاء اليدوي. إذا لم يتم توفير أي منها، فستحاول البرامج النصية CMake الخاصة بـ OpenCV العثور على أي تبعيات مناسبة وتمكينها. تحتوي التوزيعات بدون رأس على إشارات CMake مشفرة بشكل ثابت والتي تعمل على تعطيل كافة تبعيات واجهة المستخدم الرسومية الممكنة.
في الأنظمة البطيئة مثل Raspberry Pi، قد يستغرق البناء الكامل عدة ساعات. على معالج Ryzen 7 3700X ثماني النواة، يستغرق البناء حوالي 6 دقائق.
حزمة Opencv-python (البرامج النصية الموجودة في هذا المستودع) متاحة بموجب ترخيص MIT.
OpenCV نفسه متاح بموجب ترخيص Apache 2.
تراخيص حزمة الطرف الثالث موجودة في LICENSE-3RD-PARTY.txt.
يتم شحن جميع العجلات مع FFmpeg المرخص بموجب LGPLv2.1.
يتم شحن عجلات Linux غير مقطوعة الرأس مع Qt 5 المرخصة بموجب LGPLv3.
تتضمن الحزم أيضًا ثنائيات أخرى. يمكن العثور على القائمة الكاملة للتراخيص من LICENSE-3RD-PARTY.txt.
يبحث البرنامج النصي find_version.py
عن معلومات الإصدار من مصادر OpenCV ويقوم أيضًا بإلحاق رقم المراجعة الخاص بهذا المستودع بسلسلة الإصدار. يقوم بحفظ معلومات الإصدار في ملف version.py
ضمن cv2
بالإضافة إلى بعض العلامات الأخرى.
يتم إنشاء الإصدار وتحميله إلى PyPI عندما يتم دفع علامة جديدة إلى الفرع الرئيسي. تميز هذه العلامات بين الحزم (قد يحتوي الريبو هذا على تعديلات ولكن إصدار OpenCV يظل كما هو) ويجب زيادته بالتسلسل. ومن الناحية العملية، تبدو أرقام إصدارات الإصدار كما يلي:
cv_major.cv_minor.cv_revision.package_revision
على سبيل المثال 3.1.0.0
يتبع الفرع الرئيسي إصدارات الفرع الرئيسي لـ OpenCV. يتبع الفرع 3.4 إصدارات OpenCV 3.4 لإصلاح الأخطاء.
سيتم بناء كل التزام بالفرع الرئيسي لهذا الريبو. تستخدم عناصر البناء المحتملة معرفات الإصدار المحلي:
cv_major.cv_minor.cv_revision+git_hash_of_this_repo
على سبيل المثال 3.1.0+14a8d39
لا يمكن تحميل هذه العناصر إلى PyPI ولن يتم تحميلها.
تم تصميم عجلات Linux باستخدام العديد من Linux2014. يجب أن تعمل هذه العجلات خارج الصندوق بالنسبة لمعظم التوزيعات (التي تستخدم مكتبة GNU C القياسية) المتوفرة نظرًا لأنها مبنية على إصدار قديم من glibc.
تم توسيع العديد من صور manylinux2014
الافتراضية مع بعض تبعيات OpenCV. راجع مجلد Docker لمزيد من المعلومات.
يتم توفير عجلات مُصممة مسبقًا ومتوافقة مع Python 3.x لإصدارات Python المدعومة رسميًا (وليس في EOL):
بدءًا من الإصدارين 4.2.0 و3.4.9، تم تحديث بيئة بناء macOS Travis إلى XCode 9.4. أدى هذا التغيير إلى إسقاط الدعم بشكل فعال لإصدارات macOS الأقدم من 10.13.
بدءًا من الإصدار 4.3.0 والإصدار 3.4.10، تم تحديث بيئة بناء Linux من manylinux1
إلى manylinux2014
. أدى هذا إلى إسقاط الدعم لتوزيعات Linux القديمة.
بدءًا من الإصدار 4.7.0، تم تحديث بيئة إنشاء Mac OS GitHub Actions إلى الإصدار 11. وتم إيقاف دعم Mac OS 10.x. راجع الإجراءات/صور العداء#5583
بدءًا من الإصدار 4.9.0، تم تحديث بيئة إنشاء Mac OS GitHub Actions إلى الإصدار 12. تم تجاهل دعم Mac OS 10.x بواسطة Brew ومعظم الحزم المستخدمة.