Jar包 django 加入python python导入jar包

您所在的位置:网站首页 idea导入jar包报错 Jar包 django 加入python python导入jar包

Jar包 django 加入python python导入jar包

2023-06-23 20:13| 来源: 网络整理| 查看: 265

   

以下以自己的ocr.jar包在python平台调用为实例,记录全程。

   

ocr.jar 用法

1、导入到自己的项目dependencies中

2、调用函数 OcrandSegmentation( picturePath,serviceUrl,keyPath );

   

一、python调用方法如下一、搭建环境

配置:重点(Python和JDK的位数一定要相同)

*JDK 1.8.0_191 64位

python 3.6.9 64位

1、安装JPype:

http://www.lfd.uci.edu/~gohlke/pythonlibs 下载对应版本JPype(我下载了JPype1-0.7.0-cp36-cp36m-win_amd64.whl,截止到2019年11月10日为最新版本)

注意:网上教程多为anaconda prompt中命令行:pip install JPype1-py3 ,需要注意该版本已经被deprecated了,还是手动下载保险。

2、安装java环境后,

找到JRE中的jvm.dll 文件(在JDK中的路径类似如下路径: D:/java/jdk1.8.0_191/jre/bin/server/jvm.dll)

   

二、Python脚本调用1、依赖包的替换:

如果你的jar包内有import,在自己的idea中查看引用的哪个jar包。在启动JVM的时候,默认不会把JDK中 "\jre\lib\ext" 扩展包下的JAR包引入,所以为了避免调用过程中出现问题,建议将 "\jre\lib\ext" 内的JAR, 均放入我们自己建的 "dependency" 目录,自行导入。

在语义分割代码中,我们有对rt.jar的依赖关系。

找到JRE中的rt.jar(在JDK中的路径类似如下路径:D:\\java\\jdk1.8.0_191\\jre\\lib\\rt.jar),复制并替换ocr.jar旁边的dependency文件夹内的rt.jar。

   

2、python脚本

   

from jpype import * import jpype import os #jar包路径 jarpath = os.path.join(os.path.abspath('.'), 'E:\\PYProject\\testocr\\jar\\ocr.jar') #依赖包路径 # 当有依赖的JAR包存在时,一定要使用-Djava.ext.dirs参数进行引入 dependency = os.path.join(os.path.abspath('.'), 'E:\\PYProject\\testocr\\jar\\rt.jar') #启动JVM jpype.startJVM("D:/java/jdk1.8.0_191/jre/bin/server/jvm.dll", "-ea", "-Djava.class.path=%s" % jarpath, "-Djava.ext.dirs=%s" % dependency) #获取class实例,注意 package.className替换为自己的包名和类名 JClass = jpype.JClass('hehe.ocr') instance = JClass() #调用我的jar包接口 picturePath = "C:\\xxx\\xx\\1.jpg" serviceUrl = "http://xxxx/xxx/xxxx" keyPath = "E:\\xxxxx\\key.txt" #调用方法与java类似,实例.方法名 result = (instance.OcrandSegmentation(picturePath, serviceUrl, keyPath)) print(result) # 程序最后记得最后关闭jvm jpype.shutdownJVM()

   

3、报错后通常解决方案

1、更新numpy,卸载重装或者 pip -U numpy

   

2、下载正确版本Jpype,卸载重装当前version(第一次装成0.6版 大小只有200K,运行一直报错jpype没有startJVM的函数。卸载重装JPype1-0.7.0版,并更新numpy,启动JVM成功)

   

Jar包 django 加入python python导入jar包_python

   

3、JVM无法连续启动。jpype有一个致命弱点在于JVM只能启动一次,且关闭后无法重新启动(内部机制问题)。由于作者这次的目的是将jar包导入后,使用python语言发一个"长期开启且会被重复调用"的服务,临时的解决方法如下:

将启动JVM与jar包类实例化的代码抽取成一个方法,使用python语言的全局变量(global)标志一下JVM的初次启动。再次调用时标志符为true表示已经开启,无需调用。

   

二、ocr.jar包接口介绍

   

调用一个方法,传入三个参数:

@picturePath=图片路径;

@serviceUrl = 服务url(根据服务器的ip变化,修改192.168.0.102部分)

@keyPath =数据字典的存放路径;

返回值:String 四种可能的结果如下:

String ServiceErrorMessage = "--\n" + "第三方服务调用出错" + "\n--\n"; String PictureErrorMessage = "*****";//服务直接识别结果 String FileNotFoundMessage ="****"; String rightMessage = "****"//Hashmap转字符串(格式参考result.txt)

   

三、java调用代码如下

   

String picturePath = "1.jpg"; String serviceUrl = "http://xxxxxxx"; String keyPath ="src/key.txt"; String result = null; result = OcrandSegmentation(picturePath,serviceUrl,keyPath );

   

附:python查看版本

1、命令行 python

Jar包 django 加入python python导入jar包_python_02

2、命令行

>>> import platform >>> platform.architecture() windows系统输出是:('64bit', 'WindowsPE')

   

参考:

使用 Python 的 JPype 模块调用 Jar 包

python官网,下载依赖包

下载python依赖包的另一个链接

   

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3