Facey-server / app.py
portalniy-dev's picture
Update app.py
a4c0bc2 verified
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()