三分钟体验:SpringBoot用深度学习模型识别数字

欢迎访问我的GitHub

这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos

本篇概览

  • 使用Deeplearning4j训练出来的模型,可以在java应用中使用吗?

  • 当然能,今天咱们花三分钟来体验集成了AI能力的SpringBoot应用

  • 该应用的功能是识别黑白图片中的手写数字(每张图片内只有一个数字),如下图,通过http接口将此图片提交,让SpringBoot应用去识别:
    在这里插入图片描述

  • 下图是postman操作界面的截图,红框中的数字就是SpringBoot应用的识别结果,数字8,与图片一致:
    在这里插入图片描述

  • SpringBoot应用用到的AI模型是LeNet-5,这是个经典的识别模型,常用在卷积网络入门学习中

  • 本篇以体验为主,不涉及具体的开发,后面还会有文章介绍完整的开发过程(包括源码)

环境信息

  • 为了简化体验过程,接下来会用到docker,推荐的环境信息如下:
  1. 操作系统:Ubuntu 16.04.1 LTS 服务器版(MacBook Pro也可以,版本是11.2.3,macOS Big Sur)
  2. docker:20.10.2 Community
  3. 为了加快docker镜像的下载速度,建议您提前做好docker加速配置
  4. 用于提交图片的http工具,我这里是postman
  • 文章标题号称三分钟极速体验,没时间说太多,准备好环境就火速动手啦

部署

  1. 新建名为images的目录,用于存储处理后的文件,我这里完整路径是/home/will/temp/202106/29/images
  2. 新建名为model目录,用于存储稍后要下载的模型文件,我这里完整路径是/home/will/temp/202106/29/model
  3. 下载训练好的模型文件,我准备了两个下载地址,您任选一个即可,一个是csdn的(无需积分):https://download.csdn.net/download/boling_cavalry/19881160,另一个是https://raw.githubusercontent.com/zq2599/blog_download_files/master/files/minist-model.zip
  4. 下载好的模型文件是minist-model.zip,不要解压,直接放进前面新建的model目录
  5. 执行以下命令,会先下载docker镜像文件再创建容器:
docker run \
--rm \
-p 18080:8080 \
-v /home/will/temp/202106/29/images:/app/images \
-v /home/will/temp/202106/29/model:/app/model \
bolingcavalry/dl4j-model-app:0.0.3
  1. 镜像文件有点大(九百多兆…),请您耐心等待,主要是dl4j的依赖库太大了
  2. 当控制台输出如下内容,表示启动成功,并且加载模型成功:
2021-06-29 10:51:55.744  INFO 1 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1748 ms
2021-06-29 10:51:55.852  INFO 1 --- [           main] c.b.p.service.impl.PredictServiceImpl    : load model from [/app/model/minist-model.zip]
2021-06-29 10:51:55.950  INFO 1 --- [           main] org.nd4j.linalg.factory.Nd4jBackend      : Loaded [CpuBackend] backend
2021-06-29 10:51:58.397  INFO 1 --- [           main] org.nd4j.nativeblas.NativeOpsHolder      : Number of threads used for linear algebra: 1
2021-06-29 10:51:58.399  WARN 1 --- [           main] o.n.l.cpu.nativecpu.CpuNDArrayFactory    : *********************************** CPU Feature Check Warning ***********************************
2021-06-29 10:51:58.399  WARN 1 --- [           main] o.n.l.cpu.nativecpu.CpuNDArrayFactory    : Warning: Initializing ND4J with Generic x86 binary on a CPU with AVX/AVX2 support
2021-06-29 10:51:58.399  WARN 1 --- [           main] o.n.l.cpu.nativecpu.CpuNDArrayFactory    : Using ND4J with AVX/AVX2 will improve performance. See deeplearning4j.org/cpu for more details
2021-06-29 10:51:58.399  WARN 1 --- [           main] o.n.l.cpu.nativecpu.CpuNDArrayFactory    : Or set environment variable ND4J_IGNORE_AVX=true to suppress this warning
2021-06-29 10:51:58.399  WARN 1 --- [           main] o.n.l.cpu.nativecpu.CpuNDArrayFactory    : *************************************************************************************************
2021-06-29 10:51:58.407  INFO 1 --- [           main] org.nd4j.nativeblas.Nd4jBlas             : Number of threads used for OpenMP BLAS: 1
2021-06-29 10:51:58.411  INFO 1 --- [           main] o.n.l.a.o.e.DefaultOpExecutioner         : Backend used: [CPU]; OS: [Linux]
2021-06-29 10:51:58.412  INFO 1 --- [           main] o.n.l.a.o.e.DefaultOpExecutioner         : Cores: [32]; Memory: [7.0GB];
2021-06-29 10:51:58.412  INFO 1 --- [           main] o.n.l.a.o.e.DefaultOpExecutioner         : Blas vendor: [OPENBLAS]
2021-06-29 10:51:59.076  INFO 1 --- [           main] o.d.nn.multilayer.MultiLayerNetwork      : Starting MultiLayerNetwork with WorkspaceModes set to [training: ENABLED; inference: ENABLED], cacheMode set to [NONE]
2021-06-29 10:51:59.658  INFO 1 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2021-06-29 10:51:59.671  INFO 1 --- [           main] c.b.p.PredictNumberApplication           : Started PredictNumberApplication in 6.474 seconds (JVM running for 7.235)
  • 现在SpringBoot应用启动成功了,我们来试试识别图片的功能,这个应用提供了两个接口,分别可以测试白底黑字和黑底白字

