• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

java 如何调用Python文件包括传参

java 搞代码 4年前 (2022-01-09) 19次浏览 已收录 0个评论
文章目录[隐藏]

最近在和我的小伙伴们做一个物体识别的小程序,主要是他通过深度学习,然后训练出了一个模型,只要向模型传图片的路径,即可得到识别的结果,

然后我主要负责做服务器和通过java调用他的模型,简单的说就是在java环境下调用Python脚本,

主要有两个方式

第一个是通过jython,这个方法不太好用,当Python用到第三方库的时候,由于jython不可能涵盖所有python第三方类库,

所以建议用第二种Runtime.getRuntime()开启进程来执行python脚本文件

String[] arguments = new String[] {"python","D:\\ccc\\1.py",str};//指定命令、路径、传递的参数
        try {
         Writer out = response.getWriter(); //获得HttpServletResponse输出流对象
            Process process = Runtime.getRuntime().exec(arguments);//开启进程来执行脚本文件
            BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream()));//获取字符输入流对象
            String line = null;  
          while ((line = in.readLine()) != null) {  
              JSONArray Resulet = JSONArray.fromObject(util.DataHandle(line.toString()));//读取到结果(一行文字)进行数据处理
              String json = Resulet.toString();
              out.write(json);//使用输出流对象向小程序发送字符数据
          }  
          out.close();
          in.close();  
        } catch (Exception e) {
            e.printStackTrace();
        }

第一行代码传递的参数str就是图片的路径(我这实例代码只传递一个参数,如果传递多个参数直接在str,后面加,格式都是一样,Python代码接收参数也是不一样,接着往下看),剩下的代码我都上了注释

from keras.models import load_model
import numpy as np
from keras.preprocessing import image
import sys
import re
def predict(pic_dir):
    model = load_model("D:/ccc/model.h5")
    images = image.load_img(pic_dir, target_size=(32,32))
    images = image.img_to_array(images)
    images = np.expand_dims(images, axis=0)
    images=np.array(images,dtype=int)
    images_normalize=images.astype("float32")/255.0    
    pre_y=model.predict(images_normalize)
    pre_y=pre_y.reshape(-1)
    np.set_printoptions(suppress=False)   
    pre_y=[pre_y[i]*100 for i in range(len(pre_y))]
    pre_y=[str(pre_y[i]) for i in range(len(pre_y))]    
    for i in range(len(pre_y)):
        if pre_y[i].find('e',0,l<div>本文来源gaodai^.ma#com搞#代!码网</div>en(pre_y[i]))!=-1:
            wei=int(pre_y[i][len(pre_y[i])-1])-1
            pre_y[i]=re.sub(r'e-.*$','',pre_y[i])
            pre_y[i]=re.sub(r'[^0-9]','',pre_y[i])
            for j in range(0,wei):
                    pre_y[i]='0'+pre_y[i]
            pre_y[i]='0'+'.'+pre_y[i]        
    pre_y=[pre_y[i]+"%" for i in range(len(pre_y))]
    return pre_y
prediction=predict(sys.argv[1])
print(prediction)

上面是Python代码,prediction=predict(sys.argv[1])代码里面的sys.argv[1]就是接收传递过来的参数str,如果多个参数就以此类推接收

小程序接收到数据并输出到控制台


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:java 如何调用Python文件包括传参
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址