Commit 4a65aeb2 authored by Herman Andersen Dyrkorn's avatar Herman Andersen Dyrkorn
Browse files

Merge branch '41-downscale-images-when-returning-from-server' into 'master'

Resolve "downscale images when returning from server"

Closes #41

See merge request !44
parents 3c43a2a6 6d253a0e
......@@ -4,7 +4,10 @@ from flask_restful import Resource
from api import db, limiter
from api.models.dbmodels import Location, User, Salamander
import os
import cv2
import glob
import cv2
import base64
from image_encoder.image_encoder import *
from path_constants import _ACCESS_DATABASE
......@@ -28,9 +31,30 @@ class SalamanderEndpoint(Resource):
list_of_paths = glob.glob(os.path.join(path_to_salamander_images, '*.*'))
for path in list_of_paths:
if not path.__contains__("_str"):
encoded = encode(path)[2:-1]
image = cv2.imread(path)
#scaling to set size
height, width, _ = image.shape
desired_long_side = 320
scaling_factor = 1
if width > height:
scaling_factor = desired_long_side / width
else:
scaling_factor = desired_long_side / height
new_dim = (int(width * scaling_factor), int(height * scaling_factor))
# resize image
image = cv2.resize(image, new_dim, interpolation=cv2.INTER_AREA)
_, buffer = cv2.imencode('.jpg', image)
encoded = base64.b64encode(buffer)
image_id = os.path.basename(path)[0]
image_data = {"id": image_id, "url": "data:image/png;base64," + encoded}
image_data = {"id": image_id, "url": "data:image/png;base64," + encoded.decode()}
salamander_images.append(image_data)
salamander_images.sort(key=lambda x: x.get('id'))
......
import sys
from flask import jsonify
from flask_jwt_extended import jwt_required, get_jwt_identity
from flask_restful import Resource
......@@ -5,8 +7,12 @@ from api import db, limiter
from api.models.dbmodels import Location, User, Salamander, SalamanderGrowth
import os
import glob
import cv2
import sys
from image_encoder.image_encoder import *
from path_constants import _ACCESS_DATABASE
import cv2
# get one specific image on a specific salamander based on s_id and i_id
class SalamanderImageEndpoint(Resource):
......@@ -20,20 +26,49 @@ class SalamanderImageEndpoint(Resource):
if user.admin:
with _ACCESS_DATABASE:
salamander = db.session.query(Salamander).filter_by(id=salamander_id).first()
salamander_growth = db.session.query(SalamanderGrowth).filter_by(salamander_id=salamander.id, image_id=image_id).first()
salamander_growth = db.session.query(SalamanderGrowth).filter_by(salamander_id=salamander.id,
image_id=image_id).first()
if salamander and salamander_growth:
location = db.session.query(Location).filter_by(id=salamander.location_id).first()
salamander_images = []
path_to_salamander_images = os.path.join("./images", location.name, salamander.species, salamander.sex, str(salamander.id))
path_to_salamander_images = os.path.join("./images", location.name, salamander.species,
salamander.sex, str(salamander.id))
list_of_paths = glob.glob(os.path.join(path_to_salamander_images, '*.*'))
for path in list_of_paths:
basename = os.path.basename(path)
if basename.__contains__(str(image_id)):
encoded = encode(path)[2:-1]
image_data = {"url": "data:image/png;base64," + encoded}
image = cv2.imread(path)
if not basename.__contains__("str"): #Scale only original to set size
height, width, _ = image.shape
print(sys.getsizeof(image))
desired_long_side = 320
scaling_factor = 1
if width > height:
scaling_factor = desired_long_side/width
else:
scaling_factor = desired_long_side/height
new_dim = (int(width*scaling_factor), int(height*scaling_factor))
# resize image
image = cv2.resize(image, new_dim, interpolation=cv2.INTER_AREA)
print(sys.getsizeof(image))
_, buffer = cv2.imencode('.jpg', image)
encoded = base64.b64encode(buffer)
image_data = {"url": "data:image/png;base64," + encoded.decode()}
salamander_images.append(image_data)
return jsonify({"images": salamander_images, "length": salamander_growth.length, "weight": salamander_growth.weight, "imageId": image_id, "location": location.name, "salamanderId": salamander.id, "sex": salamander.sex, "species": salamander.species, 'status': 200})
return jsonify({"images": salamander_images, "length": salamander_growth.length,
"weight": salamander_growth.weight, "imageId": image_id, "location": location.name,
"salamanderId": salamander.id, "sex": salamander.sex, "species": salamander.species,
'status': 200})
else:
return jsonify({"message": "no salamander with this id or no growth data", 'status': 400})
else:
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment