How Can We Help?

Andlitsgreining í Home Assistant

Þú ert hér:
< Allt efni

Inngangur

Að finna og greina andlit er orðið mjög algengt hjá fyrirtækjum eins og Facebook, Google eða Apple. Tæknin bak við þetta er flókin en til er fullt af verkfærum sem við getum notfært okkur í Home Assistant. Þannig getum við gert allskonar sjálfvirkni eftir því hvort einhver andlit finnast í myndinni eða hvort einhver þekkt andlit eru á myndinni þar sem andlitið fannst.

Það eru vissulega margar aðferðir til og margar viðbætur sem keyra með Home Assistant til að notfæra sér þennan möguleika að greina og þekkja andlit í ljósmynd. Í þessari grein notum við tól sem kallast Deepstack. Við höfum prófað ýmislegt í gegnum tíðina en Deepstack er að okkar mati áreiðanlegasta tólið sem er einfalt í uppsetningu, tekur hæfilega mikið að resourcum og er frábær skjölun. En ef við segjum einfalt þá er vissulega átt við einfaldara þar sem allt ferlið getur verið flókið og valmöguleikarnir miklir reynum við að brjóta það niður í smáa bita og einbeitum okkar að grófu myndinni til þess að fá þetta að virka til að byrja með.

Ávinningur

Andlitsgreiningin nýtist einstaklega vel í aðgangsstýringum t.d. til að opna útidyrahurðina eða bílskúrshurðina. Allar aðgerðir í Home Assistant eru vistaðar með tímastimpli og er því auðvelt að rekja þær.

Hafa skala í huga að það er ekki mjög erfitt að plata andlitsgreininguna með andlitsmynd sem haldið er fyrir framan myndavélina og því skal ávallt setja upp annað þrep í auðkenningu. Það væri t.d. hægt með því að fá staðsetninguna í gegnum síma, láta senda skilaboð á annan aðila eða láta ekki afvirkja öryggiskerfið.

Íhlutir

Til þess að láta þetta allt saman virka þurfum við nokkra hluti

  1. Vélbúnað sem hægt er að keyra Deepstack á. Lágmarkskröfurnar eru: vélbúnaður með 64 bita stýrikerfi. Raspberry Pi 4 eða Odroid N2+ með amk 4GB vinnsluminni sem eru hæfileg í þetta verkefni en auðvitað er allur vélbúnaður „fyrir ofan“ þetta (t.d. Intel NUC, Mac Mini).
  2. Vélbúnaðurinn þarf að keyra Docker. Við förum ekki yfir uppsetningu á Docker hér en er í raun mjög einfalt (sudo apt-get install docker.io)
  3. Vefmyndavél/dyrabjalla sem er stutt af Home Assistant til þess að taka stöðumyndir (snapshot). Allar myndavélar með RTSP streymi eða ONVIF stuðning eru góð í þetta verkefni. Dyrabjallan frá Dahua er tilvalin í þetta verkefni þar sem hún er með virkan stuðning við Home Assistant í gegnum samþættingu frá RonnieRoller eða MyHomeIOT.
  4. Deepstack virkar alveg sjálfsstætt. Þannig að í raun gætum við notað Deepstack til að finna og greina andlit af myndunum okkar. En auðvitað viljum við fá virknina inn í Home Assistant. Besta leiðin til að setja upp Deepstack fyrir Home Assistant er í gegnum HACS. Við gerum ráð fyrir að þú ert með HACS viðbótinn en auðvitað er líka hægt að niðurhala kóðann beint og setja inn í „custom_component“ möppuna í Home Assistant.

Uppsetning á Deepstack

Þar sem Deepstack er augljóslega miðpúnkturinn í þessu þurfum við að setja hann upp. Þar sem það virkar vel með einni skipun!

docker run -d --name deepstack --restart unless-stopped -v /home/homeassistant/.homeassistant/deepstack:/datastore -e VISION-FACE=True -p 8088:5000 deepquestai/deepstack:arm64-2022.01.1

Það er ágætt að skoða mismunandi útgáfur á vefsíðu docker þar sem valda útgáfan gæti verið öðruvísi miðað við hvaða vélbúnað gámurinn er keyrður á.

