虚拟环境准备
- 首先准备一块空的分区,安装anaconda至少要20g以上才能执行简单程序,这里准备20G的磁盘空间
- 创建分区,执行以下步骤,之后执行reboot重启
fdisk /dev/sda
p
n
回车
回车
w
- 查看当前系统创建的分区,我这里是名为sda3的分区,后面操作根据实际分区操作
- 初始化分区 sda3换成你实际的分区名
mkfs.ext4 /dev/sda3
- 创建一个新的目录
mkdir /python
5.将新分区挂载到 /python目录上
mount /dev/sda3 /python
anaconda环境准备
#下载linux版本的anaconda,我这里安装anaconda3.7
wget https://repo.anaconda.com/archive/Anaconda3-2023.07-2-Linux-x86_64.sh
#下载完成后,给安装包执行权限
chmod +x Anaconda3-2023.07-2-Linux-x86_64.sh
#执行下面命令安装包安装,一直按回车,直到出现yes/no的选择,输入yes回车,当出现选择安装目录的时候,输入/python/anaconda3
./Anaconda3-2023.07-2-Linux-x86_64.sh
#给anaconda配置环境
vim /etc/profile
#在文件最后,按下a键,然后输入export PATH=/python/anaconda3/bin:$PATH,然后按esc在输入:wq保存退出
#执行source /etc/profile使配置文件生效
#进入python
cd /python
#创建一个虚拟环境
conda create -n pytorch python=3.9
#激活虚拟环境,并初始化
conda activate pytorch
conda init
source /root/.bashrc
创建项目
#创建项目目录
mkdir myproject1
#安装自己需要的库,我这里安装以下几个库
pip install torch
pip install pyinstaller
#java环境这里就不配置了,比较简单,请自行配置好,我这里使java1.8版本
在当前目录添加一张图片名字为1.jpg,任意一张图片即可,以下截图中圈出来的是本文章所需的
PythonCaller.java程序如下
import java.io.*;
import java.nio.file.Files;
import java.nio.file.Paths;
public class PythonCaller{
public static void main(String[] args) {
Process process = null;
try {
// 读取图片文件到字节数组
byte[] imageBytes = Files.readAllBytes(Paths.get("1.jpg"));
// 启动 Python 脚本进程
ProcessBuilder builder = new ProcessBuilder("python", "test.py");
process = builder.start();
// 获取进程的输入流,并写入图片字节
try (OutputStream stdin = process.getOutputStream()) {
stdin.write(imageBytes);
stdin.flush();
}
// 读取 Python 脚本的输出
try (BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()))) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println("Output from Python: " + line);
}
}
// 等待进程结束
int exitCode = process.waitFor();
System.out.println("Exited with code: " + exitCode);
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
Thread.currentThread().interrupt(); // 重置中断状态
} finally {
if (process != null) {
process.destroy();
}
}
}
}
test.py程序如下:
import sys
import io
from PIL import Image
def process_image():
# 从标准输入读取字节流
image_bytes = sys.stdin.buffer.read()
if image_bytes:
# 将字节流转换为图片
image = Image.open(io.BytesIO(image_bytes))
# 输出图片尺寸
print(f"Image size: {image.size}")
else:
print("No data received")
if __name__ == "__main__":
process_image()
添加好之后执行以下命令
javac PythonCaller.java
java PythonCaller
结果如下:
本文章,提供一个通过现有java项目调用python程序的方法,我这里是准备完成的是通过先用的java项目,调用训练好的图像识别模型,然后将处理好的结果返回到java项目中展示