首页 > 解决方案 > 如何获取要包含在 readNetFromTensorflow() 中的数据集路径

问题描述

我如何包含要包含在 Net.readfromtensorflow 中的数据集路径。我不断收到 UnsatisfiedLinkError 的错误。数据集放在静态目录中。我引用 spring doc “默认情况下,Spring Boot 从类路径中名为 /static(或 /public 或 /resources 或 /META-INF/resources)的目录或 ServletContext 的根目录中提供静态内容”

使用的代码:

Net net = Dnn.readNetFromTensorflow("/dataset/frozen_east_text_detection.pb");

完全错误:出现意外错误(类型=内部服务器错误,状态=500)。org.opencv.dnn.Dnn.readNetFromTensorflow_1(Ljava/lang/String;)J java.lang.UnsatisfiedLinkError: org.opencv.dnn.Dnn.readNetFromTensorflow_1(Ljava/lang/String;)J

使用 spring boot 2.0 spring 版本 5.1 opencv 4.0.1

标签: javaspringspring-mvcopencv

解决方案


您使用哪个 Maven 依赖项?您可以将 javacpp-presets 用于 opencv ( https://github.com/bytedeco/javacpp-presets/tree/master/opencv )。您所要做的就是将 maven 依赖项 ( https://mvnrepository.com/artifact/org.bytedeco.javacpp-presets/opencv-platform ) 添加到您的 pom.xml 中。依赖项包括每个平台(windows、linux、mac ..)所需的系统库。在使用 opencv(来自 org.opencv 包命名空间的类)之前,您必须调用

static { Loader.load(opencv_java.class); }

在此调用之后,应该可以使用 opencv api。java.lang.UnsatisfiedLinkError应该消失。这个错误与spring无关。必须加载 opencv 所需的库是一个问题。要加载 east_text_detection.pb 文件,您可以使用以下内容:

String location = new File(this.getClass().getClassLoader().getResource("/dataset/frozen_east_text_detection.pb").toURI()).getPath();
Net net = Dnn.readNetFromTensorflow(location);

这需要一个带有 .pb 文件的目录“数据集”。数据集目录应直接位于资源目​​录下。


推荐阅读