venerdì 3 gennaio 2025

Change Detection with structural similarity

L'idea di base e' quella di cercare le differenze tra le due immagini sottostanti

Non e' immediatamente visibile ma ci sono dei sassi che si sono spostati nella zona a coordinata 2600,1600 circa. Per questa prova e' stato impiegato l'algoritmo di Structural Similarity  di SkImage

Foto 1

 

Foto2
il calcolo indica un indice di somiglianza di circa il 71%

 



 Questa e' l'elaborazione (bianco minima differenza)

 


 

Il risultato finale e' la vegetazione con il suo movimento ha completamente obliterato il segnale relativo allo spostamento dei sassi

from skimage.metrics import structural_similarity
import cv2
import numpy as np

# Load images
before = cv2.imread('20241114.jpg')
after = cv2.imread('20241115.jpg')

# Convert images to grayscale
before_gray = cv2.cvtColor(before, cv2.COLOR_BGR2GRAY)
after_gray = cv2.cvtColor(after, cv2.COLOR_BGR2GRAY)

# Compute SSIM between the two images
(score, diff) = structural_similarity(before_gray, after_gray, full=True)
print("Image Similarity: {:.4f}%".format(score * 100))

# The diff image contains the actual image differences between the two images
# and is represented as a floating point data type in the range [0,1]
# so we must convert the array to 8-bit unsigned integers in the range
# [0,255] before we can use it with OpenCV
diff = (diff * 255).astype("uint8")
diff_box = cv2.merge([diff, diff, diff])

# Threshold the difference image, followed by finding contours to
# obtain the regions of the two input images that differ
thresh = cv2.threshold(diff, 20, 255, cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)[1]
contours = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
contours = contours[0] if len(contours) == 2 else contours[1]

mask = np.zeros(before.shape, dtype='uint8')
filled_after = after.copy()

for c in contours:
area = cv2.contourArea(c)
if area > 40:
x,y,w,h = cv2.boundingRect(c)
cv2.rectangle(before, (x, y), (x + w, y + h), (36,255,12), 2)
cv2.rectangle(after, (x, y), (x + w, y + h), (36,255,12), 2)
cv2.rectangle(diff_box, (x, y), (x + w, y + h), (36,255,12), 2)
cv2.drawContours(mask, [c], 0, (255,255,255), -1)
cv2.drawContours(filled_after, [c], 0, (0,255,0), -1)

cv2.imshow('20241114', before)
cv2.imshow('20241115', after)
cv2.imshow('diff', diff)
cv2.imshow('diff_box', diff_box)
cv2.imshow('mask', mask)
cv2.imshow('filled after', filled_after)
cv2.waitKey()

 

giovedì 2 gennaio 2025

LLama download checkpoint

Oltre a scaricare i dati per usare un modello puo' essere necessario effettuare un retrain di un modello ed in questo caso non si possono usare i modelli quantizzati ma i dati relativi ad checkpoint


 

per per fare cio' si usa llama-stack

Si deve pero' prima richiesta su  https://www.llama.com/llama-downloads/

e si ottiene una con un link

si installa poi llama-stack

pip install llama-stack
llama model list

llama download --source meta --model-id meta-llama/Llama-3.2-3B 

viene richiesto a questo punto di incollare il link giusto per mail

i file del checkpoint si trovano in .llama

luca@Dell:~$ cd .llama/
luca@Dell:~/.llama$ ls
checkpoints
luca@Dell:~/.llama$ cd checkpoints/
luca@Dell:~/.llama/checkpoints$ ls -la
total 12
drwxr-xr-x 3 luca luca 4096 Dec 31 06:24 .
drwxr-xr-x 3 luca luca 4096 Dec 30 17:30 ..
drwxr-xr-x 2 luca luca 4096 Dec 30 17:31 Llama3.2-3B
luca@Dell:~/.llama/checkpoints$ cd Llama3.2-3B/
luca@Dell:~/.llama/checkpoints/Llama3.2-3B$ ls
checklist.chk  consolidated.00.pth  params.json  tokenizer.model
luca@Dell:~/.llama/checkpoints/Llama3.2-3B$ ls -la
total 6277140
drwxr-xr-x 2 luca luca       4096 Dec 30 17:31 .
drwxr-xr-x 3 luca luca       4096 Dec 31 06:24 ..
-rw-r--r-- 1 luca luca        156 Dec 30 17:31 checklist.chk
-rw-r--r-- 1 luca luca 6425581594 Dec 30 17:36 consolidated.00.pth
-rw-r--r-- 1 luca luca        220 Dec 30 17:31 params.json
-rw-r--r-- 1 luca luca    2183982 Dec 30 17:31 tokenizer.model
luca@Dell:~/.llama/checkpoints/Llama3.2-3B$


Casio SA-38

Ho trovato vicino ad un cassonetto una tastiera SA-38 molto simile a quello che usavo da ragazzo...era in condizioni pessime, molto sporca piu' che altro perche' la gommapiuma della custodia con il tempo si e' polverizzata (nel senso reale della parola) ed e' entrata in ogni pertugio

Troppo curioso di vedere come e' fatta dentro

Aprendo alcuni supporti di plastica delle viti si sono distrutti (non so se qualcuno prima di me la aveva aperta)...inoltre era chiara una perdita di acido nel vano batterie e la corrosione aveva distaccato il cavo del positivo

Dal punto di vista dell'elettronica ci sono veramente pochi componenti ..e' praticamente un SOC (system on a chip) con un AN8053 che funge da regolatore di tensione ed amplificato

AN8053 con jack output audio ed VIN 7.5 V

 

Un MSM6387 in cui sono inseriti tutti i suoni in PCM, un ADC e la gestione degli input dai tasti. La CPU genera una onda a gradini che viene poi smussata da un filtro esterno


MSM6387-11


Su una daughter board piuttosto posticcia c'e' il cristallo oscillatore a 21.725 MHz


I dati di fabbrica indicano una fabbrica in Agosto 1992



tutto e' montato su due schede con connettori saldati (non e' stata pensata per essere smontata e riparata)



i pulsanti sono del tipo presenti in alcune vecchie calcolatrici o tastiere PC con una membrana di gomma che racchiude al suo interno la parte conduttiva


i tasti vengono riconosciuti da una matrice



Change Detection with structural similarity

L'idea di base e' quella di cercare le differenze tra le due immagini sottostanti Non e' immediatamente visibile ma ci sono dei ...