| <!DOCTYPE html> |
| <html lang="en"> |
| <head> |
| <meta charset="UTF-8"> |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> |
| <title>Cat vs. Dog Image Classifier</title> |
| <script src="https://cdn.jsdelivr.net/npm/@xenova/transformers"></script> |
| <style> |
| body { |
| font-family: Arial, sans-serif; |
| text-align: center; |
| margin: 50px; |
| } |
| img { |
| max-width: 300px; |
| margin: 20px; |
| } |
| </style> |
| </head> |
| <body> |
| <h1>Cat vs. Dog Image Classifier</h1> |
| <input type="file" id="imageUploader" accept="image/*"> |
| <br> |
| <img id="uploadedImage" style="display: none;" /> |
| <br> |
| <button onclick="predictImage()">Predict</button> |
| <h2 id="result"></h2> |
|
|
| <script> |
| let model; |
| async function loadModel() { |
| model = await transformers.pipeline('image-classification', 'louiecerv/cats_dogs_recognition_tf_cnn'); |
| console.log("Model loaded successfully"); |
| } |
| loadModel(); |
| |
| document.getElementById('imageUploader').addEventListener('change', function(event) { |
| const file = event.target.files[0]; |
| if (file) { |
| const reader = new FileReader(); |
| reader.onload = function(e) { |
| const imgElement = document.getElementById('uploadedImage'); |
| imgElement.src = e.target.result; |
| imgElement.style.display = 'block'; |
| }; |
| reader.readAsDataURL(file); |
| } |
| }); |
| |
| async function predictImage() { |
| const imgElement = document.getElementById('uploadedImage'); |
| if (!imgElement.src) { |
| alert("Please upload an image first."); |
| return; |
| } |
| |
| const predictions = await model(imgElement); |
| const topPrediction = predictions[0]; |
| |
| document.getElementById('result').innerText = `Prediction: ${topPrediction.label} (Confidence: ${(topPrediction.score * 100).toFixed(2)}%)`; |
| } |
| </script> |
| </body> |
| </html> |
|
|