สร้างสถานะสำหรับทุกแพลตฟอร์ม (Android, iOS, Linux, Mac OS X, Windows):
การสนับสนุนเชิงพาณิชย์และบริการแบบชำระเงินสำหรับการตั้งค่าล่วงหน้าแบบกำหนดเอง:
โมดูล JavaCPP Presets มีการกำหนดค่า Java และคลาสอินเทอร์เฟซสำหรับไลบรารี C/C++ ที่ใช้กันอย่างแพร่หลาย ไฟล์การกำหนดค่าในแพ็คเกจ org.bytedeco.<moduleName>.presets
ถูกใช้โดย Parser
เพื่อสร้างจากไฟล์ส่วนหัว C/C++ ไฟล์อินเทอร์เฟซ Java ที่กำหนดเป้าหมายแพ็คเกจ org.bytedeco.<moduleName>
ซึ่งในทางกลับกันจะถูกใช้โดย Generator
และคอมไพเลอร์ C++ ดั้งเดิมเพื่อสร้างไลบรารี JNI ที่จำเป็น นอกจากนี้ คลาสตัวช่วยยังทำให้ฟังก์ชันการทำงานง่ายขึ้นบนแพลตฟอร์ม Java รวมถึง Android
เพื่อวัตถุประสงค์ในการปฐมนิเทศ เอกสารของพื้นที่เก็บข้อมูลนี้สามารถแบ่งออกเป็น 2 ระดับ:
javacpp-presets
เอง และ ไฟล์ README.md พาเรนต์นี้มีข้อมูลทั่วไปที่เกี่ยวข้องกับโมดูลทั้งหมดเพื่อแก้ไขปัญหาที่เกี่ยวข้องกับการดาวน์โหลด ข้อกำหนดทั่วไป ขั้นตอนการติดตั้ง และคำแนะนำในการสร้าง ไฟล์ README.md ที่เกี่ยวข้องในแต่ละไดเร็กทอรีย่อยมีข้อมูลเพิ่มเติม ลิงก์ และหมายเหตุเกี่ยวกับเอกสารประกอบ API ข้อกำหนดเฉพาะ การขึ้นต่อกันสำหรับไฟล์ pom.xml
และโค้ดการใช้งานตัวอย่างสำหรับค่าที่ตั้งไว้ล่วงหน้าและแพ็คเกจของแต่ละโมดูล โปรดทราบว่าค่าที่ตั้งไว้ล่วงหน้านั้นไม่ได้มีระดับวุฒิภาวะเท่ากัน และสไตล์และเค้าโครงอาจแตกต่างกันไปในแต่ละครั้งเนื่องจากจะขึ้นอยู่กับ API ของไลบรารีบุคคลที่สาม
โปรดดูหน้าวิกิสำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการสร้างค่าที่ตั้งไว้ล่วงหน้าใหม่ เนื่องจากขณะนี้ยังขาดเอกสารเพิ่มเติม โปรดอย่าลังเลที่จะถามคำถามในรายชื่ออีเมลหรือกระดานสนทนา
ไฟล์ JAR ที่มีไบนารีสำหรับโมดูลย่อยทั้งหมดและบิลด์สำหรับแพลตฟอร์มที่รองรับทั้งหมด (Android, iOS, Linux, Mac OS X และ Windows) สามารถรับได้จาก Maven Central Repository ไฟล์เก็บถาวรที่มีไฟล์ 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 Presets คุณจะต้องดาวน์โหลดและติดตั้งซอฟต์แวร์ต่อไปนี้:
นอกจากนี้ ในกรณีของ Android นั้น JavaCPP Presets ยังต้องอาศัย:
เพียงใส่ไฟล์ 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 File dependency"libs
หลังจากนั้น เราสามารถเข้าถึง C/C++ API ที่เกี่ยวข้องได้เกือบจะโปร่งใสผ่านคลาสอินเทอร์เฟซที่พบในแพ็คเกจ org.bytedeco.<moduleName>
อันที่จริง Parser
แปลความคิดเห็นโค้ดจากไฟล์ส่วนหัว C/C++ ไปเป็นไฟล์อินเทอร์เฟซ Java (เกือบ) พร้อมที่จะใช้งานโดย Javadoc อย่างไรก็ตาม เนื่องจากการแปลของพวกเขายังคงเป็นที่ต้องการ เราอาจต้องการดูหน้าเอกสารต้นฉบับ ตัวอย่างเช่น รายการสำหรับ OpenCV และ FFmpeg สามารถพบได้ทางออนไลน์ที่:
หากไฟล์ไบนารีที่มีอยู่ด้านบนไม่เพียงพอต่อความต้องการของคุณ คุณอาจต้องสร้างไฟล์เหล่านั้นใหม่จากซอร์สโค้ด ด้วยเหตุนี้ ไฟล์โปรเจ็กต์ในฝั่ง Java จึงถูกสร้างขึ้นเป็นโมดูล Maven ตามค่าเริ่มต้น Maven build ยังติดตั้งไลบรารีดั้งเดิมบนฝั่ง C/C++ ดั้งเดิมด้วยสคริปต์ cppbuild.sh
แต่ก็สามารถติดตั้งด้วยวิธีอื่นได้เช่นกัน
นอกจากนี้ สามารถพบได้ในหน้าวิกิข้อมูลเพิ่มเติมเกี่ยวกับสภาพแวดล้อมการสร้างที่แนะนำสำหรับแพลตฟอร์มหลัก
ค่าที่ตั้งล่วงหน้า 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 build แต่เรายังสามารถดำเนินการด้วยตนเองได้เช่นกัน
$ 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 >
ขอขอบคุณ Jose Gómez สำหรับการทดสอบนี้!
ยินดีเป็นอย่างยิ่งที่จะมีส่วนร่วมทุกรูปแบบ! ในขณะนี้ Parser
มีความสามารถที่จำกัด ดังนั้นฉันจึงวางแผนที่จะปรับปรุงมันทีละน้อยจนถึงจุดที่สามารถแยกวิเคราะห์ไฟล์ส่วนหัว C++ ขนาดใหญ่ที่ซับซ้อนกว่าไฟล์จาก OpenCV, Caffe หรือ TensorFlow ได้สำเร็จ แต่ระบบการสร้างสามารถทำได้ ยังได้รับการปรับปรุงให้ดีขึ้น ด้วยเหตุนี้ ฉันจึงต้องการความช่วยเหลือโดยเฉพาะกับงานห้าอย่างต่อไปนี้ โดยไม่เรียงลำดับเป็นพิเศษ:
Parser
(โดยใช้การตั้งค่าล่วงหน้าสำหรับ LLVM และ Clang?)linux-armhf
สำหรับ Raspberry Pi ฯลฯหากต้องการมีส่วนร่วม โปรดแยกและสร้างคำขอดึงข้อมูล หรือโพสต์ข้อเสนอแนะของคุณเป็น "ปัญหา" ใหม่ ขอบคุณมากล่วงหน้าสำหรับการสนับสนุนของคุณ!
หัวหน้าโครงการ: Samuel Audet samuel.audet at
gmail.com
ไซต์ผู้พัฒนา: https://github.com/bytedeco/javacpp-presets
กลุ่มสนทนา: http://groups.google.com/group/javacpp-project