-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.py
More file actions
43 lines (38 loc) · 1.35 KB
/
main.py
File metadata and controls
43 lines (38 loc) · 1.35 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
from fastapi import FastAPI
from pydantic import BaseModel
from img2vec_pytorch import Img2Vec
from PIL import Image
from io import BytesIO
from tensorflow.keras.applications.resnet50 import ResNet50, decode_predictions
from tensorflow.keras.preprocessing.image import load_img
import requests
import json
import numpy as np
from util import jsonParser
from util import baseModel
from util import imageParser
UrlItem=baseModel.UrlItem
app = FastAPI()
@app.post("/urlImagevector")
async def converUrl(item: UrlItem):
urlItem=dict(item)
image_url=(str(urlItem['image_url']))
requestImage=requests.get(image_url)
img2Vec=Img2Vec(cuda=False);
image=Image.open(BytesIO(requestImage.content)).convert('RGB')
imageVector=img2Vec.get_vec(image)
return {"vector":imageVector.tolist()}
@app.post("/urlImageLabel")
async def urlImageLabel(item: UrlItem):
dicted_item=dict(item)
item_path=str(dicted_item['image_url'])
model = ResNet50(weights='imagenet')
model.summary()
res = requests.get(item_path)
img = load_img(BytesIO(res.content), target_size=(224, 224))
imageProcessor=imageParser.ImageParser
modelInput = imageProcessor.imgToModelInput(img)
preds = model.predict(modelInput)
label = decode_predictions(preds, top=3)[0]
returnjson = json.dumps(label,cls=jsonParser.NumpyEncoder)
return{"label":returnjson}