Java调用Python写的tensorflow函数

来源:互联网 发布:联合国五大流氓 知乎 编辑:程序博客网 时间:2024/06/05 20:47

最新做一个项目,需要Java调用我们用Python写的接口,print 结果以后,他那边通过流获取,再展示。
具体步骤如下:

1 python 使用 argParse 传入参数

OpenCV2获取轮廓主要是用cv2.findContours

if __name__ == '__main__':      parser = argparse.ArgumentParser()    parser.add_argument("-v", "--verbosity", help="increase output verbosity")    # 上面一句是添加参数    args = parser.parse_args()    if args.verbosity:        image=image_cut(args.verbosity)          #image_cut是示例方法,我们到时候就调用执行这个方法,args.verbosity是获取的输入参数        print(image.shape)

argparse 是python 的获取参数方法,具体看参考他的博客:python argparse用法总结

2 使用Python解释器在CMD执行

当编写好Python后,存为.py文件,这时我们需要在cmd中执行,同时,为了保证在哪里都能执行,我用了绝对路径

python d:/Code/digitalOCR/image_cut.py -v "D:/Code/digitalOCR/scan1.jpg"#特别注意的是,参数后的路径需要双引号!以前我用双引号,在IDE可以执行,但是在cmd中不能执行,很奇怪!

3 Java获取python 的输出

通过Java调用cmd,即可获得Python的输出,其实还有其他方法调用Python ,但是我的Python中调用了第三方的包,如tensorflow,其他方法会报错,说无法引用tensflowflow。

import java.io.BufferedReader;    import java.io.IOException;    import java.io.InputStream;    import java.io.InputStreamReader;    import java.util.ArrayList;public class hello2    {        public static void main(String[] args)         {             Process p;            //test.bat中的命令是ipconfig/all             String cmd="python d:/Code/digitalOCR/image_cut.py -v \"D:/Code/digitalOCR/scan1.jpg\"";             System.out.println(cmd);            try             {                //执行命令                 p = Runtime.getRuntime().exec(cmd);                //取得命令结果的输出流                 InputStream fis=p.getInputStream();                //用一个读输出流类去读                 InputStreamReader isr=new InputStreamReader(fis);                //用缓冲器读行                 BufferedReader br=new BufferedReader(isr);                 String line=null;                //直到读完为止                while((line=br.readLine())!=null)                 {                     //System.out.println(line);                  ArrayList List = new ArrayList();                 List.add(line);                 System.out.println(List);                  System.out.println("ok");              }             }            catch (IOException e)             {                 e.printStackTrace();             }         }    }   

这样就会读到图片并输出

python d:/Code/digitalOCR/img_cut_argparse.py -v "D:/Code/digitalOCR/scan1.jpg"[[[255 255 255 ..., 255 255 255]]ok[ [255 255 255 ..., 255 255 255]]ok[ [255 255 255 ..., 255 255 255]]ok[ ..., ]ok[ [255 255 255 ..., 255 255 255]]ok[ [255 255 255 ..., 255 255 255]]ok[ [255 255 255 ..., 255 255 255]]]ok[D:/Code/digitalOCR/scan1.jpg]ok
原创粉丝点击