Podem crear un medidor de dimensions utilitzant dues càmeres web. El procés de mesura d’objectes utilitzant dues càmeres es coneix com a estereovisió o visió estereoscòpica.
La estereovisió es basa en la idea que el cervell humà pot percebre la profunditat gràcies a que els nostres ulls estan separats per una certa distància. De manera similar, al utilitzar dues càmeres col·locades a una certa distància entre si, podem capturar imatges des de dues perspectives diferents i utilitzar aquesta informació per calcular la distància i la profunditat dels objectes en l’escena.
Per crear un medidor de dimensions utilitzant dues càmeres web, hauràs de connectar les càmeres al teu ordinador i utilitzar un programari de processament d’imatges per capturar i processar les imatges des de les dues càmeres. Hauràs de calibrar les càmeres per assegurar-te que estiguin alineades correctament i que la distància entre elles sigui precisa. Després, hauràs de utilitzar tècniques de visió per computador per analitzar les imatges i calcular les dimensions dels objectes en l’escena.
Aquest procés pot ser una mica complex i requerirà cert nivell de programació i coneixements en visió per computador. Però si estàs interessat en explorar aquesta opció, hi ha una gran quantitat de recursos en línia que poden ajudar-te a aprendre més sobre l’estereovisió i la visió per computador.
Exemple de codi de prova en Python utilitzant la biblioteca OpenCV per processament d’imatges i estereovisió:
import cv2
# Configuració de les càmeres
left_camera = cv2.VideoCapture(0)
right_camera = cv2.VideoCapture(1)
# Configuració de les resolucions de les càmeres
left_camera.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
left_camera.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)
right_camera.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
right_camera.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)
# Configuració de la distància entre les càmeres (baseline)
baseline = 100
# Configuració de la matriu de calibració de les càmeres
camera_matrix = [[800, 0, 320], [0, 800, 240], [0, 0, 1]]
# Cicle de captura d'imatges
while True:
# Captura d'imatges de les càmeres
_, left_image = left_camera.read()
_, right_image = right_camera.read()
# Conversió de les imatges a escala de grisos
left_gray = cv2.cvtColor(left_image, cv2.COLOR_BGR2GRAY)
right_gray = cv2.cvtColor(right_image, cv2.COLOR_BGR2GRAY)
# Càlcul de la disparitat de les imatges
stereo = cv2.StereoBM_create(numDisparities=16, blockSize=15)
disparity = stereo.compute(left_gray, right_gray)
# Càlcul de la profunditat dels objectes
depth = baseline * camera_matrix[0][0] / disparity
# Visualització de les imatges i la profunditat
cv2.imshow('Left Camera', left_image)
cv2.imshow('Right Camera', right_image)
cv2.imshow('Disparity', disparity)
cv2.imshow('Depth', depth)
# Espera per una tecla per sortir del cicle
if cv2.waitKey(1) == 27:
break
# Alliberament de les càmeres i tancament de les finestres
left_camera.release()
right_camera.release()
cv2.destroyAllWindows()
Aquest codi configura dues càmeres, una a l’esquerra i una a la dreta, i utilitza la biblioteca OpenCV per processar les imatges i calcular la disparitat i la profunditat dels objectes en la escena. La profunditat es calcula utilitzant la distància entre les càmeres (baseline) i la matriu de calibració de les càmeres.
És important tenir en compte que aquest codi és només un exemple de prova i no està calibrat específicament per a les càmeres que estiguis utilitzant. A més, és possible que necessitis ajustar els paràmetres de la funció StereoBM_create per obtenir millors resultats de disparitat i profunditat.