当前位置: 首页 > article >正文

Java - 在Linux系统上使用OpenCV和Tesseract

系统环境

确保Linux系统安装了cmake构建工具,以及java和ant(这两者如果没有,可能会影响到后面编译opencv生成.so和.jar文件)。

sudo apt-get update
sudo apt-get install build-essential
sudo apt install cmake
  • build-essential 包包含了 GCC、G++ 以及其他编译所需的工具。

下载OpenCV

从GitHub(Releases · opencv/opencv · GitHub)下载OpenCV的Sources源码包到本地,本文使用的是 OpenCV 4.10.0 版本,如下图:

wget -O 4.10.0.tar.gz https://github.com/opencv/opencv/archive/refs/tags/4.10.0.tar.gz 

 构建OpenCV

1、解压

tar -zxvf opencv-4.10.0.tar.gz 

2、cd opencv-4.10.0,然后 mkdir build,新建build目录,准备编译opencv

cd opencv-4.10.0/ && mkdir build

此时opencv-4.10.0目录下内容如图:

 3、cd build,进入到刚才新建的build目录,使用cmake命令编译opencv,命令如下:

cd build
cmake -D CMAKE_BUILD_TYPE=Release -D BUILD_SHARED_LIBS=OFF -D CMAKE_INSTALL_PREFIX=/home/summergao/opencv_install ..
  • BUILD_SHARED_LIBS=OFF,目的是让opencv各模块(比如core、imgproc等)的代码经过编译后集中在一个.so文件中,方便加载
  • CMAKE_INSTALL_PREFIX=/home/summergao/opencv_install,指定了opencv的安装目录(opencv_install也是自己新建的),如果只是为了编译得到.so文件,此参数可以不写
  • 最后的 .. 表示CMakeLists.txt所在的目录,相对于当前目录build,就是上级目录。

运行命令后,控制台部分打印信息如下:

 

这里列出了即将要编译的模块; 

 没有安装java和ant,这里就会全部展示为NO,此外编译高版本的opencv时,此处如果有Java wrappers属性为NO,则需要配置JAVA_HOME环境变量。

构建常见问题及解决办法

You should create a separate directory for build files.

解决办法:执行 rm CMakeCache.txt 命令清除 CMake 的缓存信息

rm CMakeCache.txt

执行 rm CMakeCache.txt 命令的主要目的是清除 CMake 的缓存信息。当你在使用 CMake 构建项目的过程中遇到以下情况时,可能需要清除这个缓存文件:

1. 更改了 CMake 配置选项

如果你在修改了 CMakeLists.txt 文件或者想要更改之前 cmake 命令中的配置选项(如 -D 参数指定的变量),但发现新的配置没有生效,可能是因为 CMake 仍然使用了之前缓存的设置。此时,删除 CMakeCache.txt 文件,然后重新运行 cmake 命令,CMake 就会重新进行配置,使用新的选项。

2. 编译器或依赖库路径发生变化

如果系统中编译器的路径或者依赖库的安装路径发生了改变,CMake 可能仍然使用旧的路径信息。删除缓存文件后,重新运行 cmake,它会重新查找这些路径,确保使用最新的配置。

3. 解决 CMake 配置错误

有时候,CMake 在配置过程中可能会出现一些错误,这些错误可能是由于缓存文件中的信息不一致导致的。通过删除 CMakeCache.txt 文件,可以尝试解决这些配置错误

编译OpenCV

执行命令:make,开始编译,经过较长时间的等待,如果进度到100%且没有报错,则编译完成;此时build目录下生成了一系列文件,其中lib目录中,就有我们需要的libopencv_java4100.so 文件,此外bin目录中,还生成了 opencv-4100.jar 这个jar包文件。

make

安装OpenCV

执行命令:make install,则会开始安装opencv,不过我们已经拿到了.so文件,能够实现java程序中的调用,这步可以省去。

make install

正常来说,有了.so文件,我们的java程序就可以在Linux系统上,使用System.load方法来加载它,从而使用OpenCV的功能了;如果加载过程中报错,提示依赖文件(比如xx.so)没有找到,可以使用 sudo apt-get install 命令安装依赖后再试。
可能需要的依赖项:libjpeg-turbo-devel、libpng-devel、libtiff-devel、jasper-devel、gtk2-devel、gstreamer-plugins-base-devel,如果他们已经被安装,通常可以在/usr/lib64这个文件夹下找到对应的.so文件。

static {
    URL url = ClassLoader.getSystemResource("/home/summergao/opencv-4.10.0/build/lib/libopencv_java4100.so");
    System.load(url.getPath());
}

安装Tesseract

Linux系统上,如果没有安装Tesseract,java程序中使用Tesseract的doOcr方法进行图像识别时,会报错,提示找不到Tesseract相关的库文件。

解决方法:

sudo apt-get install tesseract-ocr

 参考

Java - 在Linux系统上使用OpenCV和Tesseract_java opencv linux-CSDN博客


http://www.kler.cn/a/536802.html

相关文章:

  • 详解python的单例模式
  • MFC 的 CListCtrl 控件,使用SetItemState 方法来设置选中某个 item,如何达到效果和鼠标点击一致
  • 【Leetcode 每日一题】47. 全排列 II
  • PHP JSON操作指南
  • 机器学习模型--线性回归、逻辑回归、分类
  • Centos 8 离线升级openssh 9.9
  • Gitee AI上线:开启免费DeepSeek模型新时代
  • Nginx部署Umi React前端项目标准配置
  • 1.1 学习代理(Agent)分为几步?
  • 2025 CCF BDCI|“基于TPU平台的OCR模型性能优化”一等奖作品
  • Ubuntu 下 nginx-1.24.0 源码分析 - ngx_strerror 函数
  • 【LeetCode 刷题】贪心算法(4)-区间问题
  • Ubuntu Server 部署网页 (如果无域名 可局域网访问)
  • 【每天学点AI】实战仿射变换在人工智能图像处理中的应用
  • CTRL: 一种用于可控生成的条件Transformer语言模型
  • ROS2从入门到精通3-2:详解xacro语法并优化封装urdf
  • 如何在Docker中运行MySQL容器?
  • 电脑右下角小喇叭没反应怎么回事,快速解决方案
  • 【仿12306项目】通过纯前端+Kaptcha后端验证码,削弱瞬时高峰并防机器人刷票
  • 什么是企业经营驾驶舱
  • 【人工智能】Python中的序列到序列(Seq2Seq)模型:实现机器翻译
  • 【学习笔记】Numpy
  • 大数据解决方案文档(word原件)
  • Java使用aspose实现pdf转word
  • Linux进程间通信:匿名管道与命名管道的详解
  • hive的几种复杂数据类型