Reconnaissance de codes
Tutoriel vidéo 15 - Reconnaissance de codes : https://singtown.com/learn/50017/
Code QR
http://cli.im/\ Vous pouvez utiliser le générateur de QR code « forage » pour générer le contenu de votre choix.

import csi, image
csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize(csi.QQVGA) # peut être QVGA sur M7...
csi0.snapshot(frames=30)
csi0.auto_gain(False) # doit être désactivé pour éviter la saturation de l'image...
while(True):
img = csi0.snapshot()
img.lens_corr(1.8) # une intensité de 1.8 convient bien à l'objectif de 2.8 mm.
for code in img.find_qrcodes():
print(code)

{x:46, y:38, w:78, h:81, payload:"openmv", version:1, ecc_level:2, mask:6, data_type:4, eci:0}
Code-barres
http://barcode.tec-it.com/zh/Code128?data=OpenMV\ Vous pouvez utiliser ce site web pour générer des codes-barres.
import csi, image, time, math
csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.GRAYSCALE)
csi0.framesize(csi.VGA) # Haute résolution !
csi0.window((640, 80)) # Résolution verticale de 80 == moins de travail (40 pour 2x la vitesse).
csi0.snapshot(frames=30)
csi0.auto_gain(False) # doit être désactivé pour éviter la saturation de l'image...
csi0.auto_whitebal(False) # doit être désactivé pour éviter la saturation de l'image...
clock = time.clock()
# La détection de codes-barres peut fonctionner à la pleine résolution 640x480 du
# module caméra OV7725 de votre OpenMV Cam. La détection de codes-barres fonctionne
# également en mode RGB565 mais avec une résolution plus faible. Cela dit, la
# détection de codes-barres nécessite une résolution plus élevée pour bien
# fonctionner, elle doit donc toujours être exécutée en 640x480 en niveaux de
# gris...
def barcode_name(code):
if(code.type == image.EAN2):
return "EAN2"
if(code.type == image.EAN5):
return "EAN5"
if(code.type == image.EAN8):
return "EAN8"
if(code.type == image.UPCE):
return "UPCE"
if(code.type == image.ISBN10):
return "ISBN10"
if(code.type == image.UPCA):
return "UPCA"
if(code.type == image.EAN13):
return "EAN13"
if(code.type == image.ISBN13):
return "ISBN13"
if(code.type == image.I25):
return "I25"
if(code.type == image.DATABAR):
return "DATABAR"
if(code.type == image.DATABAR_EXP):
return "DATABAR_EXP"
if(code.type == image.CODABAR):
return "CODABAR"
if(code.type == image.CODE39):
return "CODE39"
if(code.type == image.PDF417):
return "PDF417"
if(code.type == image.CODE93):
return "CODE93"
if(code.type == image.CODE128):
return "CODE128"
while(True):
clock.tick()
img = csi0.snapshot()
codes = img.find_barcodes()
for code in codes:
img.draw_rectangle(code.rect)
print_args = (barcode_name(code), code.payload, (180 * code.rotation) / math.pi, code.quality, clock.fps())
print("Barcode %s, Payload \"%s\", rotation %f (degrees), quality %d, FPS %f" % print_args)
if not codes:
print("FPS %f" % clock.fps())

Matrice de données

import csi, image
csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize(csi.QQVGA) # peut être QVGA sur M7...
csi0.snapshot(frames=30)
csi0.auto_gain(False) # doit être désactivé pour éviter la saturation de l'image...
while(True):
img = csi0.snapshot()
img.lens_corr(1.8) # une intensité de 1.8 convient bien à l'objectif de 2.8 mm.
for code in img.find_datamatrices():
print(code)

{x:48, y:27, w:58, h:56, payload:"OpenMV", rotation:0.052360, rows:14, columns:14, capacity:8, padding:1}