| import streamlit as st |
| import hashlib |
| from PIL import Image |
| import io |
|
|
| |
| def hash_image(image): |
| image_data = image.tobytes() |
| image_hash = hashlib.sha256(image_data).hexdigest() |
| return image_hash |
|
|
| |
| def save_hash(hash_code, description=""): |
| with open("hash.txt", "a") as file: |
| file.write(f"{hash_code}: {description}\n") |
|
|
| |
| def check_authenticity(image): |
| hash_code = hash_image(image) |
| try: |
| with open("hash.txt", "r") as file: |
| hashes = file.readlines() |
| for line in hashes: |
| parts = line.strip().split(': ', 1) |
| if len(parts) == 2: |
| saved_hash, description = parts |
| if saved_hash == hash_code: |
| return f"Image is authentic. Description: {description}" |
| else: |
| saved_hash = parts[0] |
| if saved_hash == hash_code: |
| return "Image is authentic, but no description provided." |
| except FileNotFoundError: |
| return "Hash file not found. Please process an image first." |
| return "Image is new or modified." |
|
|
| def process_image(image, description): |
| image_format = image.format if hasattr(image, 'format') else 'PNG' |
| hash_code = hash_image(image) |
| save_hash(hash_code, description) |
| return "Image hash computed and stored." |
|
|
| st.title('Image Authenticity Checker') |
|
|
| uploaded_file = st.file_uploader("Choose an image...", type=['png', 'jpg', 'jpeg']) |
| description = st.text_input("Enter a description for the image:") |
|
|
| if uploaded_file is not None: |
| image = Image.open(uploaded_file) |
| if st.button('Process Image'): |
| message = process_image(image, description) |
| st.success(message) |
|
|
| if st.button('Check Authenticity'): |
| if uploaded_file is not None: |
| result = check_authenticity(image) |
| st.info(result) |
| else: |
| st.error("Please upload an image first.") |
|
|