[JThermal Project] 개발 일지
JThermal Project 소개
현재 코로나 상황이 지속되며 악화되고 있는 상황이다. 감염자 수의 증가세는 가라앉지 않고 있으며, 앞으로도 방역에 많이 힘써야한다. 전파를 줄이기 위해서는 감염자를 조기에 발견하여 접촉자 수를 줄여야만 하는데, 현재 이를 위해 대부분의 건물의 입구에 열화상 온도계를 설치하여 발열 검사를 시행하고 있다. 하지만 측정된 온도값들은 겨울철에는 체온보다 상당히 낮게나오는 경우가 많다. 이러한 측정 결과는 발열 증상이 있는 사람의 온도가 정상적인 범주의 사람으로 분류될 수 있음을 뜻하여 측정 방식의 신뢰도에 의문을 제기하게 된다. 적외선 측정 방식에서 이러한 문제를 개선하여 발열자의 검출률을 높이는 것이 이 프로젝트의 목표이다.
분석과 아이디어
-
기존 열화상 온도계의 펌웨어나 소스 코드를 알 수 없어 정확히 어떤 방식으로 측정하는지는 알 수 없었으나, 문의를 통해 들은 내용으로는 열화상 이미지 내에서 가장 높은 온도를 보이는 픽셀 주변의 온도를 평균으로 하여 온도를 출력한다고 한다. 일반적으로 설치된 열화상 온도계들은 얼굴이 화면에 표시된 타원형의 경계에 얼굴을 맞추어야 측정을 하는데, 이러한 경계 속 최대 온도값의 주변 평균 온도를 측정하는 것으로 보인다. 그렇지 않으면 화면 안에 더 높은 온도의 물체가 담기는 상황은 적지 않게 발생할 수 있으므로 경계를 의도적으로 이용하는 것으로 생각된다. 하지만 그렇다고 해도 사람의 얼굴이 정확히 경계와 일치할 수는 없으므로 경계에서 얼굴을 제외한 부분의 온도값이 사람의 얼굴 온도보다 높다면 측정의 결과는 달라지게 될 것이다. 따라서 컬러 이미지에서 얼굴의 윤곽을 만든 후 열화상 이미지와 매칭시켜 배경의 영향을 제거한다.
-
안면 온도 측정에서 실제 체온보다 낮거나 같은 온도가 측정되는데, 그 중 이마의 온도가 가장 신뢰도가 높다고 알려져 있다. 온도가 낮게 측정되는 경향은 실제 발열자의 측정 온도가 정상 범주로 판단될 가능성을 야기한다. 온도가 낮게 측정되는 것은 실내보다 기온이 낮은 바깥 환경에 노출되어서 안면의 피부 온도가 낮아지기 때문인데, 사람이 얼마나 바깥에서 노출되었는지는 측정하기 쉽지 않다. 안면 온도 저하 문제를 해결하기 위해 안면 온도의 부위별 분포를 분석하여 보정 계수를 정하는 방법을 취한다.
구현 단계
1. 시스템 구성 / 세팅(2/9~)
-
라즈베리파이 4, FLIR Lepton 3.5 적외선 센서가 마운트 된 PureThermal2 보드, 파이 카메라 모듈을 3D 프레임에 마운트하여 HW를 세팅한다.
-
라즈베리파이의 OS는 Raspbian Buster(2022-01-28)를 설치.
-
파이썬 버전은 Default인 3.7이 아닌 3.8.3으로 세팅하기 위해 3.8.3을 설치하고 venv로 가상 환경을 관리한다.
sudo apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libsqlite3-dev libreadline-dev libffi-dev wget libbz2-dev
# Python 3.8.3 설치
wget https://www.python.org/ftp/python/3.8.3/Python-3.8.3.tgz
tar -xf Python-3.8.3.tgz
cd Python-3.8.3
./configure --enable-optimizations
make
sudo make altinstall
# 가상환경 만들기
python3.8 -m venv .env3_8
source .env/bin/activate
pip install ipython
pip install ipykernel
pip install opencv-python
- 파이 카메라 모듈 v2 연결후 테스트
sudo raspi-config
# Interface - Enable Camera
vcgencmd get_camera # supported=1, detected=1이면 완료
raspistill -o test.jpg
- Lepton이 부착된 PureThermal2를 연결하고 필요 라이브러리 설치
# PureThermal Project 설치
https://github.com/groupgets/purethermal1-uvc-capture.git
# libuvc 설치
sudo apt-get install cmake
sudo apt-get install libusb-1.0.0-dev
sudo apt-get install libjpeg-dev
git clone https://github.com/groupgets/libuvc
cd libuvc
mkdir build
cd build
cmake ..
make && sudo make install
sudo ldconfig -v
- AHT10 온습도 센서 세팅 후 테스트
pip install smbus
python aht10.py
2. 안면 부위당 온도 측정
안면 온도에서 실체온을 추정할 때에 정확한 추정을 위해서는 안면의 부위별 온도를 측정하여야 한다. 이를 위해서는 실화상 이미지에서 안면 추출 후 부위를 나누어야한다.
- 마스크, 안경이 없는 얼굴에서 부위 추출
- 1에서 성공한 방법에서 마스크, 안경이 있는 얼굴에서 부위 추출.
# MediaPipe 설치
git clone https://github.com/google/mediapipe.git
# Bazel 설치
sudo apt-get install -y openjdk-8-jdk
git clone https://github.com/PINTO0309/Bazel_bin.git
cd Bazel_bin/3.7.2/armhf/
./install.sh
which bazel # Bazel 설치 확인
sudo apt-get install mesa-common-dev libegl1-mesa-dev libgles2-mesa-dev -y
# mediapipe/examples/desktop/hello_world/BUILD의 cc_binary에 추가
linkopts = [
"-latomic"
]
cd ~/mediapipe
export GLOG_logtostderr=1
bazel run --copt -DMESA_EGL_NO_X11_HEADERS --copt -DEGL_NO_X11 mediapipe/examples/desktop/hello_world:hello_world
3. 열화상 이미지와 실화상 이미지의 매칭
열화상 이미지에서는 환경에 따라 안면 추출이 불가한 경우가 발생하므로 실화상 이미지에서 안면을 추출하여 열화상 이미지로 적용해야하는데, 일반적으로 적외선 카메라의 해상도가 실화상 카메라의 해상도보다 작고, 두 카메라의 시야각이 다르며 동일한 위치, 방향이 아니므로 두 이미지를 매칭하기 위해서는 이러한 문제를 해결해야한다.
- 먼저 동일한 컬러 카메라 2대의 이미지를 가지고 이미지 매칭을 해본다. 물체를 서로 다른 각도에서 바라본 두 이미지에서 특징점을 매칭한다.
- 1에서 성공한 방법을 서로 다른 컬러 카메라끼리의 이미지를 가지고 1을 반복한다.
- 2에서 성공한 방법을 적외선 카메라와 컬러 카메라로 1을 반복한다.
위의 과정에서 사용한 방법은 아래를 참고하였다.
4. 적외선 센서 캘리브레이션
1,2의 과정을 거쳐 추출된 열화상 이미지에서 온도를 측정하는데, 측정된 온도가 실제 해당 부위 온도와 일치하는 지에 대해 조사하고 보정하는 과정이 필요하다.
- 적외선 센서에서 1m 전방에 물병의 뚜껑이 보일 수 있게 구성하고, 물의 온도를 조절하며 물리적 측정한 온도와 적외선 센서에서 측정된 온도를 기록한다.
- 측정된 데이터로 선형 회귀 방정식을 구하여 온도를 보정한다.
실험 Hardware 구성
Number | Device | Information | Price(₩) |
---|---|---|---|
1 | RASPBERRY PI 4 MODEL B 8G | Link | 135,000 |
2 | RASPBERRY PI CAMERA MODULE V2 | Link | 35,000 |
3 | FLIR Lepton 3.5 | Link | 190,851 |
4 | PureThermal 2 - Flir Lepton Smart I/O Module | Link | 126,807 |
5 | 3D Frame(Self-Designed) |
- RASPBERRY PI 4 MODEL B 8G
- RASPBERRY PI CAMERA MODULE V2
- PureThermal 2 - Flir Lepton Smart I/O Module
타임 라인
- 2022-01-24 개발 일지 작성 시작. 자재 조사 후 3D프레임 모델링 시작
- 2022-01-25 3D 모델링 작업 진행. 세부 구조 스케치
- 2022-01-27 3D 모델링 완료. CATPart -> STL -> gcode 변환 완료. 밑면은 3시간, 뚜껑은 9시간 소요 예정으로 이틀에 걸쳐 출력 예정.
- 2022-02-09 3D 모델 수정하여 재출력.(v2) 가상환경, 파이 카메라 세팅 완료.
- 2022-02-10 3D 프레임 조립 하여 HW 세팅 마침. 라즈베리파이 OS 라즈비안 -> Ubuntu Desktop 21.10으로 변경
깃허브
참고
- FLIR 열화상 카메라는 시간이 지나도 보정 상태를 유지할 수 있습니다. 그렇기 때문에, FDA가 권장하는 주변 드리프트 및 지정 시간 범위 내 안정성 사양 기준 (0.2 °C 미만)을 충족하기 위해 카메라 시야에 굳이 기준 블랙바디를 배치할 필요가 없습니다. https://www.flirkorea.com/discover/public-safety/do-i-need-a-blackbody-for-skin-temperature-screening/#download-now
Author And Source
이 문제에 관하여([JThermal Project] 개발 일지), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@real_jun9u/JThermo-Project-개발-일지저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)