JavaCV, JavaCPP,和JavaCPP Presets的关系

JavaCPP初体验 JavaCPP Presets模块包含用于广泛使用的C / C ++库的Java配置和接口类。 解析器使用org.bytedeco。<moduleName> .presets包中的配置文件从C / C ++头文件中创建以org.bytedeco。<moduleName>包为目标的Java接口文件。 生成器和本机C ++编译器,以生成所需的JNI库。 此外,帮助程序类使它们的功能更易于在Java平台(包括Android)上使用。 有关如何创建新预设的更多信息,请参考Wiki页面。 由 阅读详情

本文旨在帮助理解JavaCV, JavaCPP,和JavaCPP Presets之间的关系

 

JavaCV是对各种常用计算机视觉库的封装后的一组jar包,其中封装了ffmpeg、OpenCV、libdc1394、OpenKinect、videoInput和ARToolKitPlus等计算机视觉编程人员常用库的接口,可以通过其中的utility类方便的在包括Android在内的Java平台上调用这些接口。其中使用最多的应该就是ffmpeg了。

 

JavaCV 提供了在计算机视觉领域的封装库,由 JavaCPP Presets 封装而得,包括:OpenCV、ARToolKitPlus、libdc1394 2.x 、PGR FlyCapture和FFmpeg。此外,该工具可以很容易地使用Java平台的功能。

JavaCV 还带有硬件加速的全屏幕图像显示(CanvasFrame),易于在多个内核中执行并行代码(并行),用户友好的几何和色彩的相机和投影仪校准(GeometricCalibrator,ProCamGeometricCalibrator,ProCamColorCalibrator ),检测和特征点(ObjectFinder),一类是实现投影,摄像系统(直接图像对齐设置匹配主要GNImageAligner,ProjectiveTransformer,ProjectiveGainBiasTransformer,ProCamTransformer 和ReflectanceInitializer),以及在 JavaCV 类杂项功能。

 

JavaCPP提供了在Java中高效访问本地C++的方法。采用JNI技术实现,支持所有Java实现包括Android系统,Avian 和 RoboVM。

JavaCPP提供了一系列的Annotation将Java代码映射到C++代码,并使用一个可执行的jar包将C++代码转化为可以从JVM内调用的动态链接库文件。

 

JavaCPP Presets 包括了java配置及一些被广泛应用的C/C++库接口。

 

可以简单的理解为JavaCV利用了JavaCPP和JavaCPP Presets做支持。

更多英文解释见下:

JavaCV uses wrappers from the JavaCPP Presets of commonly used libraries by researchers in the field of computer vision (OpenCV, FFmpeg, libdc1394, PGR FlyCapture, OpenKinect, librealsense, CL PS3 Eye Driver, videoInput, ARToolKitPlus, flandmark, Leptonica, and Tesseract) and provides utility classes to make their functionality easier to use on the Java platform, including Android.

JavaCV also comes with hardware accelerated full-screen image display (CanvasFrame and GLCanvasFrame), easy-to-use methods to execute code in parallel on multiple cores (Parallel), user-friendly geometric and color calibration of cameras and projectors (GeometricCalibrator, ProCamGeometricCalibrator, ProCamColorCalibrator), detection and matching of feature points (ObjectFinder), a set of classes that implement direct image alignment of projector-camera systems (mainly GNImageAligner, ProjectiveTransformer, ProjectiveColorTransformer, ProCamTransformer, and ReflectanceInitializer), a blob analysis package (Blobs), as well as miscellaneous functionality in the JavaCV class. Some of these classes also have an OpenCL and OpenGL counterpart, their names ending with CL or starting with GL, i.e.: JavaCVCL, GLCanvasFrame, etc.

 

 


 

 

JavaCPP provides efficient access to native C++ inside Java, not unlike the way some C/C++ compilers interact with assembly language. No need to invent new languages such as with SWIG, SIP, C++/CLI, Cython, or RPython. Instead, similar to what cppyy strives to do for Python, it exploits the syntactic and semantic similarities between Java and C++. Under the hood, it uses JNI, so it works with all implementations of Java SE, in addition to Android, Avian, and RoboVM (instructions).

