Ferramenta inicial em PyQt6 para monitorar uma janela aberta do Mahjong Soul. APENAS USADO PARA TREINAMENTO DE NENHUMA FORMA ESTE PROGRAMA DEVE SER USADO EM PARTIDAS RANQUEADAS.
python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -r requirements.txt
python -m mahjong_masterNa tela inicial, a janela MahjongSoul-Steam sera selecionada automaticamente quando estiver aberta.
Se necessario, escolha outra janela na lista.
A preview atualiza em 3 Hz. Use Salvar screenshot ou pressione F3 para salvar uma imagem, mesmo quando o foco estiver no jogo.
A estrategia inicial e treinar um detector unico com 38 classes:
man_1aman_9pin_1apin_9sou_1asou_9wind_east,wind_south,wind_west,wind_northdragon_white,dragon_green,dragon_redman_5_red,pin_5_red,sou_5_redtile_backpara pecas viradas/laranjas
Rode o app, selecione a janela do Mahjong Soul e clique em Salvar screenshot varias vezes durante partidas/replays.
As imagens vao para:
dataset/raw
Capture variacao: maos, descartes, chamadas, pecas laterais, topo, pecas de cabeca para baixo, mesas e iluminacoes diferentes.
Clique em Abrir anotador no app.
No anotador:
- selecione uma screenshot na lista
- escolha a classe ativa pelos botoes ou combo
- arraste na imagem para desenhar uma box em cada peca visivel
- escolha
train,valoutest - clique em Salvar
Na lista de screenshots, nomes verdes ja foram salvos em train, nomes azuis em val e nomes roxos em test.
O painel Pecas catalogadas mostra quantas imagens/anotacoes existem em cada split, a porcentagem atual e a divisao recomendada de 80% train, 15% val e 5% test.
O proprio app organiza os arquivos assim:
dataset/
images/
train/
val/
test/
labels/
train/
val/
test/
Atalhos:
A / S / D / F: troca para man, pin, sou ou honras
Q / W / E / T: East, South, West, North
Y / U / I: White, Green, Red
V: peca virada/laranja
1-9: seleciona o numero do naipe ativo
R: seleciona o 5 vermelho do naipe ativo
Z / X: imagem anterior ou proxima
Delete: remove a box selecionada
Ctrl+Z: desfaz a ultima box
Enter: salva a imagem atual
O painel Atalhos no lado direito do anotador permite trocar qualquer tecla.
Clique no campo do atalho desejado e pressione a nova combinacao.
As alteracoes ficam salvas localmente em config/shortcuts.json.
O arquivo de dataset esta em:
data/mahjong_soul.yaml
Pela interface, clique em Abrir treino. A janela de treino permite configurar modelo, epocas, tamanho da imagem, batch e device.
Use Nome do treino para escolher a pasta salva em runs/detect.
Se vazio, o nome e gerado como 800e_yolo11n_1600p_5b; se ja existir, usa _V2, _V3 e assim por diante.
O nome automatico acompanha mudancas em epocas, modelo base e resolucao. O campo Modelo base e um dropdown editavel com modelos YOLO comuns.
No dropdown, n/s/m/l/x indicam modelos cada vez mais pesados: nano, small, medium, large e xlarge.
Use Patience para controlar o EarlyStopping; 0 desativa a parada antecipada.
Durante o treino, os tres graficos sao atualizados a partir do results.csv gerado pelo YOLO: loss de treino, loss de validacao e metricas de validacao.
O app usa weights/best.pt como resultado recomendado, porque ele representa a melhor epoca na validacao.
weights/last.pt e apenas a ultima epoca treinada.
Depois que o treino termina, o script carrega esse weights/best.pt e roda uma avaliacao final no split test, salvando os artefatos em runs/detect/<nome_do_treino>/test.
O botao Resumo dos treinos lista as execucoes em runs/detect com results.csv.
Ele mostra comparativos dos 9 dados do treino, velocidade por treino, detalhe do treino selecionado, tabela por classe quando disponivel e imagens geradas pelo YOLO como matriz de confusao, results.png, batches e predicoes de validacao.
Antes do primeiro treino, instale as dependencias:
pip install -r requirements-train.txtTambem e possivel treinar pelo terminal:
python scripts/train_yolo.py --model yolo11n.pt --epochs 100 --imgsz 1600 --batch 8Os resultados ficam em:
runs/detect/mahjong_soul_tiles
Use o best.pt do treino escolhido:
python scripts/predict_yolo.py --weights runs/detect/mahjong_soul_tiles/weights/best.pt --source dataset/raw --imgsz 1600 --conf 0.25 --device 0As imagens com as deteccoes desenhadas ficam em:
runs/predict/mahjong_soul_tiles
Na tela principal:
- escolha um
best.ptno campo Modelo - marque Predict
- ajuste a taxa em FPS
- use Pausar apos proximo predict para rodar apenas uma predicao e congelar o modo predict
O overlay desenha as bounding boxes e labels diretamente na preview da janela monitorada.
A primeira camada de leitura de jogo tenta identificar sua mao, chamadas abertas e yakus provaveis.
Detalhes da arquitetura e limitacoes estao em docs/game_logic.md.
Abra:
notebooks/train_colab.ipynb
O notebook tem dropdowns e botoes para escolher modelo, device, epocas, imagem, batch, patience, nome do treino, montar Google Drive, enviar/extrair o dataset, verificar dataset, instalar dependencias, iniciar/parar treino e abrir TensorBoard.
Se voce abrir em um runtime remoto do Colab, ele nao consegue ler
C:/Codes/MahjongMaster direto do seu PC. Gere o pacote local:
python scripts/prepare_colab_package.pyDepois, no notebook, use Upload zip para enviar
mahjongmaster_colab_dataset.zip e clique Extrair zip. O workspace sera
montado em /content/MahjongMaster.
Como alternativa no Colab remoto, clique Upload pasta e escolha a pasta
dataset ou a pasta inteira MahjongMaster. Esse caminho preserva a estrutura
da pasta pelo navegador, mas costuma ser mais lento que enviar um .zip.
Clique Montar Drive para salvar os treinos no Google Drive. O campo Saida deve apontar para:
/content/drive/MyDrive/MahjongMaster/runs/detect
Assim, durante o treino, best.pt, last.pt, results.csv e os graficos ficam
em:
MyDrive/MahjongMaster/runs/detect/<nome_do_treino>
Se estiver rodando pelo VSCode/Jupyter local ou Colab conectado a runtime local, o notebook pode apontar direto para a pasta do projeto.
No notebook:
- Rode as celulas em ordem.
- Em Colab remoto, envie o zip e clique Extrair zip, ou use Upload pasta.
- Clique Montar Drive e autorize o acesso.
- Confira se Workspace aponta para
/content/MahjongMasterou para a pasta local do projeto. - Confira se Saida aponta para
/content/drive/MyDrive/MahjongMaster/runs/detect. - Clique Verificar dataset.
- Se necessario, clique Instalar deps.
- Escolha as configs e clique Iniciar treino.
O treino usa:
dataset/images/train
dataset/images/val
dataset/images/test
No Colab remoto, o resultado fica no Drive:
MyDrive/MahjongMaster/runs/detect/<nome_do_treino>
Em treino local, o resultado fica em:
runs/detect/<nome_do_treino>
