Bezeichnung | OpenMV Cam M7 |
Entwicklungsumgebung | OpenMV IDE |
Preis | 77,95€ |
Anwendungsbereich | Machine Vision |
Programmiersprache | MicroPython |
Prozessor | ST ARM Cortex M7 216MHZ |
Arbeitsspeicher | 512 KB |
Abmessungen | 45 x 36 x 30mm |
Gewicht | 16g |
Pins | I2C | RS232 | ADC | GPIO |
Die Cam M7 ist bereits die dritte Version der OpenMV Serie. Bereits 2015 wurden 104 000 USD für die erste Version der Cam M4 V1 bei der Kickstarter Kampagne eingesammelt. Diese Erfolgsgeschichte wird nun mit der M7 fortgesetzt. Den Namen verdankt die neue Version dem ARM Cortex M7 Prozessor, mit einer Frequenz von 216MHZ.
- Face Tracking / Recognition
- Eye Tracking
- Object und Colour Tracking
OpenMV Entwicklungsumgebung
Die OpenMV IDE ist die Entwicklungsumgebung des gleichnamigen Entwicklungsboards. Die IDE kann kostenlos HIER heruntergalden werden, und verfügt neben dem reinen Programmierinterface ebenfalls über ein Fenster, welches das Livebild der Kamera überträgt, sowie einem Tool, das die ROT / GRÜN und BLAU Sättigung Grafisch darstellt.
Anwendungen entwicklen
Mit der OpenMV Cam Anwendungen zu entwickeln, ist dank der übersichtlich aufgebauten IDE und Micro Python als Programmiersprache, äußerst einfach und komfortabel. Darüber hinaus ist sowohl die Hardware, als auch die Firmware und Code Beispiele hervorragend bei GitHub dokumentiert.
Expansion Boards
Neben der OpenMV Cam, stellt der Hersteller ebenfalls Expansion Boards her, welche diverse Zusatzmöglichkeiten bieten:
- WiFi Shield mit ATWINC1500 Modul
- LCD Shield (128 x 160 / 1,8" )
- Proto Shield mit 2,54mm Lochraster
- Servo Shield mit PCA9685 I2C PWM
Die Shields werden ganz einfach auf der Vorder bzw. Rückseite der Cam aufgesteckt, und können somit direkt verwendet werden.
Anwendungsbeispiel
Im Nachfolgend beschriebenen Beispiel verwenden wir eine OpenMV Cam M7, OpenMV Servo Shield, zwei Micro Servos und einem Pan and Tilt Kopf zur Drehung der Kamera. Da der Quellcode nachfolgend etwas verschoben dargestellt wird, kann dieser ebenfalls HIER heruntergeladen werden.
In unserem Beispiel erstellt die Kamera ein virtuelles "Rastermuster" und sucht in den entsprechenden Pixel nach Änderungen. Dadurch kann die OpenMV Cam bereits sehr kleine Änderungen wahrnehmen, und erstellt ein Screenshot. Das Servo Shield und der entsprechende Pan & Tilt Kopf wird zur Ausrichtug der Kamera verwendet.
import sensor, image, time, pyb
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.skip_frames(time = 2000)clock = time.clock()
X = 320
Y = 240
erlaubteAbweichung = 30daten = []
for i in range(6450):
daten.append(0)
check = True
ausloeser = 0#Initialisierung, Erfassung der Ausgangsdaten
pyb.LED(3).on();img = sensor.snapshot()
counter = 0
x = 0
y = 0while(y < Y):
while(x < X):
rgb = img.get_pixel(x,y)#Speicherung der Daten
daten[counter] = rgb
counter = counter + 1
x = x+4
y = y+3
pyb.LED(3).off();#Initialisierung abgeschlossen
#Start Routine
while(check):
clock.tick()
counter = 0
ausgeloest = 0#Kamera macht Foto
img = sensor.snapshot()#Analyse startet
pyb.LED(3).on();x = 0
y = 0while(y < Y):
while(x < X):
rgb = img.get_pixel(x,y)#Einzelne Werte auf veraenderung ueberpruefen
i = 0
while i < 3:if (rgb[i] - erlaubteAbweichung > daten[counter][i]) or (rgb[i] + erlaubteAbweichung < daten[counter][i]):
if(ausloeser == 1):pyb.LED(1).on();
pyb.LED(1).off();
ausgeloest = ausgeloest + 1
ausloeser = 0else:
ausloeser = ausloeser + 1
else:
ausloeser = 0
i = i + 1counter = counter + 1
x = x +4
y = y +3if(ausgeloest > 2):
check = False
print("Bewegung Registriert")#Analyse beendet
pyb.LED(3).off();#Wenn Bewegung erkannt wurde
sensor.reset()
sensor.set_contrast(1)
sensor.set_gainceiling(16)
sensor.set_framesize(sensor.HQVGA)
sensor.set_pixformat(sensor.GRAYSCALE)
face_cascade = image.HaarCascade("frontalface", stages=25)# FPS clock
clock = time.clock()while (True):
img = sensor.snapshot()# Find objects.
# Note: Lower scale factor scales-down the image more and detects smaller objects.
# Higher threshold results in a higher detection rate, with more false positives.objects = img.find_features(face_cascade, threshold=1, scale_factor=1.2)
for r in objects:
img.draw_rectangle(r)
img.save('bild.jpg')