DanielIglesias97's picture
First upload of the code of NodeImageSearchEngine to the repository.
708f5d3
import configparser
from flask import Flask, json, request
import logging
import os
import search_engine_model as sem
class SearchEngineApp():
def __init__(self):
self.logger = logging.getLogger(__name__)
logging.basicConfig(level=logging.INFO)
self.config_manager_obj = configparser.ConfigParser()
self.config_manager_obj.read('./config.cfg')
image_root_dir = self.config_manager_obj['SEARCH_ENGINE']['image_root_dir']
csv_file_path = self.config_manager_obj['SEARCH_ENGINE']['csv_file_path']
self.model_manager_obj = sem.SearchEngineModel(image_root_dir, csv_file_path)
# PRECONDITION: We assume that only text_prompt or image_prompt
# will be different from None.
def search_images(self, text_prompt, image_prompt, prompt_type, nofimages_to_show):
search_result = None
if ((prompt_type=='Text') and (text_prompt!=None) and (len(text_prompt.strip())>0)):
search_result = self.model_manager_obj.search_image_by_text_prompt(text_prompt,
nofimages_to_show)
if ((prompt_type=='Image') and (image_prompt!=None)):
search_result = self.model_manager_obj.search_image_by_image_prompt(image_prompt,
nofimages_to_show)
return search_result
# Flask application code.
api = Flask(__name__)
# I use this as a global variable, avoiding a model load each time a request is made.
search_engine_app_manager = SearchEngineApp()
@api.route('/images', methods=['GET'])
def get_images():
text_prompt = request.args.get('search_input')
search_result = search_engine_app_manager.search_images(text_prompt, None, 'Text', 20)
return json.dumps({'images': search_result})
if __name__ == '__main__':
api.run(host='0.0.0.0', port=5000, debug=True)