django调用java_07.手把手教将深度学习利用Django将模型发布成服务供java调用

标题

问题

一.python发布成服务

1.先建立一个深度学习模型并训练好

2.建立一个预测方法去调用训练好的模型

3.建立一个Django工程

4.将python利用模型预测的代码放入Django项目中

5.get请求加上参数

6.github

二.JAVA请求url,返回json数据

问题

python作为一个含科学计算与深度学习以及机器学习包丰富的语言,自然收到从事算法工作的大佬的青睐,java往往在这一块欠缺,可以利用java做深度学习,但是特别麻烦,现在学习深度学习的基本人人都会点python,但是往往在实际项目中由于各种原因,java依旧是web开发的主力,网上一些做法就是直接将java在程序里面调用python程序,但是这样的话会出各种不兼容和版本的问题,我觉得最好是将深度学习模型预测这块的代码用Django发布成一个服务然后供java这边通过url调用。

一.python发布成服务

9b71b3059dfc60875acf1ef9ae05619f.png

1.先建立一个深度学习模型并训练好

BiLSTM+CRF模型构建

inputs = Input(shape=(MAX_LEN,), dtype='int32')

x = Masking(mask_value=0)(inputs)

x = Embedding(VOCAB_SIZE, EMBED_DIM, mask_zero=True)(x)

x = Bidirectional(LSTM(HIDDEN_SIZE, return_sequences=True))(x)

x = TimeDistributed(Dense(CLASS_NUMS))(x)

outputs = CRF(CLASS_NUMS)(x)

model = Model(inputs=inputs, outputs=outputs)

model.summary()

比如我这是先建立了一个命名实体识别的深度学习模型,用keras建立的,并训练生成模型ch_ner_model4.h5,模型建立如上所示,具体代码请移步github,后面会贴出。

2.建立一个预测方法去调用训练好的模型

加载模型,具体代码请移步github,后面会贴出。

'''用来预测'''

from keras.models import load_model

import numpy as np

custom_ob = {'CRF': CRF,"crf_loss":crf_loss,"crf_viterbi_accuracy":crf_viterbi_accuracy,"f1":f1}

model = load_model('model/ch_ner_model3.h5', custom_objects=custom_ob)

maxlen = 500

3.建立一个Django工程

很简单,pip install Django即可,不过注意版本号,我这用的是3.0以上的。我这采用Anaconda建立的虚拟环境。

用命令django-admin startproject ner_web_v1建立这个工程,然后cd进去,输入命令

python3 manage.py runserver 127.0.0.1:8000/。看到下面这个即启动Django成功.

4c9feecb7f8214bc7dfcec654db8b22b.png

4.将python利用模型预测的代码放入Django项目中

就是图1中第三个箭头的指向建立一个这样的预测代码,注意文件夹以及文件的位置。可以把所有的模型预测代码都封装在一个方法里面,然后最终返回的话如果返回json数据的话,利用下面的代码返回json数据,这样不仅能返回json数据而且中文和字符不会报错,解决了Django返回json的中文字符乱码问题。

return HttpResponse(json.dumps(TextLine,ensure_ascii=False), content_type="application/json,charset=utf-8")

在url这里面还要配上路径,我这随便配置了hello,右边的ner.hello就是之前封装代码的方法,需要import引入。

d49f58f9b314a0d3f0479820061e9af7.png

5.get请求加上参数

我这的请求主要需要加上数据库中的id作为请求值。

所以在ner_web_v1加上获取请求的参数,id = request.GET.get(‘id’, ‘0’)。

请求时候加上id参数即可。

7fa476d48e126c921208683dbc303038.png

6.github

https://github.com/zbelieve/ner

代码中的数据库表特别简单可以自己建立一个,TX_TEXT是一些纯文本文章。传的id就是TM_ID。

里面的路径比如字典和模型路径,改成自己本机的绝对路径即可。有用的话,麻烦赏个星。我也是边学边做,讲的不对的勿喷。

d6a4efb516293758f511322763635cc4.png

二.JAVA请求url,返回json数据

java这块在测试包中利用restTemplate发送请求,即可获取之前python发布服务后传的json数据

@SpringBootTest

@RunWith(SpringRunner.class)

