๋๋ค์์ ์ํํธ์์๋ ์ธ๋ถ ์ฐจ๋์ ์ถ์
์ ๋ง๊ณ ์๋ค. ๊ทธ๋์ ์ฅ๊ธฐ๊ฐ ์ง์ ์๋์ด ๋ฌต์ ๋๋ ๊ด๋ฆฌ์ค์์ ์ธ๋ถ ์ฐจ๋ ๋ฑ๋ก์ ํด์ ์ธ๋ถ ์ฐจ๋์ด ์ํํธ ๋จ์ง์ ๋ค์ด์ฌ ์ ์๋ค. ๊ด๋ฆฌ์ค์ ๊ฐ์ผ ์ฐจ๋ ๋ฑ๋ก์ด ๊ฐ๋ฅํ ๋ฒ๊ฑฐ๋ก์์ ์ง์ ์๋ ์ํจ๋๋ฅผ ํตํด ํด๊ฒฐํ ์ ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ค. ์ํจ๋๋ฅผ ํตํด ์ง์์ ๋ฐฉ๋ฌธ์ฐจ๋์ ๋ฑ๋กํ ์ ์๋ค๋ฉด ์ฃผ๊ธฐ์ ์ผ๋ก ์์ ์ ์ง์ ๋ฐฉ๋ฌธํ๋ ์ฐจ๋์ ๊ด๋ฆฌํ๋๋ฐ ์ ์ฉํ ๊ฒ์ด๋ฉฐ, ๋งค๋ฒ ๊ด๋ฆฌ์ค๊ณผ ์ฐ๋ฝํ๋ ๋ถํธํจ์ ์ค์ผ ์ ์์ ๊ฒ์ด๋ค.
์ํจ๋์ฉ ์ฐจ๋ ๋ฑ๋ก ์ฑ์ ํตํด์๋ ์ด๋ค ์ฐจ๋์ ์ธ์ ๋ถํฐ ์ธ์ ๊น์ง ์์ ๋ฑ๋ก์ ํ ์ง ๊ฒฐ์ ํ ์ ์์ผ๋ฉฐ, ๊ฒฝ๋น์ค์ฉ ์ฐจ๋ ๋ก๊ทธ ์ฑ์ ํตํด์๋ ์ด๋ค ์ฐจ๋์ด ์ธ์ , ์ด๋ค ์ํ๋ก ํต๊ณผ๋ฅผ ํ๋์ง ๋ชปํ๋์ง๋ฅผ ์กฐํํ ์ ์๊ฒ ๋ง๋ค์๋ค.
AWS EC2(ํด๋ผ์ฐ๋ ์๋ฒ):
- ๋ณด์ ๊ทธ๋ฃน์ ์ธ๋ฐ์ด๋ ๊ท์น์์ ๊ฐ๊ฐ 27017ํฌํธ์ 8080ํฌํธ๋ฅผ ๊ฐ๋ฐฉํ์ฌ ํฌํธ ํฌ์๋ฉ์ ํ์ฌ MongoDB์๋ฒ์ express ์๋ฒ(์์๋ฑ๋ก ๋ง๋ฃ์ผ ๊ด๋ฆฌ)์ ์ ๊ทผํ ์ ์๊ฒ ํ์๋ค.
- Express.js(์ํํธ ๊ฒ์ํ ์๋ฒ ไธญ car_expire ๋ฐ index)
- ์ํํธ ๊ฒ์ํ ์๋ฒ์์ ์ฌ์ฉ๋ express ์ฝ๋์ node-schedule์ด๋ผ๋ ๋ชจ๋์ ์ฌ์ฉํ์ฌ 1๋ถ ์ฃผ๊ธฐ๋ง๋ค mongoose๋ฅผ ํตํด MongoDB์ cars collection์์ expireAt์ ๊ฐ์ํ๋ค๊ฐ, expireAt์ด ํ์ฌ ์๊ฐ์ ๋์ด์๋ฉด, ์ญ์ ํ๊ฒ ํ์๋ค.
- ์ํํธ ๊ฒ์ํ ์๋ฒ์์ ์ฌ์ฉ๋ express ์ฝ๋์ node-schedule์ด๋ผ๋ ๋ชจ๋์ ์ฌ์ฉํ์ฌ 1๋ถ ์ฃผ๊ธฐ๋ง๋ค mongoose๋ฅผ ํตํด MongoDB์ cars collection์์ expireAt์ ๊ฐ์ํ๋ค๊ฐ, expireAt์ด ํ์ฌ ์๊ฐ์ ๋์ด์๋ฉด, ์ญ์ ํ๊ฒ ํ์๋ค.
- MongoDB(์ํํธ ๊ฒ์ํ ๋ฐ ์ฐจ๋ ๋ฑ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค)
- ๊ธฐ์กด์๋ MongoDB Atlas๋ฅผ ์ฌ์ฉํ๊ณ ์ ํ์์ผ๋, ๋ฌธ์ ๊ฐ ๋ฐ๊ฒฌ๋์ด AWS EC2์๋ฒ์ MongoDB ์๋ฒ๋ฅผ ์ง์ ๊ตฌ์ถํ์ฌ ์ฌ์ฉํ๊ฒ ๋์๋ค.
- ๊ธฐ์กด์๋ MongoDB Atlas๋ฅผ ์ฌ์ฉํ๊ณ ์ ํ์์ผ๋, ๋ฌธ์ ๊ฐ ๋ฐ๊ฒฌ๋์ด AWS EC2์๋ฒ์ MongoDB ์๋ฒ๋ฅผ ์ง์ ๊ตฌ์ถํ์ฌ ์ฌ์ฉํ๊ฒ ๋์๋ค.
webOS(์ํจ๋):
- ENACT(com.registercar.app)
- React์ useEffect๋ฅผ ํตํด์ MainPanle์ด ์ฒ์ ๋ ๋๋ง๋ ๋, mainInit ์๋น์ค๋ฅผ callํ์ฌ ํ์ฌ ๋ฑ๋ก๋์ด์๋ ์ฐจ๋๋ค์ ๊ฐ์ ธ์ฌ ์ ์๊ฒ ํ์๋ค.
- RegisterPanel์ ๊ฒฝ์ฐ Enact์ Button, Input, Datepicker๋ฅผ ํ์ฉํ์ฌ ๋ง๋ค์๊ณ , ๋ง์ฝ์ ์์์ฐจ๋์ ๋ฑ๋กํ ๋, ์์ ๋ ์ง๊ฐ ๋ ๋ ์ง๋ณด๋ค ์๋ค๋ ๊ฒ์ ์ ํจํ์ง ์๋ค๊ณ ํ๋จํ์ฌ ํด๋น ๋ฐ์ดํฐ๋ ์ ์ถ๋์ง ์๊ณ , toast์๋ฆผ๊ณผ tts์๋ฆผ์ ํตํด ๋ฐ๋ คํ๋ค.
- ํ์ฌ Remove ๋ฒํผ์ ๋๋ฅด๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์๋ ์ง์์ก์ง๋ง, UI์๋ ๊ทธ๋๋ก ๋จ์์๋๋ฐ ํด๋น ๋ถ๋ถ์ ์ถํ์ ์์ ํ ์์ ์ด๋ค.
- Node.JS(com.registercar.app.service)
- mainInit service: MongoDB์๋ฒ์ ์ฐ๊ฒฐํ๊ณ , ์คํค๋ง๋ฅผ ์ค์ ํ๊ณ , MongoDB์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ mainPanel์ ๋ณด์ฌ์ค ๋ค MongoDB์์ ์ฐ๊ฒฐ์ ๋๋๋ค. ์คํค๋ง์ ๊ฐ์ ๊ฒฝ์ฐ์๋ ๋ฑ ํ ๋ฒ๋ง ์ค์ ํด์ผ๋๊ธฐ ๋๋ฌธ์, Car๋ผ๋ ์คํค๋ง๊ฐ ์ ์๊ฐ ๋์๋์ง๋ฅผ ํ์ธํ๋ ๊ณผ์ ์ ๊ฑฐ์น๋ค.
- registerCar service: MongoDB์ ์ฐ๊ฒฐํ๊ณ , MongoDB์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ , Toast์ TTS ์๋ฆผ์ ๋ณด๋ด๋ ๊ณผ์ ์ ๊ฑฐ์น ๋ค MongoDB์์ ์ฐ๊ฒฐ์ ๋๋๋ค.
- deleteCar service: MongoDB์ ์ฐ๊ฒฐํ๊ณ , ์ฑ์ผ๋ก๋ถํฐ ๋๊ฒจ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์์ ๋ฑ๋ก๋ ์ฐจ๋์ ๋ฐ์ดํฐ๋ฅผ ์ง์ด๊ณ , MongoDB์์ ์ฐ๊ฒฐ์ ๋๋๋ค.
webOS(๊ฒฝ๋น์ค):
-
ENACT(com.cardetection.app)
- MainPanle์์๋ init service๋ฅผ promise๋ก ๊ตฌ์ฑํ์ฌ, DB8์ putPermission์ ๋จผ์ ์คํ์์ผ DB8์ ๋ํ ๊ถํ์ ๋ถ์ฌ๋ฐ์๊ณ , ๊ทธ ๋ค์์ async-await์ ํตํด ๋น๋๊ธฐ๋ก ์คํ์์ผ subscribe ์ต์ ์ ํฌํจํ loop service๋ฅผ ์คํ์์ผ ์๋น์ค๋ก๋ถํฐ ๊ณ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ log๋ฅผ ์ค์๊ฐ์ผ๋ก ๋ฐ์ํ ์ ์์๋ค.
- ๊ทธ๋ ๊ฒ ๋ฐ์ ๋ฐ์ดํฐ๋ค์ findHandler๋ฅผ ํตํด parsingํ์ฌ log์ ํ๊ธฐํ์๋ค.
-
Node.JS(com.cardetection.app.service)
- com.webos.service.db ์ LS2 API๋ค์ ํ์ฉํ์ฌ DB8์ ์ฌ์ฉํ ์ ์์๋ค.
- init service: putKind -> putPermission -> find์ ๊ณผ์ ์ ๊ฑฐ์ณ DB8์ ๋ํ ์ ๊ทผ ๊ถํ ๋ฐ ์ด๊ธฐ ๋ฐ์ดํฐ๋ค์ ๊ฐ์ ธ์ ์ฑ์ ์ ๋ฌํ๋ค.
- loop service: ์๋์ด๋
ธ๋ก๋ถํฐ ์ฐจ๋์ด ๋์ฐฉํ๋ค๋ ์ฌ์ค์ ์ ๋ฌ ๋ฐ๊ธฐ ์ํด car/detect topic์, docker ๋ด๋ถ์์ ๋์๊ฐ tesseract๋ก๋ถํฐ ๋์ฐฉํ ์ฐจ๋์ ๋ํ ์ ๋ณด๋ฅผ ์ ๋ฌ ๋ฐ๊ธฐ ์ํด car/data topic์ ๊ฐ๊ฐ subscribeํ๋ฉฐ, ์ฐจ๋์ด ๋์ฐฉํ๋ฉด ์ฐจ๋์ ๋ฒํธํ์ ์ฐ๊ธฐ ์ํด luna_service์ com.webos.service.camera2 LS2 API๋ฅผ ์ฌ์ฉํ CameraReady(open -> setFormat -> startPreview)๋ฅผ ์คํ์์ผ์ค๋ค. ๋ํ ๋ด๋ถ์์ ๋์๊ฐ docker์ ์ด๊ธฐ ์ค์ ์ childProcess ๋ชจ๋์ ํตํด ํด์ค๋ค.
๊ทธ๋ฆฌ๊ณ ์ฐจ๋์ด ๋์ฐฉํ์ฌ car/detect topic์ ๋ฐ์ดํฐ๊ฐ ๋ค์ด์ค๋ฉด, ์ดฌ์์ ์์ํ๊ณ , ์ดฌ์ํ ์ฌ์ง์ ๋ฏธ๋ฆฌ ์ค์ ํด๋ docker container์ ๊ณต์ ๋ณผ๋ฅจ์ ์ ์ฅํ๊ณ , nodeJS์ ๋ด์ฅ๋ชจ๋์ธ childProcess๋ฅผ ์ฌ์ฉํ์ฌ docker container ๋ด๋ถ์ ์ฐจ๋ ๋ฒํธํ ๋ถ์ python ์ฝ๋๋ฅผ ์คํ์ํจ๋ค.
๊ทธ๋ ๊ฒ ํ์ฌ tesseract์์ ๋ถ์๋ ๋ฐ์ดํฐ๋ฅผ car/data topic์ ํตํด ์ ๋ฌ๋ฐ์ DB8์ ์ ์ฅํ๊ณ , toast์๋ฆผ๊ณผ tts์๋ฆผ์ ๋ด๋ณด๋ธ๋ค.
-
Docker(container: tesseract)
-
tesseract์ ํ๊ฒฝ ์ค์ ์ ํด๋์ yun1211/tesseract ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ธ์จ๋ค.
-
๋ช ๋ น์ด๋ฅผ ์ฃผ์ง ์์๋ ์ปจํ ์ด๋๊ฐ ์ข ๋ฃ ๋์ง ์๊ฒ sleep infinity ์ต์ ์ ์ฃผ๊ณ , webOS์ /media/images ๊ฒฝ๋ก์ docker ๋ด๋ถ์ /root/images๋ฅผ ๊ณต์ ๋ณผ๋ฅจ์ผ๋ก ์ค์ ํ์ฌ ์ฐจ๋ ๋ฒํธํ ์ฌ์ง์ ๋๊ธธ ์ ์๊ฒ ์ค์ ํ์๋ค.
-
Tesseract(tesseract)
- ์ฐจ๋ ๋ฒํธํ ์ฌ์ง์ argparse ๋ชจ๋์ ํตํด ์ ๋ฌ ๋ฐ์ ํ๋ผ๋ฏธํฐ๋ฅผ ํตํด ์ ๊ทผํ์ฌ, Tesseract OCR์ ํตํด ๋ถ์ํ์ฌ String ๊ฐ์ ์ป์ด๋ธ๋ค.
- ๊ทธ๋ ๊ฒ ์ ๋ฌ๋ฐ์ ์ฐจ๋ ๋ฒํธ์ pymongo ๋ชจ๋์ ํตํด EC2์ MongoDB์ ์ ๊ทผํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๋น๊ตํ์ฌ, ๋น๊ตํ ๋ฐ์ดํฐ๋ฅผ MQTT์ car/data topic์ผ๋ก publishํ์ฌ com.cardetection.app์ ์ ๋ฌํ๊ณ , MQTT์ car/compre topic์ผ๋ก๋ ๋ฑ๋ก๋ ์ฐจ๋์ธ์ง ์๋์ง์ ๋ํ ๋จํธ์ ์ธ ์ ๋ณด๋ฅผ ์ฐจ๋์ฐจ๋จ๊ธฐ ์๋์ด๋ ธ์ ๋ณด๋ด์ค๋ค.
-
Arduino(์ฐจ๋ ์ฐจ๋จ๊ธฐ):
- barrier.ino
- ์ฐจ๋์ด ๋์ฐฉํ๊ธฐ ์ ๊น์ง DET case์์ ์ด์ํ ์ผ์๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค๊ฐ ์ด์ํ ์ผ์์ ์ฐจ๋์ด ๊ฐ์ง๋๋ฉด car/detect topic์ "recognized"๋ผ๋ message๋ฅผ ๋ณด๋ด๊ณ , REC case์ ๋ค์ด๊ฐ car/compare topic์ subscribe ํ๊ณ , docker Tesseract๋ก๋ถํฐ ๋ฑ๋ก๋ ์ฐจ๋์ธ์ง ์๋์ง์ ๋ํ ๋ฐ์ดํฐ๊ฐ ๋ค์ด์ค๋ฉด, ๊ฐ๊ฐ CORRECT, INCORRECT case๋ก ๋ค์ด๊ฐ๋ค๊ฐ ๋ค์ DET case๋ก ๋์๊ฐ๋ค. ๋ง์ฝ CORRECT case์ ๋ค์ด๊ฐ๋ค๋ฉด ์๋ณด๋ชจํฐ๋ฅผ ์์ง์ฌ ์ฐจ๋ ์ฐจ๋จ๊ธฐ๋ฅผ ์ด์ด์ค๋ค.
- ์ฐจ๋์ด ๋์ฐฉํ๊ธฐ ์ ๊น์ง DET case์์ ์ด์ํ ์ผ์๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค๊ฐ ์ด์ํ ์ผ์์ ์ฐจ๋์ด ๊ฐ์ง๋๋ฉด car/detect topic์ "recognized"๋ผ๋ message๋ฅผ ๋ณด๋ด๊ณ , REC case์ ๋ค์ด๊ฐ car/compare topic์ subscribe ํ๊ณ , docker Tesseract๋ก๋ถํฐ ๋ฑ๋ก๋ ์ฐจ๋์ธ์ง ์๋์ง์ ๋ํ ๋ฐ์ดํฐ๊ฐ ๋ค์ด์ค๋ฉด, ๊ฐ๊ฐ CORRECT, INCORRECT case๋ก ๋ค์ด๊ฐ๋ค๊ฐ ๋ค์ DET case๋ก ๋์๊ฐ๋ค. ๋ง์ฝ CORRECT case์ ๋ค์ด๊ฐ๋ค๋ฉด ์๋ณด๋ชจํฐ๋ฅผ ์์ง์ฌ ์ฐจ๋ ์ฐจ๋จ๊ธฐ๋ฅผ ์ด์ด์ค๋ค.
- ์ด์์ฒด์ : Windows 11, Ubuntu 20.04.5 LTS, webOS 2.18.0
- ๋๋ฐ์ด์ค ๊ตฌ์ฑ : Raspberry Pi 4B, KEYESTUDIO ESP8266
- IDE : Visual Studio Code, Arduino IDE
- ๊ฐ๋ฐ ์ธ์ด : ENACT, Node.JS, Arduino, Python
- ๋ฐ์ดํฐ๋ฒ ์ด์ค : MongoDB
- package manager : npm
- Docker 20.10.8 - Ubuntu 20.04.5 LTS
ssid์ 2.4GHz์ wifi์ ์ด๋ฆ์, password์๋ wifi์ ๋น๋ฒ์ ๊ฐ๊ฐ ์์ ์ ๊ฒ์ผ๋ก ๋ฐ๊ฟ์ฃผ๋ฉด ๋ฉ๋๋ค. ๋งํฌ
const char* ssid = "wifi"; // wifi SSID
const char* password = "12345678"; // wifi password
ares-setup-device์์ default๋ฅผ ์์ ์ด ์ค์นํ webOS(์ํจ๋)์ IP๋ก ์ค์ ํ์ธ์.
source wallpad.setup.sh
ares-setup-device์์ default๋ฅผ ์์ ์ด ์ค์นํ webOS(๊ฒฝ๋น์ค)์ IP๋ก ์ค์ ํ์ธ์.
source office.setup.sh
์ฐจ๋ ์ฐจ๋จ๊ธฐ ์๋์ด๋
ธ์ barrier.ino๋ฅผ ์
๋ก๋ ํ์ธ์.
- webOS์๋ Tesseract OCR์ด ์ค์น ๋์ง ์๋๋ค๋ ์ฅ์ ๊ฐ ์์๋ค.
-> Docker๋ก container๋ฅผ ๋ง๋ค์ด Tesseract OCR์ ์ค์นํ์ฌ ์ฌ์ฉํ ์ ์์๋ค.