이 저장소는 라즈베리 파이 5에서 운전자의 급발진 또는 페달 오조작을 실시간으로 감지하기 위한 데모 시스템입니다. 오디오(음성), 비디오(표정), OBD-II 데이터를 동시에 수집하고, 간단한 규칙 기반 결합 로직으로 경고를 출력합니다.
- 프로듀서(입력): 마이크, 카메라, OBD-II 센서에서 데이터를 읽어
queue.Queue에 메시지를 넣습니다. - 컨슈머(판단 루프): 큐의 데이터를 모아
FusionState에 저장하고, 최근 0.5초 창을 기준으로 이상 여부를 판정합니다. - 출력: 상태(
OK,WARNING,ALERT)와 점수를 표준 출력으로 기록하고,/dev/fb0프레임버퍼에 경고 화면을 표시합니다.
main.py: 스레드를 띄워 각 프로듀서를 실행하고decision_loop를 통해 최종 상태를 결정합니다.fusion.py: 메시지 포맷, 구성값, OBD 비정상 규칙, 최종 의사결정 로직을 담고 있습니다.- producers/
audio_rtprob_producer.py:VoiceRTProb센서에서 음성 놀람 확률을 읽어 큐에 넣습니다.video_rtprob_producer.py: Picamera2와 FER 모델을 사용해 얼굴 놀람 확률을 계산합니다.serial_real.py: 실차 OBD-II 시리얼 데이터를 파싱하여 속도, RPM, 스로틀, 브레이크 값을 제공합니다.- 기타 시뮬레이터(
serial_loop.py,warning_*)가 포함되어 테스트에 활용됩니다.
- sensors/
voice_rtprob.py: openSMILE 기능 추출과 규칙 기반 가중치를 이용해 음성으로부터 스트레스 확률(0~1)을 산출합니다.video_prob_rt_picam.py: Haar Cascade 얼굴 검출 후 TFLite FER 모델로 표정에서 놀람 확률(0~100%)을 계산합니다.
utils/qput.py: 큐가 가득 찼을 때 가장 오래된 항목을 버리고 새 항목을 넣는 보조 함수입니다.
- 각 프로듀서가
Msg객체를 큐에 비동기로 삽입합니다. decision_loop가 큐를 주기적으로 비우고FusionState에 데이터를 추가합니다.decide()함수가 OBD 이상 징후와 사람 반응의 피크/지속성을 기반으로OK/WARNING/ALERT를 판정합니다.- 결과는 JSON 형태로 표준 출력에 기록되고,
ALERT/WARNING시 프레임버퍼에 경고 화면이 표시됩니다.
시스템은 프레임버퍼(/dev/fb0)에 이미지를 표시하여 운전자에게 상태를 전달합니다.
- 정상 상태에서는 다음과 같은 대기 화면이 표시됩니다.
- 이상을 인지하면 경고 화면으로 전환됩니다.
유튜브에 게시된 시연 영상은 이상 상황을 인지해 b.png 경고 화면이 표시된 모습을 담고 있습니다.
pip install -r requirements.txt
python main.pyPicamera2, 마이크(예: RØDE VideoMic GO II), OBD-II 시리얼 장치가 연결된 라즈베리 파이에서 실행하는 것을 전제로 합니다.
scripts/와openSmile/폴더에는 실험용 스크립트와 초기 분석 도구가 포함되어 있습니다.

