Views
No views yet
normal ou abnormal.google/vit-base-patch16-224-in21k
matriz_confusao_vit.png no repositório)| Previsto: Anormal | Previsto: Normal | |
|---|---|---|
| Real: Anormal | 134 (VP) | 17 (FN) |
| Real: Normal | 24 (FP) | 126 (VN) |
precision recall f1-score support1import torch
2import librosa
3import numpy as np
4from transformers import AutoImageProcessor, AutoModelForImageClassification
5from PIL import Image
6from scipy.signal import butter, lfilter
7
8# --- Parâmetros de Processamento ---
9TARGET_SR = 2000
10LOWCUT = 20.0
11HIGHCUT = 200.0
12
13# --- Funções de Pré-processamento (do nosso audio_processor.py) ---
14def butter_bandpass_filter(data, fs, order=3):
15 nyq = 0.5 * fs
16 low = LOWCUT / nyq
17 high = HIGHCUT / nyq
18 b, a = butter(order, [low, high], btype='band')
19 return lfilter(b, a, data)
20
21def create_spectrogram_image(audio_array, sr):
22 mel_spec = librosa.feature.melspectrogram(y=audio_array, sr=sr, n_mels=128)
23 S_DB = librosa.power_to_db(mel_spec, ref=np.max)
24 img_array = (S_DB - S_DB.min()) / (S_DB.max() - S_DB.min() + 1e-6) * 255.0
25 return Image.fromarray(img_array.astype(np.uint8)).convert("RGB")
26
27# --- Carregar Modelo e Processador ---
28model_name_or_path = "SEU_USUARIO/SEU_NOME_DE_REPOSITORIO" # <-- TROCAR AQUI
29processor = AutoImageProcessor.from_pretrained(model_name_or_path)
30model = AutoModelForImageClassification.from_pretrained(model_name_or_path)
31
32# --- Fazer a Predição ---
33audio_file_path = "caminho/para/seu/audio.wav"
34
35# 1. Carregar e reamostrar o áudio
36y, sr_orig = librosa.load(audio_file_path, sr=None)
37y_resampled = librosa.resample(y=y, orig_sr=sr_orig, target_sr=TARGET_SR)
38
39# 2. Limpar o áudio com o filtro
40y_cleaned = butter_bandpass_filter(y_resampled, fs=TARGET_SR)
41
42# 3. Criar a imagem do espectrograma
43spectrogram = create_spectrogram_image(y_cleaned, sr=TARGET_SR)
44
45# 4. Processar a imagem e fazer a predição
46inputs = processor(images=spectrogram, return_tensors="pt")
47with torch.no_grad():
48 outputs = model(**inputs)
49 logits = outputs.logits
50
51predicted_class_idx = logits.argmax(-1).item()
52predicted_class = model.config.id2label[predicted_class_idx]
53print(f"Resultado da Predição: {predicted_class.upper()}")
54
55⚠️ Limitações e Uso Responsável
56ESTE MODELO É UM PROTÓTIPO PARA FINS DE PESQUISA E EDUCACIONAIS. ELE NÃO É UM DISPOSITIVO MÉDICO E NÃO SUBSTITUI O DIAGNÓSTICO DE UM PROFISSIONAL DE SAÚDE QUALIFICADO.
57
58A performance do modelo depende criticamente da qualidade da gravação de áudio (posição do microfone, ruído ambiente, etc.).
59
60O modelo foi treinado em um dataset específico e pode não generalizar perfeitamente para áudios capturados com equipamentos diferentes.
61
62Nunca utilize os resultados deste modelo para tomar decisões sobre sua saúde. Sempre consulte um médico cardiologista para qualquer preocupação.