Outils pour utilisateurs

Outils du site


Action disabled: diff
visionlpro

Ceci est une ancienne révision du document !


Matériel et logiciel utilisés

Nous allons utiliser une carte raspberry Pi à laquelle un module caméra et une carte d'extension SenseHat on été ajoutées.

Les logiciels utilisés sont une distribution Linux Raspbian à laquelle les paquets suivants ont été ajoutés:

sudo apt-get update && sudo apt-get upgrade
sudo apt-get install python3-opencv  libjasper-dev libqtgui4 libqt4-test libtiff5 libgstreamer1.0-0  libqtcore4  libopenexr23 libatlas3-base libsz2 build-essential cmake pkg-config libjpeg-dev libtiff5-dev libjasper-dev libpng-dev libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-dev libx264-dev libfontconfig1-dev libcairo2-dev libgdk-pixbuf2.0-dev libpango1.0-dev libgtk2.0-dev libgtk-3-dev libatlas-base-dev gfortran libhdf5-dev libhdf5-serial-dev libhdf5-103 libqtgui4 libqtwebkit4 libqt4-test python3-pyqt5 python3-dev nano python3-pyqt4 screen  imagemagick gitk iotop lsof geeqie

Les paquets python suivants on égalements été installés:

sudo python3 -m pip  install imutils
sudo python3 -m pip  install opencv-python
sudo python3 -m pip  install matplotlib
sudo python3 -m pip  install rubik_solver
sudo python3 -m pip  install picamera[array]

Manip

Nous allons commencer par prendre en main la librairie OpenCV via le langage Python: https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_tutorials.html

Nous utiliserons l'environnement idle3 pour développer et tester.

Chargement et sauvegarde d'images

test1.py
#!/usr/bin/python3
 
import numpy as np
import cv2
import math
 
def afficherCercle(cu,cv,r,nbpoints,image):
 
  for i in range(0,nbpoints):
     angle=2*3.14*i/nbpoints
     #print(angle)
     u=int(cu+r*math.cos(angle))
     v=int(cv+r*math.sin(angle))
     img[v][u]=0
 
print('salut')
a=65
b=a+9
print(b)
 
#chargement d'une image non présente sur le disque
img = cv2.imread('messi5.jpg',0)
print(str(img))
#img vaut None
img = cv2.imread('robot.jpeg',0)
print(str(img))
#img vaut None
img[60][500]=0
v=60
for u in range(10,200):
  img[v][u]=0
u=60
for v in range(10,200):
  img[v][u]=0
u=80
for v in range(10,200,2):
  img[v][u]=0
for r in range(10,100,10):
    afficherCercle(200+r,300,r,500,img)
cv2.imwrite('robot_cercle.jpeg',img)
cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

pour rendre le programme exécutable depuis le terminal

chmod a+x test.py

Image avant traitement: homepages.laas.fr_bvandepo_files_iut_tp_lpro_vision_robot.jpeg

Image après traitement: homepages.laas.fr_bvandepo_files_iut_tp_lpro_vision_robot_cercle.jpeg

Utilisation en réseau

Relever l'adresse IP de la carte raspberry pi, ouvrir un terminal et saisir:

ip addr ls |grep inet |grep eth0

Relever l'adresse IPV4 fournie:

 inet 10.6.15.115/24 brd 10.6.15.255 scope global eth0

Depuis le PC étudiant, vérifier si la raspberry pi est joignable (CTRL+C pour quitter la commande)

ping 10.6.15.115

Si la carte répond, s'y connecter en Secure SHell avec export de l'affichage:

slogin -Y meteo@10.6.15.115

Puis utiliser le terminal pour faire ce que vous voulez sur la raspberry pi.

Afin de gagner du temps, faire un programme sur le PC pour automatiser la connexion au raspberry pi:

rpi.sh
#!/bin/bash
slogin -Y meteo@10.6.15.115

Rendre le script exécutable:

chmod +x rpi.sh

Pour l'exécuter:

./rpi.sh

Même principe pour rendre exécutable un programme python3, en ajoutant au début du programme python:

#!/usr/bin/env python3

Pour éditer les programmes sur la raspberry pi:

idle3 nomduprogrammepython.py
  

Opérations de base sur les images

Tuto OpenCV:

https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_core/py_basic_ops/py_basic_ops.html#basic-ops

test2.py
#!/usr/bin/python3
import cv2
import numpy as np
img = cv2.imread('messi5.jpg')
 
px = img[100,100]
print(px)
#[157 166 200]
#organisé en B,G,R
img[100,100]=[0,255,0]
 
#conversion de BGR vers YUV
img_out = cv2.cvtColor(img, cv2.COLOR_BGR2YUV)
 
#recopie de la luminance Y sur les 3 canaux BGR pour affichage en niveau de gris
for x in range (0,img.shape[0]):
  for y in range (0,img.shape[1]):
    img_out[x,y,1]=img_out[x,y,0] 
    img_out[x,y,2]=img_out[x,y,0]
 
#génération d'une imagette de 60x60 pixels (cropping)
ball = img_out[280:340, 330:390]
#recopie de l'imagette à différentes position dans l'image
for b in range(0,4):
  img_out[50+b*50: 50+b*50 +ball.shape[0]  , 50+b*100: 50+b*100 +ball.shape[1]] = ball
#affichage 
cv2.imshow('image',img_out)
cv2.waitKey(0)
cv2.destroyAllWindows()
visionlpro.1579342385.txt.gz · Dernière modification : 2020/01/18 11:13 de bvandepo