三分钟体验:SpringBoot用深度学习模型识别数字
Posted 程序员欣宸
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了三分钟体验:SpringBoot用深度学习模型识别数字相关的知识,希望对你有一定的参考价值。
欢迎访问我的GitHub
这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos
本篇概览
-
使用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
- 文章标题号称三分钟极速体验,没时间说太多,准备好环境就火速动手啦
部署
- 新建名为images的目录,用于存储处理后的文件,我这里完整路径是/home/will/temp/202106/29/images
- 新建名为model目录,用于存储稍后要下载的模型文件,我这里完整路径是/home/will/temp/202106/29/model
- 下载训练好的模型文件,我准备了两个下载地址,您任选一个即可,一个是csdn的(无需积分):https://download.csdn.net/download/boling_cavalry/19881160,另一个是https://raw.githubusercontent.com/zq2599/blog_download_files/master/files/minist-model.zip
- 下载好的模型文件是minist-model.zip,不要解压,直接放进前面新建的model目录
- 执行以下命令,会先下载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
- 镜像文件有点大(九百多兆…),请您耐心等待,主要是dl4j的依赖库太大了
- 当控制台输出如下内容,表示启动成功,并且加载模型成功:
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用深度学习模型识别数字的主要内容,如果未能解决你的问题,请参考以下文章