File size: 2,430 Bytes
659b71a 4fde83e 659b71a 4f186ac 659b71a 4f186ac 57fe102 4fde83e 659b71a 4f186ac 659b71a 4f186ac 659b71a 4f186ac 6f1cee7 659b71a 4f186ac 659b71a 4f186ac 659b71a 4f186ac 659b71a 4f186ac 659b71a 4f186ac 659b71a 4f186ac 659b71a 4f186ac 659b71a a28b6b5 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
import streamlit as st
from PIL import Image
import tensorflow as tf
import numpy as np
import os
from tensorflow.keras.layers import LSTM
from keras.saving import register_keras_serializable
# Kelas LSTM Kustom
@register_keras_serializable()
class CustomLSTM(LSTM):
pass
# Caching the model loading function to optimize performance
@st.cache_resource
def load_captcha_model():
model_path = "model1.keras" # Update with the actual CAPTCHA model path
return tf.keras.models.load_model(model_path, custom_objects={'CustomLSTM': CustomLSTM})
# Load the model
model = load_captcha_model()
# Function to prepare the image for model prediction
def prepare_captcha_image(img):
try:
# Resize image to the input shape required by the CAPTCHA model
img = img.resize((200, 50)) # Adjust size according to the trained model
img_array = np.array(img.convert('L')) # Convert to grayscale if necessary
img_array = img_array / 255.0 # Normalize image
img_array = np.expand_dims(img_array, axis=0) # Add batch dimension
# Predict the CAPTCHA characters
predictions = model.predict(img_array)
# Decode predictions assuming the model outputs probabilities
decoded_captcha = ''.join([chr(np.argmax(pred) + ord('A')) for pred in predictions])
return decoded_captcha, predictions
except Exception as e:
st.error(f"Error preparing image: {e}")
return None, None
# Main function to run the Streamlit app
def run():
st.title("CAPTCHA Prediction")
img_file = st.file_uploader("Upload a CAPTCHA Image", type=["jpg", "png", "jpeg"])
if img_file is not None:
img = Image.open(img_file)
st.image(img, caption="Uploaded CAPTCHA", use_column_width=True)
# Create the directory if it doesn't exist
upload_dir = './upload_images/'
os.makedirs(upload_dir, exist_ok=True)
# Save the uploaded image
save_image_path = os.path.join(upload_dir, img_file.name)
with open(save_image_path, "wb") as f:
f.write(img_file.getbuffer())
# Predict the CAPTCHA
predicted_captcha, score = prepare_captcha_image(img)
if predicted_captcha:
st.success(f"**Predicted CAPTCHA: {predicted_captcha}**")
else:
st.error("Failed to predict CAPTCHA.")
# Run the Streamlit app
if __name__ == "__main__":
run()
|