123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- # django imports
- from django.shortcuts import render
- from django.http import HttpResponse
- from django.conf import settings
- # main imports
- import os
- import json
- import base64
- import random
- import numpy as np
- import datetime
- # image processing imports
- import io
- from PIL import Image
- # api imports
- from .utils import api
- from .utils import functions
- from .quest.processing import crop_images
- from . import config as cfg
- def expe_list(request):
- # get all scenes from dataset
- scenes = api.get_scenes()
- # get list of experiences
- expes = cfg.expe_name_list
- return render(request, 'expe/expe_list.html', {'scenes': scenes, 'expes': expes})
- # 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
- if 'expe' not in request.session:
- request.session['expe'] = expe_name
- request.session['begin'] = True
- else:
- request.session['begin'] = False
- # update ref img at first time or expe changed
- if 'ref_img' not in request.session or expe_name != request.session['expe']:
- request.session['begin'] = True
- request.session['qualities'] = api.get_scene_qualities(scene_name)
- request.session['id'] = functions.uniqueID()
- # TODO : add in cache ref_image
- # get reference image
- #ref_image = api.get_image(scene_name, 'max')
- # save ref image as list (can't save python object)
- #request.session['ref_img'] = np.array(ref_image).tolist()
- # construct new image
- quality = random.choice(request.session.get('qualities'))
- noisy_image = api.get_image(scene_name, quality)
- # reconstruct reference image from list stored into session
- # ref_image = Image.fromarray(np.array(request.session.get('ref_img')))
- ref_image = api.get_image(scene_name, 'max')
- 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)
- if not os.path.exists(folder):
- os.makedirs(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')
- 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")
- #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')
-
- # expe parameters
- data = {
- 'expe_name': expe_name,
- 'img_merged_path': filepath_img,
- 'question': question_sentence,
- 'indication': indication_sentence
- }
- return render(request, 'expe/expe.html', data)
|