Как использовать мою модель ML на моей Django RestFramework? - PullRequest
0 голосов
/ 31 января 2019

Это в основном весь мой проект.У меня есть готовый сервер Django и модель.Мне нужно знать, как его интегрировать, чтобы поток моего проекта мог выглядеть следующим образом: a) Пользователь берет или загружает изображение в приложение Android.б) Полученное изображение отправляется в таблицу Android на моем сервере в виде строки 64-битного изображения.c) Затем изображение обрабатывается моделью ML и отправляет результат (который будет меткой) обратно, чтобы человек мог просмотреть метку блюда.Я иду в правильном направлении?Если нет, что мне делать?Нужна помощь.Спасибо.

Текущая настройка работала, но теперь она просто выдает ошибку:

аргумент должен быть байтовоподобным объектом или строкой ASCII, а не «ListSerializer»

Models.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

Serializer.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 (Feature)

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...