AI模型跨语言调用

1 篇文章 0 订阅

本文节选自我的博客:AI 模型跨语言调用

  • 💖 作者简介:大家好,我是MilesChen,偏前端的全栈开发者。
  • 📝 CSDN主页:爱吃糖的猫🔥
  • 📣 我的博客:爱吃糖的猫
  • 📚 Github主页: MilesChen
  • 🎉 支持我:点赞👍+收藏⭐️+留言📝
  • 💬介绍:The mixture of WEB+DeepLearning+Iot+anything🍁

前言

目前AI训练的模型只支持python调用,如果要使用c++或者在java中调用就显得极为不方便,本文采用一种将AI模型调用API使用Socket做二次封装做为一个客户端,提供给其他语言的服务端调用。

环境:

  • win10
  • python-3.6
  • torch-1.1
  • torchvision-0.3.0

服务端发送指令使用pytorch模型,返回模型结果

import torch
import numpy as np
from torch.autograd import Variable
from torchvision import transforms
from PIL import Image
import socket

client = socket.socket() #声明socket类型,同时生成socket连接对象
client.connect(('127.0.0.1',8080))

def resnet18_pre(img=0,image_dir=""):  #cv2图片
    if len(image_dir)>2:
        img = Image.open(image_dir)

    transform = transforms.Compose([
        transforms.Resize((300, 300), interpolation=2),
        transforms.ToTensor(),
        transforms.Normalize(mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5])
    ])
    img = transform(img)
    img = img.unsqueeze(0)
    im = Variable(img)

    Resnet_model = torch.load('Resnet18_1.pkl', map_location=lambda storage, loc: storage)  # GPUc参数加载到CPU中
    Resnet_model.eval()  # 固定参数不反向更新参数

    pre = Resnet_model(im)
    numpy_array = pre.detach().numpy()
    numpy_array = np.squeeze(numpy_array, axis=0)  # 降低维度
    output_np = np.argmax(numpy_array, axis=0)  # 输出最大的位置 即是预测值 output_np   int64
    pre_data = output_np.astype(np.uint8)
    return pre_data

while True:
    data = client.recv(1024)      #设置收多少字节
    print("recv:",data.decode())
    pre_data = resnet18_pre(image_dir=data.decode()) #接收的是图片的路径
    print("预测结果:", pre_data)
    msg = 'result:'+str(pre_data)
    if len(msg) == 0:continue       #为空就从新输入,不能发空
    client.send(msg.encode("utf-8"))  #转 二进制并发送
client.close()

1.使用pyinstall打包python文件为exe文件

terminine切换到anaconda指定的python环境下,cd切换到打包路径执行

pyinstaller -F -c use_model.py

2.在terminine执行打包好的exe文件

问题:could not get source code
terminine报错 如下
File “site-packages\torchvision\ops\misc.py”, line 135, in
File “site-packages\torchvision\ops\misc.py”, line 148, in FrozenBatchNorm2d
File “site-packages\torch\jit_init_.py”, line 850, in script_method
File “site-packages\torch\jit\frontend.py”, line 152, in get_jit_def
File “inspect.py”, line 973, in getsource
File “inspect.py”, line 955, in getsourcelines
File “inspect.py”, line 786, in findsource
OSError: could not get source code

解决办法:更换更低版本的torchvision

pip uninstall torchvision
pip install torchvision==0.2.2.post3

其他语言调用

在其他语言中创建一个Socker服务端,开启服务,需要使用到时候给客户端发送图片的路径,客户端接收到路径会去调用模型,得到预测结果并返回给socker服务器

总结

这里目前做得还是有问题,应该把AI模型部分作为服务端。由于后来领导改需求了,这个思路并没有完成,这篇文章也算给大家提供思路吧。


有任何疑问和想法,欢迎在评论区与我交流。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值