More specifically, when compared to the approaches above or elsewhere (CableSwig, JNIGeneratorApp, cxxwrap, JNIWrapper, Platform Invoke, GlueGen, LWJGL Generator, JNIDirect, ctypes, JNA, JNIEasy, JniMarshall, JNative, J/Invoke, HawtJNI, JNR, BridJ, CFFI, fficxx, CppSharp, cgo, rust-bindgen, etc.), it maps naturally and efficiently many common features afforded by the C++ language and often considered problematic, including overloaded operators, class and function templates, callbacks through function pointers, function objects (aka functors), virtual functions and member function pointers, nested struct definitions, variable length arguments, nested namespaces, large data structures containing arbitrary cycles, virtual and multiple inheritance, passing/returning by value/reference/string/vector, anonymous unions, bit fields, exceptions, destructors and shared or unique pointers (via either try-with-resources or garbage collection), and documentation comments. Obviously, neatly supporting the whole of C++ would require more work (although one could argue about the intrinsic neatness of C++), but we are releasing it here as a proof of concept.

As a case in point, we have already used it to produce complete interfaces to OpenCV, FFmpeg, libdc1394, PGR FlyCapture, OpenKinect, videoInput, ARToolKitPlus, Leptonica, Tesseract, GSL, LLVM, HDF5, MKL, CUDA, Caffe, MXNet, TensorFlow, System APIs, and others as part of the JavaCPP Presets subproject, also demonstrating early parsing capabilities of C/C++ header files that show promising and useful results.

 

 

 

 

 

The JavaCPP Presets module contains Java configuration and interface classes for widely used C/C++ libraries.  The configuration files in the org.bytedeco.javacpp.presets package are used by the Parser to create from C/C++ header files the Java interface files targeting the org.bytedeco.javacpp package, which is turn are used by the Generator and the native C++ compiler to produce the required JNI libraries. Moreover, helper classes make their functionality easier to use on the Java platform, including Android.

 

 

 

 

Each child module in turn relies by default on the included cppbuild.sh scripts, explained below, to install its corresponding native libraries in the cppbuild subdirectory. To use native libraries already installed somewhere else on the system, other installation directories than cppbuild can also be specified either in the pom.xml files or in the .java configuration files. The following versions are supported:

 

 

 


起初Javacv是googlecode下面的一个项目,后续迁移到了github,并且包名也由com.googlecode.javacv改为org.bytedeco.javacv,网上的demo主要有两个:
https://github.com/peirenlei/FFmpegRecorder
https://github.com/CrazyOrr/FFmpegRecorder

 

ffmpeg也有私人封装(Andrew Brampton)的java api接口,详见:

https://github.com/bramp/ffmpeg-cli-wrapper

<dependency>
  <groupId>net.bramp.ffmpeg</groupId>
  <artifactId>ffmpeg</artifactId>
  <version>0.6.2</version>
</dependency>

 

 

在深度学习方面,JavaCPP,  JavaCPP Presets, 和 JavaCV 已被集成到 ND4J 和 Deeplearning4j,  Caffe , cuDNN,  MXNet, TensorFlow.

 


参考资料:

 

https://www.jianshu.com/p/fd3349d6622a
https://www.jianshu.com/p/4d047a0d58e1

http://bytedeco.org/news/2016/05/15/deeper-in-deep-learning/

https://github.com/bytedeco/javacpp-presets

https://github.com/bytedeco/javacpp

https://github.com/bytedeco/javacv

JavaCPP快速入门(官方demo增强版) #include #include"NativeLibrary.h" using namespace NativeLibrary; int main(){ MyFunc myFunc; int value = myFunc.add(1, 2); std::cout << "add value " << value << std::endl; return 0; } 执行以下命令,编译NativeLibrary.cpp,得到so文件libMyFunc.so: g++ - 阅读详情

