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('SitaraJewellery@sathkrutha.com', '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) | |