как получить путь к набору данных для включения в readNetFromTensorflow()

#java #spring #spring-mvc #opencv

#java #весна #spring-mvc #opencv

Вопрос:

как мне включить путь к набору данных для включения в Net.readfromtensorflow. я продолжаю получать ошибку UnsatisfiedLinkError. набор данных помещен в статический каталог. я цитирую из spring doc «По умолчанию Spring Boot обслуживает статическое содержимое из каталога с именем /static (или / public или /resources или /META-INF /resources) в classpath или из корня ServletContext»

используемый код:

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

полная ошибка:
Произошла непредвиденная ошибка (тип = Внутренняя ошибка сервера, статус = 500).
org.opencv.dnn.Dnn.readNetFromTensorflow_1(Ljava/lang /String;)J
java.lang.Ошибка неудовлетворительной ссылки: org.opencv.dnn.Dnn.readNetFromTensorflow_1(Ljava/lang/String;)J

использование spring boot 2.0 spring версии 5.1 opencv 4.0.1

Комментарии:

1. Вы решили проблему? Если да, пожалуйста, поделитесь своим решением. Спасибо!

Ответ №1:

Какую зависимость maven вы используете? Вы можете использовать javacpp-пресеты для opencv (https://github.com/bytedeco/javacpp-presets/tree/master/opencv). Все, что вам нужно сделать, это добавить зависимость maven (https://mvnrepository.com/artifact/org.bytedeco.javacpp-presets/opencv-platform ) в ваш pom. Зависимость включает в себя необходимые системные библиотеки для каждой платформы (Windows, linux, Mac ..). Прежде чем использовать opencv (классы из пространства имен org.opencv package), вы должны вызвать

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);
  

Для этого требуется каталог ‘dataset’ с файлом .pb. Каталог dataset должен быть расположен непосредственно под каталогом ресурсов.