最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java 如何調(diào)用Python文件包括傳參

 更新時(shí)間:2021年04月23日 11:40:46   作者:一起喜羊羊  
這篇文章主要介紹了java 調(diào)用Python文件包括傳參的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

最近在和我的小伙伴們做一個(gè)物體識(shí)別的小程序,主要是他通過(guò)深度學(xué)習(xí),然后訓(xùn)練出了一個(gè)模型,只要向模型傳圖片的路徑,即可得到識(shí)別的結(jié)果,

然后我主要負(fù)責(zé)做服務(wù)器和通過(guò)java調(diào)用他的模型,簡(jiǎn)單的說(shuō)就是在java環(huán)境下調(diào)用Python腳本,

主要有兩個(gè)方式

第一個(gè)是通過(guò)jython,這個(gè)方法不太好用,當(dāng)Python用到第三方庫(kù)的時(shí)候,由于jython不可能涵蓋所有python第三方類庫(kù),

所以建議用第二種Runtime.getRuntime()開啟進(jìn)程來(lái)執(zhí)行python腳本文件

String[] arguments = new String[] {"python","D:\\ccc\\1.py",str};//指定命令、路徑、傳遞的參數(shù)
        try {
         Writer out = response.getWriter(); //獲得HttpServletResponse輸出流對(duì)象
            Process process = Runtime.getRuntime().exec(arguments);//開啟進(jìn)程來(lái)執(zhí)行腳本文件
            BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream()));//獲取字符輸入流對(duì)象
            String line = null;  
          while ((line = in.readLine()) != null) {  
              JSONArray Resulet = JSONArray.fromObject(util.DataHandle(line.toString()));//讀取到結(jié)果(一行文字)進(jìn)行數(shù)據(jù)處理
              String json = Resulet.toString();
              out.write(json);//使用輸出流對(duì)象向小程序發(fā)送字符數(shù)據(jù)
          }  
          out.close();
          in.close();  
        } catch (Exception e) {
            e.printStackTrace();
        }

第一行代碼傳遞的參數(shù)str就是圖片的路徑(我這實(shí)例代碼只傳遞一個(gè)參數(shù),如果傳遞多個(gè)參數(shù)直接在str,后面加,格式都是一樣,Python代碼接收參數(shù)也是不一樣,接著往下看),剩下的代碼我都上了注釋

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,len(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]就是接收傳遞過(guò)來(lái)的參數(shù)str,如果多個(gè)參數(shù)就以此類推接收

小程序接收到數(shù)據(jù)并輸出到控制臺(tái)

然后就是顯示數(shù)據(jù),給我小伙伴的深度學(xué)習(xí)點(diǎn)個(gè)贊!準(zhǔn)確率還是挺高的

補(bǔ)充:Java調(diào)用Python文件

有時(shí)候我們想要通過(guò)java調(diào)用一個(gè)python文件,而這個(gè)python文件又必須在特定的virtualenv虛擬環(huán)境下才能運(yùn)行。如果直接將這個(gè)python文件所需要的包安裝到python系統(tǒng)環(huán)境下難免有些暴力

我想到了如下方法解決這個(gè)問題:

創(chuàng)建虛擬環(huán)境后,如果虛擬環(huán)境的文件夾叫做env,我們平時(shí)激活虛擬環(huán)境的命令是 source env/bin/activate 。在bin目錄中還有一個(gè)文件叫做activate_this.py,我們通過(guò)這個(gè)文件切換到虛擬環(huán)境,在一個(gè)python文件(假設(shè)叫a.py)中調(diào)用該文件(activate_this.py),再書寫想要調(diào)用的目標(biāo)python文件,再由Java調(diào)用a.py即可完成指定虛擬環(huán)境下的python文件調(diào)用。

python文件名為a.py,代碼如下

import os
activate_this = 'path/to/activate_this.py'
execfile(activate_this, dict(__file__=activate_this))
os.system("python target.py")

java代碼