相关推荐

CentOS 下通过 JavaCPP 调用 FFMPEG

FFMPEG是一个广泛用于媒体处理的库,在Java的世界里,处理视频的能力相当弱,于是有很大需求需要Java 调用 FFMPEG。Java 调用C的方式有很多,可以用最原始的JNI方式,也可以JNA方式,还可以是命令行。 这里介绍的是用JavaCPP 调用 ffmpeg 库的方式,而不是命令行模式。

jTeam的专栏 1万+

JavaCPP 技术使用经验总结

本文是对 JNI 技术的一个补充方法,提出了替换 JNI、JNA 的一种开源技术。首先对 JavaCPP 技术进行简单介绍及对应于其他现有方案的介绍、对比。接下来,通过一个简单的示例让大家了解 JavaCPP 的工作原理。然后,介绍了 JavaCPP presets 子项目,最后通过若干个针对 presets 的示例来让大家了解如何使用它,本文主要提出了替换 JNI 的一种编程实现方式。 0

程序是有生命的精灵 1万+

JavaCPP Presets依赖管理实战:解决org.bytedeco下载慢、编译失败与平台兼容性问题

在Java生态中集成高性能原生库(如OpenCV、FFmpeg)时,JNI技术是连接Java与C/C++世界的关键桥梁。其原理是通过Java Native Interface实现跨语言调用,使Java程序能够直接利用底层原生代码的性能优势。这一技术对图像处理、音视频编解码和机器学习等计算密集型场景具有重要价值,能显著提升应用执行效率。然而,在实际工程实践中,基于JNI封装的依赖包(如org.bytedeco系列)常面临网络下载缓慢、平台兼容性差和编译环境复杂等挑战。针对gradle首次下载依赖包时网络卡住和

weixin_30552811的博客 376

cffi java_JavaCV, JavaCPP,和JavaCPP Presets的关系

本文旨在帮助理解JavaCV, JavaCPP,和JavaCPP Presets之间的关系JavaCV是对各种常用计算机视觉库的封装后的一组jar包,其中封装了ffmpeg、OpenCV、libdc1394、OpenKinect、videoInput和ARToolKitPlus等计算机视觉编程人员常用库的接口,可以通过其中的utility类方便的在包括Android在内的Java平台上调用这些接口...

weixin_39899691的博客 402

Java版流媒体编解码和图像处理(JavaCPP+FFmpeg),java项目技术架构图

这个git项目中有多个文件夹,本篇的源码在javacv-tutorials文件夹下,如下图红框所示: javacv-tutorials文件夹下有多个子工程,本篇的源码在ffmpeg-basic文件夹下,如下图红框: 开始编码 为了统一管理源码和jar依赖,项目采用了maven父子结构,父工程名为javacv-tutorials,里面有一些jar的版本定义,就不多说了 在javacv-tutorials下面新建名为ffmpeg-basic的子工程,其pom.xml内容如下,可见仅用了Jav.

m0_64867003的博客 1195

javacpp:Java和本机C ++之间缺少的桥梁

JavaCPP 商业支持: 介绍 JavaCPP提供了对Java内部本机C ++的有效访问,这与某些C / C ++编译器与汇编语言进行交互的方式不同。 无需发明新的语言,例如 , , , 或 。 相反,类似于为Python努力,它利用了Java与C ++之间的语法和语义相似性。 在后台,它使用JNI,因此除了 , 和 ()外,它还可以与Java SE的所有实现。 更具体地说,当与上述方法或其他方法( , , , , , , , , , , , , , , , , , , , , , , , 等),它自然而有效地映射了C ++语言提供的许多常见功能,通常被认为是有问题的,包括重载运算符,类和函数模板,通过函数指针,函数对象(又称函子),虚函数和成员函数指针,嵌套的结构定义,可变长度参数,嵌套的名称空间,包含任意循环的大型数据结构,虚拟和多重继承,按值/引用/字符串/传递/返回向量,匿名联合,位字段,异常,析构函数和共享或唯一指针(通过try-with-resources或垃圾收集),以及文档注释。 显然,要对整个C ++进行整洁地支

