Spaces:
Sleeping
Sleeping
from flask import Flask, render_template, Response, request, jsonify | |
import os | |
import cv2 | |
import numpy as np | |
from PIL import Image | |
from transformers import CLIPProcessor, CLIPModel | |
from instagrapi import Client | |
app = Flask(__name__) | |
app.config['UPLOAD_FOLDER'] = 'uploads' | |
# Ensure the uploads folder exists | |
os.makedirs(app.config['UPLOAD_FOLDER'], exist_ok=True) | |
# Lazy loading the model | |
model = None | |
processor = None | |
captured_image_path = os.path.join(app.config['UPLOAD_FOLDER'], 'captured.jpg') | |
def load_clip_model(): | |
global model, processor | |
if model is None or processor is None: | |
model = CLIPModel.from_pretrained("openai/clip-vit-base-patch16") | |
processor = CLIPProcessor.from_pretrained("openai/clip-vit-base-patch16") | |
def index(): | |
return render_template('index.html') | |
def health(): | |
return jsonify({'status': 'healthy'}), 200 | |
def capture(): | |
""" | |
This route expects an image to be sent from the frontend (as file) | |
""" | |
if 'image' not in request.files: | |
return jsonify({'status': 'error', 'message': 'No image uploaded'}), 400 | |
file = request.files['image'] | |
if file.filename == '': | |
return jsonify({'status': 'error', 'message': 'No file selected'}), 400 | |
file.save(captured_image_path) | |
return jsonify({'status': 'captured', 'path': captured_image_path}) | |
def upload(): | |
""" | |
Processes the image using Hugging Face CLIP and uploads it to Instagram. | |
""" | |
if not os.path.exists(captured_image_path): | |
return jsonify({'status': 'error', 'message': 'No captured image'}), 400 | |
try: | |
load_clip_model() | |
image = Image.open(captured_image_path) | |
inputs = processor(images=image, return_tensors="pt") | |
_ = model.get_image_features(**inputs) | |
caption = "Captured image from Flask app! #AI #HuggingFace" | |
# Instagram upload | |
cl = Client() | |
cl.login('[email protected]', 'Sitara@1946') | |
cl.photo_upload(captured_image_path, caption) | |
return jsonify({'status': 'uploaded'}) | |
except Exception as e: | |
return jsonify({'status': 'error', 'message': str(e)}) | |
if __name__ == '__main__': | |
import argparse | |
parser = argparse.ArgumentParser() | |
parser.add_argument('--port', type=int, default=7860) | |
args = parser.parse_args() | |
app.run(host='0.0.0.0', port=args.port) | |