5 from PIL 
import Image 
as PLImage
 
    9 from flask 
import Flask, request, Response
 
   15     if t.dtype 
is torch.float32:
 
   16         return t.to(dtype=torch.half)
 
   22         self.
device = 
"cuda" if torch.cuda.is_available() 
else "cpu" 
   27         image = cv2.resize(img, dsize=(640, 480)) 
 
   28         image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
 
   29         image = PLImage.fromarray(image)
 
   31         text_inputs = torch.cat([clip.tokenize(c) 
for c 
in texts]).to(self.
device)
 
   33             image_features = self.model.encode_image(image_input)
 
   35         image_features /= image_features.norm(dim=-1, keepdim=
True)
 
   36         text_features /= text_features.norm(dim=-1, keepdim=
True)
 
   37         probability = (100.0 * image_features @ text_features.T).softmax(dim=-1)
 
   38         similarity = (text_features.cpu().numpy() @ image_features.cpu().numpy().T).T[0]  
 
   39         values, indices = probability[0].topk(len(texts))
 
   41         for value, index 
in zip(values, indices):
 
   42             results[texts[index]] = (value.item(), 
float(similarity[index]))
 
   46 if __name__ == 
"__main__":
 
   50     @app.route(
"/inference", methods=[
'POST'])
 
   52         data = request.data.decode(
"utf-8")
 
   53         data_json = json.loads(data)
 
   55         image_b = data_json[
'image']
 
   56         image_dec = base64.b64decode(image_b)
 
   57         data_np = np.fromstring(image_dec, dtype=
'uint8')
 
   58         img = cv2.imdecode(data_np, 1)
 
   60         texts = data_json[
'queries']
 
   61         infer_results = infer.infer(img, texts)
 
   63         for q 
in infer_results:
 
   64             results.append({
"question": q, 
"probability": infer_results[q][0], 
"similarity": infer_results[q][1]})
 
   65         return Response(response=json.dumps({
"results": results}), status=200)
 
   67     app.run(
"0.0.0.0", 8080, threaded=
True)