- JavaCPP 与 Bytedeco
- pom.xml
- 示例
JavaCPP:
JavaCPP提供了在Java中高效访问本地C++的方法。采用JNI技术实现,支持所有 Java 实现包括Android系统,Avian 和 RoboVM。
该工具不仅可以生成 JNI 代码,还可以基于合适的 Java 接口文件直接构建原生库包装库文件(natvie wrapper libriary files),此外,JavaCPP 还可以自动解析 C/C++ 头文件,并生成所需的 Java 接口文件。
Bytedeco
Bytedeco 使用 JavaCPP 技术对现有的 C/C++ 本地库进行再封装,使得这些本地库可以在 Java 平台直接调用。Bytedeco 项目已经成为 Java 与 C/C++ 之间沟通的有力桥梁,使得 Java 开发人员更方便有效的进入计算密集型科学、多媒体、计算机视觉、深度学习等领域。
目前 Bytedeco 团队已经用 JavaCPP 为多个著名C++项目生成了完整的接口,这意味着 Java 应用可以很方便的使用这些C++库:
<dependencies>
<dependency>
<groupId>org.bytedecogroupId>
<artifactId>opencv-platformartifactId>
<version>4.3.0-1.5.3version>
dependency>
dependencies>
上面的依赖添加方式,会将各个平台中的库都引入,依赖包会很大。如果需要在跨平台,可以对依赖进行约束。
比如,应用仅支持 windows 平台,可以如下配置:
<dependency>
<groupId>org.bytedecogroupId>
<artifactId>opencv-platformartifactId>
<version>4.3.0-1.5.3version>
<exclusions>
<exclusion>
<groupId>org.bytedecogroupId>
<artifactId>opencvartifactId>
exclusion>
<exclusion>
<groupId>org.bytedecogroupId>
<artifactId>openblas-platformartifactId>
exclusion>
exclusions>
dependency>
<dependency>
<groupId>org.bytedecogroupId>
<artifactId>openblas-platformartifactId>
<version>0.3.9-1.5.3version>
<exclusions>
<exclusion>
<groupId>org.bytedecogroupId>
<artifactId>openblasartifactId>
exclusion>
exclusions>
dependency>
<dependency>
<groupId>org.bytedecogroupId>
<artifactId>openblasartifactId>
<version>0.3.9-1.5.3version>
dependency>
<dependency>
<groupId>org.bytedecogroupId>
<artifactId>openblasartifactId>
<version>0.3.9-1.5.3version>
<classifier>windows-x86_64classifier>
dependency>
<dependency>
<groupId>org.bytedecogroupId>
<artifactId>opencvartifactId>
<version>4.3.0-1.5.3version>
dependency>
<dependency>
<groupId>org.bytedecogroupId>
<artifactId>opencvartifactId>
<version>4.3.0-1.5.3version>
<classifier>windows-x86_64classifier>
dependency>
OpenBLAS 是一个基于BSD许可(开源)发行的优化 BLAS 计算库。
数学是科学的基础,一般涉及算法的项目拆分到底层也都是基本的科学计算:单个数字、数组、各种维度矩阵之间的 *** 作。BLAS是一个数学计算库的标准,定义了一套矩阵数组 *** 作的API,例如: sgemm float矩阵乘法、sgemv float矩阵乘以数组… 诸如此类。BLAS(Basic Linear Algebra Subprograms 基础线性代数程序集)程序集最初发布于1979年,并用于建立更大的数值程序包(如LAPACK)。在高性能计算领域,BLAS被广泛使用。例如,LINPACK的运算成绩则很大程度上取决于BLAS中子程序DGEMM的表现。为提高性能,各软硬件厂商则针对其产品对BLAS接口实现进行高度优化。
OpenBLAS被应用于科学计算、数据分析、深度学习算法、人工智能等领域,被Caffe、MXNet、julia、Ubuntu、debian、OpenSuse、GNU Octave等知名项目所集成。例如,OpenBLAS被龙芯3A CPU的作为高性能BLAS库所使用
MKL 是英特尔数学核心函数库Intel Math Kernel Library。
示例英特尔数学核心函数库是一套经过高度优化和广泛线程化的数学例程,专为需要极致性能的科学、工程及金融等领域的应用而设计。核心数学函数包括 BLAS、LAPACK、ScaLAPACK1、稀疏矩阵解算器、快速傅立叶转换、矢量数学及其它函数。它可以为当前及下一代英特尔处理器提供性能优化,包括更出色地与 Microsoft Visual Studio、Eclipse和XCode相集成。英特尔MKL 支持完全集成英特尔兼容性OpenMP运行时库,以实现更出色的 Windows/Linux跨平台兼容性。
import org.junit.Before;
import org.junit.Test;
import org.bytedeco.javacpp.Loader;
import org.opencv.core.Mat;
import static org.opencv.highgui.HighGui.imshow;
import static org.opencv.highgui.HighGui.waitKey;
import static org.opencv.imgcodecs.Imgcodecs.imread;
public class MatTest {
@Before
public void init() {
Loader.load(org.bytedeco.opencv.opencv_java.class);
}
@Test
public void readTest() throws Throwable{
Mat mat = imread("images/10.jpg");
imshow("test", mat);
waitKey();
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)