Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    1,316

    Come funzionano i Pixel?

    Per essere più chiari, ho selezionato un'area precisa di pixel da uno schermo (immaginiamo 10x10) facendo lo screenshot della finestra principale del programma X.
    - Monitor 1680x925
    - Finestra software 680x540, posizione sullo schermo: 0,0
    - Selezione area 0,0,10,10 (left,top,right,bottom)

    Poi ho acceso un altro PC contenente una scheda grafica differente ed un monitor di grandezza maggiore:
    - 1980x1205
    - Finestra software 680x540, posizione sullo schermo: 0,0
    - Selezione area 0,0,10,10 (left,top,right,bottom)

    Con la differenza che i pixel erano "leggermente" differenti.
    Perchè? Dipende dalla scheda grafica? Da qualche configurazione?

    Qualcuno sarebbe così gentile da spiegarmi come funziona?

    // Edit

    Perchè spiego, ho sviluppato un software che parsa gli screenshot che effettuato ogni tot millisecondi e "capisce" cosa ha di fronte grazie al fatto che gli ho spiegato che "tot pixel equivalgono a questo o a quello".
    Ora dovrei passare questo software ad alcuni miei colleghi che ovviamente hanno scheda video, driver e settaggi diversi.
    Siccome vorrei evitare di creare un algoritmo che fa una specie di bruteforce o cerca di "dedurre" cosa ha di fronte perchè 1) potrebbe essere fallace ogni tanto e 2) impiegherebbe troppe risorse e sarebbe veramente pesante.

    Come faccio a capire precisamente "quali sono le mie impostazioni video" e forzare tutti i miei colleghi ad utilizzarle (ovviamente sarebbero d'accordo)?
    Ultima modifica di zacca94; 27-03-2017 a 22:50

  2. #2
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,690
    Con la differenza che i pixel erano "leggermente" differenti.
    Cioè? Esattamente quale/i differenza/e riscontri?

    Se parli di pixel come entità elementari di un'immagine (cioè a livello di dati immagazzinati da qualche parte, i quali rappresentano, ognuno, una parte di informazioni dell'immagine stessa), e se consideriamo una stessa immagine, la loro natura astratta resta invariata a prescindere dalla macchina su cui questi sono analizzati o dall'interfaccia video (scheda grafica e monitor) su cui sono visualizzati. Per cui, se stai analizzando programmaticamente una stessa identica immagine, il risultato dovrebbe restare identico a prescindere dalla macchina su cui avviene questo processo, perché l'immagine stessa non è altro che quella serie distinta di pixel.

    Se parliamo di una stessa immagine, e quindi degli stessi identici pixel, quello che può variare è il modo con cui tale immagine viene visualizzata. In questo caso può influire la risoluzione del monitor e quindi le dimensioni con cui i pixel stessi sono visualizzati, o determinate impostazioni video che possono variarne sull'aspetto visivo; ad esempio impostazioni che riguardano nitidezza, saturazione, contrasto, gamma colorazione, eccetera, che sono comunque relative all'interfaccia video e non al pixel in sé considerato come dato.

    Altra questione è se stai comparando differenti screenshot effettuati su differenti macchine. In questo caso capisci bene che è plausibile che l'immagine stessa risulti differente da macchina a macchina. Questo, non perché influiscono le impostazioni puramente visive (della scheda video o del monitor), ma piuttosto può variare il sistema operativo e/o gli elementi grafici dell'interfaccia utente (se stai analizzando quelli, dal momento che parli di "finestra principale del programma X"). Come tu dici, può variare la risoluzione del monitor (o meglio, le dimensioni del viewport) che potrebbe influire sulla disposizione stessa degli elementi; anche se stai analizzando i primi 10x10 pixel dell'area visibile non è detto che troverai sempre la stessa cosa e che la finestra sia posizionata necessariamente alle coordinate 0,0 (anche se tu lo hai indicato come un dato di fatto); mi viene da pensare il caso di una macchina a cui sono collegati due monitor, magari con differenti risoluzioni, nei quali si estende il desktop, in tal caso la posizione 0,0 dell'area di uno dei due monitor potrebbe non coincidere con la posizione 0,0 dello screenshot (che riporterà invece l'intero ingombro delle due schermate). Potrebbero influire altri svariati elementi che renderebbero comunque il risultato imprevedibile.

    Bisognerebbe poi capire meglio cosa va ad analizzare esattamente il tuo software, quali criteri adopera per analizzare tale cosa e quali siano le specifiche a cui deve attenersi.
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    1,316
    Quote Originariamente inviata da KillerWorm Visualizza il messaggio
    Altra questione è se stai comparando differenti screenshot effettuati su differenti macchine. In questo caso capisci bene che è plausibile che l'immagine stessa risulti differente da macchina a macchina. Questo, non perché influiscono le impostazioni puramente visive (della scheda video o del monitor), ma piuttosto può variare il sistema operativo e/o gli elementi grafici dell'interfaccia utente (se stai analizzando quelli, dal momento che parli di "finestra principale del programma X"). Come tu dici, può variare la risoluzione del monitor (o meglio, le dimensioni del viewport) che potrebbe influire sulla disposizione stessa degli elementi; anche se stai analizzando i primi 10x10 pixel dell'area visibile non è detto che troverai sempre la stessa cosa e che la finestra sia posizionata necessariamente alle coordinate 0,0 (anche se tu lo hai indicato come un dato di fatto); mi viene da pensare il caso di una macchina a cui sono collegati due monitor, magari con differenti risoluzioni, nei quali si estende il desktop, in tal caso la posizione 0,0 dell'area di uno dei due monitor potrebbe non coincidere con la posizione 0,0 dello screenshot (che riporterà invece l'intero ingombro delle due schermate). Potrebbero influire altri svariati elementi che renderebbero comunque il risultato imprevedibile.
    Il programma aperto è un software che NON cambia la sua grandezza mai, perciò se è 680x540 su un pc con win 10 lo è anche su Ubuntu 16.x (per fare un esempio).(non è neanche ridimensionabile)

    Perciò ho detto coordinate 0,0 per semplificare l'esempio, in realtà ho sviluppato un secondo programma veloce veloce che seleziona i 10x10 partendo dalla posizione esatta del programma (non faccio queste prove "a mano", io sono un fallibilissimo umano) perciò sono sicuro delle posizioni che estraggo e delle dimensioni del software originario.

    Comunque per fare un esempio, quando identifica un numero sullo screenshot come può essere il "2" che è composto da 6x10px da un pc all'altro cambiano circa 3px (su 60).

    Avevo pensato di "scaricare" in qualche modo il "profilo" delle mie impostazioni grafiche e farle installare ai miei colleghi... è una soluzione?

  4. #4
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,690
    Ok, quindi il programma agisce su screenshot eseguiti su differenti pc. Giusto per chiarire, non parliamo quindi di un confronto della stessa immagine che viene aperta su pc differenti.

    Non sono troppo ferrato sull'argomento ma penso ci siano vari punti che fanno acqua.

    Una prima cosa: il software si apre in una finestra, e ok; le dimensioni sono quelle, e va bene; ma il software in sé si appoggia al framework del sistema operativo oppure è totalmente indipendente? Cioè gli elementi grafici propri del software sono dipendenti dal sistema operativo oppure no? Se così fosse, non avresti comunque la sicurezza di ottenere lo stesso risultato da pc a pc.

    Seconda cosa: nell'esempio che fai, quel numero che viene identificato è, in origine, un elemento di testo? Oppure è già un'immagine?
    Se fosse un elemento di testo, il risultato potrebbe essere influenzato dal tipo di font installato sul sistema operativo e utilizzato per tale elemento. Chiaramente i font potrebbero differire a seconda del sistema operativo e/o da eventuali relative personalizzazioni.

    Terza cosa: dicci che la variazione è di qualche pixel; se fosse appunto un elemento testuale (ma anche se fosse già un'immagine e tu ne stessi facendo poi lo screenshot), è possibile che ci siano delle impostazioni per l'antialiasing che possono dipendere dal software stesso e/o dall'elemento utilizzato per visualizzare tale testo e/o dalle caratteristiche della scheda grafica (e/o dalle sue eventuali possibili impostazioni) che influiscono sul processo di campionatura (e quindi l'antialiasing) dei pixel che vengono poi mostrati a video. Questo è probabilmente il motivo principale del problema che descrivi.

    Anche se tu riuscissi ad utilizzare la stessa configurazione grafica (tema, profilo, o quel che è) per tutti i pc su cui deve girare il software, dal momento che si basa sull'analisi di uno screenshot eseguito relativamente sui differenti pc, non puoi essere certo che ciò che viene restituito graficamente sullo schermo (e quindi catturato sullo screenshot), sia uguale per tutti i vari pc.

    Siccome vorrei evitare di creare un algoritmo che fa una specie di bruteforce o cerca di "dedurre" cosa ha di fronte perchè 1) potrebbe essere fallace ogni tanto e 2) impiegherebbe troppe risorse e sarebbe veramente pesante.
    Potrei sbagliarmi ma in questo caso credo sia proprio necessario.

    Eventualmente attendi anche altre risposte.
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    1,316
    Quote Originariamente inviata da KillerWorm Visualizza il messaggio
    Una prima cosa: il software si apre in una finestra, e ok; le dimensioni sono quelle, e va bene; ma il software in sé si appoggia al framework del sistema operativo oppure è totalmente indipendente? Cioè gli elementi grafici propri del software sono dipendenti dal sistema operativo oppure no? Se così fosse, non avresti comunque la sicurezza di ottenere lo stesso risultato da pc a pc.
    No, si connette ad un sito web o comunque utilizza una grafica in html/css che è compressa nel source code, nella cartella c:\\programs.... trovo le varie librerie "QT...x.dll" e vista la grafica utilizza quasi sicuramente QWebView.

    Quote Originariamente inviata da KillerWorm Visualizza il messaggio
    Seconda cosa: nell'esempio che fai, quel numero che viene identificato è, in origine, un elemento di testo? Oppure è già un'immagine?
    Se fosse un elemento di testo, il risultato potrebbe essere influenzato dal tipo di font installato sul sistema operativo e utilizzato per tale elemento. Chiaramente i font potrebbero differire a seconda del sistema operativo e/o da eventuali relative personalizzazioni.
    E' un elemento di testo che però non è selezionabile in alcun modo in quanto viene applicata la proprietà apposita nella QT (che ora non ricordo come si chiama) per impedire il copia-incolla.
    Quindi lo screenshotto e tratto da immagine.

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2015
    Messaggi
    57
    dati gli schermi differenti, presumo che la risoluzione sia anch'essa differente, questo implica che la
    scheda grafica utilizza buffer di dimensioni diverse per generare l'output portando a rasterizzazioni differenti (e filtri)

    per ottenere quanto ti aspetti necessiti di due pc con software ed hardware identici,
    anche necessario che il formato immagine sia uguale, meglio se lossless

    un qualsiasi software di riconoscimento immagini necessita di determinate informazioni per lavorare (grandezza immagini, risoluzione, qualità), inoltre devi ponderare dei bias di correzione da applicare sul pixel,

    ad esempio non cercare il singolo pixel ma valuta tutti quelli attorni in base al grado di accuratezza che vuoi ottenere, cosi da poter generare un pattern da utilizzare in seguito, anche il colore stesso non può essere preciso, devi valutare una gamma di possibili soluzioni (come per lo stitching)

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    1,316
    Quote Originariamente inviata da Marsh Visualizza il messaggio
    dati gli schermi differenti, presumo che la risoluzione sia anch'essa differente, questo implica che la
    scheda grafica utilizza buffer di dimensioni diverse per generare l'output portando a rasterizzazioni differenti (e filtri)

    per ottenere quanto ti aspetti necessiti di due pc con software ed hardware identici,
    anche necessario che il formato immagine sia uguale, meglio se lossless

    un qualsiasi software di riconoscimento immagini necessita di determinate informazioni per lavorare (grandezza immagini, risoluzione, qualità), inoltre devi ponderare dei bias di correzione da applicare sul pixel,

    ad esempio non cercare il singolo pixel ma valuta tutti quelli attorni in base al grado di accuratezza che vuoi ottenere, cosi da poter generare un pattern da utilizzare in seguito, anche il colore stesso non può essere preciso, devi valutare una gamma di possibili soluzioni (come per lo stitching)
    Vedo che ne sai parecchio a riguardo, siccome sarei nuovo nello sviluppo di qualcosa di simile qualche link dal quale attingere?

  8. #8
    Utente di HTML.it
    Registrato dal
    Jul 2015
    Messaggi
    57
    Quote Originariamente inviata da zacca94 Visualizza il messaggio
    Vedo che ne sai parecchio a riguardo, siccome sarei nuovo nello sviluppo di qualcosa di simile qualche link dal quale attingere?
    in sostanza devi rendere più dinamico il tuo algoritmo, al fine di ottenere maggiore flessibilità su tutti gli aspetti che possono compromettere la tua immagine, ossia distaccarti il più possibile da leggere modifiche di risoluzione, contrasti, luminosità, smoothing, etc

    nel riconoscimento immagini è fondamentale riuscire ad interpretare le informazioni, con tutti i costi del caso, piuttosto che obbligare gli utilizzatori del tuo software a possedere le medesime configurazioni software ed hardware.

    se l'obiettivo è riconoscere i caratteri da un'immagine potresti partire dagli algoritmi OCR, usati dalle pennette ottiche

    se il tuo scopo è di tipo indagine e ricerca non puoi fare alto che un intensa analisi su quello che è grafica raster piuttosto che vettoriale,
    da qui determinare algoritmi di riconoscimento del testo, basati su confronti con database informativi, o percorsi (es: reti neurali)

    mentre se lo scopo è ottenere il risultato, allora ti conviene senza dubbio cercare framework e soluzioni già esistenti, è un argomento piuttosto gettonato, pertanto trovi sicuramente quello che cerchi

    link e fonti attendibili non so darteli, poichè risiedo più sulle dinamiche di correzione immagine piuttosto che quelle di riconoscimento

  9. #9
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    1,316
    Quote Originariamente inviata da Marsh Visualizza il messaggio
    in sostanza devi rendere più dinamico il tuo algoritmo, al fine di ottenere maggiore flessibilità su tutti gli aspetti che possono compromettere la tua immagine, ossia distaccarti il più possibile da leggere modifiche di risoluzione, contrasti, luminosità, smoothing, etc

    nel riconoscimento immagini è fondamentale riuscire ad interpretare le informazioni, con tutti i costi del caso, piuttosto che obbligare gli utilizzatori del tuo software a possedere le medesime configurazioni software ed hardware.

    se l'obiettivo è riconoscere i caratteri da un'immagine potresti partire dagli algoritmi OCR, usati dalle pennette ottiche

    se il tuo scopo è di tipo indagine e ricerca non puoi fare alto che un intensa analisi su quello che è grafica raster piuttosto che vettoriale,
    da qui determinare algoritmi di riconoscimento del testo, basati su confronti con database informativi, o percorsi (es: reti neurali)

    mentre se lo scopo è ottenere il risultato, allora ti conviene senza dubbio cercare framework e soluzioni già esistenti, è un argomento piuttosto gettonato, pertanto trovi sicuramente quello che cerchi

    link e fonti attendibili non so darteli, poichè risiedo più sulle dinamiche di correzione immagine piuttosto che quelle di riconoscimento
    Sfortunatamente ho provato ad utilizzare framework (i più famosi) ma neanche applicando bene filtri e quant'altro per migliorare la lettura l'estrazione è sempre parziale, e NON posso avere letture parziali, ma complete e affidabili al 100%, a proposito fra poco aprirò un post in quanto in questi giorni ho sviluppato un algoritmo ma trovo difficoltà con alcuni caratteri come le "I" (i lunghe) e le "l"(elle) che si confondono molto nel tutto... se puoi darci un occhiata.

    Grazie

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.