visitorcount

Visitor Count on kevyt kamerakuvan tunnistukseen perustuva kävijälaskuri esimerkiksi turistikohteille

https://github.com/seamkedu/visitorcount

Science Score: 54.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
    Found CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
  • Academic publication links
    Links to: zenodo.org
  • Academic email domains
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (1.1%) to scientific vocabulary

Keywords

mqtt object-detection opencv-python yolov4
Last synced: 4 months ago · JSON representation ·

Repository

Visitor Count on kevyt kamerakuvan tunnistukseen perustuva kävijälaskuri esimerkiksi turistikohteille

Basic Info
  • Host: GitHub
  • Owner: SeAMKedu
  • License: cc-by-4.0
  • Language: Python
  • Default Branch: main
  • Homepage:
  • Size: 344 KB
Statistics
  • Stars: 1
  • Watchers: 3
  • Forks: 1
  • Open Issues: 0
  • Releases: 1
Topics
mqtt object-detection opencv-python yolov4
Created almost 3 years ago · Last pushed about 2 years ago
Metadata Files
Readme Citation

README.md

DOI

Älykkäät teknologiat ESR Vipuvoimaa ELY-keskus SeAMK

Kävijäseuranta ja raportointi

Tämä sovellus laskee kamerakuvan perusteella kävijöiden määrät ja koostaa näistä raportit sähköpostiin päivittäin, viikottain ja kuukausittain.

Julkaisun historiatiedot

Merkittävät muutokset julkaisuun

|pvm|Muutokset|Tekijä| |---|---|---| |15.2.2023|1. julkaisu|Tommi Ylimäki| |13.3.2023|Mosquitto ja systemctl|Tommi Ylimäki| |28.3.2023|julkaisu SeAMKedussa|Tommi Ylimäki|

Sisällysluettelo

- Tekijät

Teknologiapilotti

TehoData-hankkeen pilotissa 10 pyrittiin luomaan edullinen kävijälaskuri pienille matkailualan yrityksille Etelä-Pohjanmaalla. Julkaisu löytyy osoitteesta https://lehti.seamk.fi/alykkaat-ja-energiatehokkaat-jarjestelmat/tekoaly-tuo-tarkkuutta-matkailuyrityksen-kavijadataan/.

Hanketiedot

  • Hankkeen nimi: Datasta ketteryyttä ja uutta liiketoimintaa Etelä-Pohjanmaan pk-yrityksiin (TehoData)
  • Rahoittaja: Keski-Suomen ELY/ Euroopan sosiaalirahasto ESR
  • Aikataulu: 1.9.2021–31.08.2023 Hanke rahoitetaan REACT-EU-välineen määrärahoista osana unionin covid-19-pandemian johdosta toteuttamia toimia. TehoDatan hankesivut löytyvät osoitteesta https://projektit.seamk.fi/alykkaat-teknologiat/tehodata/

Tavoitteet

Pilotissa kehitettiin edullista, avoimen lähdekoodin kuvantunnistusalgoritmien toimintaan perustuvaa kävijälaskuria.

Toimenpiteet

Sovelluskokonaisuuden toimintaa on testattu pilottiyrityksessä loppukesästä 2022, minkä pohjalta määriteltiin jatkokehitystarpeet: -sovellus on saatava toimimaan nopeammin (tavoitteena sujuvuus Raspberry Pi 4:llä tai ainakin Jetson Nanolla) -sovellukseen vaihdettiin paremmin toimiva kohteenseuranta-algoritmi -sovellus on pilkottiin modulaarisiin osiin, jotta esimerkiksi tulo- ja lähtötapahtumien tunnistamiseen käytetty teknologia voidaan haluttaessa vaihtaa

Kuvaus

Sovellus toteaa kamerakuvasta rajaviivat ylittäneet seurattavat kohteet ja koostaa näistä tiedoista raportit sähköpostiin päivittäin, viikottain ja kuukausittain.

TIETOSUOJA JA TIETOTURVA

Sovellus käyttää suojaamatonta yhteyttä MQTT brokerin ja skriptien ja toisaalta http-palvelimen kanssa. Ethän käytä sovellusta kuin suljetussa lähiverkossa.

