From 3892b6ffdd881c1a20200a8649f363e1d3793845 Mon Sep 17 00:00:00 2001 From: xgc Date: Fri, 19 Jul 2024 04:56:30 +0000 Subject: [PATCH 1/2] update src/main/java/com/github/javpower/javavision/util/DjlHandlerUtil.java. Signed-off-by: xgc --- .../javavision/util/DjlHandlerUtil.java | 30 ++++++++++++------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/github/javpower/javavision/util/DjlHandlerUtil.java b/src/main/java/com/github/javpower/javavision/util/DjlHandlerUtil.java index 88128cb..33b6d38 100644 --- a/src/main/java/com/github/javpower/javavision/util/DjlHandlerUtil.java +++ b/src/main/java/com/github/javpower/javavision/util/DjlHandlerUtil.java @@ -5,19 +5,27 @@ import org.apache.commons.lang3.StringUtils; public class DjlHandlerUtil { /** - * 获取修复后的模型路径 - * @param modelPath 如 C:\Users\wosui\AppData\Local\Temp\ocrJava\onnx\image_feature.zip - * @return file:///C:/Users/wosui/AppData/Local/Temp/ocrJava/onnx/image_feature.zip - */ - public static String getFixModelPath(String modelPath){ - if(StringUtils.isBlank(modelPath)){ + * 转换模型文件路径为URL格式。 + *

+ * 如果提供的路径是空白的,将返回空字符串。如果路径以 "http" 开头,表示它已经是一个有效的URL, + * 因此直接返回。否则,将转换Windows风格的文件路径为URL格式的字符串。 + * @param modelPath 原始模型文件路径,例如 "C:/Users/wosui/AppData/Local/Temp/ocrJava/onnx/image_feature.zip"(Windows)或 + * "/home/wosui/Temp/ocrJava/onnx/image_feature.zip"(Linux) + * @return 转换后的URL格式路径,例如 "file:///C:/Users/wosui/AppData/Local/Temp/ocrJava/onnx/image_feature.zip"(Windows)或 + * "file:///home/wosui/Temp/ocrJava/onnx/image_feature.zip"(Linux) + */ + public static String getFixedModelPath(String modelPath) { + // 检查路径是否为空或为空白 + if (StringUtils.isBlank(modelPath)) { return ""; } - StringBuffer path=new StringBuffer(); - if(!modelPath.startsWith("http")){ - modelPath=modelPath.replace("\\","/"); - path.append("file:///").append(modelPath); + // 如果路径已经是HTTP URL,则直接返回 + if (modelPath.startsWith("http")) { + return modelPath; } - return path.toString(); + // 将路径中的反斜杠替换为正斜杠,以符合URL格式 + String fixedPath = modelPath.replace("\\", "/"); + // 构建URL格式的文件路径 + return "file://" + fixedPath; } } -- Gitee From ed4141c6dd60ed84511d3e234312edc657e4798f Mon Sep 17 00:00:00 2001 From: skyyan Date: Fri, 19 Jul 2024 14:50:04 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=20=E6=9E=84=E5=BB=BAURL=E6=A0=BC=E5=BC=8F?= =?UTF-8?q?=E7=9A=84=E6=96=87=E4=BB=B6=E8=B7=AF=E5=BE=84=20=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F=E9=97=AE=E9=A2=98&&=20linux=20libopencv=5Fjava470.so?= =?UTF-8?q?=20=E6=89=BE=E4=B8=8D=E5=88=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../translator/AbstractDjlTranslator.java | 6 +- .../javavision/util/DjlHandlerUtil.java | 2 +- .../javavision/util/OpenCVExtendUtil.java | 62 +++++++++++++++++++ 3 files changed, 67 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/github/javpower/javavision/util/OpenCVExtendUtil.java diff --git a/src/main/java/com/github/javpower/javavision/detect/translator/AbstractDjlTranslator.java b/src/main/java/com/github/javpower/javavision/detect/translator/AbstractDjlTranslator.java index 853c76b..8fdb3ed 100644 --- a/src/main/java/com/github/javpower/javavision/detect/translator/AbstractDjlTranslator.java +++ b/src/main/java/com/github/javpower/javavision/detect/translator/AbstractDjlTranslator.java @@ -6,6 +6,7 @@ import ai.djl.training.util.ProgressBar; import ai.djl.translate.Translator; import com.github.javpower.javavision.util.DjlHandlerUtil; import com.github.javpower.javavision.util.JarFileUtils; +import com.github.javpower.javavision.util.OpenCVExtendUtil; import com.github.javpower.javavision.util.PathConstants; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; @@ -25,7 +26,8 @@ public abstract class AbstractDjlTranslator { static { // 加载opencv动态库, //System.load(ClassLoader.getSystemResource("lib/opencv_java470-无用.dll").getPath()); - nu.pattern.OpenCV.loadLocally(); +// nu.pattern.OpenCV.loadLocally(); + OpenCVExtendUtil.init(); } public AbstractDjlTranslator(String modelName, Map arguments) { @@ -43,7 +45,7 @@ public abstract class AbstractDjlTranslator { // String model_path = PathConstants.TEMP_DIR + PathConstants.ONNX + "/" + modelName; String modelPath = PathConstants.TEMP_DIR + File.separator+PathConstants.ONNX_NAME+ File.separator + modelName; log.info("路径修改前:{}",modelPath); - modelPath= DjlHandlerUtil.getFixModelPath(modelPath); + modelPath= DjlHandlerUtil.getFixedModelPath(modelPath); log.info("路径修改后:{}",modelPath); Criteria criteria = Criteria.builder() diff --git a/src/main/java/com/github/javpower/javavision/util/DjlHandlerUtil.java b/src/main/java/com/github/javpower/javavision/util/DjlHandlerUtil.java index 33b6d38..1291ca5 100644 --- a/src/main/java/com/github/javpower/javavision/util/DjlHandlerUtil.java +++ b/src/main/java/com/github/javpower/javavision/util/DjlHandlerUtil.java @@ -26,6 +26,6 @@ public class DjlHandlerUtil { // 将路径中的反斜杠替换为正斜杠,以符合URL格式 String fixedPath = modelPath.replace("\\", "/"); // 构建URL格式的文件路径 - return "file://" + fixedPath; + return "file:///" + fixedPath; } } diff --git a/src/main/java/com/github/javpower/javavision/util/OpenCVExtendUtil.java b/src/main/java/com/github/javpower/javavision/util/OpenCVExtendUtil.java new file mode 100644 index 0000000..37d9263 --- /dev/null +++ b/src/main/java/com/github/javpower/javavision/util/OpenCVExtendUtil.java @@ -0,0 +1,62 @@ +package com.github.javpower.javavision.util; + +import lombok.extern.slf4j.Slf4j; + +import java.lang.reflect.Method; +import java.nio.file.Path; + +/** + * @author skyyan + */ +@Slf4j +public class OpenCVExtendUtil { + + + public static void init(){ + synchronized (OpenCVExtendUtil.class){ + // 加载opencv动态库, + //System.load(ClassLoader.getSystemResource("lib/opencv_java470-无用.dll").getPath()); + log.info("--AbstractDjlTranslator static--- "); + // 获取操作系统名称 + String osName = System.getProperty("os.name").toLowerCase(); + // 打印操作系统名称 + log.info("Operating System:{}",osName); + // 判断操作系统类型 + if (osName.contains("win")) { + nu.pattern.OpenCV.loadLocally(); + log.info(" window 系统."); + } else if (osName.contains("nix") || osName.contains("nux") || osName.contains("mac")) { + log.info("This is a Unix/Linux/Mac operating system."); + Path path= OpenCVExtendUtil.getPath(); + if(null!=path) { + log.info("加载path==="+path); + System.load(path.normalize().toString()); + }else{ + log.error("lib load error!"); + } + + } else { + log.info("This is another type of operating system."); + } + } + } + public static Path getPath(){ + try { + // 获取 OpenCV 类的 Class 对象 + Class openCVClass = Class.forName("nu.pattern.OpenCV"); + + // 获取 extractNativeBinary 方法的 Method 对象 + Method extractNativeBinaryMethod = openCVClass.getDeclaredMethod("extractNativeBinary"); + // 设置方法可访问 + extractNativeBinaryMethod.setAccessible(true); + // 调用 extractNativeBinary 方法并获取结果 + Path binaryPath = (Path) extractNativeBinaryMethod.invoke(null); // 调用静态方法,传递 null 作为实例 + log.info("OpenCVUtil 路径为: " + binaryPath); + return binaryPath; + } catch (Exception e) { + log.error(e.getMessage()); + e.printStackTrace(); + } + return null; + } +} -- Gitee