Visualizza post

Questa sezione ti permette di visualizzare tutti i post inviati da questo utente. N.B: puoi vedere solo i post relativi alle aree dove hai l'accesso.


Post - allegfede

Pagine: 1 2 [3] 4 5 ... 50
31
Programmazione / Re:analisi immagine statica
« il: 07 Giugno 2019, 19:42:40 »
provero' .. ma ho l sospetto che l'accesso a basso livello in C di image magic sia quasi inarrivabile ....

32
Programmazione / Re:analisi immagine statica
« il: 07 Giugno 2019, 16:31:19 »
l'array di 16 milioni di colori e' perche' il metodo in python usa il valore del colore come INDICE del vettore, ed il contenuto di quel vettore e' QUANTE VOLTE e' stato incontrato un pixel di quel colore.

ma e' lento ....

image magick ha risolto :D

pero' ho barato ;-(

33
Programmazione / Re:analisi immagine statica
« il: 06 Giugno 2019, 20:53:13 »
lento, lentissimo ......

ho ridimensionato l'immagine a 640x480 ma ci mette una vita .....

barando un po' ho utilizzato image magic :D

34
Programmazione / Re:analisi immagine statica
« il: 06 Giugno 2019, 19:32:25 »
provando a forzare l'inserimento dell'elemento di indice "ColoreDelPixel" e' ovviamente inutile, se non ci sono gli elementi a sufficienza.

35
Programmazione / Re:analisi immagine statica
« il: 06 Giugno 2019, 18:43:09 »
anche questo codice mi piace ....

Codice: [Seleziona]
int main(int argc, char** argv)
{
    QApplication app(argc, argv);
    QPixmap pixmap("logo.png");
    QImage image = pixmap.toImage();
    QRgb col;
    QMap<QRgb,int> rgbcount;
    QRgb greatest = 0;

    int width = pixmap.width();
    int height = pixmap.height();

    int count = 0;
    for (int i = 0; i < width; ++i)
    {
        for (int j = 0; j < height; ++j)
        {
            col = image.pixel(i, j);
            if (rgbcount.contains(col)) {
                rgbcount[col] = rgbcount[col] + 1;
            }
            else  {
                rgbcount[col] = 1;
            }

            if (rgbcount[col] > count)  {
                greatest = col;
                count = rgbcount[col];
            }

        }
    }
    qDebug() << count << greatest;
    return app.exec();
}

interessante il metodo: rgbcount.contains(col) che dato un valore, ci dice se e' presente nella matrice e' veramente utile e penso sia lo stesso di .Exist dei vettori in gambas.

mi piace che nella scansione sia fatto contemporaneamente lo "stacking" dei colori e l'indicizzazione di quello che e' piu' presente.
in questo modo si mantiene la linearita' del metodo (x*y)

L'unico problema e' che contrariamente a python, se uso un vettore "generico", non posso usare come indice un valore che nel vettore NON esiste gia' ....

36
Programmazione / Re:analisi immagine statica
« il: 06 Giugno 2019, 17:55:07 »
se uno volesse essere esaustivo dovrebbe fare un vettore dei 16 milioni di colori, scansionare tutti i pixel e ogni volta che si incontra un pixel dell'N-esimo colore ( e sarebbe anche da capire come ordinare questo vettore/matrice), si aggiunge 1.
alla fine il colore (la casellina del vettore) con il valore piu' grande, sarebbe il colore dominante.

Pero' e' ovviamente dispendioso e penso poco efficiente.

E' per questo che penso vengano usati i "clusters", ma in gambas non mi sembra che ci siano librerie che li implementano .....

https://stackoverflow.com/questions/3241929/python-find-dominant-most-common-color-in-an-image

NB: c'e il metodo image.pixels che e' interessante:
Citazione
Image.Pixels (gb.image)

Property Pixels As Integer[]

DAL 3.5
Return the image pixels colors as an array of 32 bits integers.

se fosse possibile fare un "istogramma" di questo array .......

37
Programmazione / Re:analisi immagine statica
« il: 05 Giugno 2019, 18:24:39 »
mah, io pensavo di convertire il seguente codice java script in una classe gambas:
https://github.com/lokesh/color-thief/blob/master/src/color-thief.js

ma anche questo aritcolo e' interessante:
https://code.likeagirl.io/finding-dominant-colour-on-an-image-b4e075f98097

38
Programmazione / analisi immagine statica
« il: 05 Giugno 2019, 12:21:10 »
dovendo fare una piccola applicazione che faccia una analisi di massima su una immagine (catturata dalla raspi-camera), mi chiedevo se convenisse:
A) gestire la visualizzazione dell'immagine e l'analisi del contenuto con le risorse interne di GAMBAS
B) utilizzare OpenCV e usare Gambas per il solo "report"

Opinioni?

PS: al momento si tratta di capire il "colore" dominante nell'immagine. No pattern recognition o analisi esoteriche.

39
Programmazione / Re:L'evento click rende sorda la sua routine?
« il: 02 Maggio 2019, 16:43:29 »
prova usando "wait" nel ciclo, in questo modo processa la coda degli eventi in modo asincrono

40
perfetto! funziona !
Codice: [Seleziona]
Public Sub CommutaMatrice(macchina As Integer, sorgente As Integer, destinazione As Integer)
Dim Ingresso As Byte
Dim Uscita As Byte

