首页 > 解决方案 > 如何在我的 Django RestFramework 上使用我的 ML 模型?

问题描述

这基本上是我的整个项目。我已经准备好 django 服务器和模型。我需要知道如何集成它,以便我的项目流程可能像:a)用户在 Android 应用程序上获取或上传图像。b) 拍摄的图像作为编码的 64 位图像字符串进入我服务器上的 Android 表。c) 然后图像由 ML 模型处理,并将结果(将是一个标签)发回,以便人们可以查看菜肴的标签。我是否朝着正确的方向前进?如果不是我该怎么办?需要帮助。谢谢你。

当前设置正在运行,但现在它只是给出了一个错误:

参数应该是类似字节的对象或 ASCII 字符串,而不是 'ListSerializer'

模型.py

class Food(models.Model):
label=models.TextField(max_length=200)
link = models.FileField(null=False, blank=False)
 Image = models.TextField(link, null=True)

class Android(models.Model):
label=models.TextField(max_length=200)
imagestring=models.TextField(null=True,blank=True)  //convert this to Image

序列化程序.py

from rest_framework import serializers
from .models import Server,Android
from api import Code
from  habibi import  readb64 as decode
from  habibi import  main as m

class AndroidSerializers(serializers.HyperlinkedModelSerializer):
return_image = serializers.SerializerMethodField()
class Meta:
    model = Android
    fields = ('label', 'imagestring','return_image')

def get_return_image(self, value):
    queryset = Android.objects.filter(imagestring=value.imagestring)
    queryset_serializer = AndroidSerializers(queryset, many=True, read_only=True)
    a = decode(queryset_serializer)
    b = m(a)
    c = Code.predicet(b)
    return c


class FoodSerializers(serializers.HyperlinkedModelSerializer):
class Meta:
    model=Server
    fields=('url','label','Image','link')

意见

class FoodViewSet(viewsets.ModelViewSet):
queryset = Server.objects.all()
serializer_class =FoodSerializers


class Androids(viewsets.ModelViewSet):
queryset =Android.objects.all()
serializer_class = AndroidSerializers

Code.py(预测)

  from sklearn import preprocessing
  import numpy as np 
  from sklearn.externals import joblib
  def predicet(b):
 seed = 7
 np.random.seed(seed)

Y = ['Club Sandwich', 'Onion Ring', 'Pizza']

encodedvalue = preprocessing.LabelEncoder()
encoded_y = encodedvalue.fit_transform(Y)
clf = joblib.load('D:\csvs\models\pridictionmodel.pkl')
y_pred = clf.predict(b)
haaha = encodedvalue.inverse_transform(y_pred)
return  haaha

Habibi.py(特征)

import cv2
import math as m
import base64
from PIL import Image
import cv2
from io import StringIO
import numpy as np



def Applysift(img):
sift = cv2.xfeatures2d.SIFT_create()
kp, des = sift.detectAndCompute(img, None)
x = np.array(des)

y = x[:500, :]

j = y.flatten()


return j



 def GetIntensity(img):
  h, w, c = np.shape(img)
  height=h-2
  widht=w-2
  blue = img.item(height, widht, 0)
  green = img.item(height, widht, 1)
 red = img.item(height, widht, 2)
 inte=((0.2126*red) + (0.7152*green) + (0.0722*blue))

 uper = m.ceil(inte)

 return uper



 def average_hash(image, hash_size=8):

 im_pil = Image.fromarray(image)
 img = im_pil.convert('L').resize((hash_size, hash_size),Image.ANTIALIAS)
 pixels = np.array(img.getdata()).reshape((hash_size, hash_size))
 avg = pixels.mean()
 diff = pixels > avg
 // make a hash
 return diff



def binary_array_to_hex(arr):
h = 0
s = []
for i,v in enumerate(arr.flatten()):
    if v: h += 2**(i % 8)
    if (i % 8) == 7:
        s.append(hex(h)[2:].rjust(2, '0'))
        h = 0
return "".join(s)


  def hex_to_int(hexval):
  return int(hexval,16)





def readb64(base64_string):
sbuf = StringIO()
sbuf.write(base64.b64decode(base64_string))
pimg = Image.open(sbuf)
return cv2.cvtColor(np.array(pimg), cv2.COLOR_RGB2BGR)


def main(a):
#links of image

j=a
#img1 = cv2.imread(j)
img = cv2.imread(j, -1)
sift = Applysift(img)
intensity = GetIntensity(img)
hash = average_hash(img)
arr = hash * 1
hexval = binary_array_to_hex(arr)
intval = hex_to_int(hexval)
orb_List = np.array(sift).tolist()
orb_List.insert(0, intensity)
orb_List.insert(1, intval)
feature = np.array(orb_List)

#df = pd.DataFrame(feature)
#dff = df.T
return feature

标签: machine-learningdjango-modelsdjango-rest-frameworkdjango-views

解决方案


推荐阅读