
基于Java API 在Raspberry Pi 部署YoloV8
我们将详细探讨如何在树莓派上手动编译 OpenVINO 的.so 库,以确保 Java API 能够顺利运行。
作者:英特尔创新大使 黄明明
前言
在当今的技术发展浪潮中,越来越多的人工智能(AI)框架开始支持在边缘设备上运行,这一趋势极大地拓展了 AI 技术的应用场景和范围。以 Google 的 Gemma 为例,它的出现彰显了 AI 技术在边缘计算领域的积极探索和实践。面对这样的发展态势,许多开发者会好奇:OpenVINO 能否在树莓派上运行呢?答案是肯定的。
在树莓派上,我们可以通过 pip 工具直接安装 OpenVINO 库并运行相关程序,这为开发者提供了一定的便利。然而,对于使用 Java API 的开发者而言,情况就略显复杂。Java API 在运行过程中需要调用.so 库(共享对象库)来实现特定功能。遗憾的是,在 OpenVINO 官方的 Archives 下载地址中,并没有提供适用于树莓派所采用的 aarch64 架构的.so 库。
这就意味着,若想在树莓派上通过 Java API 运行 OpenVINO,开发者无法直接从官方渠道获取所需的.so 库,而必须手动进行编译。手动编译.so 库虽然增加了操作的复杂性,但也为开发者提供了根据自身需求定制和优化库文件的机会。接下来,我们将详细探讨如何在树莓派上手动编译 OpenVINO 的.so 库,以确保 Java API 能够顺利运行。
准备工作
硬件准备
在开始在树莓派上运行 OpenVINO 之前,我们首先要准备一块合适的树莓派板。从硬件性能角度考虑,建议选择树莓派 4 及以上版本,因为早期版本的硬件配置相对老旧,可能无法充分满足 OpenVINO 运行时对计算资源的需求,在运行过程中容易出现性能瓶颈,比如处理速度慢、响应延迟等问题。
在众多可选型号中,树莓派 4B 是一个不错的选择,它具备较为均衡的性能和性价比,能够为 OpenVINO 提供稳定的运行环境。当然,如果条件允许,使用树莓派 5 更佳。树莓派 5 在性能上有了进一步的提升,无论是处理器性能、内存带宽还是散热设计等方面都进行了优化,能够更高效地运行 OpenVINO 及相关应用程序。
为了让你更直观地了解不同版本树莓派的性能差异,你可以参考下图所示的性能对比:https://zhuanlan.zhihu.com/p/662241556 ,该链接中的内容详细对比了各型号
环境准备
由于我们需要通过源码编译OpenVINO的库,所以需要clone OpenVINO的源代码。基于最近Github 封锁国内的IP,所以最好有点可以上网的途径。
安装依赖
sudo apt-get update
sudo apt-get install -y git cmake scons build-essential
克隆存储库
git clone --recurse-submodules --single-branch --branch=master https://github.com/openvinotoolkit/openvino.git
修改SWAP
在树莓派的构建过程中,由于系统对随机存取存储器(RAM)的需求量极大,极易引发系统卡死现象。为保障构建任务稳定运行,建议使用容量 32GB 以上的存储卡,并相应扩展交换空间大小。通过提升存储容量与交换内存配置,可有效缓解内存压力,避免因资源不足导致的系统崩溃问题,确保构建流程顺畅进行 。
步骤 1:检查当前 Swap 使用情况
sudo swapon --showfree -h
步骤 2:禁用当前 Swap
sudo swapoff /var/swap # 如果默认是 /var/swap# 或
sudo swapoff /swapfile # 如果存在 /swapfile
步骤 3:删除旧的 Swap 文件(可选)
sudo rm /var/swap# 或sudo rm /swapfile
步骤 4:创建新的 Swapfile
sudo fallocate -l 1G /swapfile # 1GB Swap
步骤 5:设置权限
sudo chmod 600 /swapfile
步骤 6:格式化 Swap
sudo mkswap /swapfile
Setting up swapspace version 1, size = 1 GiB (1073737728 bytes)no label, UUID=xxxx-xxxx-xxxx
步骤 7:启用 Swap
sudo swapon /swapfile
步骤 8:验证 Swap 是否生效
sudo swapon --showfree -h
构建
cd openvino/
mkdir build && cd build/
cmake -DCMAKE_BUILD_TYPE=Release \
-DARM_COMPUTE_SCONS_JOBS=$(nproc --all) \
.. && cmake --build . --parallel
安装so库
若要参照 Java API 构建 Linux 环境(https://github.com/Hmm466/OpenVINO-Java-API/blob/main/docs/cn/linux_install.md),可按以下步骤进行操作:在构建过程中,需要将 release 目录下的所有文件迁移至 /usr/lib 目录。这一操作能确保系统在运行时可以正确找到并调用这些文件,为 Java API 在 Linux 环境中的正常运行提供必要的支持。
!注意
在使用树莓派进行自行编译时,笔者发现一个关键问题:即便设置了较大的 swap 空间(例如笔者设置的 16GB),编译进程仍可能在运行过程中卡住。为有效规避这一状况,建议在编译时通过设置cmake -j参数来限制并行编译线程数量,以此优化编译流程,确保编译任务顺利完成。
需要更大算力推荐英特尔平台如酷睿Ultra 系列, 如全新英特尔酷睿Ultra 200V系列处理器对比上代Meteor Lake,升级了模块化结构、封装工艺,采用全新性能核与能效核、英特尔硬件线程调度器、Xe2微架构锐炫GPU、第四代NPU…由此也带来了CPU性能提升18%,GPU性能提升30%,整体功耗降低50%,以及120TOPS平台AI算力。
酷睿Ultra 200V系列处理器共有9款SKU,包括1款酷睿Ultra 9、4款酷睿Ultra 7以及4款酷睿Ultra 5,全系8核心8线程(4个性能核与4个能效核),具体规格如下。
运行Java API
在树莓派上运行 Java DEMO 主要有两种实践思路:
第一种是本地编译运行模式:直接将代码仓库克隆至树莓派本地,通过内置编辑器(如 Vim、nano)完成代码编写后,在树莓派本地执行编译与运行。此方案虽依赖设备自身环境,但受限于树莓派有限的显存资源(尤其是低配置型号),若运行带图形界面的程序或多任务编译,易出现界面卡顿、响应延迟等问题,影响开发效率。
第二种是远程开发协同模式:借助 IDEA 专业版的 SSH 连接功能,在高性能专业电脑上搭建开发环境,通过远程连接将代码实时同步至树莓派并触发运行。该模式将代码编辑、调试等资源密集型操作转移至性能更强的设备,规避了树莓派硬件瓶颈 —— 专业电脑的显卡和内存可流畅支持 IDEA 的可视化界面与代码补全功能,而树莓派仅作为程序运行终端,专注于执行逻辑与硬件交互。
笔者倾向于第二种方案:树莓派显存限制下,本地图形化操作体验欠佳,远程模式通过 “开发端高效编辑 + 设备端轻量运行” 的分工,既保障了代码编写的流畅性,又确保程序在树莓派上的稳定执行,尤其适合需频繁调试或涉及图形处理的 Java 项目。
首先,你需要将项目代码从 GitHub 仓库克隆到本地环境。在终端中执行以下命令:
git clone https://github.com/Hmm466/OpenVINO-Java-API.git
使用 IDEA 打开并运行项目,克隆完成后,你可以使用 IntelliJ IDEA(以下简称 IDEA)专业版来打开该项目。具体步骤如下:
启动 IDEA,选择 File -> Open。
在弹出的文件选择对话框中,找到并选中刚才克隆下来的项目文件夹,点击 OK。
待 IDEA 完成项目的索引和加载后,你就可以运行项目了。一般而言,你可以通过点击 IDEA 工具栏上的运行按钮,或者使用快捷键(如 Shift + F10)来启动项目。
如果你希望采用 SSH 远程开发的方式,网络上有许多详细的教程可供参考,因此这里不再赘述。通过 SSH 远程开发,你可以在本地的高性能计算机上编写和调试代码,然后在树莓派上远程运行,从而充分发挥各自的优势。
如果你没有合适的编译环境,仅希望使用预编译好的共享库(.so 文件),可以在 GitHub 上给我发送邮件。我会为你提供所需的 .so 文件,以帮助你快速开展项目。请确保在邮件中清晰描述你的需求和使用场景,以便我能更准确地提供支持。
最终效果
总结
从这篇文章中,我们能够大致知晓在树莓派上自行编译共享对象(so)库以供其他编程语言调用的相关操作。不过需要注意的是,树莓派本身就自带了 Python 环境,倘若我们想要在树莓派上使用 Python 来操作 OpenVINO,其实完全可以直接通过 pip 工具进行安装,具体命令为pip install openvino==2025.1.0,这种方式更为便捷高效,能省去自行编译的繁琐步骤。
文中所呈现的内容,主要是对 Java 在树莓派上运行 OpenVINO 进行了验证和实践。这一尝试颇具意义,因为它为在树莓派上使用非 Python 语言调用 OpenVINO 打开了一扇门。Java 作为一种跨平台的编程语言,具有广泛的应用场景和强大的生态系统,在树莓派上实现其对 OpenVINO 的调用,能够拓展树莓派在工业控制、物联网设备开发等领域的应用潜力。
基于这样的实践成果,后续的探索空间十分广阔。我们可以以此为基础,开展更多富有创造性和实用性的项目。例如,在人工智能与物联网结合的领域,利用树莓派搭载 Java 和 OpenVINO,开发智能安防系统,实现对监控画面的实时图像识别和异常检测;或者在智能农业方面,构建基于树莓派的环境监测与作物生长分析系统,通过 OpenVINO 对传感器采集的数据进行处理和分析,为精准农业提供技术支持。此外,还能在教育领域发挥作用,设计一些适合学生实践的编程项目,让学生通过树莓派学习 Java 编程和人工智能技术,培养他们的创新思维和动手能力。总之,通过这次对 Java 在树莓派上运行 OpenVINO 的验证,我们有望开启更多充满可能性的项目,进一步挖掘树莓派在不同领域的应用价值。
更多推荐
所有评论(0)