import cv2 import os import time import smtplib from email.mime.multipart import MIMEMultipart from email.mime.base import MIMEBase from email import encoders from email.mime.text import MIMEText from zipfile import ZipFile import streamlit as st # Configuration for Gmail SMTP EMAIL_SENDER = 'kshetty200319@gmail.com' # Sender's email EMAIL_PASSWORD = 'kdpo givc nwoi mnhl' # App-specific password EMAIL_RECEIVER = 'kshetty200319@gmail.com' # Receiver's email SMTP_SERVER = 'smtp.gmail.com' SMTP_PORT = 587 # Paths IMAGE_FOLDER = 'captured_images/' VIDEO_PATH = 'captured_video.mp4' COMPRESSED_IMAGES_PATH = 'compressed_images.zip' # Create directory for images os.makedirs(IMAGE_FOLDER, exist_ok=True) def capture_images_and_video(): cap = cv2.VideoCapture(0) if not cap.isOpened(): st.error("Could not open video capture.") return False cv2.namedWindow('Camera Feed', cv2.WINDOW_NORMAL) try: # Capture images for i in range(5): start_time = time.time() while time.time() - start_time < 3: # Delay with live feed ret, frame = cap.read() if not ret: st.error("Could not read frame.") return False cv2.imshow('Camera Feed', frame) if cv2.waitKey(1) & 0xFF == ord('q'): st.warning("Operation canceled by user.") return False # Save the captured image cv2.imwrite(f'{IMAGE_FOLDER}image_{i}.jpg', frame) # Record video fourcc = cv2.VideoWriter_fourcc(*'XVID') out = cv2.VideoWriter(VIDEO_PATH, fourcc, 20.0, (640, 480)) start_time = time.time() while time.time() - start_time < 15: # Record for 15 seconds ret, frame = cap.read() if not ret: st.error("Could not read frame.") return False out.write(frame) cv2.imshow('Camera Feed', frame) if cv2.waitKey(1) & 0xFF == ord('q'): st.warning("Operation canceled by user.") return False out.release() except Exception as e: st.error(str(e)) return False finally: cap.release() cv2.destroyAllWindows() return True def compress_files(): try: with ZipFile(COMPRESSED_IMAGES_PATH, 'w') as zipf: for root, _, files in os.walk(IMAGE_FOLDER): for file in files: zipf.write(os.path.join(root, file), os.path.relpath(os.path.join(root, file), IMAGE_FOLDER)) except Exception as e: st.error(f"Failed to compress images: {e}") return False return True def send_email(sales_order_number): msg = MIMEMultipart() msg['From'] = EMAIL_SENDER msg['To'] = EMAIL_RECEIVER msg['Subject'] = f'Captured images and video for Sales Order #{sales_order_number}' body = (f'Dear sir,\n\nPlease find the captured images and video for ' f'Sales Order #{sales_order_number} attached.\n\nThank you.\n\nRegards,\nAutomation Team') msg.attach(MIMEText(body, 'plain')) try: with open(COMPRESSED_IMAGES_PATH, 'rb') as file: part = MIMEBase('application', 'zip') part.set_payload(file.read()) encoders.encode_base64(part) part.add_header('Content-Disposition', f'attachment; filename={COMPRESSED_IMAGES_PATH}') msg.attach(part) with open(VIDEO_PATH, 'rb') as file: part = MIMEBase('application', 'octet-stream') part.set_payload(file.read()) encoders.encode_base64(part) part.add_header('Content-Disposition', f'attachment; filename={VIDEO_PATH}') msg.attach(part) with smtplib.SMTP(SMTP_SERVER, SMTP_PORT) as server: server.starttls() server.login(EMAIL_SENDER, EMAIL_PASSWORD) server.send_message(msg) st.success("Email sent successfully!") except Exception as e: st.error(f"Failed to send email: {e}") return False return True def clean_up(): try: if os.path.exists(VIDEO_PATH): os.remove(VIDEO_PATH) if os.path.exists(COMPRESSED_IMAGES_PATH): os.remove(COMPRESSED_IMAGES_PATH) if os.path.exists(IMAGE_FOLDER): for file in os.listdir(IMAGE_FOLDER): os.remove(os.path.join(IMAGE_FOLDER, file)) os.rmdir(IMAGE_FOLDER) except Exception as e: st.error(f"Failed to clean up files: {e}") # Streamlit UI st.title("ABB Automata") sales_order_number = st.text_input("Enter Sales Order Number:") if st.button("Start Automation"): if not sales_order_number: st.error("Please enter a Sales Order Number.") else: st.info("Capturing images and video...") if capture_images_and_video(): st.info("Compressing files...") if compress_files(): st.info("Sending email...") if send_email(sales_order_number): st.info("Cleaning up temporary files...") clean_up() st.success("Automation process completed successfully!")