pythonapp / app.py
SRUTHI123's picture
Update app.py
9b48943 verified
raw
history blame contribute delete
2.6 kB
import streamlit as st
from PIL import Image
import cv2
import numpy as np
from ultralytics import YOLO
import os
# Model Initialization
model = YOLO(https://colab.research.google.com/drive/1IAyIjPN1J_9s5MhJ0uCsccxfcA0WfXl2?authuser=1#scrollTo=bA29p0kfmhlP)
# Adjust the path to your YOLOv11 model
# Function to detect actions in images
def detect_action(image_path):
results = model.predict(source=image_path, conf=0.25, save=False)
result = results[0]
detections = [
(model.names[int(box.cls[0])], float(box.conf[0])) for box in result.boxes
]
# Classify action based on detections
action_scores = classify_action(detections)
return result.plot(), action_scores
def classify_action(detections):
detected_objects = [d[0] for d in detections]
action_scores = {
'Stealing': 0.0,
'Sneaking': 0.0,
'Peaking': 0.0,
'Normal': 0.0
}
if 'person' in detected_objects:
if any(obj in detected_objects for obj in ['backpack', 'handbag', 'suitcase']):
action_scores['Stealing'] += 0.4
if 'refrigerator' in detected_objects:
action_scores['Stealing'] += 0.3
if [conf for obj, conf in detections if obj == 'person'][0] < 0.6:
action_scores['Sneaking'] += 0.5
if len(detected_objects) <= 2:
action_scores['Peaking'] += 0.5
if not any(score > 0.3 for score in action_scores.values()):
action_scores['Normal'] = 0.4
return action_scores
# Streamlit UI
st.title('Suspicious Activity Detection')
st.write('Upload an image to detect suspicious activities.')
# File uploader
uploaded_file = st.file_uploader("Choose an image...", type="jpg")
if uploaded_file is not None:
# Read the image
image = Image.open(uploaded_file)
st.image(image, caption='Uploaded Image', use_column_width=True)
# Save the uploaded file for processing
img_path = "/tmp/uploaded_image.jpg"
image.save(img_path)
# Predict and display results
st.write("Detecting action...")
detected_image, action_scores = detect_action(img_path)
st.image(detected_image, caption='Detected Image', use_column_width=True)
# Display action scores
st.write("Action Probability Scores:")
for action, score in action_scores.items():
st.write(f"{action}: {score:.2%}")
# Predict and display the most likely action
predicted_action = max(action_scores.items(), key=lambda x: x[1])
st.write(f"Predicted Action: {predicted_action[0]} ({predicted_action[1]:.2%} confidence)")