识别白底黑字

  • 准备一张白底黑字的png图片(画图板,截图工具都可以),例如下面这张:
    在这里插入图片描述
  • 白底黑字识别服务的地址是IP地址:18080/predict-with-white-background,用postman操作如下图,请按照数字顺序操作1-6,可见输入很简单,就一个字段,返回值就是识别结果,符合预期:
    在这里插入图片描述

识别黑底白字

  • 接下来试试黑底白字,准备一张类似下图的png图片:
    在这里插入图片描述

  • 黑底白字识别服务的地址是IP地址:18080/predict-with-black-background,用postman操作如下图,请按照数字顺序操作1-6,返回结果是红框8中的数字,符合预期:
    在这里插入图片描述

  • 至此,SpringBoot结合深度学习模型的体验已经完成,一分钟概览,一分钟部署,一分钟体验,咱们足够高效(下载九百多兆镜像的时间不能算,不敢算…)

  • 此刻您应该能感受到深度学习的魅力了,聪明的您当然会有很多疑问,例如:

  1. 模型是怎么训练出来的?
  2. java代码中如何使用这个模型?
  3. 这些东西怎么做成docker镜像?

你不孤单,欣宸原创一路相伴

  1. Java系列
  2. Spring系列
  3. Docker系列
  4. kubernetes系列
  5. 数据库+中间件系列
  6. DevOps系列
deeplearning4j是基于java深度学习库,当然,它有许多特点,但暂时还没学那么深入,所以就不做介绍了 需要学习dl4j,无从下手,就想着先看看官网的examples,于是,下载了examples程序,结果无法运行,总是出错,如下: 查看一周的错误,也没有成功,马上就要放弃了,结果今天在论坛一大牛指导下,终于成功跑起,下面,将心酸的环境配置过程记录如下,以备自己以后查阅,同时,也希望各种高手可以指点,毕竟,本人还是菜鸟一枚 1.安装JAVA运行环境 该部分,网上有许多教程,这里不再赘述,首先,就是安装一个JDK,然后,再安装一个自己喜欢的IED,这里,以eclispe为例 好了,java的运行环境配置好了,接下来,开始配置dl4j的运行环境,它的官网上给了好复杂的设置步骤,照着做看一些后,发现根本无法进行,结果发现,不需要全部设置完成,就可以运行它的例子了,所以,本人并没有按照官网的教程全部设置,只是设置到了可以运行官网的examples为止,可能存在隐患吧,但本人能力有限,实在无从下手,还期待高手指定 2.按照Maven 按照教程安装Maven,该教程讲述非常详细 (1)下载Maven3,3,3,以win7 64位为例 下载地址:https://maven.apache.org/download.cgi (2)将Maven解压到某个文件夹中,这里以“C:\Program Files\apache-maven-3.3.3”为例 (3)配置环境变量:将maven中的bin的路径添加到system variables的PATH中 (4)测试maven是否安装成功 在命令行中输入mvn -version 如果如下下图所示结果,证明配置正确 3. 下载dl4j的examples,网址为: https://github.com/deeplearning4j/dl4j-0.4-examples 4.打开eclipse,导入刚刚下载的dl4j的examples,具体地: 打开eclipse后->File->import->Maven Existing Maven Projects,在Root Directory中选择examples的文件夹 然后,Finish 这样,examples被成功导入 当然,由于Maven会自动导入程序所需的jar文件(在配置文件pom.xml中所提及),所以,会花费一些时间自动下载这些文件 点击运行,出现如下错误: 这个问题困扰了本人一周,终于解决,是因为系统缺少dll文件所致 5. 下载dll文件,地址为https://www.dropbox.com/s/6p8yn3fcf230rxy/ND4J_Win64_OpenBLAS-v0.2.14.zip?dl=1 下载后,将该文件随意放入一个文件夹中,这里以“C:/BLAS”为例 将所有下载得到的dll文件放入该文件夹,并且,将该路径添加至环境变量Path中 6.此时,再运行刚刚的examples,发现程序终于可以正常运行了!
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员欣宸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值