rmayormartins commited on
Commit
7f1f398
0 Parent(s):
Files changed (3) hide show
  1. README.md +16 -0
  2. app.py +72 -0
  3. requirements.txt +3 -0
README.md ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # GTM-Scope
2
+
3
+ ## Descrição
4
+ GTM-Scope é uma ferramenta interativa que permite aos usuários carregar arquivos .tm e .zip para extrair informações sobre modelos de aprendizado de máquina treinados no Google Teachable Machine.
5
+
6
+ ## Como Usar
7
+ - Carregue um arquivo .tm para obter informações básicas do modelo.
8
+ - Carregue um arquivo .zip correspondente para obter informações detalhadas do modelo, incluindo a estrutura do modelo e o tamanho dos pesos.
9
+ - Você pode carregar ambos os arquivos para obter um conjunto completo de informações.
10
+
11
+ ## Informações Adicionais
12
+ Este projeto foi desenvolvido para facilitar a análise e o entendimento de modelos de aprendizado de máquina. Para sugestões ou contribuições, sinta-se à vontade para entrar em contato.
13
+
14
+ ---
15
+
16
+ Desenvolvido por [Ramon Mayor Martins]
app.py ADDED
@@ -0,0 +1,72 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import zipfile
3
+ import json
4
+ import pandas as pd
5
+ from tensorflow.keras.models import model_from_json
6
+ from collections import Counter
7
+
8
+ def extract_zip_info(zip_path):
9
+ with zipfile.ZipFile(zip_path, 'r') as zip_ref:
10
+ file_list = zip_ref.namelist()
11
+ metadata = model_json = None
12
+ weights_file = None
13
+
14
+ for file in file_list:
15
+ if 'metadata.json' in file:
16
+ with zip_ref.open(file) as f:
17
+ metadata = json.load(f)
18
+ elif 'model.json' in file:
19
+ with zip_ref.open(file) as f:
20
+ model_json = json.load(f)
21
+ elif 'model.weights.bin' in file:
22
+ weights_file = file
23
+
24
+ if model_json:
25
+ model_topology_json = model_json['modelTopology']
26
+ model_json_string = json.dumps(model_topology_json)
27
+ model = model_from_json(model_json_string)
28
+ summary = {'layer_counts': Counter()}
29
+ extract_layer_info(model_topology_json['config']['layers'], summary)
30
+ layer_counts_text = ', '.join([f'{k}: {v}' for k, v in summary['layer_counts'].items()])
31
+ else:
32
+ layer_counts_text = "Modelo não encontrado"
33
+
34
+ weights_info = {'size_bytes': zip_ref.getinfo(weights_file).file_size} if weights_file else {'size_bytes': 'Não encontrado'}
35
+
36
+ return {
37
+ 'metadata': metadata if metadata else 'Metadados não encontrados',
38
+ 'model_summary': layer_counts_text,
39
+ 'weights_info': weights_info
40
+ }
41
+
42
+
43
+ def extract_layer_info(layers, summary):
44
+ for layer in layers:
45
+ class_name = layer['class_name']
46
+ summary['layer_counts'][class_name] += 1
47
+ if class_name in ['Sequential', 'Model']:
48
+ sub_layers = layer['config']['layers']
49
+ extract_layer_info(sub_layers, summary)
50
+
51
+ def analyze_files(tm_file, zip_file):
52
+ results = {}
53
+ if tm_file is not None:
54
+ tm_info = extract_tm_info(tm_file.name)
55
+ results['tm_info'] = tm_info
56
+ if zip_file is not None:
57
+ zip_info = extract_zip_info(zip_file.name)
58
+ results['zip_info'] = zip_info
59
+ return pd.DataFrame([results]).to_html(escape=False)
60
+
61
+ iface = gr.Interface(
62
+ fn=analyze_files,
63
+ inputs=[
64
+ gr.File(label="Upload .tm File"),
65
+ gr.File(label="Upload .zip File")
66
+ ],
67
+ outputs=gr.HTML(),
68
+ title="GTM-Scope",
69
+ description="Upload a .tm or .zip file to extract its information."
70
+ )
71
+
72
+ iface.launch(debug=True)
requirements.txt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ gradio
2
+ pandas
3
+ tensorflow