Spaces:
Sleeping
Sleeping
import gradio as gr | |
import pickle | |
import numpy as np | |
from scipy.sparse import hstack | |
from sklearn.feature_extraction.text import TfidfVectorizer | |
from sklearn.linear_model import LogisticRegression | |
# Load model and vectorizer | |
try: | |
# --- Load and inference code --- | |
with open('password_model.pkl', 'rb') as f: | |
model = pickle.load(f) | |
with open('password_vectorizer.pkl', 'rb') as f: | |
vectorizer = pickle.load(f) | |
except Exception as e: | |
print(f"Error loading model/vectorizer: {e}") | |
model = None | |
vectorizer = None | |
# Function to extract features | |
def extract_features(password): | |
features = {} | |
features['length'] = len(password) | |
features['uppercase'] = sum(1 for c in password if c.isupper()) | |
features['lowercase'] = sum(1 for c in password if c.islower()) | |
features['digits'] = sum(1 for c in password if c.isdigit()) | |
features['special'] = sum(1 for c in password if not c.isalnum()) | |
return features | |
# Function to predict password strength | |
def predict_password_strength(password): | |
if not model or not vectorizer: | |
return [["", "", "Model or vectorizer not loaded correctly"]] | |
try: | |
# Extract features from the input password | |
features = extract_features(password) | |
# Transform the input password using the trained vectorizer | |
password_vectorized = vectorizer.transform([password]) | |
password_vectorized = hstack((password_vectorized, np.array(list(features.values())).reshape(1, -1))) | |
# Make a prediction using the trained model | |
prediction = model.predict(password_vectorized)[0] | |
if prediction == 0: | |
text = "Password is very weak." | |
elif prediction == 1: | |
text = "Password is weak." | |
elif prediction == 2: | |
text = "Password is average." | |
elif prediction == 3: | |
text = "Password is strong." | |
elif prediction == 4: | |
text = "Password is very strong." | |
else: | |
text = "Unknown strength level." | |
# Return the result as a list of lists to match the DataFrame format | |
return [[password, prediction, text]] | |
except Exception as e: | |
return [[password, "", f"Error during prediction: {e}"]] | |
# Gradio Interface | |
demo = gr.Interface( | |
fn=predict_password_strength, | |
inputs=gr.Textbox('Hello123', label='Password', info='The password to check the strength of', max_lines=1), | |
outputs=gr.Dataframe( | |
row_count=(1, "fixed"), | |
col_count=(3, "fixed"), | |
headers=["Password", "Prediction", "Strength_Text"], | |
label="Password Strength Analysis" | |
), | |
title='Helix - Password Strength Analyzer', | |
description='A password strength analyzer, trained on over 5 million different passwords.' | |
) | |
demo.launch() |