Sovellus ei talleta kuvia tai videota, mutta se mahdollistaa kerran sekunnissa päivittyvän live-kuvan seuraamisen web-käyttöliittymän kautta. Tätä käyttöliittymää ei ole tarkoitus käyttää kuin asennusvaiheessa kameran oikean suuntaamisen varmistamiseksi.

Kävijälaskurin toiminta

Kävijälaskurin toiminta perustuu modulaariseen sovellusrakenteeseen, joka koostuu viidestä päämoduulista: - Tunnistusmoduuli yoloCount.py - edelliselle vaihtoehtoinen kasvojen tunnistamiseen pohjautuva faceCount.py - Dataa levylle tallettava listener.py - Tilastot muotoileva parse_stats.py - Raportit sähköpostiin lähettävä emailing.py - web-serverin käynnistävä routes.py - kaikkien Python-skriptien yhteinen konfiguraatiotiedosto configuration.ini - edellisen mallipohjatiedosto configuration.ini_model

Näiden lisäksi on apumoduuleja, joihin on pakattu tarvittavia funktioita ja luokkia: - MQTT-moduulin käärivä mqtt_class.py - Levyoperaatiot suorittava disk_functions.py - OpenCV piirtofunktiot kameran ottamille kuville suorittava drawing_functions.py

Tunnistusmoduuli vehicle_count.py

yoloCount.py nojaa OpenCV-kirjaston Darknet-neuroverkkoalustalle rakennettuun, valmiiksi koulutettuun YoloV4-verkkoon, GitHubissa https://github.com/pjreddie/darknet. Kehittelyn pohjaksi otettiin TechVidvanin mallikoodi. Skripti alustaa neuroverkon valmiilla YOLOv4-lite (tai raskaammalla YOLOv4) koulutustiedostolla https://github.com/AlexeyAB/darknet/tree/master/cfg, joka tunnistaa COCO-aineiston 80 erilaista objektia. Tämän pilotin kannalta oleellisia ovat ihmiset, mutta skriptiin on helppo valita haluamansa seurattavat objektit mukauttamalla asetustiedoston required_classes-listaa.

Skriptissä on kirjoitushetkellä sisäänrakennettuna mahdollisuus sekä paikallisen käyttöjärjestelmän ikkunaan että web-palvelimelle käyttöliittymän tuottavaan ajoon (boolean-muuttujat setup_local_screen ja web_screen). Nämä eivät kuitenkaan ole pakollisia itse toiminnan kannalta. Video-kuvaa voi välittää myös MQTT-brokerille /pic aihekanavalle asetustiedoston setupMqttVideo boolean-muuttujan avulla, joskin etenkin pilvessä toimivat maksuttomat MQTT-brokerit eivät yleensä salli merkittävien data-määrien siirtämistä pitkää aikaa. Paikallisella MQTT-brokerilla kuten Mosquitto ongelma on pienempi.

Skripti etenee käynnistyttyään ikuiseen while True-silmukkaan, jossa se - kaappaa kuvan kameralta - tunnistaa kuvasta annettujen raja-arvojen puitteissa eri objektit - kutsuu kohteenseurannan palvelut tarjoavan motpy-luokan oliota tracker2 - piirtää tarvittavat bounding boxit tunnistettujen objektien ympärille - piirtää muut kuvaan tarvittavat viivat - seuraa objektien liikettä: mikäli jokin seurattu objekti siirtyy alueelta toiselle, julkaisee vastaavan MQTT-viestin

MQTT-viestit ovat rakenteeltaan topic: mqqtClient/from/to/type, message: timestamp, missä mqqtClient on asiakkaalle annettu nimi (asetustiedoston detectionPublishers, esimerkiksi "VehicleCount_Publisher"), from on lähtöalueen nimi ja to tuloalueen nimi (asetustiedoston directions-lista, esimerkiksi ["Sisaan", "Ulos"]). Type on objektin tyyppi, esimerkiksi person. Viestin sisältö on tapahtumahetken datetime-aikaleima.

Arkkitehtuuri

