In this tutorial we will build a simple sitting posture alarm.
Hardware list:
- HS device
- Raspberry Pi 3b
- Buzzer
Since currently the HS model zoo does not include pose estimation model, we simplify the problem and use our Scene Recorder
to achieve the goal.
Here we consider two senarios that need to be distinguished:
as shown below:
Firstly, for convenience we record the senarios by running the Scene recorder
Python script on a PC host and save the result to a local file.
Then we copy the save file to a Raspberry Pi.
On PC host:
import sys
sys.path.append("../../SungemSDK-Python")
import hsapi as hs
import cv2
if __name__ == '__main__':
cv2.namedWindow("Scene Recorder", cv2.WINDOW_NORMAL)
try:
net = hs.SceneRecorder(zoom=True, verbose=2)
while True:
result = net.run()
key = cv2.waitKey(5)
prob = net.record(result, key, saveFilename="./record.dat")
cv2.imshow("Scene Recorder", result[0])
cv2.waitKey(1)
finally:
cv2.destroyAllWindows()
We have to repeatly train and test the recorder (by press 1
for recording correct sitting posture and 2
for incorrect posture, then r
to refresh the classifier).
Controlling script for buzzer:
#!/usr/bin/env python3
# coding=utf-8
import RPi.GPIO as GPIO
PIN = 7
def setup():
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
GPIO.setup(PIN, GPIO.OUT, initial=GPIO.HIGH)
def warning(on=True):
GPIO.output(PIN, not on)
def clean():
GPIO.cleanup()
Processing script:
#!/usr/bin/env python3
# coding=utf-8
from SungemSDK.api import hsapi as hs
import buzzer
if __name__ == '__main__':
buzzer.setup()
counter = 0
try:
net = hs.SceneRecorder(zoom=True, verbose=2)
# Auto load recorded senarios
result = net.run()
net.record(result, ord("l"), saveFilename="./record.dat")
while True:
result = net.run()
prob = net.record(result, -1, saveFilename="./record.dat")
counter = (counter + 1) if prob[1] > 0.5 else 0
buzzer.warning(counter > 10) # Trigger alarm when `bad posture` appears for 10 frames
finally:
buzzer.clean()