怎么让自己的网站通过域名访问,聊城化工建设学校,wordpress 评论回信,北京广告公司名录总览 这是Spring Boot上的另一篇文章 #xff0c;该文章将展示如何使用Deep Java Library #xff08;DJL#xff09;构建示例Web应用程序#xff0c; Deep Java Library #xff08;DJL#xff09;是Java的开源深度学习库#xff0c;用于诊断X射线图像上的COVID-19。 … 总览 这是Spring Boot上的另一篇文章 该文章将展示如何使用Deep Java Library DJL构建示例Web应用程序 Deep Java Library DJL是Java的开源深度学习库用于诊断X射线图像上的COVID-19。 该示例应用程序是DJL的类似COVID-19 示例的基于Spring Boot的版本它具有一个使用Twitter Bootstrap和JQuery构建的简单静态HTML页面用户可以将图像URL提交到REST apiDJL库将在其中下载图像和预测是否是被COVID-19感染的肺部的X射线图像。 到源代码的链接包含在这篇文章的结尾。 免责声明 这只是基于https://github.com/ieee8023/covid-chestxray-dataset上的数据集的演示应用程序不应将其用于实际医学诊断。 深度Java库 如前所述 DJL是基于Java的库支持多个 深度学习框架例如Apache MxNet PyTorch和Tensorflow 。 由于大多数深度学习引擎都是使用Python而不是Java构建的因此DJL内置了引擎适配器来访问这些引擎的本机共享库。 DJL以一种优雅的方式做到了这一点使得根据用例从一个框架切换到另一个框架变得非常简单。 依存关系 该应用程序需要Spring Boot Web Starter code dependency
groupIdorg.springframework.boot/groupId
artifactIdspring-boot-starter-web/artifactId
/dependency/code 还有commons-io库用于一些基本的I / O操作 code dependency
groupIdcommons-io/groupId
artifactIdcommons-io/artifactId
version2.6/version
/dependency/code Lombok库也是如此因为我懒得编写getter和setter方法 code dependency
groupIdorg.projectlombok/groupId
artifactIdlombok/artifactId
optionaltrue/optional
/dependency/code 最后是此示例应用程序的DJL依赖项 code dependency
groupIdai.djl/groupId
artifactIdapi/artifactId
version${ai.djl.version}/version
/dependency
dependency
groupIdai.djl.tensorflow/groupId
artifactIdtensorflow-api/artifactId
version${ai.djl.version}/version
/dependency
dependency
groupIdai.djl.tensorflow/groupId
artifactIdtensorflow-engine/artifactId
version${ai.djl.version}/version
/dependency
dependency
groupIdai.djl.tensorflow/groupId
artifactIdtensorflow-native-auto/artifactId
version${tensorflow-native-auto.version}/version
scoperuntime/scope
/dependency
dependency
groupIdnet.java.dev.jna/groupId
artifactIdjna/artifactId
version${jna.version}/version !-- overrides default spring boot version to comply with DJL --
/dependency/code 这是DJL依赖版本所需的Maven属性列表 code properties
java.version1.8/java.version
ai.djl.version0.5.0/ai.djl.version
jna.version5.3.0/jna.version
tensorflow-native-auto.version2.1.0/tensorflow-native-auto.version
/properties/codeXRayApplication类 此类的main()方法将启动Spring Boot应用程序并且看起来像大多数其他Application类文件 codeSpringBootApplication
public class XRayApplication {public static void main(String[] args) {
SpringApplication.run(XRayApplication.class, args);
}}/code组态 为了配置DJL库让我们创建一个带有Configuration批注的DjlConfig类。 此类将定义一个ZooModel Spring Bean它将帮助预测所提交的图像URL是否属于受COVID-19感染的肺 code Bean
public ZooModel xrayModel() throws Exception {
CriteriaBufferedImage, Classifications criteria
Criteria.builder()
.setTypes(BufferedImage.class, Classifications.class)
.optTranslator(new XrayTranslator())
.build();return ModelZoo.loadModel(criteria);
}/code 这段代码说明的是我们创建了一个带BufferedImage输入和Classifications 稍后会详细介绍输出类型的XrayTranslator对象并且它使用XrayTranslator对象将输入图像转换为深度学习模型正常运行所需的格式。 下面是该代码XrayTranslator这是内一个内部类DjlConfig Covid19服务 code public static final class XrayTranslator implements TranslatorBufferedImage, Classifications {private static final ListString CLASSES Arrays.asList(covid-19, normal);Override
public NDList processInput(TranslatorContext ctx, BufferedImage input) {
NDArray array
BufferedImageUtils.toNDArray(
ctx.getNDManager(), input, NDImageUtils.Flag.COLOR);
array NDImageUtils.resize(array, 224).div(255.0f);
return new NDList(array);
}Override
public Classifications processOutput(TranslatorContext ctx, NDList list) {
NDArray probabilities list.singletonOrThrow();
return new Classifications(CLASSES, probabilities);
}
}
/codeCovid19服务 Covid19Service类将处理诊断X射线图像的业务逻辑并且您会发现令人惊讶的是实际上只有几行代码 codeService
public class Covid19Service {Autowired
private ZooModel xrayModel;public String diagnose(String imageUrl) {
try (PredictorBufferedImage, Classifications predictor xrayModel.newPredictor()) {
Classifications result predictor.predict(BufferedImageUtils.fromUrl(imageUrl));
return Diagnose: result.best().getClassName(), probability: result.best().getProbability();
} catch (Exception e) {
throw new RuntimeException(Failed to diagnose, e);
}
}
}/code 在DjlConfig类中创建的ZooModel bean是自动装配的并在具有imageUrl参数的imageUrl diagnose()方法中使用。 在该方法中我们使用try-resource块创建Predictor对象因为在执行后需要关闭预测变量并使用它通过预先训练的Tensorflow模型运行BufferedImage(使用imageUrl参数创建。 有关该模型的更多详细信息请访问https://www.pyimagesearch.com/2020/03/16/detecting-covid-19-in-x-ray-images-with-keras-tensorflow-and-deep-learning/ 。 一旦运行diagnostic diagnose()方法 Classifications结果对象将显示X射线图像上的肺部是否被COVID-19感染以及感染的可能性是多少。 Covid19控制器 控制器类定义了REST API来诊断X射线图像这些图像将由我们的简单前端应用程序消耗 codeRestController
RequestMapping(value /api/v1, produces MediaType.APPLICATION_JSON_VALUE)
public class Covid19Controller {
private final Covid19Service covid19Service;public Covid19Controller(Covid19Service covid19Service) {
this.covid19Service covid19Service;
}GetMapping(/covid19/diagnose)
public ResponseEntity diagnose(RequestParam String imageUrl) {
String answer covid19Service.diagnose(imageUrl);
return ResponseEntity.ok(Collections.singletonMap(result, answer));
}
}/code RestController注释告诉Spring在我们的MVC设计中这是一个定义REST API的C ontroller bean。 RequestMapping注释告诉Spring此类中所有REST /api/v1路径都应以/api/v1作为前缀并且所有REST /api/v1将返回application\json响应。 我们之前讨论的Covid19Service在构造函数中自动装配随后由REST diagnose api在GET /api/v1/covid19/diagnose路径中使用。 诊断api使用imageUrl请求参数并返回带有结果字符串表示形式的JSON文档。 前端 Spring Boot应用程序具有一个简单的静态index.html文件作为诊断REST api的前端客户端它使用Twitter Bootstrap进行响应式设计并使用JQuery进行REST api调用 codehead
link relstylesheet href/css/bootstrap.min.css/
script src/js/jquery.min.js/script
/head/code 该文件具有HTML表单可以捕获用户的X射线图像URL code form iddiagnoseForm classmb-4
div classinput-group
input typeurl idimageUrl classform-control required
placeholderEnter a image url
aria-labelImage URL
div classinput-group-append
button classbtn btn-outline-primarySubmit/button
/div
/div
/form/code 提交表单后REST API可能需要一段时间才能做出响应。 同时页面将显示微调器一旦收到响应文本将显示在diagnose div中 code div classrow ml-1
div idspinnerDiagnose classtext-primary rolestatus
span classsr-onlyLoading.../span
/div
div iddiagnose/div
/div/code 参见下面的javascript代码 code$( #diagnoseForm ).submit(function( event ) {
const imageUrl $(#imageUrl).val();
$(#spinnerDiagnose).addClass(spinner-border);
$(#diagnose).html();$.ajax(/api/v1/covid19/diagnose?imageUrlimageUrl)
.done(data {
$(#spinnerDiagnose).removeClass(spinner-border);
$(#diagnose).html(data.result);
})
.fail(err {
$(#spinnerDiagnose).removeClass(spinner-border);
$(#diagnose).html(Failed to get answer);
});
event.preventDefault();
});/code 触发表单的imageUrl事件时代码获取imageUrl值显示微调器从先前的运行中清除diagnose div的内容并使用imageUrl调用诊断REST api。 如果响应成功代码将隐藏微调框并在diagnose div中显示结果。 发生错误时代码还将隐藏微调框并显示一般错误消息。 运行应用 该应用需要先下载Tensorflow才能运行。 在项目的根文件夹中运行以下命令 codemkdir models
cd models
curl https://djl-tensorflow-javacpp.s3.amazonaws.com/tensorflow-models/covid-19/saved_model.zip | jar xv
cd ..
./mvnw spring-boot:run -Dai.djl.repository.zoo.locationmodels/saved_model/code 然后访问http// localhost8080 / index.html进行X射线图像URL的诊断。 要使用的示例图像 COVID-19感染的肺 正常肺 总览 在本教程中我们回顾了如何使用Spring BootDJL和Tensorflow创建示例深度学习Java应用程序。 该帖子的源代码位于https://github.com/davidkiss/djl-spring-boot-xray 。 翻译自: https://www.javacodegeeks.com/2020/05/deep-learning-with-spring-boot-and-djl.html