|
from Perceptrix.engine import perceptrix, robotix, identify_objects_from_text, search_keyword |
|
from CircumSpect import answer_question, find_object_description, locate_object |
|
from flask import Flask, request, jsonify |
|
import numpy as np |
|
import threading |
|
import whisper |
|
import cv2 |
|
import os |
|
|
|
model = whisper.load_model("base") |
|
|
|
def transcribe(audio): |
|
result = model.transcribe(audio) |
|
transcription = result['text'] |
|
print(transcription) |
|
return transcription |
|
|
|
app = Flask(__name__) |
|
|
|
@app.route('/', methods=['POST', 'GET']) |
|
def home(): |
|
return jsonify({'message': 'WORKING'}) |
|
|
|
def handle_request(func, *args): |
|
try: |
|
result = func(*args) |
|
return jsonify({'message': result}) |
|
except Exception as e: |
|
print(e) |
|
return jsonify({'error': str(e)}) |
|
|
|
@app.route('/locate_object', methods=['POST', 'GET']) |
|
def _locate_object(): |
|
image_data = request.json['image'] |
|
prompt = request.json['prompt'] |
|
image_data = np.array(image_data, dtype=np.uint8) |
|
image = cv2.imdecode(image_data, cv2.IMREAD_COLOR) |
|
cv2.imwrite('API.jpg', image) |
|
return handle_request(locate_object, prompt, "API.jpg") |
|
|
|
@app.route('/vqa', methods=['POST', 'GET']) |
|
def _vqa(): |
|
image_data = request.json['image'] |
|
prompt = request.json['prompt'] |
|
image_data = np.array(image_data, dtype=np.uint8) |
|
image = cv2.imdecode(image_data, cv2.IMREAD_COLOR) |
|
cv2.imwrite('API.jpg', image) |
|
return handle_request(answer_question, prompt, "API.jpg") |
|
|
|
@app.route('/object_description', methods=['POST', 'GET']) |
|
def _object_description(): |
|
image_data = request.json['image'] |
|
image_data = np.array(image_data, dtype=np.uint8) |
|
image = cv2.imdecode(image_data, cv2.IMREAD_COLOR) |
|
cv2.imwrite('API.jpg', image) |
|
return handle_request(find_object_description, "API.jpg") |
|
|
|
@app.route('/perceptrix', methods=['POST', 'GET']) |
|
def _perceptrix(): |
|
prompt = request.json['prompt'] |
|
return handle_request(perceptrix, prompt) |
|
|
|
@app.route('/robotix', methods=['POST', 'GET']) |
|
def _robotix(): |
|
prompt = request.json['prompt'] |
|
return handle_request(robotix, prompt) |
|
|
|
@app.route('/search_keyword', methods=['POST', 'GET']) |
|
def _search_keyword(): |
|
prompt = request.json['prompt'] |
|
return handle_request(search_keyword, prompt) |
|
|
|
@app.route('/identify_objects_from_text', methods=['POST', 'GET']) |
|
def _identify_objects_from_text(): |
|
prompt = request.json['prompt'] |
|
return handle_request(identify_objects_from_text, prompt) |
|
|
|
@app.route('/transcribe', methods=['POST', 'GET']) |
|
def _upload_audio(): |
|
try: |
|
audio_file = request.files['audio'] |
|
filename = os.path.join("./", audio_file.filename) |
|
audio_file.save(filename) |
|
print("RECEIVED") |
|
return jsonify({'message': transcribe(filename)}) |
|
except Exception as e: |
|
print(e) |
|
return jsonify({'message': "Error"}) |
|
|
|
def run_app(): |
|
app.run(port=7777) |
|
|
|
if __name__ == "__main__": |
|
runner = threading.Thread(target=run_app) |
|
runner.start() |
|
|