import cv2 import numpy as np import os from telegram import Update from telegram.ext import Updater, CommandHandler, MessageHandler, Filters, CallbackContext import gradio as gr # Load pre-trained Haar Cascade classifier for face detection face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml') # List to keep track of processed files processed_files = [] def start(update: Update, context: CallbackContext) -> None: update.message.reply_text('Send me a photo and I will detect faces!') def detect_faces(update: Update, context: CallbackContext) -> None: file = update.message.photo[-1].get_file() file.download('photo.jpg') # Read the image img = cv2.imread('photo.jpg') gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(gray, 1.1, 4) # Draw rectangles around faces and annotate coordinates for (x, y, w, h) in faces: cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2) cv2.putText(img, f'({x},{y})', (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2) # Save the processed image processed_image_path = 'processed_photo.jpg' cv2.imwrite(processed_image_path, img) # Add to processed files list processed_files.append(processed_image_path) # Send back the processed image with open(processed_image_path, 'rb') as photo: update.message.reply_photo(photo) def delete_file(file_path): if os.path.exists(file_path): os.remove(file_path) return f"{file_path} deleted." return "File not found." def view_files(): return processed_files def launch_gradio(): with gr.Blocks() as demo: gr.Markdown("### Processed Images") file_viewer = gr.File(label="View Processed Files", file_count="multiple") with gr.Row(): delete_btn = gr.Button("Delete Selected File") delete_output = gr.Textbox(label="Deletion Status") delete_btn.click(fn=delete_file, inputs=file_viewer, outputs=delete_output) file_viewer.change(fn=view_files, outputs=file_viewer) demo.launch() def main(): # Start the Gradio panel in a separate thread import threading threading.Thread(target=launch_gradio).start() updater = Updater("7458760921:AAFEMNVBuRcM_txnumnwl48u6MlKUS0J4YM") dispatcher = updater.dispatcher dispatcher.add_handler(CommandHandler("start", start)) dispatcher.add_handler(MessageHandler(Filters.photo, detect_faces)) updater.start_polling() updater.idle() if __name__ == '__main__': main()