visitorcount
Visitor Count on kevyt kamerakuvan tunnistukseen perustuva kävijälaskuri esimerkiksi turistikohteille
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
Repository
Visitor Count on kevyt kamerakuvan tunnistukseen perustuva kävijälaskuri esimerkiksi turistikohteille
Basic Info
Statistics
- Stars: 1
- Watchers: 3
- Forks: 1
- Open Issues: 0
- Releases: 1
Topics
Metadata Files
README.md

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
- Julkaisun nimi
- Julkaisun historiatiedot
- Sisällysluettelo
- Teknologiapilotti
- Hanketiedot
- Kuvaus
- Tavoitteet
- Toimenpiteet
- Asennus
- Vaatimukset
- Käyttö/käynnistys
- Tulokset
- Lisenssi
- 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 |
| ||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| yhteensä |
| ||||||||||||||||||||
| henkilö |
|
Asennus ja käyttö
repositorion kloonaus
Kloonaa repositorio esimerkiksi korttikoneelle
git clonekomennolla. 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.txtHuomaa 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.Kopioi asetustiedostopohja varsinaiseksi asetustiedostoksi:
cp configuration.ini_model configuration.iniMQTT brokerin asennus ja asetukset
Mikäli sinulla ei ole käytössä pilvipohjaista MQTT brokeria (esimerkiksi Flespi), asenna paikallinen broker, esimerkiksi Mosquitto:
sudo apt install mosquittoTä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.confpid_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 stdoutMuuta 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 = FalseMuuta 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 587Valitse 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.0Systemctl palvelun luonti ja käynnistys
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ä
- avaa web-käyttöliittymä osoitteessa palvelin:portti, esimerkiksi paikallisella koneella localhost:5000

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:
-
- 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
- Website: https://www.seamk.fi/en/
- Twitter: SeAMK
- Repositories: 1
- Profile: https://github.com/SeAMKedu
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"