public class testRestTemplate {

@Autowired

RestTemplate restTemplate;

@Test

//测试远程连接获取模型数据,这个就是模型+数据中的数据

public void testRestTemplate(){

// 封装参数,这里是HashMap

Map paramMap = new HashMap();

paramMap.put("id", "11111111");

//测试这个的时候要把服务器开了

//url请求返回的是json数据,之后在这儿转换map,就是键值对类型的,这儿获取的远程访问的数据是cmsconfig的数据,主要想获取他的图片数据在服务器的url,静态化分为模板和数据,这儿就是获得动态的数据

//ResponseEntityforEntity = restTemplate.getForEntity("http://localhost:31001/cms/config/getmodel/5a791725dd573c3574ee333f", Map.class);

ResponseEntity forEntity2 = restTemplate.getForEntity("http://127.0.0.1:8000/hello?id={id}", Map.class,paramMap);

System.out.println(forEntity2);

System.out.println("x");

}

}

b93056659523f706b2ecf081e9f849fe.png

java这块调用我直接在测试包中写的,可以在下面找到源码,里面相关的pom文件就引入就行了。

https://github.com/zbelieve/MicroservicesWeb/tree/master/xc-service-manage-cms/src/test/java/com/xuecheng/manage_cms/dao

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/502559.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

springboot转发http请求_网易后端实习生分享:Springboot异常和错误处理规范

由于错误在所难免,异常处理已经成为开发工作中不可或缺的部分。在web开发中,我们通常不希望用户看到一个写满StackTrace的错误页面;同时,我们希望出现错误或发生异常时,开发运维人员可以看到详细的错误信息&#xff0c…

java 偏向锁 怎么用_Java锁升级、偏向锁、轻量级锁

偏向锁当锁对象第一次被线程获取时,虚拟机会把对象头的锁状态标志设置为01(即偏向状态),同时,使用CAS操作把获取到这个锁的线程的ID记录在对象头的mark word中。如果这个CAS操作成功,那么,以后持有这个偏向锁的线程在进…

springmvc 拦截器_Spring MVC拦截器学习

1 介绍Spring Web MVC是基于Servlet API构建的原始Web框架。2 拦截器2.1 定义springmvc框架的一种拦截机制2.2 使用2.2.1 两步走实现HandlerInterceptor接口注册(xml或者注解 )2.2.2 HandlerInterceptor接口实现HandlerInterceptor接口import org.spring…

python如何生成列表和元组数据_Python数据类型(列表和元组)

