Vai al contenuto
Tutti i lavori
  • #computer-vision
  • #automation
  • #games

GTA V Fingerprint Solver

Un risolutore basato sulla visione artificiale per il minigioco delle impronte nel colpo al casinò di GTA V: legge lo schermo, confronta l’impronta con quattro modelli e inserisce la soluzione in meno di un secondo.

Ruolo
Sviluppatore unico, open source.
Risultato
Risolve ogni impronta in meno di un secondo. Un esercizio compatto di template matching con una scadenza in tempo reale.
Anno
2024
Stato
completato
Stack
  • Python
  • OpenCV
  • NumPy
  • Pillow
  • PyAutoGUI
  1. L'inizio

    Un minigioco contro il tempo

    Il colpo al Diamond Casino di GTA V ha un minigioco di clonazione delle impronte: il gioco mostra un'impronta bersaglio e otto frammenti, e bisogna scegliere i quattro che le appartengono prima che scada il tempo. Farlo a mano, ancora e ancora, è lento e facile da sbagliare. Guardandolo da sviluppatore, però, era un'altra cosa: un problema di visione artificiale piccolo e ben delimitato.

  2. L'obiettivo

    Leggere lo schermo, riconoscere l'impronta, rispondere in meno di un secondo

    Il gioco usa sempre le stesse quattro impronte. Il piano quindi era un risolutore che cattura il minigioco, riconosce l'impronta che ha davanti, trova i suoi quattro frammenti tra gli otto sullo schermo e inserisce la risposta, il tutto prima che una persona abbia finito di leggere lo schermo.

  3. L'avventura

    Template matching, un pezzo alla volta

    Ho costruito il risolutore in Python con OpenCV. Cattura solo la zona del minigioco, prepara l'immagine e la confronta con le quattro impronte note usando la correlazione incrociata normalizzata. Ogni impronta è salvata anche come quattro quarti di riferimento, che il risolutore cerca tra i frammenti. Una volta trovata la risposta, PyAutoGUI sposta il selettore e conferma con pressioni di tasti simulate.

    VideoIl risolutore che completa il minigioco delle impronte
    0:00 / 0:00
    Riconoscimento, confronto e input, in tempo reale.
  4. Le difficoltà

    Abbastanza veloce, e robusto alla grafica del gioco

    Il tempo è poco, quindi ogni millisecondo di elaborazione contava. E le impronte non appaiono mai due volte uguali: si spostano leggermente e cambiano luminosità a seconda della scena. Un confronto ingenuo sull'immagine intera avrebbe fallito proprio quando serviva.

  5. La fine

    Ogni impronta, in meno di un secondo

    Il risolutore riconosce ogni impronta e inserisce la risposta in meno di un secondo, e nelle mie prove non ne ha mai sbagliata una. È un esercizio compatto, ma completo: cattura dello schermo, pre-elaborazione, template matching con il rumore del mondo reale e automazione dell'input, tutto con una scadenza in tempo reale.

Per risolvere un'impronta
<1 s
Per risolvere un'impronta
Impronte note
4
Impronte note
Quarti di riferimento
16
Quarti di riferimento
Errori nelle mie prove
0
Errori nelle mie prove
  • Riconoscimento dell'impronta

    Capisce quale delle quattro impronte del gioco è sullo schermo, confrontandola con modelli noti.

  • Ricerca dei frammenti

    Divide ogni impronta in quarti e trova i quattro frammenti giusti tra gli otto proposti dal gioco.

  • Tempo reale

    Osserva lo schermo di continuo e risponde in meno di un secondo, ben dentro il tempo del minigioco.

  • Robusto alla grafica del gioco

    Il confronto normalizzato regge spostamenti e cambi di luminosità da un colpo all'altro.

  • Input automatico

    Sposta il selettore e conferma la risposta con pressioni di tasti simulate, senza mani.

  • Cattura mirata

    Legge solo la zona dello schermo del minigioco, così resta veloce e leggero.

In azione