Dim iniziale As Byte[] = [&AA, &55, &03]

  ingresso = CByte(sorgente)
  uscita = CByte(destinazione)
 
  iniziale.Push(ingresso)
  iniziale.Push(uscita)
 
  If seriale.Status = Net.Active Then
    Seriale.Close
  Endif
 
  With Seriale
     .PortName = "/dev/" & settings["SerialPort", "ttyACM0"]
     .Speed = 9600
     .Parity = SerialPort.None
     .DataBits = 8
     .StopBits = 1
     .FlowControl = SerialPort.None
     .Drop
     .Open
   End With
   
   If seriale.Status = Net.Active Then 
      iniziale.Write(Seriale, 0, iniziale.Count)
      mylogger("MASTER_CONTROL:" & sorgente & ">" & destinazione & "(" & macchina & ")", Logger.Info)
      seriale.Close
   Endif

   PlayNext
   
End

41
sono i valori esadecimali FISSI

Forse vuole questi: 170  85  3  0  31
e non un byte di più.
Cioè "singoli" byte, che solo insieme assumono un significato per la macchina remota.  :-X

cerco di spiegare il protocollo di comunicazione verso la macchina:
la macchina remota riconosce un comando se riceve 5 byte i cui primi due sono
AA 55

A questo punto, dei 5 byte che riceve analizza il terzo byte (8 bit) che rappresenta i moduli attivi (l'esadecimale 03 e' in binario 00000011, che significa, partendo da DESTRA, modulo video composito presente TRUE (1) | modulo audio presente TRUE (1) | modulo Y/C o RGB presente=FALSE (0) | modulo audio 2 presente=FALSE (0) , etc)

Veniamo ora al comando di commutazione, che necessita di un indirizzo per la sorgente (1 byte=255 sorgenti) e della destinazione (1 byte).

quindi da minicom (tanto per capire dove la cosa funziona), la "stringa" che rappresenta (attraverso il drop down menu' opportuno si mette HEX) valori esadecimali, AA5503001F (e do invio o premo send), sto dicendo al modulo video ad al modulo audio (binario 11=esadecimale 03) che sto inviando un comando di commutazione (esadecimale AA55) tra' la sorgente (esadecimale 00= in decimale 0) e la destinazione (esadecimale 1F= decimale 31).

I valori decimali ci sono perche' la "pulsantiera" per il controllo manuale e' ovviamente in numeri a base dieci, piu' vicini all'esperienza umana.

Per venire all'argomento "cosa e' parametrico e cosa e' fisso", direi che i primi 3 byte del comado possono essere hard-coded poiche' cambieranno molto poco, ma sorgente e destinazione vengono scelti di volta in volta dall'utente e devono essere un parametro.

42
Seconda questione:

...ma InizioStringa deve essere per forza di tipo.... Stringa ?

noo assolutamente ... sono i valori esadecimali FISSI per la mia architettura di macchine (e' fatta a moduli e quei valori dicono a quali moduli e' associato il comando che seguira')

43
penso &hAA5503001F per quel che riguarda il termine riga e' molto vago, penso basti che gli arrivi quella roba tutta insieme.

in allegato le schermate di minicom (indica l'invio di 5 byte). Come si concatenano i byte?

da shell questo comando funziona pefettaemnte:
Codice: [Seleziona]
echo -en '\xAA\x55\x03\x00\x1F' > /dev/ttyUSB0

44
la macchina remota si aspetta un valore:
A | A | 5 | 5 | 0 | 3 | 0 | 0 | 1 | F | cr+lf

composto di caratteri esadecimali ... suppongo in un unico invio separato da un CrLf

questo il codice (che ho tradotto da un mio vecchio software funzionante in vb6):
Codice: [Seleziona]
Public Sub CommutaMatrice(macchina As Integer, sorgente As Integer, destinazione As Integer)
Dim InizioStringa As String
Dim Ingresso As String
Dim Uscita As String

  InizioStringa = "AA5503"   
  ingresso = Hex(sorgente, 2)
  uscita = Hex(destinazione, 2)
 
  Seriale.Close
 
  With Seriale
     .PortName = "/dev/" & settings["SerialPort", "ttyACM0"]
     .Speed = 9600
     .Parity = SerialPort.None
     .DataBits = 8
     .StopBits = 1
     .FlowControl = 0
     .Open
   End With
   
   seriale.Begin
   Wait 1
   Print #seriale, InizioStringa & ingresso & uscita
   Wait 1
   Seriale.Send
   
   mylogger("MASTER_CONTROL:" & sorgente & ">" & destinazione & "(" & macchina & ")", Logger.Info)
   
   seriale.Close
   
   PlayNext
   
End

ho provato a cambiare il tipo di dati da string ad hex, ma hex non e' un tipo di dato riconosciuto :-(

45
Salve, ho scritto una procedura che dovrebbe mandare una serie di valori esadecimali ad una macchina attraverso la seriale rs232 ma ho il sospetto che stia mandando la interpretazione ASCII di quelle cifre.
Per esempio dovrebbe mandare l'esadecimale a5 30 00 11 1f , ma penso che mandi "a53000111f".
So che il cavo ed il collegamento funziona, perché con miniComm quando mando in esadecimale quei valori, la macchina remota mi risponde.

Ora sono a casa e non ho il codice, domani lo carico.

Ma non ho trovato alcuna informazione sul fatto che serial.send invii i dati del butteremo in un modo (ASCII) o nell'altro (esadecimale).

Pagine: 1 2 [3] 4 5 ... 50