JavaCV/javacpp opencv 结合freetype显示汉字

opencv 写中文到图片上 网上有很多都是本地安装的 然后配合freetype工作 javacv使用的是javacpp 不能用c/c++的直接解决方案, 翻看了opencv的各个modules 发现在opencv_contrib的modules下有freetype这个模块 下载源码 ...

chuanxing2807的博客 1475

javacpp-presets-helloworld.zip

javacpp工具能自动封装生成java调用c++接口所需的jni库,此处提供helloworld样例便于快速上手

FFmpeg+javacpp+javacv使用

在内部创建并以缺省值初始化部分成员。但是,如果调用者希望自己创建该结构,则需要显式为该结构的一些成员置缺省值;如果没有缺省值的话,会导致之后的动作产生异常。是从streams数组的各个AVStream中推断出的多媒体文件的起始时间和长度,以微妙为单位。这是FFMpeg中最为基本的一个结构,是其他所有结构的根,是一个多媒体文件或流的根本抽象。– 一个完整的跨平台解决方案,用于录制、转换和流式传输音频和视频。则指向一个控制底层数据读写的ByteIOContext结构。指向对应的demuxer和muxer指针;

许浑的博客 2313

快手极速版抓包实战:安卓/iOS双端获取client_salt全流程解析(避坑指南)

本文详细解析了在安卓和iOS平台上获取快手极速版关键参数`client_salt`的全流程,包括环境配置、抓包工具使用、参数识别与转换等实战技巧。特别针对双端差异和反抓包机制提供了避坑指南,帮助开发者高效安全地完成数据获取任务。

weixin_29021195的博客 714

U2Net网络实战:从原理到代码实现(附背景去除应用)

本文深入解析了U2Net网络的原理与代码实现,重点剖析了其独特的嵌套U型结构(RSU模块)和显著图融合机制。通过实战演示,指导读者如何加载预训练模型并应用于精准的图像背景去除任务,为电商、摄影等领域提供高效的自动化抠图解决方案。

nn3456的博客 491

CentOS系统下使用maven编译javaCPP-ffmpeg