Við þurfum að passa portnúmerið (ég valdi 8088 því að ég nota port 5000 í öðrum tilgangi) og hvar deepstack geymir gögnin sín. Það er gert með „-v“ skipun. Ef við gerum það ekki þá eru öll gögnin geymt inni í gámnum sem gerir það að verkum að þjálfun á andlitum tapast ef gámurinn er eyddur út. Ef allt hefur gengið vel þá ættum við sjá inn á vefvafra:

Við þurfum ekki að hafa áhyggjur af því að samskiptin fara ekki í gegnum dulkoðað ssl þar sem við notum Deepstack þjónustuna bara innanhús.

Uppsetning á Deepstack samþættingu

Að tengja Home Assistant og Deepstack saman er jafn auðvelt.

Það eru til tvær viðbætur fyrir Deepstack. Ein fyrir andlitin og önnur fyrir hluti eins og bíla, persónur, hjól, eða ketti. Bæði virkar í raun svipað en við einbeitum okkur hér að andlitum (Hass Deepstack Face). Fyrir greiningu á hlutum eins og bílum, persónum osf. er Frigate betra verkfærið.
Þá þarf að endurræsa Home Assistant.

Gerfimyndavél

Deepstack getur einungis tekið við stökum myndum en ekki myndavélastraumum. Þess vegna þurfum við fyrst að búa til „gerfimyndavél“ sem tekur myndaskot af vefmyndavélinni okkar og vistar hana á tölvunni okkar. Til þess að gera það þurfum við að keyra sjálfvirknisreglu sem keyrir á x tíma fresti, tekur myndaskot og vistar það á tölvunni. T.d. svona:

alias: Doorbell snapshot
description: ''
trigger:
  - platform: time_pattern
    minutes: '1'
condition: []
action:
  - service: camera.snapshot
    target:
      entity_id: camera.mycamera
    data:
      filename: /home/homeassistant/xxxx/Doorbell/snapshot/latest.jpg
mode: single

Auðvitað getum við gert þetta allt saman í Home Assistant án þess að „forrita“ eitthvað en þetta er bara svona vegna þess að skjáskotið kemst ekki hér fyrir. Í dæminu hér fyrir ofan tökum við skjámynd einu sinni á mínutu en auðvitað má gera þetta örara. Þetta aukir auðvitað bara álagið á tölvuna. Við mælum með því að myndavélastrauminn sem notast er við þetta sé í lágmarki. Gæðin á myndagreiningu (confidence) aukist ekki með að senda inn stærri mynd.

Núna búum við til gerfimyndavélina sem tekur alltaf síðast myndskot af myndavélinni okkar. Í Home Assistant stillingarskránni (configuration.yaml)bætum við því við:

camera:
  - platform: local_file
    file_path: /home/homeassistant/xxxx/Doorbell/snapshot/latest.jpg
    name: doorbell_latest

Stilling á Deepstack samþættingu

Núna þurfum við að bæta öðrum hlut við í stillingaskránni (configuration.yaml) til að segja Deepstack hvaða mynd á að nota til að senda í greiningu og hvert á að vista myndirnar af andlitinum þegar hann finnur einhver andlit.

image_processing:
  - platform: deepstack_face
    ip_address: localhost
    port: 8088
    detect_only: False
    save_file_folder: /home/homeassistant/xxxxx/FaceDetection
    save_timestamped_file: True
    save_faces: True
    save_faces_folder: /home/homeassistant/xxxxxx/FaceDetection/Faces
    show_boxes: True
    source:
      - entity_id: camera.doorbell_latest
        name: doorbell_face_counter

Þá er kominn tími til að athuga hvort allt hefur verið skráð rétt og endurræsa.

Breytingar í Home Assistant

Þegar við höfum farið í gegnum öll skref hér fyrir ofan þá ættum við sjá nokkrar breytingar í Home Assistant. Til þess förum við í Þróunarverkfæri.

Undir Stöður sjáum við sensorinn sem hefur stofnast. Hann geymir upplýsingar um hversu mörg andlit hafa greinst, hver og með hvaða sjálfsöryggi (confidence). Til að byrja með sjáum við ekkert hér.

Undir þjónustur sjáum við tvær aðgerðir sem við gætum keyrt. Sú fyrsta er til að greina andlitin í mynd (service: image_processing.scan). Þegar við veljum þessa aðgerð fáum við valmöguleikann um að velja myndina sem við vorum að skilgreina.