Sovelluksen kokonaistoiminta perustuu MQTT-brokerin vastaanottamien ja välittämien viestien avulla tapahtuvaan erillisten moduulien keskusteluun. Sovelluksen pääasiallinen viestien arkkitehtuuri kuvastuu alla

mermaid classDiagram vehicle_count --> MQTTbroker : julkaisee havaitut tapahtumat parse_stats --> MQTTbroker : julkaisee JSON raportit listener --> raw_log : kirjoittaa raakadatan raw_log --> parse_stats : raakadata luetaan MQTTbroker --> listener : tilaa tapahtumaviestit MQTTbroker --> emailing : tilaa JSON raportit emailing --> email_recipient : lähettää sähköpostit MQTTbroker : paikallinen tai pilvipalvelu vehicle_count : tunnistaa liikkeen vehicle_count : julkaisee tapahtumat emailing : lähettää raportit sähköpostilla emailing : daily, weekly, monthly instanssit listener : tallettaa raakadatan levylle parse_stats: koostaa tilastot parse_stats: daily, weekly, monthly instanssit raw_log : raakadata CSV-tiedosto email_recipient : sähköpostin vastaanottaja

Raportti

Sovellus toimittaa annettuun sähköpostiosoitteeseen yksinkertaisen HTML-muotoisen (ja pelkistetyn tekstimuotoisen) raportin päivä-, viikko- ja kuukausitasolla. Alla esimerkki viikkotilasosta, joka kokoaa tiedot edelliseltä kokonaiselta viikolta.

Raport

tietoa raportista
tilastoinnin käynnistysaika2023-02-15 16:47:32.729005
tämän tilaston luontiaika2023-02-15 16:47:37.753461
tilaston järjestysnumero1
tilaston tyyppi
  • viikkotilasto
  • 2023/02/06 - 2023/02/13
seuratut
  • henkilö
yhteensä
henkilö
Sisaan->Ulos7
Ulos->Sisaan5
henkilö
viikon päivä
suuntalukumäärä
3
Ulos->Sisaan2
4
Sisaan->Ulos4
Ulos->Sisaan2
7
Sisaan->Ulos3
Ulos->Sisaan1

Asennus ja käyttö