1.3 List(列表)列表由一系列按特定顺序排列的元素组成。在Python中,用方括号[ ]来表示列表,并用逗号来分隔其中的元素。1.3.1 访问列表元素在Python中,第一个列表元素的索引为0,而不是1。>>> bicycles [trek, cannondal…

mysql socket 与IP区别_MySQL本地用IP登陆而非socket

##想当然的指定hostname和端口。。。。失败[rootmysql01 ~]# /opt/mysql/bin/mysql -uroot -h localhost -P 3307 -pEnter password:ERROR 2002 (HY000): Cant connect to local MySQL server through socket /tmp/mysql.sock (2)##正确方法,指定通信协议 --protoco…

python画矩形函数drawrectangle_Python3 tkinter基础 Canvas create_rectangle 画矩形

Python : 3.7.0OS : Ubuntu 18.04.1 LTSIDE : PyCharm 2018.2.4Conda : 4.5.11typesetting : Markdowncode"""Author : 行初心Date : 18-9-30Blog : www.cnblogs.com/xingchuxinGitee : gitee.com/zhichengjiu"""from tkinter import *def main(…

java文件读入原理_描述一下JVM加载class文件的原理机制

1、JVM 简介JVM 是我们Javaer 的最基本功底了,刚开始学Java 的时候,一般都是从“Hello World ”开始的,然后会写个复杂点class ,然后再找一些开源框架,比如Spring ,Hibernate 等等,再然后就开发…

python为什么closed_为什么Python无法解析此JSON数据? [关闭] - Why can't Python parse this JSON data? [closed]...

问题:I have this JSON in a file: 我在文件中有此JSON:{"maps": [{"id": "blabla","iscategorical": "0"},{"id": "blabla","iscategorical": "0"}],"…

mysql 缓解竞争热点_MySQL优化之缓存优化

高兴的是有博友mark了我的文章。我知道mark之后,很少会再来继续关注的。但是从侧面说明了在博友点开博客的同时,他感觉这篇博客是有价值的,是能够弥补他的知识欠缺。一篇博客最重要的是对自己有用,如果再对别人有用,那…

python for循环1 到10_python for循环(1)

对于一个初学者来说for循环可能会击溃很多人,因为网上找的python的for循环没有详细的介绍for循环的条件以及for循环后面定义的东西是什么意思。首先我先举一个常用的例子。for i in range(1,10) :print i上面这两条代码是用来在屏幕上打印1到9的。这里就不对range这…

java maven junit_【JUnit】JUnit 与 maven 集成

环境JDK 11JUnit 4.13Spring Tool Suite 4.6.2Maven 3.6.3与 maven 集成因为已经是 maven 项目了,所以不再需要任何东西,默认就与 maven 集成了。不过由于 maven-surefire-plugin 自身的缺陷,导致测试时,如果有中文,则…

最长不重复子串python_python经典算法题:无重复字符的最长子串

题目:无重复字符的最长子串。给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: “bbbbb”输出: 1解释: 因为无重复字…

python构造referer_Python爬虫小偏方:修改referer绕开登录和访问频率限制

看官们在写爬虫程序时应该都会遇到如下问题:你的爬虫程序开发时能正常抓取网页,但是正式大量抓取时,抓取的网站总是返回403或者500等;你抓取的网站需要登录,要花大量时间去研究网站登录流程。遇到问题1,我们…

微信流媒体直播java_微信小程序直播带货教程

微信小程序直播带货教程微信小程序正式推出直播带货组件,很多正在使用 “api工厂” 的用户,这几天一直在问,现有小程序如何使用直播带货的功能,需要不需要做很复杂的改动?是否需要重新开发小程序?使用门槛高…

铺砖问题JAVA_java彩色瓷砖编程题分析

牛牛喜欢彩色的东西,尤其是彩色的瓷砖。牛牛的房间内铺有L块正方形瓷砖。每块砖的颜色有四种可能:红、绿、蓝、黄。给定一个字符串S, 如果S的第i个字符是R, ‘G, ‘B或Y,那么第i块瓷砖的颜色就分别是红、绿、蓝或者黄。牛牛决定换掉一些瓷砖的颜色,使得相邻两块瓷砖的颜色均不相…

python灰度图像为什么显示成彩色的_python opencv image 怎么变成伪彩色

匿名用户1级2017-05-16 回答OpenCV 生成 伪彩色图像opencv中没有易用的伪彩色图像生成函数,这里提供一个改造过的函数,利用自定义colorbar 将灰度图像转换成为伪彩色图像,优点在于提供了对于颜色的直观可操控性,转换方便。函数代码…

vue和java实现页面增删改_SpringBoot-Vue实现增删改查及分页小DEMO

前言主要通过后端 Spring Boot 技术和前端 Vue 技术来简单开发一个demo,实现增删改查、分页功能以及了解Springboot搭配vue完成前后端分离项目的开发流程。开发栈前端开发工具:WebStorm开发框架:vue axios包管理工具: npm打包工具&#xff1…

读取24位ad的值_实践案例丨利用小熊派开发板获取土壤湿度传感器的ADC值

摘要:一文带你用小熊派开发板动手做土壤湿度传感器。一、实验准备1.实验环境一块stm32开发板(推荐使用小熊派),以及数据线已经安装STM32CubeMX已经安装KeilMDK,并导入stm32开发板对应的芯片包(小熊派使用的是STM32L431…

java 计算两个时间戳_Java时间戳计算重叠持续时间与间隔

我相信下面的方法给出了你的Joda时间解的等价物。private static final LocalTime START LocalTime.of(18, 0);private static final LocalTime END LocalTime.of(8, 0);public static Duration overlap(ZonedDateTime currentStart, ZonedDateTime currentEnd) {ZonedDateTi…

python ini文件删除修改_如何在INI文件中编写时删除空格 - Python

这是RawConfigParser.write的定义:def write(self, fp):"""Write an .ini-format representation of the configuration state."""if self._defaults:fp.write("[%s]\n" % DEFAULTSECT)for (key, value) in self._defaults…