VideoIl risolutore che completa il minigioco delle impronte
0:00 / 0:00
Riconoscimento, confronto e input, in tempo reale.

Cosa stai guardando:

  • La cattura dello schermo intercetta il minigioco appena compare.
  • L'impronta viene riconosciuta e la soluzione calcolata quasi all'istante.
  • Il selettore si sposta su ogni frammento giusto e lo conferma, con pressioni di tasti automatiche e precise.

Come riconosce un'impronta

Il gioco usa sempre e solo quattro impronte. Il risolutore le conserva sia come modello completo sia divise in quattro quarti, così riesce a riconoscere un'impronta anche quando una parte appare diversa.

Le quattro impronte bersaglio che il risolutore conosce.
Impronta 1, in quarti
Impronta 2, in quarti
Impronta 3, in quarti
Impronta 4, in quarti
  1. Cattura

    Prende solo la zona del minigioco e la prepara al confronto: scala di grigi e contrasto.
  2. Template matching

    Confronta il bersaglio con le quattro impronte note usando la correlazione incrociata normalizzata.
  3. Analisi dei quarti

    Trova i quattro quarti di riferimento dell'impronta tra gli otto frammenti sullo schermo.
  4. Risposta

    Sposta il selettore su ogni frammento giusto e conferma, tramite PyAutoGUI.

Sotto il cofano

  • Cattura e pre-elaborazione

    Pillow, NumPy

    Cattura la zona della finestra di gioco e applica filtri che rendono più facile confrontare le creste dell'impronta.

  • Template matching

    OpenCV

    cv2.matchTemplate con correlazione incrociata normalizzata, che tollera piccoli cambi di luce e di posizione.

  • Analisi per componenti

    Quarti

    Quando l'impronta intera non combacia bene, ogni quarto viene confrontato da solo, e il riconoscimento resta affidabile.

  • Automazione dell'input

    PyAutoGUI

    Trovata la risposta, il risolutore guida il selettore con pressioni di tasti simulate e tempi precisi.

Sfide

Problema

Prestazioni in tempo reale

Il tempo è poco: la risposta deve arrivare il prima possibile.

Soluzione

I modelli vengono caricati una volta all'avvio e il confronto avviene solo sulla zona del minigioco, mai sull'intero schermo.

Problema

Variazioni dell'impronta

Le impronte si spostano leggermente e cambiano luminosità da una scena all'altra.

Soluzione

Confrontare i quattro quarti separatamente, e non solo l'impronta intera, mantiene il risultato affidabile quando una zona appare diversa.

Problema

Convivere con il gioco

Il risolutore deve leggere e agire senza disturbare il gioco.

Soluzione

Una cattura dello schermo non invasiva e un input che passa dagli stessi tasti che premerebbe un giocatore.

Competenze acquisite

  • Visione artificiale

    OpenCV

    Template matching, pre-elaborazione e i compromessi tra precisione e velocità.

  • Elaborazione delle immagini

    NumPy, Pillow

    Trasformare catture dello schermo grezze in dati puliti e confrontabili.

  • Sistemi in tempo reale

    Latenza

    Progettare un ciclo attorno a una scadenza rigida, dove il precalcolo conta più del codice furbo.

  • Automazione dell'input

    PyAutoGUI

    Controllo della tastiera preciso e temporizzato, guidato da ciò che il programma vede.

Quanto è veloce?

Riconosce l'impronta e inserisce la risposta in meno di un secondo, ben dentro il tempo del minigioco.

Perché solo quattro modelli?

Perché il gioco usa sempre e solo quattro impronte. È questo che rende il problema ben delimitato: il risolutore non deve imparare niente, solo riconoscere in modo affidabile.

Come inserisce la risposta?

Tramite PyAutoGUI: sposta il selettore e conferma con pressioni di tasti simulate, gli stessi tasti che userebbe un giocatore.

Il codice è disponibile?

Sì, su GitHub.

Ti serve qualcosa di simile?

Dimmi cosa deve fare, dove gira e per quando ti serve.

Contattami