import streamlit as st from PIL import Image import numpy as np def steganography_detection(): def lsb_analysis(image): """ Analyzes the Least Significant Bits (LSB) of the image pixels and checks for irregularities that might indicate hidden data. """ img = Image.open(image) img = img.convert('RGB') # Ensure RGB mode pixels = np.array(img) # Convert image to numpy array if len(pixels.shape) != 3 or pixels.shape[2] != 3: raise ValueError("Unsupported image format. Please use RGB images.") height, width, _ = pixels.shape lsb_count = [0, 0] # Count of 0s and 1s in the LSB lsb_distribution = [] # Loop through each pixel and channel for y in range(height): for x in range(width): pixel = pixels[y, x] for channel in range(3): # Process R, G, B channels lsb = pixel[channel] & 1 lsb_count[lsb] += 1 lsb_distribution.append(lsb) total_lsb = sum(lsb_count) if total_lsb == 0: return None, None # Compute percentage distribution lsb_percentage = [count / total_lsb * 100 for count in lsb_count] return lsb_percentage, lsb_distribution st.title("Steganography Detection Tool") st.subheader("Analyze images for hidden messages based on LSB irregularities") uploaded_image = st.file_uploader("Upload an image to analyze", type=["png", "jpg", "jpeg"]) analyze_button = st.button("Analyze Image") if analyze_button: if uploaded_image: try: st.image(uploaded_image, caption="Uploaded Image", use_column_width=True) lsb_percentage, lsb_distribution = lsb_analysis(uploaded_image) if lsb_percentage is None: st.error("Unable to analyze the image.") else: st.write("### LSB Distribution Analysis") st.write(f"**Percentage of LSBs:**\n- 0s: {lsb_percentage[0]:.2f}%\n- 1s: {lsb_percentage[1]:.2f}%") # Visualization st.write("### Visualization of LSB Distribution") st.bar_chart({ "LSB Values": ["0s", "1s"], "Percentage": lsb_percentage }) # Detection threshold threshold = 50 # Typically, natural images have an approximately equal distribution of 0s and 1s if abs(lsb_percentage[0] - lsb_percentage[1]) > 5: st.warning("The image shows irregular LSB distribution, suggesting possible steganographic modification.") else: st.success("The LSB distribution appears normal, with no clear indication of hidden data.") except Exception as e: st.error(f"An error occurred while analyzing the image: {e}") else: st.error("Please upload an image for analysis.")