亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

java 如何調用Python文件包括傳參

瀏覽:4日期:2022-07-27 17:07:13

最近在和我的小伙伴們做一個物體識別的小程序,主要是他通過深度學習,然后訓練出了一個模型,只要向模型傳圖片的路徑,即可得到識別的結果,

然后我主要負責做服務器和通過java調用他的模型,簡單的說就是在java環境下調用Python腳本,

主要有兩個方式

第一個是通過jython,這個方法不太好用,當Python用到第三方庫的時候,由于jython不可能涵蓋所有python第三方類庫,

所以建議用第二種Runtime.getRuntime()開啟進程來執行python腳本文件

String[] arguments = new String[] {'python','D:ccc1.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_modelimport numpy as npfrom keras.preprocessing import imageimport sysimport redef 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.0pre_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_yprediction=predict(sys.argv[1])print(prediction)

上面是Python代碼,prediction=predict(sys.argv[1])代碼里面的sys.argv[1]就是接收傳遞過來的參數str,如果多個參數就以此類推接收

java 如何調用Python文件包括傳參

小程序接收到數據并輸出到控制臺

java 如何調用Python文件包括傳參

然后就是顯示數據,給我小伙伴的深度學習點個贊!準確率還是挺高的

補充:Java調用Python文件

有時候我們想要通過java調用一個python文件,而這個python文件又必須在特定的virtualenv虛擬環境下才能運行。如果直接將這個python文件所需要的包安裝到python系統環境下難免有些暴力

我想到了如下方法解決這個問題:

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

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

import osactivate_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(); } }}

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持好吧啦網。如有錯誤或未考慮完全的地方,望不吝賜教。

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 日本免费大片免费视频 | 欧美 日韩 中文字幕 | 国产精品欧美亚洲韩国日本 | 亚洲一区二区三区高清 | 免费黄色网页 | 精品国产美女福到在线不卡f | 97精品国产自在现线免费 | 国产精品拍拍拍福利在线观看 | 国产一区二区在线视频 | 正在播放avove深夜影院 | 久久精品免视着国产成人 | 国产成人精品天堂 | 亚洲一级片在线播放 | 免费a级在线观看完整片 | 999精品久久久中文字幕蜜桃 | 五月天婷婷久久 | 久久久夜色精品国产噜噜 | 高清大学生毛片一级 | 日本黄色高清网站 | 国产成人涩涩涩视频在线观看免费 | 亚洲绝美精品一区二区 | 在线免费观看网站入口在哪 | 国产我不卡 | 欧美日韩免费一区二区三区 | 亚洲欧美高清视频 | 日韩黄色一级视频 | 人人干人人玩 | 日本一级网站 | 国产精品色午夜视频免费看 | 亚洲人成激情在线播放 | 一级特黄aaa大片在线观看视频 | 婷婷久久综合九色综合98 | 国产高清在线观看视频 | 国内精品视频 在线播放 | 日韩一二区 | 又黄又爽一线毛片免费观看 | 国产成人青青热久免费精品 | 三级午夜宅宅伦不卡在线 | 精品哟哟国产在线观看 | 亚洲午夜一区二区三区 | 好大好爽国产美女h福利视频 |