前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >三分钟体验:SpringBoot用深度学习模型识别数字

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

作者头像
程序员欣宸
发布2021-12-07 10:22:24
3740
发布2021-12-07 10:22:24
举报
文章被收录于专栏:实战docker实战docker

本篇概览

  • 使用Deeplearning4j训练出来的模型,可以在java应用中使用吗?
  • 当然能,今天咱们花三分钟来体验集成了AI能力的SpringBoot应用
  • 该应用的功能是识别黑白图片中的手写数字(每张图片内只有一个数字),如下图,通过http接口将此图片提交,让SpringBoot应用去识别:
  • 下图是postman操作界面的截图,红框中的数字就是SpringBoot应用的识别结果,数字8,与图片一致:
  • SpringBoot应用用到的AI模型是LeNet-5,这是个经典的识别模型,常用在卷积网络入门学习中
  • 本篇以体验为主,不涉及具体的开发,后面还会有文章介绍完整的开发过程(包括源码)

环境信息

  • 为了简化体验过程,接下来会用到docker,推荐的环境信息如下:
  • 操作系统:Ubuntu 16.04.1 LTS 服务器版(MacBook Pro也可以,版本是11.2.3,macOS Big Sur)
  • docker:20.10.2 Community
  • 为了加快docker镜像的下载速度,建议您提前做好docker加速配置
  • 用于提交图片的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镜像文件再创建容器:
代码语言:javascript
复制
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. 当控制台输出如下内容,表示启动成功,并且加载模型成功:
代码语言:javascript
复制
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结合深度学习模型的体验已经完成,一分钟概览,一分钟部署,一分钟体验,咱们足够高效(下载九百多兆镜像的时间不能算,不敢算…)
  • 此刻您应该能感受到深度学习的魅力了,聪明的您当然会有很多疑问,例如:
  • 模型是怎么训练出来的?
  • java代码中如何使用这个模型?
  • 这些东西怎么做成docker镜像?
  • 这些疑问会在《SpringBoot用深度学习模型识别数字:开发详解》一文完全揭秘,然后您也能轻易做出集成深度学习模型的SpringBoot应用,欢迎点击深入体验;
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-06-29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 本篇概览
  • 环境信息
  • 部署
  • 识别白底黑字
  • 识别黑底白字
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档