Peoplecounter Statistik abfragen

Code-Stücke können hier veröffentlicht werden.
Benutzeravatar
bake
User
Beiträge: 29
Registriert: Dienstag 20. November 2007, 08:12
Wohnort: Hamburg

Peoplecounter Statistik abfragen

Beitragvon bake » Dienstag 17. Februar 2009, 16:15

Moin moin,

hier ein kleines, spezielles, aber simples Skript um die von einer Netzwerkkamera mit integriertem Besucherzähler bereitgestellte Statistik abzufragen oder zu reseten.

Da man den Code vermutlich noch optimieren kann, immer her mit euren Vorschlägen.

Der plain-text, der per HTTP-GET abgeholt werden kann sieht folgendermaßen aus:

[code=]in_yesterday[cams]=0; out_yesterday[cams]=0; in_today[cams]=1; out_today[cams]=1; camera_name[cams]='axis_studio1'; cams=cams+1;[/code]

Nun aber der Code:

Code: Alles auswählen

import urllib2
import base64


class PeopleCounter:

    def __init__(self):
        self.url = 'http://0.0.0.0/local/tvpcWebGui/'
        self.username = 'username'
        self.password = 'password'
       
        self.encodedlogin = base64.encodestring(self.username + ':' + self.password)[:-1]

    def openurl(self, url):
        request = urllib2.Request(url)
        request.add_header('Authorization', 'Basic ' + self.encodedlogin)
        return urllib2.urlopen(request)

    def getstatus(self, filename='sum.js'):
        data = self.openurl(self.url + filename).read().split(';')
        in_today = data[2].split('=')[-1]
        out_today = data[3].split('=')[-1]
        return (in_today, out_today)
         
    def resetstatus(self, filename='rmcnt.cgi'):
        self.openurl(self.url + filename).read()


Über Anregungen, Verbesserungsvorschläge und dergleichen freue ich mich. Vielen Dank im Vorraus! :)

Edit: Code aktualisiert
Zuletzt geändert von bake am Donnerstag 19. Februar 2009, 14:07, insgesamt 1-mal geändert.
who we are is but a stepping stone to
what we can become...
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Beitragvon Dauerbaustelle » Dienstag 17. Februar 2009, 22:30

Wie gut funktioniert denn der Besucherzähler und anhand welcher Merkmale erkennt er Besucher? Sorry, dass ich offtopic werde :)
Benutzeravatar
bake
User
Beiträge: 29
Registriert: Dienstag 20. November 2007, 08:12
Wohnort: Hamburg

Beitragvon bake » Mittwoch 18. Februar 2009, 00:03

Kein Problem :)

Soweit ich das bis jetzt testen konnte funktioniert der Zähler recht zuverlässig. Auch mehrere Personen die nebeneinander den überwachten Bereich durchschreiten werden erkannt. Bin glaube ich ca. 50 mal durch den Messbereich gelaufen und er hat ein oder zwei Durchgänge nicht erkannt. Der Zähler ist aber auch nocht nicht zu hundert Prozent eingerichtet. Ein paar Feineinstellungen müssen anscheinend noch gemacht werden.

Bei dem Zähler handelt es sich um eine modifizierte Netzwerkkamera.
Wenn jetzt jemand den überwachten Bereich durchschreitet und zwei der drei Linien durchschreitet (Anfang und Mitte zum Beispiel), dann erhöht sich die Zählung um 1.
Ich vermute, dass die aufgenommenen Bilder auf eine Veränderung analysiert werden (Farbveränderung von mehreren Pixeln). Aber wie der Prozess genau aussieht, weiß ich nicht.
Sobald ich etwas Zeit habe, werde ich mich mal genauer informieren, ist nämlich eine Interessante Frage.

Edit: Habe gerade die Produktbeschreibung auf der Herstellerhomepage angeschaut, dort geben sie eine Genaugkeit von 95-99% an.

Unter http://face.cognimatics.com/peopleCounter.avi kann man ein Demovideo ansehen, eigentlich sind es drei Messlinien, eine am oberen Bildrand und noch eine am unteren. Daran erkennt die Kamera auch die Richtung, in der sich die Personen bewegen.
Zuletzt geändert von bake am Donnerstag 19. Februar 2009, 14:05, insgesamt 1-mal geändert.
who we are is but a stepping stone to
what we can become...
Benutzeravatar
DatenMetzgerX
User
Beiträge: 398
Registriert: Freitag 28. April 2006, 06:28
Wohnort: Zürich Seebach (CH)

Beitragvon DatenMetzgerX » Mittwoch 18. Februar 2009, 13:11

Code: Alles auswählen

in_today = data[2][data[2].find('=')+1:]
out_today = data[3][data[3].find('=')+1:]


kann hier nicht die split Methode verwendet werden? z.B.

Code: Alles auswählen

in_today = data[2].split('=')[-1]


Somit würde im in_today der Wert hinter dem Gleich stehen. Wäre erheblich lesbarer.
Benutzeravatar
bake
User
Beiträge: 29
Registriert: Dienstag 20. November 2007, 08:12
Wohnort: Hamburg

Beitragvon bake » Donnerstag 19. Februar 2009, 14:04

Stimmt, funktioniert ebenso, ist leichter zu lesen und wirkt eleganter. Danke! :)
who we are is but a stepping stone to
what we can become...

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder