diff --git a/api/endpoints/salamander.py b/api/endpoints/salamander.py index 7579f9f2b8d022b22886cefc217eec32eb8c4709..fb2c3a24bb600afa5d861ccc8e906c4e1483a9e1 100644 --- a/api/endpoints/salamander.py +++ b/api/endpoints/salamander.py @@ -4,6 +4,7 @@ from flask_restful import Resource from api import db, limiter from api.models.dbmodels import Location, User, Salamander import os +import cv2 import glob from image_encoder.image_encoder import * from path_constants import _ACCESS_DATABASE @@ -28,7 +29,20 @@ 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) + + # percent of original size + scale_percent = 40 + width = int(image.shape[1] * scale_percent / 100) + height = int(image.shape[0] * scale_percent / 100) + dim = (width, height) + + # resize image + resized = cv2.resize(image, dim, interpolation=cv2.INTER_AREA) + + encoded = base64.b64encode(cv2.imencode(".jpg", resized)[1]).decode() + image_id = os.path.basename(path)[0] image_data = {"id": image_id, "url": "data:image/png;base64," + encoded} salamander_images.append(image_data) diff --git a/api/endpoints/salamanderimageid.py b/api/endpoints/salamanderimageid.py index 2cab2a61fb0774aa22c1e44a24d1fec66f6b07f8..8477ffc0b52dbf2d02a4c9d0360742164d98c28e 100644 --- a/api/endpoints/salamanderimageid.py +++ b/api/endpoints/salamanderimageid.py @@ -1,3 +1,5 @@ +import sys + from flask import jsonify from flask_jwt_extended import jwt_required, get_jwt_identity from flask_restful import Resource @@ -7,6 +9,8 @@ import os import glob 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 +24,38 @@ 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 = cv2.imread(path) + + # percent of original size + scale_percent = 20 + width = int(image.shape[1] * scale_percent / 100) + height = int(image.shape[0] * scale_percent / 100) + dim = (width, height) + + # resize image + resized = cv2.resize(image, dim, interpolation=cv2.INTER_AREA) + + encoded = base64.b64encode(cv2.imencode(".jpg", resized)[1]).decode() + image_data = {"url": "data:image/png;base64," + encoded} 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: