Skip to content
Snippets Groups Projects
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
No related branches found
No related tags found
1 merge request!44Resolve "downscale images when returning from server"
...@@ -4,7 +4,10 @@ from flask_restful import Resource ...@@ -4,7 +4,10 @@ from flask_restful import Resource
from api import db, limiter from api import db, limiter
from api.models.dbmodels import Location, User, Salamander from api.models.dbmodels import Location, User, Salamander
import os import os
import cv2
import glob import glob
import cv2
import base64
from image_encoder.image_encoder import * from image_encoder.image_encoder import *
from path_constants import _ACCESS_DATABASE from path_constants import _ACCESS_DATABASE
...@@ -28,9 +31,30 @@ class SalamanderEndpoint(Resource): ...@@ -28,9 +31,30 @@ class SalamanderEndpoint(Resource):
list_of_paths = glob.glob(os.path.join(path_to_salamander_images, '*.*')) list_of_paths = glob.glob(os.path.join(path_to_salamander_images, '*.*'))
for path in list_of_paths: for path in list_of_paths:
if not path.__contains__("_str"): 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_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.append(image_data)
salamander_images.sort(key=lambda x: x.get('id')) salamander_images.sort(key=lambda x: x.get('id'))
......
import sys
from flask import jsonify from flask import jsonify
from flask_jwt_extended import jwt_required, get_jwt_identity from flask_jwt_extended import jwt_required, get_jwt_identity
from flask_restful import Resource from flask_restful import Resource
...@@ -5,8 +7,12 @@ from api import db, limiter ...@@ -5,8 +7,12 @@ from api import db, limiter
from api.models.dbmodels import Location, User, Salamander, SalamanderGrowth from api.models.dbmodels import Location, User, Salamander, SalamanderGrowth
import os import os
import glob import glob
import cv2
import sys
from image_encoder.image_encoder import * from image_encoder.image_encoder import *
from path_constants import _ACCESS_DATABASE from path_constants import _ACCESS_DATABASE
import cv2
# get one specific image on a specific salamander based on s_id and i_id # get one specific image on a specific salamander based on s_id and i_id
class SalamanderImageEndpoint(Resource): class SalamanderImageEndpoint(Resource):
...@@ -20,20 +26,49 @@ class SalamanderImageEndpoint(Resource): ...@@ -20,20 +26,49 @@ class SalamanderImageEndpoint(Resource):
if user.admin: if user.admin:
with _ACCESS_DATABASE: with _ACCESS_DATABASE:
salamander = db.session.query(Salamander).filter_by(id=salamander_id).first() 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: if salamander and salamander_growth:
location = db.session.query(Location).filter_by(id=salamander.location_id).first() location = db.session.query(Location).filter_by(id=salamander.location_id).first()
salamander_images = [] 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, '*.*')) list_of_paths = glob.glob(os.path.join(path_to_salamander_images, '*.*'))
for path in list_of_paths: for path in list_of_paths:
basename = os.path.basename(path) basename = os.path.basename(path)
if basename.__contains__(str(image_id)): 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) 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: else:
return jsonify({"message": "no salamander with this id or no growth data", 'status': 400}) return jsonify({"message": "no salamander with this id or no growth data", 'status': 400})
else: else:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment