Download predict.py from biengsen4real/event_detect: direct link, hf CLI and curl.
- Browser
- Download file 2.53 kB
-
https://huggingface.co/biengsen4real/event_detect/resolve/main/predict.py
- Command line
-
hf download hf://biengsen4real/event_detect/predict.py
-
curl -L -o predict.py https://huggingface.co/biengsen4real/event_detect/resolve/main/predict.py
2.53 kB
| import os | |
| import torch | |
| import pandas as pd | |
| from torchvision import transforms | |
| from transformers import ViTForImageClassification, ViTFeatureExtractor | |
| from PIL import Image | |
| def load_model(model_path): | |
| """Load the pre-trained model.""" | |
| model = ViTForImageClassification.from_pretrained('google/vit-base-patch16-224', num_labels=13, ignore_mismatched_sizes=True) | |
| model.load_state_dict(torch.load(model_path, map_location=torch.device('cpu')), strict=False) | |
| model.eval() | |
| return model | |
| def preprocess_image(image_path): | |
| """Preprocess the image for prediction.""" | |
| feature_extractor = ViTFeatureExtractor.from_pretrained('google/vit-base-patch16-224') | |
| image = Image.open(image_path).convert("RGB") | |
| image = feature_extractor(images=image, return_tensors="pt")["pixel_values"] | |
| return image | |
| def predict(model, image_path): | |
| """Predict the class probabilities for an image.""" | |
| image = preprocess_image(image_path) | |
| with torch.no_grad(): | |
| outputs = model(image).logits | |
| probabilities = torch.softmax(outputs, dim=1) | |
| return probabilities | |
| def main(input_path, model_path, output_file): | |
| """Main function to predict and save results to Excel.""" | |
| model = load_model(model_path) | |
| results = [] | |
| if os.path.isdir(input_path): | |
| for img_name in os.listdir(input_path): | |
| img_path = os.path.join(input_path, img_name) | |
| if img_path.endswith(('.png', '.jpg', '.jpeg')): # Check for image file types | |
| probs = predict(model, img_path).cpu().numpy()[0] | |
| result = {"Image Name": img_name} | |
| for i, prob in enumerate(probs): | |
| result[f"Class {i} Probability"] = prob # Store probabilities | |
| results.append(result) | |
| else: | |
| # If a single image file is provided | |
| probs = predict(model, input_path).cpu().numpy()[0] | |
| result = {"Image Name": os.path.basename(input_path)} | |
| for i, prob in enumerate(probs): | |
| result[f"Class {i} Probability"] = prob # Store probabilities | |
| results.append(result) | |
| # Create DataFrame and save to Excel | |
| df = pd.DataFrame(results) | |
| df.to_excel(output_file, index=False) | |
| print(f"Results saved to {output_file}") | |
| # Example call | |
| input_path = '/content/ddd.jpg' # Replace with your image folder or single image path | |
| model_path = '/content/model.pth' # Replace with your model path | |
| output_file = 'predictions.xlsx' # Name of the output Excel file | |
| main(input_path, model_path, output_file) |