... ok, hier noch Foto und erster Programmcode;
Bild:
Bild hier
Wie man sieht, die Bastelei geht jetzt erst los:
- Raspberry und Relay-Karte mit Kabel bestücken (Stecker und Jumper aus alten PCs)
- Elektromotoren (mit Getriebeaufsatz) mit Mikroschalter bestücken (um einen Referenzpunkt zu haben)
- das Ganze sexy zusammenfügen (wg. dreamshader und auch wg. mir)
- usw.
Und hier der Programmcode zur Bewegungswahrnehmung:
Code:
#include<stdio.h>
FILE *p_e, *p_n;
int p=0, d=0, s=0;
main()
{
//Variabeln: c=counter p_e=picture_empty p_n=picture_now p=position d=difference s=switch//
int c=0;
printf("leave the picture-area and then press -Enter-\n");
getchar();
system("ffmpeg -f video4linux2 -i /dev/video0 -s 80*60 p1.pgm 2>/dev/null");
printf("OK, start the Webcam-Watching, press -Enter- again\n");
getchar();
p_e=fopen("p1.pgm", "r");
do
{
changing_position();
if(s==1)
printf("c: %d Position: %d\n", c, p);
s=0;
d=0;
c++;
}
while(c<100);
fclose(p_e);
return(0);
}
changing_position()
{
//Names: bn=bytenumber bv1=bytevalue1 bv2=bytevalue2 d=difference p=position s=switch//
int bn=80*30+15, bv1=0, bv2=0;
system("ffmpeg -f video4linux2 -i /dev/video0 -s 80*60 p2.pgm 2>/dev/null");
p_n=fopen("p2.pgm", "r");
do
{
fseek(p_e, bn, SEEK_SET);
fread(&bv1, 1, 1, p_e);
fseek(p_n, bn, SEEK_SET);
fread(&bv2, 1, 1, p_n);
d=bv1-bv2;
if(d>20)
{
s=1;
p=2495-bn;
return(0);
}
bn++;
}
while(bn<80*31+15);
fclose(p_n);
return(0);
}
Wie Anfangs erwähnt: Ich bin kein C-Könner, mich treibt mehr die Frankenstein'sche Leidenschaft.
Dieses Programm macht ein Anfangsfoto vom möglichst leeren Raum,
und schießt dann so schnell der PC kann regelmäßig weitere Fotos um diese in der mittleren Bildzeile
mit dem Anfangsfoto zu vergleichen. (Auflösung 80*60, wg. bloß 700MHz)
Wenn ein Pixel um den Wert 25 dunkler ist als das Pixel im Anfangsfoto, dann wird dessen horizontale Position
ausgegeben (ca. zw. 0 und 80).
Wie ich anfangs erwähnte ginge diese Form der Personenortung viel schneller, wenn ich die Bilder
ohne Zwischenspeicherung auf d. Festplatte vergleichen könnte.
Das gelang mir früher unter v4l, jetzt unter v4l2 krieg ich's nicht hin.
Noch ein Tipp, dieses "Sehen" gelingt gut bei indirekter Beleuchtung von "hinten",
das heißt hinter der sich bewegenden Person.
sofar4first,
... ich bleibe dran
Gruß mbot
Lesezeichen