Java调用Python写的tensorflow函数

最新做一个项目,需要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

猜你喜欢

转载自blog.csdn.net/loovelj/article/details/78853445