由于想要利用javaCV调用ffmpeg的API,遇到了一个很奇怪的错误,在网上查了半天,真的很费力,最终问题还是没有解决,自己被一个问题困扰到了,却没有发现或许这个问题并不是一个问题,现在想想还真是有点郁闷,编译了一天还是没有编译成功。之前看的是(http://www.ibm.com/developerworks/cn/java/j-lo-cpp/)这篇博文的教程,说的很简单,但是中间遇到的问题

zs_147的博客 5140

统一大型语言模型和知识图谱:路线图

大型语言模型(LLM),如ChatGPT和GPT4,由于其涌现能力和泛化性,正在自然语言处理和人工智能领域掀起新的浪潮。然而,LLM是黑箱模型,通常无法捕捉和获取事实知识。相反,知识图谱(KGs),例如维基百科和华普,是显式存储丰富事实知识的结构化知识模型。KGs可以通过为推理和可解释性提供外部知识来增强LLM。同时,KGs很难从本质上构建和演化,这对KGs中现有的生成新事实和表示未知知识的方法提出了挑战。因此,将LLM和KGs统一在一起并同时利用它们的优势是相辅相成的。

qq_32907491的博客 2842

CentOS 下通过 JavaCPP 调用FFMpeg

1. Java 与 FFMPEG    FFMPEG 是一个广泛用于媒体处理的库,在Java的世界里,处理视频的能力相当弱,于是有很大需求需要Java 调用 FFMPEG。   Java 调用C 的方式有很多,可以用最原始的JNI方式,也可以JNA方式,还可以是命令行。    采用命令行的方式比较简单,不过有很大局限性,尤其是涉及到 视频的处理和分析的时候,比如要取出某个packet,然后...

iteye_7202的博客 509

Python | KS检验以及其余非参数检验的实现

Python | KS检验以及其余非参数检验的实现1 什么是KS检验2 KS检验分类?3 KS检验的Python实现3.1 检验指定的数列是否服从正态分布3.2 检验指定的两个数列是否服从相同分布4 其余的非参数检验4.1 Wilcoxon符号秩检验(t检验的非参数版本)4.2 Kruskal-Wallis H检验(方差分析的非参数版本)4.3 Mann-Whitney秩检验5 参考 1 什么是KS检验 定义:检验一个分布f(x)与理论分布g(x)【比如正态分布】是否一致,或两个观测值分布是否有显著差异的检

RUC_Lee的博客 1万+

小红书私信接口与Hook技术实战:微信跳转卡片的合规与破解之道

本文深入探讨了小红书私信接口与Hook技术的实战应用,重点解析了微信跳转卡片的合规使用与破解方法。通过官方私信接口的合规玩法与Xposed框架的Hook技术对比,为开发者提供了技术选型指南和实战建议,帮助实现高效的用户跳转与转化。

weixin_30399821的博客 736

JavaCPP项目和类库项目_JavaCV_OpenCV

JavaCPP The missing bridge between Java and native C++ JavaCPP Presets 类库 The missing bridge between Java and native C++ libraries

VB.Net+Android.java 1843

拿下华为性格测试!

华为性格测试指南

weixin_41171614的博客 5276

javacpp linux arm64,pom.xml · Gitee 极速下载/javacpp-presets - Gitee.com

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">4.0.0org.bytedecojavacpp-presets1.5.6-SNAPSHOTpomJavaCPP PresetsThe missing bridge between Java and n...

weixin_36239480的博客 477

一文入门车载以太网:从原理到实战,看完就能上手开发

新手选型遵循“适配场景、兼顾成本、优先车规”的原则:普通场景(车载娱乐、普通诊断):100Base-T1 PHY(LAN8742)+ 非TSN交换机(SJA1105)+ STM32H743 ECU + 普通STP线缆;ADAS场景:1000Base-T1 PHY(TJA1101)+ TSN交换机(SJA1110)+ NXP S32G399 ECU + 高抗干扰STP线缆;避免过度选型:如普通娱乐场景无需选择TSN交换机、ASIL-B级芯片,否则会增加成本;

getusushu的博客 318

YOLOv11架构革新:华为VanillaNet与BiFPN深度融合的突破性改进实战指南

购买即可解锁300+YOLO优化文章,并且还有海量深度学习复现项目,价格仅需两杯奶茶的钱,别人有的本专栏也有!

LXY_LOVE36的博客 136

centos编译java失败_JavaCV CentOS7编译

编者注之前在Mac上简简单单就可以直接使用了,但是迁移到了CentOS,JavaCV获取相同的mov帧数时,总是获取0帧。在CentOS 6尝试编译各种缺少库,编译出现问题。这里仅仅只记录CentOS7CentOS7更新到最新环境yum update安装gitCentOS7刚刚安装好后是没有git的,需要重新安装gityum install git -y安装编译所使用的其他库yum install...

weixin_35691526的博客 977

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Android Studio配置JavaCPP Presets for OpenCV

通过使用JavaCV,无需复杂的配置就可调用OpenCV_Contrib中的算法,比较方便。而OpenCV官方目前是不提供For Android扩展包下载的。 一、      配置Jar文件方式 参考 https://www.jianshu.com/p/7f9d31839b8f 1.   下载jar 在http://bytedeco.org/download/下载 解压 2.  

xyx2999的专栏 2406

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

FFmpeg+javacpp中FFmpegFrameGrabber

1、FFmpegFrameGrabber org\bytedeco\javacv\FFmpegFrameGrabber.java

许浑的博客 916

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

上一篇: FFmpeg 使用详解
下一篇: 加权随机抽样算法
Code_LT
博客等级 码龄10年 307粉丝 182原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值