快到飞起!兼容所有主流操作系统,又一Java开发神器面世!

Java技术迷

共 4022字,需浏览 9分钟

 · 2021-05-10

自从飞桨框架2.0发布以来,一直有用户期待什么时候能够帮助Java用户更便捷高效完成他们的部署任务。在过去,我们往往需要自己部署一台Model Server来做这个事情。但是,无论是维护方面,还是速度方面,很多时候都没有办法达到预期。现在,我们联手DeepJavaLibrary(以下简称为DJL)—— 一个基于Java的深度学习开发包,提供了一套飞桨Java推理API。


DJL x Paddle 是一个基于飞桨 C++ 推理库的轻量级Java推理库,它支持基本的飞桨Tensor,并可以用来对所有飞桨模型进行推理。DJL x Paddle可以直接在Windows、Linux和Mac操作系统,以及所有的Java环境中使用。


目前,我们为用户提供了两个基本的使用样例:

  • 基于飞桨的口罩识别应用
  • 基于PaddleOCR的文字识别应用
从性能角度上来说,DJL x Paddle 集成了飞桨的高速推理引擎,同时加入了所有Java的特性,包括高效的内存管理以及多线程推理。这样可以满足生产环境中大规模推理应用服务的需求。同时,它可以和现有的大数据平台集成,例如 Apache Spark,实现离线大数据推理服务。飞桨的预训练模型应用工具PaddleHub提供了很多产业实践应用案例,您可以直接通过我们的Paddle模型转换教程,轻松地将应用部署在您的Java服务上。为了更好地展示它的强大之处,让我们来看一则小故事吧。


Paddle模型转换教程链接:

http://docs.djl.ai/docs/paddlepaddle/how_to_create_paddlepaddle_model_zh.html



一个小故事



Aaron是一名Boss,负责一家位于田纳西州的冷冻炸鸡加工厂。最近,他一直因为工人不戴口罩进厂工作而苦恼。为了保护员工的健康,他在厂子门前安装了摄像头。这样,他就可以在每次上班的时候,监督工人佩戴口罩的情况,只有戴上口罩才能入内。

可是,因为人流量众多,他们需要时时刻刻去盯着屏幕来判断是否要让工人进来。这样不仅十分不方便,还让工人因为人工筛查耽误时间变得焦躁。于是乎,Aaron就想:有没有什么办法能够将这个过程自动化,比如摄像头自动识别客人是否戴了口罩,然后自动将他们放进工厂?本科期间,他学过一点Java,工厂的网页后端也是自己用Java写的。他在网上搜索,有没有什么Java的方法能够解决这个问题。此时,DJL就出现在了眼前。对于Aaron来说,他并不了解AI,只是想找到一个现成的方法解决这个问题。

Aaron在DJL提供的案例里找到了基于飞桨的口罩识别应用模型!虽然飞桨和DJL都不曾听说过,但是代码看起来很简单,只需要稍作改动就可以完成任务。对于Aaron来说,这个模型可以进行面部识别,还能判断是否戴了口罩,完全满足了他的需求!


心动不如行动,他开始尝试直接使用这里所介绍的步骤完成他的口罩识别应用。首先,他需要引入DJL相关的依赖项至Gradle(Java中常用的构建工具)里:

dependencies {
  implementation "ai.djl:api:0.10.0"
  implementation "ai.djl.paddlepaddle:paddlepaddle-model-zoo:0.10.0"
  runtimeOnly "ai.djl.paddlepaddle:paddlepaddle-native-auto:2.0.0"
}


之后,直接导入图片:

String url = "/user/home/my_client.jpg";
Image img = ImageFactory.getInstance().fromUrl(url);



Aaron发现,DJL直接把模型和前后处理都封装好了。而后,只需要下面这些代码,就可以直接导入模型并且用来推理。首先,使用第一个模型,用以寻找人脸:

Map<String, String> filter = new ConcurrentHashMap<>();
filter.put("flavor""server");

ZooModel<Image, DetectedObjects> model =
                PpModelZoo.FACE_DETECTION.loadModel(filter, nullnew ProgressBar());

Predictor<Image, DetectedObjects> predictor = model.newPredictor();
DetectedObjects obj = predictor.predict(img);


之后只需要将推理结果映射到图片上即可:


Aaron心想:“ WOW,两个人脸都识别出来了。不对,等一下,它只找到了人脸,但是我们如何判断他们有没有戴口罩呢?”他继续往下看发现,原来还有一个模型需要使用,人们仅通过输入一张图片,就能判断是否戴了口罩:

Map<String, String> filter = new ConcurrentHashMap<>();
filter.put("flavor""server");
ZooModel<Image, Classifications> model =
        PpModelZoo.MASK_DETECTION.loadModel(filter, nullnew ProgressBar());
Predictor<Image, DetectedObjects> predictor = model.newPredictor();
Classifications result = predictor.predict(img);


“那就试试看?”Aaron嘀咕着。他把每张面部的推理结果映射到图片试试看:

诶,还不错嘛,识别精确度可以说是非常准了,终于可以用它来帮助我们开关门了。Aaron的这个设计节约了很大的人力成本,他也不需要每天盯在屏幕前了。没想到,就算是Java小白也可以轻松上手DJL x Paddle。


Aaron在DJL的Slack群里发了一条:

"Thanks for your help for this awesome application! Big love to DJL x Paddle :>"


翻译 (DJL组 Zach): "wo bu hui zhong wen"




总结




上面的案例只是冰山一角。我们提供了完整的中文教学,手把手帮你搭建一个属于自己的口罩检测模型。我们还提供了OCR模型的案例,可以帮助你顺利识别文字。


值得一提的是,我们在这次集成中带来了完全的Java支持,用户只需写几行代码便可以轻松读取模型并用来推理。飞桨框架2.0的训练十分简单,部署也十分轻松。后续我们还将继续优化支持,推出GPU推理以及一些其他方向的开发,敬请期待!



如果您想详细了解更多飞桨的相关内容,请参阅以下文档。


·DJL项目地址·

https://github.com/awslabs/djl


·DJL项目文档·

http://docs.djl.ai/paddlepaddle/index.html


·Paddle Inference文档地址·

https://paddle-inference.readthedocs.io/en/latest/index.html


·飞桨官网地址·

https://www.paddlepaddle.org.cn/


·飞桨开源框架项目地址·

GitHub: https://github.com/PaddlePaddle/Paddle 

Gitee: https://gitee.com/paddlepaddle/Paddle


1、最牛逼的 Java 日志框架,性能无敌,横扫所有对手!
2、把Redis当作队列来用,真的合适吗?
3、惊呆了,Spring Boot居然这么耗内存!你知道吗?
4、牛逼哄哄的 BitMap,到底牛逼在哪?
5、全网最全 Java 日志框架适配方案!还有谁不会?
6、30个IDEA插件总有一款适合你
7、Spring中毒太深,离开Spring我居然连最基本的接口都不会写了

点分享

点收藏

点点赞

点在看

浏览 31
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报