إنشاء الحالة لجميع الأنظمة الأساسية (Android وiOS وLinux وMac OS X وWindows):
الدعم التجاري والخدمات المدفوعة للإعدادات المسبقة المخصصة:
تحتوي وحدات إعدادات JavaCPP المسبقة على تكوينات Java وفئات الواجهة لمكتبات C/C++ المستخدمة على نطاق واسع. يتم استخدام ملفات التكوين الموجودة في حزم org.bytedeco.<moduleName>.presets
بواسطة Parser
لإنشاء ملفات واجهة Java من ملفات رأس C/C++ التي تستهدف حزم org.bytedeco.<moduleName>
، والتي يتم استخدامها بدورها بواسطة Generator
ومترجم C++ الأصلي لإنتاج مكتبات JNI المطلوبة. علاوة على ذلك، تعمل الفئات المساعدة على تسهيل استخدام وظائفها على منصة Java، بما في ذلك Android.
لأغراض التوجيه، يمكن اعتبار توثيق هذا المستودع مقسمًا إلى مستويين:
javacpp-presets
نفسها، و يحتوي ملف README.md الأصلي هذا على معلومات عامة تنطبق على جميع الوحدات النمطية لحل المشكلات المتعلقة بالتنزيلات والمتطلبات العامة وإجراءات التثبيت وتعليمات البناء. تحتوي ملفات README.md المعنية في كل دليل فرعي على معلومات إضافية، وروابط، وملاحظات تتعلق بوثائق واجهة برمجة التطبيقات (API)، ومتطلبات محددة، وتبعيات ملفات pom.xml
، ونموذج كود الاستخدام، للإعدادات المسبقة والحزم الخاصة بكل وحدة. يرجى العلم أنه ليست كل الإعدادات المسبقة لها نفس مستوى النضج، وقد يختلف النمط والتخطيط أيضًا من واحد إلى آخر نظرًا لأنهما يعتمدان على واجهات برمجة التطبيقات الخاصة بمكتبات الطرف الثالث.
يرجى الرجوع إلى صفحة wiki للحصول على مزيد من المعلومات حول كيفية إنشاء إعدادات مسبقة جديدة. نظرًا لعدم وجود وثائق إضافية حاليًا، فلا تتردد أيضًا في طرح الأسئلة على القائمة البريدية أو منتدى المناقشة.
يمكن الحصول على ملفات JAR التي تحتوي على ثنائيات لجميع الوحدات النمطية الفرعية والإصدارات لجميع الأنظمة الأساسية المدعومة (Android وiOS وLinux وMac OS X وWindows) من مستودع Maven المركزي. الأرشيفات التي تحتوي على ملفات JAR هذه متاحة أيضًا كإصدارات.
لتثبيت ملفات JAR يدويًا، اتبع الإرشادات الموجودة في قسم التثبيت اليدوي أدناه.
يمكننا أيضًا تنزيل كل شيء وتثبيته تلقائيًا باستخدام:
pom.xml
) < dependency >
< groupId >org.bytedeco</ groupId >
< artifactId >${moduleName}-platform</ artifactId >
< version >${moduleVersion}-1.5.11</ version >
</ dependency >
build.gradle.kts
أو ملف build.gradle
) dependencies {
implementation( " org.bytedeco: $m oduleName -platform: $m oduleVersion -1.5.11 " )
}
project.clj
) :dependencies [
[~( symbol ( str " org.bytedeco/ " moduleName " -platform " )) ~( str moduleVersion " -1.5.11 " )]
]
build.sbt
) libraryDependencies += " org.bytedeco " % moduleName + " -platform " % moduleVersion + " -1.5.11 "
حيث تتوافق متغيرات moduleName
و moduleVersion
مع الوحدة المطلوبة. يؤدي هذا إلى تنزيل الثنائيات لجميع الأنظمة الأساسية، ولكن للحصول على ثنائيات لمنصة واحدة فقط، يمكننا تعيين خاصية النظام javacpp.platform
(عبر خيار سطر الأوامر -D
) إلى شيء مثل android-arm
، linux-x86_64
، macosx-x86_64
، windows-x86_64
وما إلى ذلك. يمكننا أيضًا تحديد أكثر من منصة واحدة، راجع الأمثلة في تقليل عدد التبعيات. هناك خيار آخر متاح لمستخدمي Gradle وهو Gradle JavaCPP، وبالمثل لمستخدمي Scala هناك SBT-JavaCPP.
لاستخدام إعدادات JavaCPP المسبقة، ستحتاج إلى تنزيل البرنامج التالي وتثبيته:
علاوة على ذلك، في حالة Android، تعتمد إعدادات JavaCPP المسبقة أيضًا على:
ما عليك سوى وضع جميع ملفات JAR المطلوبة ( opencv*.jar
، ffmpeg*.jar
، وما إلى ذلك)، بالإضافة إلى javacpp.jar
، في مكان ما في مسار الفصل الدراسي الخاص بك. ملفات JAR المتوفرة كعناصر معدة مسبقًا مخصصة للاستخدام مع JavaCPP. تم إنشاء ثنائيات Linux باستخدام Ubuntu، لذا يجب أن تعمل على معظم التوزيعات المستخدمة حاليًا. فيما يلي بعض التعليمات الأكثر تحديدًا للحالات الشائعة:
NetBeans (Java SE 7 أو الأحدث):
Eclipse (Java SE 7 أو أحدث):
كود Visual Studio (Java SE 7 أو الأحدث):
+
.IntelliJ IDEA (Android 7.0 أو الأحدث):
app/libs
.+
، وحدد "2 تبعيات الملف".libs
. بعد ذلك، يمكننا الوصول بشفافية تقريبًا إلى واجهات برمجة تطبيقات C/C++ المقابلة من خلال فئات الواجهة الموجودة في حزم org.bytedeco.<moduleName>
. في الواقع، يقوم Parser
بترجمة تعليقات التعليمات البرمجية من ملفات رأس C/C++ إلى ملفات واجهة Java، الجاهزة (تقريبًا) للاستهلاك بواسطة Javadoc. ومع ذلك، نظرًا لأن ترجمتها لا تزال غير مرغوب فيها، فقد يرغب المرء في الرجوع إلى صفحات الوثائق الأصلية. على سبيل المثال، يمكن العثور على تلك الخاصة بـ OpenCV وFFmpeg عبر الإنترنت على:
إذا كانت الملفات الثنائية المتوفرة أعلاه غير كافية لاحتياجاتك، فقد تحتاج إلى إعادة بنائها من التعليمات البرمجية المصدر. ولتحقيق هذه الغاية، تم إنشاء ملفات المشروع على جانب Java كوحدات Maven. افتراضيًا، يقوم إصدار Maven أيضًا بتثبيت المكتبات الأصلية على جانب C/C++ الأصلي باستخدام البرامج النصية cppbuild.sh
، ولكن يمكن أيضًا تثبيتها بوسائل أخرى.
بالإضافة إلى ذلك، يمكن للمرء أن يجد على صفحة wiki معلومات إضافية حول بيئات البناء الموصى بها للمنصات الرئيسية.
تعتمد إعدادات JavaCPP المسبقة على Maven، وهو نظام بناء قوي لـ Java، لذا قبل محاولة البناء، تأكد من التثبيت والقراءة:
تعتمد كل وحدة فرعية بدورها بشكل افتراضي على البرامج النصية cppbuild.sh
المضمنة، الموضحة أدناه، لتثبيت المكتبات الأصلية المقابلة لها في الدليل الفرعي cppbuild
. لاستخدام المكتبات الأصلية المثبتة بالفعل في مكان آخر على النظام، يمكن أيضًا تحديد أدلة تثبيت أخرى غير cppbuild
إما في ملفات pom.xml
أو في ملفات تكوين .java
. الإصدارات التالية مدعومة:
بمجرد تثبيت كل شيء وتكوينه، قم بالتنفيذ ببساطة
$ mvn install --projects .,opencv,ffmpeg,etc. -Djavacpp.platform.root=/path/to/android-ndk/
داخل الدليل الذي يحتوي على ملف pom.xml
الأصل، عن طريق تحديد الوحدات الفرعية المطلوبة فقط في الأمر، ولكن بدون النقطة البادئة "." في قائمة المشاريع المفصولة بفواصل، قد لا يتم تثبيت ملف pom.xml
الأصلي نفسه. (الخيار -Djavacpp.platform.root=...
مطلوب فقط لإصدارات Android.) حدد أيضًا -Djavacpp.cppbuild.skip
كخيار لتخطي تنفيذ البرامج النصية cppbuild.sh
. بالإضافة إلى -Djavacpp.platform=...
، يمكن أيضًا إنشاء بعض الإعدادات المسبقة وفقًا لـ CUDA باستخدام -Djavacpp.platform.extension=-gpu
أو CPython مع -Djavacpp.platform.extension=-python
. يرجى الرجوع إلى التعليقات الموجودة داخل ملف pom.xml
لمزيد من التفاصيل. من الدليل الفرعي "النظام الأساسي"، يمكننا أيضًا تثبيت عناصر "النظام الأساسي" باستخدام أمر مماثل:
$ cd platform
$ mvn install --projects ../opencv/platform,../ffmpeg/platform,etc. -Djavacpp.platform.host
cppbuild.sh
يتيح لنا تشغيل البرامج النصية تثبيت المكتبات الأصلية بسهولة على منصات متعددة، ولكن يلزم وجود برامج إضافية:
مع تنفيذ ما سبق، يتم تشغيل البرامج النصية تلقائيًا كجزء من دورة حياة بناء Maven، ولكن يمكننا أيضًا تنفيذها يدويًا
$ ANDROID_NDK=/path/to/android-ndk/ bash cppbuild.sh [-platform < name > ] [-extension < name > ] < install | clean > [projects]
حيث تكون أسماء المنصات المحتملة هي:
android-arm
android-arm64
android-x86
android-x86_64
ios-arm64
ios-x86_64
linux-armhf
linux-arm64
linux-ppc64le
linux-x86
linux-x86_64
macosx-arm64
macosx-x86_64
windows-x86
windows-x86_64
يتطلب ملحق -gpu
كما تدعمه بعض الإصدارات أيضًا تثبيت CUDA. (متغير ANDROID_NDK
مطلوب فقط لإصدارات Android.) يرجى ملاحظة أن البرامج النصية تقوم بتنزيل أرشيفات المصدر من المواقع المناسبة حسب الضرورة.
لتجميع الثنائيات لجهاز Android بدون FPU، تأكد أولاً من أن هذا هو ما تريده. بدون FPU، سيكون أداء OpenCV أو FFmpeg غير مقبول. إذا كنت لا تزال ترغب في الاستمرار في هذا الطريق، فاستبدل "armeabi-v7a" بـ "armeabi" و"-march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16" بـ "-march=armv5te -mtune" =xscale -msoft-float"، داخل ملفات مختلفة.
على الرغم من أن JavaCPP يمكنه التقاط المكتبات الأصلية المثبتة على النظام، إلا أن البرامج النصية موجودة لتسهيل عملية الإنشاء عبر منصات متعددة. كما أنها تسمح لـ JavaCPP بنسخ المكتبات الأصلية وتحميلها في وقت التشغيل من ملفات JAR التي تم إنشاؤها أعلاه بواسطة Maven، وهي ميزة مفيدة للتطبيقات المستقلة أو تطبيقات Java. علاوة على ذلك، تعمل الحيل مثل ما يلي مع JNLP:
< resources os = " Linux " arch = " x86 i386 i486 i586 i686 " >
< jar href = " lib/opencv-linux-x86.jar " />
< jar href = " lib/ffmpeg-linux-x86.jar " />
</ resources >
< resources os = " Linux " arch = " x86_64 amd64 " >
< jar href = " lib/opencv-linux-x86_64.jar " />
< jar href = " lib/ffmpeg-linux-x86_64.jar " />
</ resources >
شكرًا لخوسيه غوميز على اختبار ذلك!
المساهمات من أي نوع هي موضع ترحيب كبير! في الوقت الحالي، يتمتع Parser
بقدرات محدودة، لذا أخطط لتحسينه تدريجيًا إلى الحد الذي يمكنه فيه تحليل ملفات رأس C++ الكبيرة بنجاح والتي تكون أكثر تعقيدًا من تلك الموجودة في OpenCV أو Caffe أو TensorFlow، ولكن يمكن لنظام البناء يمكن تحسينها أيضًا. وبالتالي، فإنني أبحث عن المساعدة خاصة في المهام الخمس التالية، دون ترتيب معين:
Parser
(باستخدام الإعدادات المسبقة لـ LLVM وClang؟)linux-armhf
لـ Raspberry Pi، وما إلى ذلك.للمساهمة، يرجى التفرع وإنشاء طلبات السحب، أو نشر اقتراحاتك باعتبارها "مشكلة" جديدة. شكرا جزيلا مقدما على مساهمتك!
قائد المشروع: صامويل أوديت samuel.audet at
gmail.com
موقع المطور: https://github.com/bytedeco/javacpp-presets
مجموعة المناقشة: http://groups.google.com/group/javacpp-project