|
@@ -9,7 +9,7 @@ import json
|
|
|
import base64
|
|
|
import random
|
|
|
import numpy as np
|
|
|
-import datetime
|
|
|
+from datetime import datetime
|
|
|
|
|
|
# image processing imports
|
|
|
import io
|
|
@@ -37,25 +37,30 @@ def expe_list(request):
|
|
|
# Create your views here.
|
|
|
def expe(request):
|
|
|
|
|
|
- question_sentence = "Do you see one image or a composition of more than one?"
|
|
|
- indication_sentence = "press left if you see one image, right if not"
|
|
|
-
|
|
|
# get param
|
|
|
expe_name = request.GET.get('expe')
|
|
|
scene_name = request.GET.get('scene')
|
|
|
|
|
|
- # first time expe is launched
|
|
|
+ # unique user ID during session (user can launch multiple exeperiences)
|
|
|
+ if 'id' not in request.session:
|
|
|
+ request.session['id'] = functions.uniqueID()
|
|
|
+
|
|
|
+ # first time expe is launched add expe information
|
|
|
if 'expe' not in request.session:
|
|
|
request.session['expe'] = expe_name
|
|
|
request.session['begin'] = True
|
|
|
else:
|
|
|
request.session['begin'] = False
|
|
|
|
|
|
+ print(request.session.get('begin'))
|
|
|
+
|
|
|
# update ref img at first time or expe changed
|
|
|
- if 'ref_img' not in request.session or expe_name != request.session['expe']:
|
|
|
+ if expe_name != request.session.get('expe'):
|
|
|
+ #if 'ref_img' not in request.session or expe_name != request.session.get('expe'):
|
|
|
request.session['begin'] = True
|
|
|
request.session['qualities'] = api.get_scene_qualities(scene_name)
|
|
|
- request.session['id'] = functions.uniqueID()
|
|
|
+ # update unique timestamp each time new experience is launched
|
|
|
+ request.session['timestamp'] = datetime.strftime(datetime.utcnow(), "%Y-%m-%d_%Hh%Mm%Ss")
|
|
|
|
|
|
# TODO : add in cache ref_image
|
|
|
# get reference image
|
|
@@ -73,33 +78,48 @@ def expe(request):
|
|
|
img_merge, per, orien, swap_img = crop_images(noisy_image, ref_image)
|
|
|
|
|
|
# create output folder for tmp files if necessary
|
|
|
- folder = os.path.join(settings.MEDIA_ROOT, cfg.output_tmp_folder)
|
|
|
+ tmp_folder = os.path.join(settings.MEDIA_ROOT, cfg.output_tmp_folder)
|
|
|
|
|
|
- if not os.path.exists(folder):
|
|
|
- os.makedirs(folder)
|
|
|
+ if not os.path.exists(tmp_folder):
|
|
|
+ os.makedirs(tmp_folder)
|
|
|
|
|
|
# generate tmp merged image (pass as BytesIO was complicated..)
|
|
|
# TODO : add crontab task to erase generated img
|
|
|
- filepath_img = os.path.join(folder, request.session.get('id') + '_' + scene_name + '' + expe_name + '.png')
|
|
|
+ filepath_img = os.path.join(tmp_folder, request.session.get('id') + '_' + scene_name + '' + expe_name + '.png')
|
|
|
img_merge.save(filepath_img)
|
|
|
|
|
|
# create output folder for expe_result
|
|
|
- timestamp = datetime.strftime(datetime.utcnow(), "%Y-%m-%d_%Hh%Mm%Ss")
|
|
|
- filename += "online_ans" + timestamp +".csv"
|
|
|
- f = open(filename,"w")
|
|
|
+ current_day = datetime.strftime(datetime.utcnow(), "%Y-%m-%d")
|
|
|
+ results_folder = os.path.join(cfg.output_expe_folder.format(current_day))
|
|
|
+
|
|
|
+ if not os.path.exists(results_folder):
|
|
|
+ os.makedirs(results_folder)
|
|
|
+
|
|
|
+ result_filename = expe_name + '_' + request.session.get('id') + '_' + request.session.get('timestamp') +".csv"
|
|
|
+ results_filepath = os.path.join(results_folder, result_filename)
|
|
|
+
|
|
|
+ if not os.path.exists(results_filepath):
|
|
|
+ f = open(results_filepath, 'w')
|
|
|
+ functions.write_header_expe(f, expe_name)
|
|
|
+ else:
|
|
|
+ f = open(results_filepath, 'a')
|
|
|
|
|
|
#orientation : 0 = vertical, 1 = horizontal
|
|
|
#image_ref_position : 0 = right/bottom, 1 = left/up
|
|
|
#answer : left = 1, right = 0
|
|
|
- f.write('stimulus' + ";" + "name_stimulus" + ";" + 'cropping_percentage' + ";" + 'orientation' + ';'
|
|
|
- + 'image_ref_position' + ';' + 'answer' + ';' + 'time_reaction' + ';' + 'entropy' + '\n')
|
|
|
+
|
|
|
+ print("here")
|
|
|
|
|
|
# expe parameters
|
|
|
data = {
|
|
|
'expe_name': expe_name,
|
|
|
'img_merged_path': filepath_img,
|
|
|
- 'question': question_sentence,
|
|
|
- 'indication': indication_sentence
|
|
|
+ 'question': cfg.expe_questions[expe_name]['question'],
|
|
|
+ 'indication': cfg.expe_questions[expe_name]['indication']
|
|
|
}
|
|
|
|
|
|
- return render(request, 'expe/expe.html', data)
|
|
|
+ return render(request, 'expe/expe.html', data)
|
|
|
+
|
|
|
+
|
|
|
+def run_quest_one_image():
|
|
|
+ pass
|