Skip to content
Snippets Groups Projects
Commit 7035b186 authored by Eirik Martin Danielsen's avatar Eirik Martin Danielsen :speech_balloon:
Browse files

finished move salamander image

parent 30cb3902
No related branches found
No related tags found
1 merge request!37Resolve "rematch function and endpoint"
......@@ -3,12 +3,13 @@ from flask_restful import Resource
from flask_jwt_extended import get_jwt_identity, jwt_required
from algorithm.train_src.new_straightening import straighten
from algorithm.train_src.estimate_gender import estimate_image
from path_constants import image_type
import cv2
import os
from api import limiter
from image_encoder.image_encoder import *
ALLOWED_EXTENSIONS = ['jpg']
ALLOWED_EXTENSIONS = [image_type]
# findSalamanderInfo endpoint
......@@ -31,8 +32,8 @@ class FindSalamanderInfo(Resource):
# run AI on image
str_image, _, _, _, _ = straighten(img)
if str_image is not None:
cv2.imwrite("temp_images/" + str(user_id) + "_str.jpg", str_image)
encoded = encode("./temp_images/" + str(user_id) + "_str.jpg")[2:-1]
cv2.imwrite("temp_images/" + str(user_id) + "_str."+image_type, str_image)
encoded = encode("./temp_images/" + str(user_id) + "_str."+image_type)[2:-1]
return jsonify({"sex": "AI_sex", "species": "AI_species", "status": 200, "image": encoded})
else:
......
......@@ -7,7 +7,7 @@ from api import db, limiter
from api.models.dbmodels import Location
from api.models.dbmodels import Salamander, SalamanderGrowth
from algorithm.main_src.new_matching import match_file_structure
from path_constants import image_type
APPROVED_SEX = ["male", "female", "juvenile"]
APPROVED_SPECIES = ["smooth_newt", "northern_crested_newt"]
......@@ -25,25 +25,29 @@ class MatchSalamander(Resource):
if "sex" in data and "location" in data and "species" in data:
if data['sex'] in APPROVED_SEX and data['species'] in APPROVED_SPECIES and data['location'].lower() in approved_locations:
path_to_processed_image = "./temp_images/" + str(user_id) + "_str.jpg"
path_to_original_image = "./temp_images/" + str(user_id) + ".jpg"
path_to_processed_image = "./temp_images/" + str(user_id) + "_str."+image_type
path_to_original_image = "./temp_images/" + str(user_id) + "."+image_type
path_to_images = "./images/" + data['location'].lower() + "/" + data['species'] + "/" + data['sex'] + "/"
if data['sex'] != "juvenile":
result = match_file_structure(path_to_processed_image, path_to_images)
if result > -1:
if "weight" in data and "length" in data:
add_salamander_growth(data, result)
number_of_files = len(os.listdir(path_to_images + str(result))) / 2
add_salamander_growth(data, result, number_of_files)
move_and_rename_images(path_to_images + str(result) + "/", path_to_original_image, path_to_processed_image)
return jsonify({"matching": "Match!", "message": "Matched with salamander", "id": result, 'status': 200})
else:
salamander_id = add_salamander(data, path_to_images, user_id, path_to_original_image, path_to_processed_image)
if "weight" in data and "length" in data:
add_salamander_growth(data, salamander_id)
number_of_files = len(os.listdir(path_to_images + str(salamander_id))) / 2
add_salamander_growth(data, salamander_id, number_of_files)
return jsonify({"matching": "No Match.", "message": "New salamander in database", "id": salamander_id, 'status': 200})
else:
salamander_id = add_salamander(data, path_to_images, user_id, path_to_original_image, path_to_processed_image)
if "weight" in data and "length" in data:
add_salamander_growth(data, salamander_id)
number_of_files = len(os.listdir(path_to_images + str(salamander_id))) / 2
add_salamander_growth(data, salamander_id, number_of_files)
return jsonify({"matching": "No Match.", "message": "New juvenile in database", "id": salamander_id, 'status': 200})
else:
return jsonify({"message": "invalid sex, species or location", 'status': 400})
......@@ -65,12 +69,12 @@ def add_salamander(data, path_to_images, user_id, path_to_original_image, path_t
def move_and_rename_images(path_to_salamander, path_to_original_image, path_to_processed_image):
number_of_files = len(os.listdir(path_to_salamander)) / 2
shutil.move(path_to_original_image, path_to_salamander + str(number_of_files) + ".jpg")
shutil.move(path_to_processed_image, path_to_salamander + str(number_of_files) + "_str.jpg")
shutil.move(path_to_original_image, path_to_salamander + str(number_of_files) + "."+image_type)
shutil.move(path_to_processed_image, path_to_salamander + str(number_of_files) + "_str."+image_type)
def add_salamander_growth(data, salamander_id):
salamander_growth = SalamanderGrowth(salamander_id=salamander_id, weight=data['weight'], length=data['length'])
def add_salamander_growth(data, salamander_id, image_id):
salamander_growth = SalamanderGrowth(salamander_id=salamander_id, image_id=image_id, weight=data['weight'], length=data['length'])
db.session.add(salamander_growth)
db.session.commit()
......
......@@ -6,10 +6,8 @@ import os
from api.models.dbmodels import Location, SalamanderGrowth
from api.models.dbmodels import User
from algorithm.main_src.new_matching import match_file_structure
import shutil
from api.endpoints.matchsalamander import move_and_rename_images
from path_constants import image_type
import string
class SalamanderClass(Resource):
decorators = [limiter.limit("10/minute")]
......@@ -24,7 +22,8 @@ class SalamanderClass(Resource):
salamanders = db.session.query(SalamanderClass).all()
salamander_list = []
for salamander in salamanders:
ret = {"id": salamander.id, "sex": salamander.sex, "species": salamander.species, "location": location.name}
ret = {"id": salamander.id, "sex": salamander.sex, "species": salamander.species,
"location": location.name}
salamander_list.append(ret)
return jsonify({"salamanders": salamander_list, 'status': 200})
else:
......@@ -40,7 +39,8 @@ class SalamanderClass(Resource):
user_id = get_jwt_identity()
salamander = db.session.query(SalamanderClass).filter_by(id=data['id']).first()
if salamander.uid == user_id:
salamander_path = "./images/" + data['location'] + "/" + salamander.species + "/" + salamander.sex + "/" + salamander.id
salamander_path = "./images/" + data[
'location'] + "/" + salamander.species + "/" + salamander.sex + "/" + salamander.id
os.remove(salamander_path)
db.session.delete(salamander)
db.session.commit()
......@@ -50,8 +50,6 @@ class SalamanderClass(Resource):
else:
return jsonify({"message": "wrong data in form", 'status': 400})
@staticmethod
@jwt_required
def put():
......@@ -63,17 +61,19 @@ class SalamanderClass(Resource):
if user.admin:
salamander = db.session.query(SalamanderClass).filter_by(id=data['id']).first()
if salamander:
salamander_path = "./images/" + data['location'] + "/" + salamander.species + "/" + salamander.sex + "/" + salamander.id
salamander_path = "./images/" + data[
'location'] + "/" + salamander.species + "/" + salamander.sex + "/" + salamander.id
new_path_to_images = ""
# str_name = glob.glob(salamander_path + '*_str*', recursive=False)[0]
image_filename_split_list = str(data['image_name']).split('.')
result = match_file_structure(input_image=salamander_path + '/' + image_filename_split_list[0] + '_str.' + image_filename_split_list[1],
result = match_file_structure(
input_image=salamander_path + '/' + image_filename_split_list[0] + '_str.' +
image_filename_split_list[1],
match_directory=new_path_to_images)
# result = match_file_structure(input_image=salamander_path + '/' + data['image_name'][0:-4] + '_str.' + image_type,
# match_directory=new_path_to_images)
if result:
debug_str = ""
path_to_images = "./images/" + data['new_location'].lower() + "/" + data['new_species'] + "/" + data[
path_to_images = "./images/" + data['new_location'].lower() + "/" + data['new_species'] + "/" + \
data[
'new_sex'] + "/"
# if salamander already exist:
......@@ -81,29 +81,21 @@ class SalamanderClass(Resource):
# move all images and delete previous ID.:
print("if")
debug_str = " Found a match with" + str(result) + "."
else:
# location = db.session.query(Location).filter_by(name=data['name'].lower()).first()
# if location is None and re.search(LATITUDE_REGEX, data['latitude']) and re.search(
# LONGITUDE_REGEX, data['longitude']):
num = int(image_filename_split_list[0])
# move salamander and keep their id:
print("else")
correct = db.session.query(SalamanderGrowth).filter_by(salamander_id=salamander.id).first()
salamander_growth = SalamanderGrowth(salamander_id=result, weight=data['weight'],
length=data['length'])
db.session.add(salamander_growth)
salamanderGrowth_row = db.session.query(SalamanderGrowth).filter_by(
salamander_id=salamander.id, image_id=num).first()
salamanderGrowth_row.salamander_id = result
db.session.commit()
else:
debug_str = " It was a new salamander!"
# moving image and its processed counterpart to the new location
move_and_rename_images(path_to_salamander=path_to_images + str(result) + "/",
path_to_original_image=salamander_path + '/' + image_filename_split_list[0] + '.' + image_filename_split_list[1],
path_to_processed_image=salamander_path + '/' + image_filename_split_list[0] + '_str.' + image_filename_split_list[1])
path_to_original_image=salamander_path + '/' + image_filename_split_list[
0] + '.' + image_filename_split_list[1],
path_to_processed_image=salamander_path + '/' +
image_filename_split_list[0] + '_str.' +
image_filename_split_list[1])
# if last image was moved:
if len(os.listdir(salamander_path)) == 0:
......@@ -113,7 +105,8 @@ class SalamanderClass(Resource):
db.session.commit()
debug_str = debug_str + " It was the last salamander in the folder."
return jsonify({"id": salamander.id, "message": "salamander moved. " + debug_str, 'status': 200})
return jsonify(
{"id": salamander.id, "message": "salamander moved. " + debug_str, 'status': 200})
else:
return jsonify(
{"message": "Salamander image, " + data['image_name'] + " does not exist", 'status': 400})
......
......@@ -31,6 +31,7 @@ class Location(db.Model):
class SalamanderGrowth(db.Model):
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
salamander_id = db.Column(db.Integer, db.ForeignKey('salamander.id'))
image_id = db.Column(db.Integer, nullable=False)
date = db.Column(db.DateTime, default=datetime.now)
weight = db.Column(db.Float, nullable=False)
length = db.Column(db.Float, nullable=False)
......@@ -24,4 +24,4 @@ abs_path_imageai_model = os.abspath("algorithm/train_src/imageai_model/models/"
abs_path_imageai_config = os.abspath("algorithm/train_src/imageai_model/json/" + imageai_config_name)
image_type = "png"
\ No newline at end of file
image_type = "jpg"
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment