Come leggere da schermo o da una immagine?

di il
18 risposte

Come leggere da schermo o da una immagine?

E' possibile leggere un testo e/o dei numeri (e magari anche i colori) direttamente dal display o da un'immagine con java?
Ci sono delle classi da poter utilizzare a tale scopo?
Se si quali?
Grazie

18 Risposte

  • Re: Come leggere da schermo o da una immagine?

    I colori si, basta prendere il pixel o l'area di interesse.

    Il testo no, perche' il testo, all'interno dell'immagine, e' solo una serie di pixel.
    Quindi quello che serve e' raggruppare i pixel per ricostruire il carattere.
    Questo si fa con gli OCR (Optical Character Recognition), programmi parecchio sofisticati.

    Devi trovare una libreria Java che implementa un OCR

    https://stackabuse.com/tesseract-simple-java-optical-character-recognition/
  • Re: Come leggere da schermo o da una immagine?

    ilp4zz0 ha scritto:


    E' possibile leggere un testo e/o dei numeri (e magari anche i colori) direttamente dal display o da un'immagine con java?
    Fare uno "screenshot" dello schermo (o di una parte), sì è possibile (sempre classe Robot), ANCHE in un contesto multi-monitor.
    Dedurre/interpretare altro dalle immagini ricavate invece è TUTTO un altro discorso, ben più complesso ....
  • Re: Come leggere da schermo o da una immagine?

    Grazie per le info, proverò ad approfondire l'argomento OCR
  • Re: Come leggere da schermo o da una immagine?

    Fare uno "screenshot" dello schermo (o di una parte), sì è possibile (sempre classe Robot), ANCHE in un contesto multi-monitor.
    Sono riuscito a fare vari screenshots di parti dello schermo che mi interessavano indicando le coordinate x e y e la dimensione del "rettangolo" da acquisire, per esempio:
    Rectangle rect = new Rectangle(50,50,100,100);
    Siccome non è molto agevole stare ad indicare di volta in volta le coordinate e le dimensioni, potrei disegnare graficamente una finestra o un rettangolo sullo schermo (p.e. con javaFX o swing.. ho un pò di confusione al rigurardo), posizionarlo e/o ridimensionarlo all'occorrenza, e far acquisire lo screenshot (o fare altre operazioni) all'interno di questo rettangolo grafico?
    Se si, mi indichereste quali tools utilizzare?

    n.b. in pratica vorrei disegnare una casella rettangolare o quadrata come fosse semplicemente un contorno, cioè che sia vuoto o trasparente all'interno, da spostare sulle schermo in una determinata posizione.. vorrei disegnare solo il perimetro
    Grazie
  • Re: Come leggere da schermo o da una immagine?

    ilp4zz0 ha scritto:


    Siccome non è molto agevole stare ad indicare di volta in volta le coordinate e le dimensioni, potrei disegnare graficamente una finestra o un rettangolo sullo schermo (p.e. con javaFX o swing.. ho un pò di confusione al rigurardo), posizionarlo e/o ridimensionarlo all'occorrenza, e far acquisire lo screenshot (o fare altre operazioni) all'interno di questo rettangolo grafico?
    Se si, mi indichereste quali tools utilizzare?
    Disegnare arbitrariamente sul desktop o sopra altre finestre, no, non si può in Java. Si possono però creare finestre semi/completamente trasparenti, è una funzionalità un po' "avanzata" di AWT ed è descritta nel tutorial ufficiale qui: How to Create Translucent and Shaped Windows.
    Se vuoi una finestra senza le decorazioni (bordi, titolo ecc..) usi Window (AWT)/JWindow (Swing) in cui disegni solo un bordino o gli angoli ecc... Il problema principale è che una finestra senza decorazioni non la può spostare/ridimensionare l'utente con il mouse (non "di serie" perlomeno), quindi bisogna gestire queste cose appositamente.

    Un altro approccio ben diverso invece è questo: fai lo screenshot di tutto lo schermo, poi metti la immagine in un tuo frame in modo che la immagine sia eventualmente scrollabile, se necessario, e su cui puoi tracciare un rettangolo spostabile/ridimensionabile. Una sorta di "mini" editor, come fanno anche certi sw di grafica. È sicuramente fattibile e forse anche più semplice rispetto alle finestre trasparenti.
  • Re: Come leggere da schermo o da una immagine?

    Un altro approccio ben diverso invece è questo: fai lo screenshot di tutto lo schermo, poi metti la immagine in un tuo frame in modo che la immagine sia eventualmente scrollabile, se necessario, e su cui puoi tracciare un rettangolo spostabile/ridimensionabile. Una sorta di "mini" editor, come fanno anche certi sw di grafica. È sicuramente fattibile e forse anche più semplice rispetto alle finestre trasparenti.
    Molto interessante questa soluzione.. stavo più o meno pensando alla stessa cosa, ma all'interno del mio frame pensavo di inserire direttamente la finestra ridimensionata del file che mi interessa e successivamente acquisirne il contenuto.. si può fare una cosa del genere?
    su cui puoi tracciare un rettangolo spostabile/ridimensionabile. Una sorta di "mini" editor, come fanno anche certi sw di grafica
    Che intendi nello specifico? Come potrebbe essere questo mini editor?

    Grazie
  • Re: Come leggere da schermo o da una immagine?

    ilp4zz0 ha scritto:


    Che intendi nello specifico? Come potrebbe essere questo mini editor?
    Grosso modo, simile al "cattura schermata" integrato in Firefox. Viene fuori un rettangolo evidenziato con gli 8 handle (pallini rotondi) ai bordi per spostare/ridimensionare il rettangolo. Quindi poi lo screenshot lo fa solo su quel rettangolo.
  • Re: Come leggere da schermo o da una immagine?

    Si è proprio quello che potrebbe fare al caso mio.. è possibile fare ciò con Swing o serve altro?
  • Re: Come leggere da schermo o da una immagine?

    ilp4zz0 ha scritto:


    Si è proprio quello che potrebbe fare al caso mio.. è possibile fare ciò con Swing o serve altro?
    Sì certo, è possibilissimo anche solo con Swing (ma anche con JavaFX è sicuramente fattibile). Si può fare "carino" come quello di Firefox .... ma anche meno. Dipende da quanto lavoro intendi fare e dalle conoscenze su Java2D, gestione immagini e il custom painting nei componenti Swing.
  • Re: Come leggere da schermo o da una immagine?

    Ok grazie mille.. proverò a buttare giù un pò di codice
  • Re: Come leggere da schermo o da una immagine?

    Fare uno "screenshot" dello schermo (o di una parte), sì è possibile (sempre classe Robot), ANCHE in un contesto multi-monitor.
    Ho una domanda al riguardo, una semplice curiosità: ma quindi qualunque programma (aldilà del linguaggio di programmazione utilizzato) potrebbe, ad esempio, fare un "screenshot" dello schermo della macchina su cui viene installato e inviare il dato acquisito all'esterno? Passando inosservato all'utente?
  • Re: Come leggere da schermo o da una immagine?

    ilp4zz0 ha scritto:


    ma quindi qualunque programma (aldilà del linguaggio di programmazione utilizzato) potrebbe, ad esempio, fare un "screenshot" dello schermo della macchina su cui viene installato e inviare il dato acquisito all'esterno? Passando inosservato all'utente?
    Mettendola in questo modo, sì, tecnicamente purtroppo è così, una applicazione "malintenzionata" lo può fare ...
    Chiaramente se non è Java, deve comunque avere una API similare al Robot oppure avere accesso alle API native del SO. Su Windows non ci sono restrizioni per questo. Su altri SO non so dire in questo momento ...
  • Re: Come leggere da schermo o da una immagine?

    Ah, caspita.. lo avevo sempre sospettato.. e non c'è modo di verificare se ciò avviene e/o comunque intervenire in qualche modo per evitare che ciò avvenga?
    Mi riferisco principalmente ad una macchina con Windows.. quindi oltre ad eventuali "acquisizioni screenshot" tante altre cose possono accadere senza che l'utente se ne accorga?
  • Re: Come leggere da schermo o da una immagine?

    Le tue domande stanno scivolando verso argomenti non del tutto ben accetti in un forum, che con il "lavoro" non c'entrano nulla.

    Non è che, per caso, hanno a che fare con metin2?
Devi accedere o registrarti per scrivere nel forum
18 risposte