from flask import Flask, request, jsonify, render_template, send_from_directory import base64 import re import os from datetime import datetime import requests # OpenAI API Key api_key = "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" app = Flask(__name__) # Function to encode the image def encode_image(image_path): with open(image_path, "rb") as image_file: return base64.b64encode(image_file.read()).decode('utf-8') @app.route('/') def index(): return render_template('index.html') @app.route('/save_image', methods=['POST']) def save_image(): data = request.get_json() image_data = data['image'] # Decode the base64 image data image_data = re.sub('^data:image/.+;base64,', '', image_data) image_data = base64.b64decode(image_data) # Create a unique file name timestamp = datetime.now().strftime('%Y%m%d%H%M%S') file_path = os.path.join('uploads', f'captured_image_{timestamp}.png') # Save the image to a file with open(file_path, 'wb') as f: f.write(image_data) # Path to your image image_path = file_path # Getting the base64 string base64_image = encode_image(image_path) headers = { "Content-Type": "application/json", "Authorization": f"Bearer {api_key}" } payload = { "model": "gpt-4o", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "이미지를 입력받으면 당류가 몇 g인지 예시와 같은 형식만 출력하시오.\n예) 당류 : 10g \n상품분석표가 아니라면 'error'를 출력하시오." }, { "type": "image_url", "image_url": { "url": f"data:image/jpeg;base64,{base64_image}" } } ] } ], "max_tokens": 300 } response = requests.post("https://api.openai.com/v1/chat/completions", headers=headers, json=payload) if response.status_code == 200: result = response.json() analysis_result = result['choices'][0]['message']['content'] else: analysis_result = "Error: 당류를 찾을 수 없습니다." return jsonify({'message': '분석이 완료되었습니다.', 'image_url': file_path, 'analysis_result': analysis_result}) @app.route('/images/') def get_image(filename): return send_from_directory('.', filename) if __name__ == '__main__': app.run(host='0.0.0.0', port=7860, debug=True)