repositorion kloonaus

  1. Kloonaa repositorio esimerkiksi korttikoneelle git clone komennolla. Tarvittaessa klikkaa GitHubin vihreää Code-painiketta. On suositeltavaa luoda palvelua varten oma Python virtuaaliympäristö: python3 -m venv venv source venv/bin/activate pip install -r requirements.txt Huomaa että Jetson-korttikoneen CUDA-backendin toimimiseksi joudut kääntämään openCV-kirjaston itse, sillä jakelussa oleva paketti ei tukea sisällä. Tähän löytyy erinomainen ohje https://qengineering.eu/install-opencv-4.5-on-jetson-nano.html. Jos käytät ohjelmaa esimerkiksi kohtuullisen tehokkaalla kannettavalla tietokoneella, kuvantunnistuksen päivitystaajuus voi riittää luotettavaan toimintaan mutta Jetson Nano -korttikoneella CUDA-tuki on välttämätön.

  2. Kopioi asetustiedostopohja varsinaiseksi asetustiedostoksi: cp configuration.ini_model configuration.ini

    MQTT brokerin asennus ja asetukset

  3. Mikäli sinulla ei ole käytössä pilvipohjaista MQTT brokeria (esimerkiksi Flespi), asenna paikallinen broker, esimerkiksi Mosquitto: sudo apt install mosquitto Tässä tapauksessa varmista että Mosquitto kuuntelee sekä websockets että MQTT-protokollaa ja että kirjautumista ei vaadita (mikäli et sitä erikseen halua käyttää): sudo nano /etc/mosquitto/mosquitto.conf pid_file /var/run/mosquitto.pid persistence_location /var/lib/mosquitto/ log_dest file /var/log/mosquitto/mosquitto.log include_dir /etc/mosquitto/conf.d listener 1883 listener 8080 protocol websockets allow_anonymous true connection_messages true log_timestamp true log_dest stdout

  4. Muuta asetukset oikeiksi asetustiedoston mqtt-osiossa: nano configuration.ini [mqtt] port = 1883 (ellet käytä salattua yhteyttä) ssl = False (ellet käytä salattua yhteyttä) token = käyttäjätunnus (paikallisella brokerilla voi olla tyhjäkin, "") brokerAddress = IP-osoite, paikallisella brokerilla 0.0.0.0 clean_session = False

  5. Muuta sähköpostiasetukset asetustiedoston email-osiossa: [email] sender_email = lähettäjän sähköpostiosoite receiver_email = raportin vastaanottajan sähköpostiosoite smtp = smtp-palvelin, esimerkiksi smtp-mail.outlook.com password = salasana, HUOM: ole varovainen salasanan tallentamisen kanssa! user = sähköpostitilin käyttäjätunnus, usein sama kuin sender_email port = sähköpostipalvelimen SMPT-portti, esimerkiksi live-palvelussa 587

  6. Valitse haluatko videokuvaa MQTT-palveluna web-käyttöliittymään (normaalisti tätä ei kannata pitää sillä se lisää liikennettä) [mqtt] setupMqttVideo = True tai False mqttVideoResolution = julkaistavan videokuvan pidemmän sivun pikselimäärä, esim 500 mqttVideointerval = kuvien julkaisuväli sekunteina, esim 1.0

    Systemctl palvelun luonti ja käynnistys

  7. luo systemctl-palvelu, jotta sovellus käynnistyy automaattisesti koneen käynnistyessä: Kirjoita uusi palvelutiedosto sudo nano /etc/systemd/system/vehicle_count.service (nano-editorissa näppäinyhdistelmä ctrl+o tallettaa ja ctrl+x poistuu editorista) ``` [Unit] Description=Vehicle count demo service After=network.target
    StartLimitIntervalSec=0

[Service]
Type=simple
Restart=always
RestartSec=1
User=LINUX KÄYTTÄJÄTUNNUS
ExecStart=/home/seamk/vehiclecount/startservice.sh
WorkingDirectory=REPOSITORION HAKEMISTO/vehicle_count

[Install] WantedBy=multi-user.target `` Aktivoi palvelusudo systemctl enable vehiclecount.service Käynnistä palvelusudo systemctl start vehiclecount.service`

web-käyttöliittymä

  1. avaa web-käyttöliittymä osoitteessa palvelin:portti, esimerkiksi paikallisella koneella localhost:5000 webUI

Kirjoita kenttään broker address MQTT brokerin osoite, esimerkiksi 127.0.0.1 ja topic-kenttään #. Klikkaa Connect painiketta.

Huomaa että sovellus lähettää käynnistymisensä jälkeen sähköpostiraportit ajallaan vaikka nettikäyttöliittymää ei avattaisikaan. Käyttöliittymää tarvitaan lähinnä palvelua käyttöön otettaessa kameran oikean suuntaamisen varmistamiseksi.

Vaatimukset

  • käytössä on oltava jokin MQTT-broker, esimerkiksi paikallinen Mosquitto-palvelin
  • kamerapohjainen kohteen tunnistus vaatii käytännössä Jetson-perheen korttikoneen tai muun Nvidia CUDAa tukevan laitteen.

Lisenssi

Dokumentit lisensoitu: - License: CC BY 4.0 - Original idea: https://techvidvan.com/tutorials/opencv-vehicle-detection-classification-counting/ - MOTPY kohteenseuranta: https://github.com/wmuron/motpy - MQTT JavaScript-esimerkki: https://highvoltages.co/iot-internet-of-things/how-to-make-mqtt-web-app-using-html-and-javascript/ ]

Tekijät

Tommi Ylimäki, Raine Kauppinen

Owner

  • Name: Seinäjoki University of Applied Sciences
  • Login: SeAMKedu
  • Kind: organization
  • Location: Finland

Citation (CITATION.cff)

cff-version: 1.2.0
message: "If you use this software, please cite it as below."
authors:
- family-names: "Ylimäki"
  given-names: "Tommi"
title: "visitorCount"
version: 1.0.0
doi: 10.5281/zenodo.7993264 
date-released: 2023-06-01
url: "https://github.com/SeAMKedu/visitorCount"

GitHub Events

Total
Last Year

Dependencies

requirements.txt pypi