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博客
相关文章:
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-essen…...
自有服务与软件包
—— 小 峰 编 程 目录 编辑 一、自有服务概述 二、systemctl管理服务命令 1、显示服务 2、查看启动和停止服务 3、服务持久化 三、常用自有服务(ntp,firewalld,crond) 1、ntp时间同步服务 1)NTP同步服务器原理 2)到哪里去找NPT服务…...
Python 鼠标轨迹 - 防止游戏检测
一.简介 鼠标轨迹算法是一种模拟人类鼠标操作的程序,它能够模拟出自然而真实的鼠标移动路径。 鼠标轨迹算法的底层实现采用C/C语言,原因在于C/C提供了高性能的执行能力和直接访问操作系统底层资源的能力。 鼠标轨迹算法具有以下优势: 模拟…...
BootstrapBlazor Table组件 使用的注入 数据服务 实现类:使用 EF Core
一、使用示例:UsersManager.razor 注:TLog 相关内容参见 .NET 9.0 的 Blazor Web App 项目、Bootstrap Blazor 组件库、自定义日志 TLog 使用备忘-CSDN博客 page "/Log/TLogManager"<Table TItem"TLogEntity" DataService&qu…...
chrome-mojo C++ Bindings API
概述 Mojo C 绑定 API 利用C 系统 API提供一组更自然的原语,用于通过 Mojo 消息管道进行通信。结合从Mojom IDL 和绑定生成器生成的代码,用户可以轻松地跨任意进程内和进程间边界连接接口客户端和实现。 本文档通过示例代码片段提供了绑定 API 用法的详…...
git如何把多个commit合成一个
在 Git 中,如果你想把多个提交(commit)合并成一个,可以使用 git rebase 或 git reset 来完成。下面是两种常用方法: 方法一:使用 git rebase(推荐) git rebase 是合并多个提交为一…...
java: framework from BLL、DAL、IDAL、MODEL、Factory using oracle
oracel 21c sql: -- 创建 School 表 CREATE TABLE School (SchoolId CHAR(5) NOT NULL,SchoolName NVARCHAR2(500) NOT NULL,SchoolTelNo VARCHAR2(8) NULL,PRIMARY KEY (SchoolId) );CREATE OR REPLACE PROCEDURE addschool(p_school_id IN CHAR,p_school_name IN NVARCHAR2,p…...
RPA与深度学习结合
什么是RPA RPA即机器人流程自动化(Robotic Process Automation),它是一种利用软件机器人模拟人类在计算机上的操作,按照预设的规则自动执行一系列重复性、规律性任务的技术。这些任务可以包括数据录入、文件处理、报表生成、系统…...
Ubuntu22.04部署deepseek大模型
Ollama 官方版 Ollama 官方版: https://ollama.com/ 若你的显卡是在Linux上面 可以使用如下命令安装 curl -fsSL https://ollama.com/install.sh | shollama命令查看 rootheyu-virtual-machine:~# ollama -h Large language model runnerUsage:ollama [flags]ollama [comman…...
如何设置Jsoup请求头模拟浏览器访问?
在使用 Jsoup 进行网络爬虫开发时,设置请求头以模拟浏览器访问是非常重要的。这不仅可以帮助我们更好地伪装爬虫,避免被目标网站识别,还可以确保请求的合法性。以下是如何设置 Jsoup 请求头以模拟浏览器访问的详细步骤和示例代码。 1. 设置请…...
JVM 类加载子系统在干什么?
JVM 类加载子系统是什么? 类加载子系统(Class Loader Subsystem)是 JVM 负责 加载、链接和初始化 .class 文件的组件。它的主要作用是将字节码文件加载进 JVM 并准备执行。 类加载器(ClassLoader)是 字节码的搬运工&…...
Redis数据库(二):Redis 常用的五种数据结构
Redis 能够做到高性能的原因主要有两个,一是它本身是内存型数据库,二是采用了多种适用于不同场景的底层数据结构。 Redis 常用的数据结构支持字符串、列表、哈希表、集合和有序集合。实现这些数据结构的底层数据结构有 6 种,分别是简单动态字…...
《量化绿皮书》Chapter 3 Calculus and Linear Algebra 微积分与线性代数(二)
《A Practical Guide To Quantitative Finance Interviews》,被称为量化绿皮书,是经典的量化求职刷题书籍之一,包含以下七章: Chapter 1 General Principles 通用技巧 Chapter 2 Brain Teasers 脑筋急转弯 Chapter 3 Calculus and…...
网络安全溯源 思路 网络安全原理
网络安全背景 网络就是实现不同主机之间的通讯。网络出现之初利用TCP/IP协议簇的相关协议概念,已经满足了互连两台主机之间可以进行通讯的目的,虽然看似简简单单几句话,就描述了网络概念与网络出现的目的,但是为了真正实现两台主机…...
BS架构(笔记整理)
楔子.基本概念 1.在网络架构中: 服务器通常是集中式计算资源,负责处理和存储数据;客户机是请求这些服务的终端设备,可能是个人电脑或移动设备;浏览器则是客户机上用来与服务器交互的工具,负责展示网页内容…...
06排序 + 查找(D2_查找(D2_刷题练习))
目录 1. 二分查找-I 1.1 题目描述 1.2 解题思路 方法:二分法(推荐使用) 2. 二维数组中的查找 2.1 题目描述 2.2 解题思路 方法一:二分查找(推荐使用) 3. 寻找峰值 3.1 题目描述 3.2 解题思路 方…...
客户端渲染和服务端渲染
二者本质的区别:是在哪完成了 HTML 的拼接,服务端渲染是在服务端拼接,客户端渲染是在客户端拼接。 服务端渲染的优缺点 优点 SEO 友好,服务端渲染更有利于爬虫爬取信息。 更快的首屏渲染,因为 HTML 已经在服务端生…...
C++ 设计模式 - 访问者模式
一:概述 访问者模式将作用于对象层次结构的操作封装为一个对象,并使其能够在不修改对象层次结构的情况下定义新的操作。 《设计模式:可复用面向对象软件的基础》一书中的访问者模式因两个原因而具有传奇色彩:一是因为它的复杂性&a…...
海云安开发者智能助手(D10)全面接入DeepSeek,赋能开发者安全高效编码新范式
海云安正式宣布完成与DeepSeek(深度求索)的深度技术融合,旗下核心产品D10开发者智能助手全面接入DeepSeek R1模型。此次合作标志着海云安在"AI驱动开发安全"领域实现重要突破。数据显示,通过DeepSeek R1模型的优化与蒸馏…...
服务器绑定 127.0.0.1 和 0.0.0.0 的区别
前言 IP 地址实际上并不是分配给计算机的,而是分配给网卡的,因此当计算机上存在多块网卡时,每一块网卡都会有自己的 IP 地址。 绑定 127.0.0.1 是绑定到 lookback 这个虚拟的本地回环接口,该接口只处理本机上的数据,…...
ML.NET库学习005:基于机器学习的客户细分实现与解析
文章目录 ML.NET库学习005:基于机器学习的客户细分实现与解析项目主要目的和原理目的原理 项目概述实现的主要功能主要流程步骤使用的主要函数方法关键技术 主要功能和步骤功能详细解读详细步骤解析 数据集及其处理步骤数据集处理步骤关键处理步骤原理1. 数据清洗与…...
分布式id探索
一、为什么要使用分布式id? 随着数据量增加,数据需要进行水平拆分,但表自增id无法满足唯一性; 二、分布式id的特点 1唯一性 2 趋势递增、单调递增(数据库中存放的数据结构数据从小到大有序排列)࿰…...
互联网协议套件中的服务类型(RFC 1349)技术解析与总结
1. 背景与核心目标 RFC 1349 是对 IP 协议头部 服务类型(Type of Service, TOS)字段语义的更新与澄清文档,发布于 1992 年。其主要目标包括: 重新定义 TOS 字段的用途:明确 TOS 字段的语义,解决历史标准中的…...
java-初识List
List: List 是一个接口,属于 java.util 包,用于表示有序的元素集合。List 允许存储重复元素,并且可以通过索引访问元素。它是 Java 集合框架(Java Collections Framework)的一部分 特点: 有序…...
【Linux系统】—— 简易进度条的实现
【Linux系统】—— 简易进度条的实现 1 回车和换行2 缓冲区3 进度条的准备代码4 第一版进度条5 第二版进度条 1 回车和换行 先问大家一个问题:回车换行是什么,或者说回车和换行是同一个概念吗? 可能大家对回车换行有一定的误解࿰…...
一文学会:用DeepSeek R1/V3 + AnythingLLM + Ollama 打造本地化部署的个人/企业知识库,无须担心数据上传云端的泄露问题
文章目录 前言一、AnythingLLM 简介&基础应用1.主要特性2.下载与安装3.配置 LLM 提供商4.AnythingLLM 工作区&对话 二、AnythingLLM 进阶应用:知识增强使用三、AnythingLLM 的 API 访问四、小结1.聊天模式2.本地存储&向量数据库 前言 如果你不知道Olla…...
开源身份和访问管理方案之keycloak(一)快速入门
文章目录 什么是IAM什么是keycloakKeycloak 的功能 核心概念client管理 OpenID Connect 客户端 Client Scoperealm roleAssigning role mappings分配角色映射Using default roles使用默认角色Role scope mappings角色范围映射 UsersGroupssessionsEventsKeycloak Policy创建策略…...
C++STL(六)——list模拟
目录 本次所需实现的三个类一、结点类的模拟实现构造函数 二、迭代器类的模拟实现为什么有迭代器类迭代器类的模板参数说明构造函数运算符的重载- -运算符的重载和!运算符的重载*运算符的重载->运算符的重载引入模板第二个和第三个参数 三、list的模拟实现3.1 默认成员函数构…...
HTML5--网页前端编程(下)
HTML5–网页前端编程(下) 9.常用标签下 (1)表格标签 用来展示数据,显示数据,规整条理,可读性好 基本语法 <table><tr> <td>单元格内的文字</td> <td>单元格内的文字</td>… </tr> <tr> <td>单元格内的文字&l…...
Spring 的 ResponseEntity 包装器使用详解
简介 在 Spring 中,ResponseEntity 是 HTTP 响应的包装器。它允许自定义响应的各个方面: HTTP 状态码 响应主体 HTTP 请求头 使用 ResponseEntity 允许完全控制 HTTP 响应,并且它通常用于 RESTful Web 服务中从控制器方法返回响应。 基…...