Svo er önnur þjónusta sem heitir „Deepstack teach face“ (deepstack_face.teach_face). Með þessari aðgerð getur þú þjálfað Deepstack til að greina andlitin.

Deepstack vistar öll andlit sem hann greinir og getum við notað þessar myndir til þess að þjálfa andlitin okkar. Öll andlit er hægt að skoða undir Media browsernum.

Notkun á andlitsgreiningu

Ef við erum búin að þjálfa andlitin okkar þá getum við keyrt andlitsgreiningu í ákveðnum tilvikum. Til þess notum við aðgerðina „image_scan“ og notum myndina á gervimyndavélina sem við erum búin að skilgreina. Þá ætti sensorinn okkar að gefa okkur einhverjar níðurstöður.

Í þessu tilfelli fáum við til baka nafn á andlitinu sem hefur greinst og líkurnar á því að þetta er virkilega andlitið miðast við andlitin sem við höfum þjálfað Deepstack með. Til að fá áreiðanlegar niðurstöður ættu líkurnar að vera að lámarki í kringum 80-85%. En hvernig nýtum við okkur þessar upplýsingar?

Til þess búum við t.d. til sjálfvirknisreglu sem keyrir í hvert sinn sem dyrabjallan hefur verið ýtt á. Í þeim tilfellum búum við til stöðumynd (snapshot) af persónunini sem ýtir á bjölluna og sendum við þessa mynd í andlitsgreiningu.

alias: Doorbell ringing
description: ''
trigger:
  - platform: state
    entity_id: binary_sensor.doorbell_dahua_button_pressed
    from: 'off'
    to: 'on'
condition: []
action:
  - service: camera.snapshot
    target:
      entity_id: camera.doorbell_dahua
    data:
      filename:>-
        /home/homeassistant/Videos/Doorbell/latest/doorbell_latest.jpg
  - service: camera.snapshot
    target:
      entity_id: camera.doorbell_dahua
    data:
      filename: >-
        /home/homeassistant/Videos/Doorbell/{{ now().year }}/{{ now().month    
        }}/{{now().day}}/{{ as_timestamp(strptime(now(),'%dd %Hh
        %Mm'))|timestamp_custom('%H:%M')}}.jpg
  - service: image_processing.scan
    target:
      entity_id: image_processing.doorbell_ringing_face_counter
    data: {}

Eins og þú hefur kannski tekið eftir þá tökum við alltaf tvær stöðumyndir. Ein með tímastimpli og ein sem er alltaf yfirskrifuð og er því með fasta „slóð“. Þessa mynd notum við alltaf til að greina möguleg andlit í myndinni.

Nú þurfum við að vinna úr gögnum sem við fáum til baka. Til að byrja með þá ætlum við að senda mismundandi texta í símann þegar andlitsgreiningunni er lokið og sendum mynd með tilkynninguna:

service: notify.mobile_b31
data:
  message: >
    {% set  personatdoor= state_attr("image_processing.doorbell_ringing_face_counter","faces").0.name
    %} 
    {% set personatdoorconfidence =    state_attr("image_processing.doorbell_ringing_face_counter","faces").0.confidence|int
    %} 
    {% if  personatdoor=='xxxx' %} Snjallingur ehf is at the door with a confidence of
    {{personatdoorconfidence}} 
    {% elif  personatdoor=='xxxx' %} Snjallingur ehf 2 is at the
    door with a confidence of {{personatdoorconfidence}} 
    {% elif 
    personatdoor=='snjallingur' %} Snjallingur ehf 3 is at the door with a confidence
    of {{personatdoorconfidence}} 
    {% else %} A unknown person is in front of the
    door 
    {% endif%}
  title: Dyrabjallan var að hringja
  data:
    image: /media/homeassistant_videos/Doorbell/latest/doorbell_latest.jpg

Sama aðferðafræðina gætum við síðan notað til að opna útidyrahurðina eða bílsskúrshurðina ef líkurnar eru stærri en t.d. 85%.

Viltu vita meira um hvað hægt er að gera og nýta þér andlitsauðkenningu í öðrum tilgangi eða vantar þig einfaldlega aðstoð að setja þetta allt saman upp hjá þér? Hafðu þá samband við okkur í gegnum tölvupóst: [email protected].

Innihald