import java.io.BufferedReader;
import java.io.InputStreamReader; 
public class Test {
 public static void main(String[] args) {
  try {
   System.out.println("start");
   Process pr = Runtime.getRuntime().exec("python /home/kui/桌面/a.py");
   BufferedReader in = new BufferedReader(new InputStreamReader(pr.getInputStream()));
   String line;
   while ((line = in.readLine()) != null) {
    System.out.println(line);
   }
   in.close();
   pr.waitFor();
   System.out.println("end");
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
}
 

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

  • Java實(shí)現(xiàn)本地緩存的方式匯總

    Java實(shí)現(xiàn)本地緩存的方式匯總

    引入緩存,主要用于實(shí)現(xiàn)系統(tǒng)的高性能,高并發(fā),這篇文章主要介紹了Java實(shí)現(xiàn)本地緩存的幾種方式,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07
  • Java文件上傳下載、郵件收發(fā)實(shí)例代碼

    Java文件上傳下載、郵件收發(fā)實(shí)例代碼

    這篇文章主要介紹了Java文件上傳下載、郵件收發(fā)實(shí)例代碼的相關(guān)資料,非常不錯(cuò)具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-06-06
  • java 單例模式和工廠模式實(shí)例詳解

    java 單例模式和工廠模式實(shí)例詳解

    這篇文章主要介紹了Java設(shè)計(jì)模式編程中的單例模式和簡(jiǎn)單工廠模式以及實(shí)例,使用設(shè)計(jì)模式編寫代碼有利于團(tuán)隊(duì)協(xié)作時(shí)程序的維護(hù),需要的朋友可以參考下
    2017-04-04
  • spring boot @ResponseBody轉(zhuǎn)換JSON 時(shí) Date 類型處理方法【兩種方法】

    spring boot @ResponseBody轉(zhuǎn)換JSON 時(shí) Date 類型處理方法【兩種方法】

    這篇文章主要介紹了spring boot @ResponseBody轉(zhuǎn)換JSON 時(shí) Date 類型處理方法,主要給大家介紹Jackson和FastJson兩種方式,每一種方法給大家介紹的都非常詳細(xì),需要的朋友可以參考下
    2018-08-08
  • 解決spring jpa中update的坑

    解決spring jpa中update的坑

    這篇文章主要介紹了spring jpa中update遇到的坑及解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • java 使用HttpURLConnection發(fā)送數(shù)據(jù)簡(jiǎn)單實(shí)例

    java 使用HttpURLConnection發(fā)送數(shù)據(jù)簡(jiǎn)單實(shí)例

    這篇文章主要介紹了java 使用HttpURLConnection發(fā)送數(shù)據(jù)簡(jiǎn)單實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • Java中l(wèi)ogback?自動(dòng)刷新不生效的問題解決

    Java中l(wèi)ogback?自動(dòng)刷新不生效的問題解決

    本文主要介紹了Java中l(wèi)ogback?自動(dòng)刷新不生效的問題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • Mybatis省略@Param注解原理分析

    Mybatis省略@Param注解原理分析

    這篇文章主要介紹了Mybatis省略@Param注解原理分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • springmvc實(shí)現(xiàn)簡(jiǎn)單的攔截器

    springmvc實(shí)現(xiàn)簡(jiǎn)單的攔截器

    這篇文章主要為大家詳細(xì)介紹了springmvc實(shí)現(xiàn)簡(jiǎn)單攔截器的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • java操作ftp下載文件示例

    java操作ftp下載文件示例

    這篇文章主要介紹了java操作ftp下載文件的示例,需要的朋友可以參考下
    2014-02-02

最新評(píng)論

大连市| 景洪市| 张家港市| 新丰县| 平南县| 北海市| 东港市| 商南县| 南京市| 西乌珠穆沁旗| 漳平市| 禹城市| 深州市| 高邑县| 云安县| 克什克腾旗| 凌海市| 德安县| 英吉沙县| 理塘县| 兰坪| 曲靖市| 桦川县| 道孚县| 新竹市| 安仁县| 都安| 东平县| 黄梅县| 南川市| 巴南区| 宁明县| 达孜县| 绥化市| 山西省| 安义县| 启东市| 鞍山市| 信宜市| 乌拉特后旗| 天峻县|