Skip to content

ddoo-ddah/ddoo-ddah.github.io

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

12 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

FBEye

μ‹œμ—° μ˜μƒ : https://www.youtube.com/watch?v=MN8RRHVUI4Q
μ„€λͺ… μ˜μƒ : https://www.youtube.com/watch?v=NsuU9V1JWTs

What is FBEye?

Find Bad Eye

  • μ‹œμ„  좔적을 ν†΅ν•œ 온라인 μ‹œν—˜ λΆ€μ •ν–‰μœ„ 탐지 ν”„λ‘œκ·Έλž¨ μž…λ‹ˆλ‹€.

  • μΆ”κ°€μ μœΌλ‘œ μ„œλ²„μ™€μ˜ QRμ½”λ“œ λŒ€μ‘°λ₯Ό ν†΅ν•΄μ„œ μ‹€μ‹œκ°„ 접속 확인을 ν•©λ‹ˆλ‹€.

  • 적외선 카메라 λ“±μ˜ νŠΉμˆ˜ν•œ μž₯치 없이 슀마트폰으둜 μ‹œμ„  좔적을 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  • μ•ˆλ“œλ‘œμ΄λ“œ μ•±, μΈμ¦μ„œλ²„, κ΄€λ¦¬μžμš© μ›ΉνŽ˜μ΄μ§€, μˆ˜ν—˜μžμš© ν΄λΌμ΄μ–ΈνŠΈ 와 μ—°λ™ν•˜μ—¬ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  • μ‹œμ„ μΆ”μ  μ •ν™•λ„μ˜ ν‰κ°€λŠ” 아직 μ™„λ£Œλ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.

  • ν˜„μž¬ fbeye.xyz μ›Ήμ‚¬μ΄νŠΈ νŽ˜μ΄μ§€λŠ” 정적 μ›ΉνŽ˜μ΄μ§€λ‘œ μ „ν™˜λœ μƒνƒœμž…λ‹ˆλ‹€.


How it works?

Eye LandMark Detection

  1. 이 κΈ°λŠ₯은 Learning to Find Eye Region Landmarks for Remote Gaze Estimation in Unconstrained Settings 을 μΈμš©ν•˜μ—¬ μ œμž‘λ˜μ—ˆμŠ΅λ‹ˆλ‹€. 상세 λͺ¨λΈ κ΅¬ν˜„μ€ 논문을 μ°Έκ³ ν•˜μ‹œκΈ° λ°”λžλ‹ˆλ‹€.
  2. 눈 μ˜μ—­μ˜ κ·Έλ ˆμ΄μŠ€μΌ€μΌ 이미지λ₯Ό μž…λ ₯ν•˜λ©΄, ν•΄λ‹Ήν•˜λŠ” 눈 μ΄λ―Έμ§€μ—μ„œ Eyelid, Iris edge와 Iris center, Eyeball Centerκ°€ 좜λ ₯λ©λ‹ˆλ‹€.
  3. μž…λ ₯ν¬κΈ°λŠ” 108*180*1 이며 좜λ ₯ν¬κΈ°λŠ” 36*60*18 μž…λ‹ˆλ‹€.
  4. HeatMap ν˜•νƒœλ‘œ 좜λ ₯되며, 각 μ˜μ—­μ— ν•΄λ‹Ήν•˜λŠ” 값쀑 μ΅œλŒ€μΉ˜λ₯Ό μ°Ύμ•„ μ’Œν‘œλ‘œ λ³€ν™˜ν•˜λ©΄ μ‚¬μš© ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • λͺ¨λΈμ€ λ°μŠ€ν¬νƒ‘μ—μ„œ ν•™μŠ΅λ˜μ—ˆμœΌλ©° μΆ©λΆ„νžˆ ν•™μŠ΅λœ λͺ¨λΈμ„ μ•ˆλ“œλ‘œμ΄λ“œμ—μ„œ μ‚¬μš© ν•  수 μžˆλ„λ‘ λ³€ν™˜ν•˜μ˜€μŠ΅λ‹ˆλ‹€.
  • λ³€ν™˜λœ λͺ¨λΈμ€ 좔가적인 ν•™μŠ΅μ΄ λΆˆκ°€λŠ₯ν•˜λ©°, Tensorflow-lite 라이브러리λ₯Ό μ‚¬μš©ν•˜μ—¬ λ™μž‘μ‹œν‚¬μˆ˜ μžˆμŠ΅λ‹ˆλ‹€.
  • ν•™μŠ΅μ— μ‚¬μš©λœ 데이터셋은 420만개 κ°€λŸ‰μž…λ‹ˆλ‹€.

Face Detection

  1. CameraX λΌμ΄λΈŒλŸ¬λ¦¬μ™€ Google Mlkit 라이브러리λ₯Ό 톡해 μ–Όκ΅΄ 및 μ–Όκ΅΄μ˜ νŠΉμ§•μ μ„ μ°ΎμŠ΅λ‹ˆλ‹€.
  2. Face Detection에 μž…λ ₯λ˜λŠ” μ΄λ―Έμ§€μ˜ ν¬κΈ°λŠ” 640 x 480이어야 ν•˜λ©°, 좜λ ₯λ˜λŠ” 이미지 λ˜ν•œ 640 x 480 μž…λ‹ˆλ‹€. μ΄λŠ” μ›λ³Έμ΄λ―Έμ§€μ˜ 크기 및 λΉ„μœ¨κ³ΌλŠ” λ…λ¦½μ μž…λ‹ˆλ‹€.
    • CameraX 라이브러리λ₯Ό μ‚¬μš©ν•˜λ©΄ 별닀λ₯Έ 섀정을 ν•  ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€.
  3. 얼꡴이 20ν”„λ ˆμž„ 이상 κ²€μΆœλ˜μ§€ μ•ŠλŠ” 경우 μžλ¦¬μ΄νƒˆλ‘œ νŒλ‹¨ν•˜μ—¬ μ„œλ²„μ— 둜그λ₯Ό μ „μ†‘ν•©λ‹ˆλ‹€.
  4. μ„œλ²„μ—μ„œ 이미지 μš”μ²­μ΄ μ˜€λŠ”κ²½μš° 얼꡴이 κ²€μΆœλ˜μ§€ μ•ŠλŠ” κ²½μš°μ—λ„ μ „λ©΄ 카메라 μ˜μƒμ„ μ „μ†‘ν•©λ‹ˆλ‹€.

Eye Gaze Estimation

  1. μœ„μ˜ Face Detection으둜 μ–»μ–΄λ‚Έ μ–Όκ΅΄ νŠΉμ§•μ μ„ μ‚¬μš©ν•©λ‹ˆλ‹€.
  2. μ–Όκ΅΄ νŠΉμ§•μ  쀑 μ™Όμͺ½ 및 였λ₯Έμͺ½ 눈의 μœ„μΉ˜λ₯Ό μ°Ύκ³ , 이λ₯Ό μ΄λ―Έμ§€λ‘œ μΆ”μΆœν•©λ‹ˆλ‹€.
  3. Tensorflow-lite 라이브러리둜 Eye LandMark Detection λͺ¨λΈμ„ μž‘λ™μ‹œμΌœ 2의 μ΄λ―Έμ§€μ—μ„œ Eye Landmarkλ₯Ό μ–»μ–΄λƒ…λ‹ˆλ‹€.
  4. 3μ—μ„œ 얻은 Eye Landmarkλ₯Ό 기반으둜 μ‹œμ„  λ°©ν–₯ 값을 κ΅¬ν•©λ‹ˆλ‹€.
  5. μ‹œμ„  λ°©ν–₯ 값을 μΈμ¦μ„œλ²„λ‘œ μ „μ†‘ν•©λ‹ˆλ‹€.
  6. μ„œλ²„μ—μ„œ 이미지 μ „μ†‘μš”μ²­μ΄ μ˜€λŠ”κ²½μš°, λˆˆλ™μžμ˜ ν…Œλ‘λ¦¬μ™€ μ‹œμ„ λ°©ν–₯이 그렀진 이미지λ₯Ό μƒμ„±ν•˜μ—¬ μ„œλ²„λ‘œ μ „μ†‘ν•©λ‹ˆλ‹€.
  • κ²€μΆœ 속도 ν–₯상을 μœ„ν•΄ GPU 가속을 μ‚¬μš©ν•©λ‹ˆλ‹€.
  • 기기에 따라 GPU 가속을 μ‚¬μš©ν•  수 μ—†λŠ” κ²½μš°λ„ μžˆμŠ΅λ‹ˆλ‹€. 이 경우 κ΄€λ ¨ μ˜΅μ…˜μ„ μ œκ±°ν•΄ μ£Όμ‹œκΈ° λ°”λžλ‹ˆλ‹€.

QR Code Scan

  1. Google Mlkit 및 CameraX 라이브러리λ₯Ό μ‚¬μš©ν•˜μ—¬ PC ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ λ³΄μ—¬μ£ΌλŠ” QR Codeλ₯Ό μΈμ‹ν•©λ‹ˆλ‹€.
  2. QRμ½”λ“œλ₯Ό 첫번째둜 μΈμ‹ν•œ 경우 5μ΄ˆκ°„ λŒ€κΈ° ν•œ 뒀에 μ„œλ²„λ‘œ μ „μ†‘ν•©λ‹ˆλ‹€.
  3. 2의 λŒ€κΈ°μ‹œκ°„ 쀑 νœ΄λŒ€ν°μ˜ 흔듀림이 κ°μ§€λ˜λ©΄ ν•Έλ“œν°μ„ μ‚¬μš©ν•œ κ²ƒμœΌλ‘œ κ°„μ£Όν•˜μ—¬ λ‹€μ‹œ 5μ΄ˆκ°„ λŒ€κΈ°ν•©λ‹ˆλ‹€.
  4. QR Codeκ°€ μΈμ¦μ„œλ²„μ—μ„œ ν™•μΈλœ κ²½μš°μ—λ§Œ μ•ˆλ“œλ‘œμ΄λ“œ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜ 및 PC ν΄λΌμ΄μ–ΈνŠΈλ₯Ό μ •μƒμ μœΌλ‘œ μ‚¬μš© ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
    • μ‚¬μ‹€μƒμ˜ 둜그인 κΈ°λŠ₯μž…λ‹ˆλ‹€.
  5. 이후 μ‹œν—˜μ„ μ‘μ‹œν•˜λŠ” λ™μ•ˆμ—λ„ 주기적으둜 λ³€κ²½λ˜λŠ” QR Codeλ₯Ό μΈμ‹ν•˜μ—¬ μ„œλ²„λ‘œ μ „μ†‘ν•©λ‹ˆλ‹€.
  • QR Codeμ—μ„œ 일뢀 데이터λ₯Ό μΆ”μΆœν•˜μ—¬ 이미지 μ„œλ²„μ™€μ˜ 연결을 μ„±λ¦½μ‹œν‚¬λ•Œλ„ μ‚¬μš©ν•©λ‹ˆλ‹€.

Processing Server Connection

  1. λ³΄μ•ˆμ„ μœ„ν•΄ SSLSocketκ³Ό ν”„λ‘œν† μ½œ TLSv1.2λ₯Ό μ‚¬μš©ν•΄μ„œ μ—°κ²°ν–ˆμŠ΅λ‹ˆλ‹€.
  2. μ›ν™œν•œ 톡신을 μœ„ν•΄ JSONOBJECT을 μ‚¬μš©ν•΄μ„œ 데이터λ₯Ό μ£Όκ³  λ°›μŠ΅λ‹ˆλ‹€.

Image Server Connection

  1. Socket.IOλ₯Ό μ‚¬μš©ν•΄μ„œ μ—°κ²°ν–ˆμŠ΅λ‹ˆλ‹€.
  2. μ΄λ―Έμ§€μ˜ 생성과 μ „μ†‘μ˜ λΉ„μš©μ΄ 크기 λ•Œλ¬Έμ— μ„œλ²„λ‘œλΆ€ν„° μš”μ²­μ΄ λ“€μ–΄μ˜€λŠ” κ²½μš°μ—λ§Œ 이미지λ₯Ό μ „μ†‘ν•©λ‹ˆλ‹€.
  3. 이미지 μ„œλ²„μ—μ„œ μ‚¬μš©ν•˜κΈ° νŽΈν•˜λ„λ‘ μ μ ˆν•˜κ²Œ 리사이징후 base64 μ΄λ―Έμ§€λ‘œ λ³€ν™˜ν•©λ‹ˆλ‹€.
  4. stopλͺ…령이 였기 μ „κΉŒμ§€ 맀 ν”„λ ˆμž„λ§ˆλ‹€ λ³€ν™˜λœ 이미지λ₯Ό κ³„μ†ν•΄μ„œ λ³΄λƒ…λ‹ˆλ‹€.

Pages

  1. 각각의 화면듀은 wakelock을 μ΄μš©ν•΄μ„œ μ‹€ν–‰ 쀑에 꺼지지 μ•ŠμŠ΅λ‹ˆλ‹€.
  2. μ‚¬μš©μžμ˜ νŽΈμ˜μ„±μ„ μœ„ν•΄ 처음 카메라 쑰정을 μ œμ™Έν•˜λ©΄ νŠΉλ³„ν•œ μ‘°μž‘μ΄ ν•„μš”μ—†μŠ΅λ‹ˆλ‹€.
  3. μ‹œν—˜ 도쀑엔 UIκ°€ μ‚¬λΌμ§‘λ‹ˆλ‹€.

Requirements

  • Recommended Device : Samsung Galaxy S10 series or later
  • Android : Oreo or later (API 22+)
  • ABI : armeabi-v7a or arm64-v8a

Dependencies

Reference

@inproceedings{Park2018ETRA, author = {Park, Seonwook and Zhang, Xucong and Bulling, Andreas and Hilliges, Otmar}, title = {Learning to Find Eye Region Landmarks for Remote Gaze Estimation in Unconstrained Settings}, booktitle = {ACM Symposium on Eye Tracking Research and Applications (ETRA)}, series = {ETRA '18}, year = {2018}, location = {Warsaw, Poland}, publisher = {ACM}, address = {New York, NY, USA}, }


μ‹€ν–‰

  • npm start

κΈ°λŠ₯

FBEye Web ServerλŠ” μ‹œν—˜ κ°λ…μžλ₯Ό μœ„ν•œ μ‹œν—˜ 관리/감독 μ›Ή μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μž…λ‹ˆλ‹€. μ‹œν—˜ κ΄€λ¦¬μž(감독) κ³„μ •μœΌλ‘œ νšŒμ›κ°€μž… 및 λ‘œκ·ΈμΈν•˜μ—¬ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  • μ‹œν—˜ 관리 νŽ˜μ΄μ§€, 문제 관리 νŽ˜μ΄μ§€, μ‘μ‹œμž 관리 νŽ˜μ΄μ§€λ₯Ό μ΄μš©ν•΄ μ‹œν—˜μ„ μƒμ„±ν•˜κ±°λ‚˜ μ‚­μ œν•  수 있으며, μ‹œν—˜ λ¬Έμ œμ™€ μ‘μ‹œμžμ— λŒ€ν•œ 정보λ₯Ό μˆ˜μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • μ‹œν—˜ 도쀑 μ±„νŒ…μœΌλ‘œ μ‘μ‹œμžλ“€κ³Ό μ‹€μ‹œκ°„μœΌλ‘œ μ†Œν†΅ν•˜λ©° μ‹œν—˜μ— κ΄€ν•œ ν”Όλ“œλ°±μ„ λΉ λ₯΄κ²Œ 주고받을 수 μžˆμŠ΅λ‹ˆλ‹€.
  • μ‘μ‹œμžκ°€ λΆ€μ • ν–‰μœ„λ‘œ μ˜μ‹¬λ˜λŠ” ν–‰μœ„λ₯Ό ν•  μ‹œ ν•΄λ‹Ή 사항에 λŒ€ν•œ λ‘œκ·Έκ°€ κ°λ…κ΄€μ—κ²Œ μ „μ†‘λ©λ‹ˆλ‹€. 감독관은 μ›Ή νŽ˜μ΄μ§€λ‘œ μ „μ†‘λœ 둜그λ₯Ό 보고 λˆ„κ°€ μ–΄λ–€ ν–‰μœ„λ₯Ό ν–ˆλŠ”μ§€ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • μ°Έμ—¬μž λͺ©λ‘μ—μ„œ μ‘μ‹œμžλ₯Ό μ„ νƒν•˜μ—¬ ν•΄λ‹Ή μ‘μ‹œμžμ˜ μ–Όκ΅΄κ³Ό ν™”λ©΄ μ˜μƒμ„ μ‹€μ‹œκ°„μœΌλ‘œ λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

νŠΉμ§•

  • Javascript λŸ°νƒ€μž„ Node.js와 μ›Ή ν”„λ ˆμž„μ›Œν¬ Express.jsλ₯Ό μ‚¬μš©ν•˜μ—¬ κ΅¬ν˜„ν–ˆμŠ΅λ‹ˆλ‹€.
  • socket.ioλ₯Ό ν†΅ν•œ μ‹€μ‹œκ°„ μ±„νŒ… 및 사진 슀트리밍
  • MongoDBλ₯Ό μ‚¬μš©ν•˜μ—¬ DB μ„œλ²„ κ΅¬ν˜„

μž‘λ™ 원리

FBEye Web Server의 μž‘λ™ 원리에 λŒ€ν•΄ μ„€λͺ…ν•˜λŠ” νŒŒνŠΈμž…λ‹ˆλ‹€.

νšŒμ›κ°€μž…

  • νšŒμ›κ°€μž… νŽ˜μ΄μ§€μ—μ„œ 이메일과 λΉ„λ°€λ²ˆν˜Έ, 확인 λΉ„λ°€λ²ˆν˜Έλ₯Ό μž…λ ₯ν•˜μ—¬ νšŒμ›κ°€μž…μ„ ν•©λ‹ˆλ‹€. νšŒμ›κ°€μž…μ„ ν•˜λ©° μ‚¬μš©μžκ°€ μž…λ ₯ν•œ λ°μ΄ν„°λŠ” μ„œλ²„λ‘œ μ „μ†‘λ©λ‹ˆλ‹€.
  • λΉ„λ°€λ²ˆν˜Έμ™€ 확인 λΉ„λ°€λ²ˆν˜Έκ°€ μΌμΉ˜ν•˜λŠ”μ§€ κ²€μ‚¬ν•©λ‹ˆλ‹€. μΌμΉ˜ν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄ νŒ¨μŠ€μ›Œλ“œκ°€ μΌμΉ˜ν•˜μ§€ μ•ŠλŠ”λ‹€κ³  flashλ₯Ό μ „μ†‘ν•˜λ©° νšŒμ›κ°€μž… νŽ˜μ΄μ§€λ‘œ λ¦¬λ‹€μ΄λ ‰νŠΈν•˜κ³ , μΌμΉ˜ν•œλ‹€λ©΄ λ‹€μŒ λ‹¨κ³„λ‘œ λ„˜μ–΄κ°‘λ‹ˆλ‹€.
  • 전솑받은 데이터와 λ™μΌν•œ 정보가 DB에 μ €μž₯λ˜μ–΄ μžˆλŠ”μ§€ κ²€μ‚¬ν•©λ‹ˆλ‹€. λ™μΌν•œ 정보가 DB에 이미 μ €μž₯λ˜μ–΄ μžˆλ‹€λ©΄ 이미 λ“±λ‘λœ 이메일이라고 flashλ₯Ό μ „μ†‘ν•˜λ©° νšŒμ›κ°€μž… νŽ˜μ΄μ§€λ‘œ λ¦¬λ‹€μ΄λ ‰νŠΈν•˜κ³ , μƒˆλ‘œμš΄ 데이터라면 DB에 데이터λ₯Ό μ €μž₯ν•œ λ’€ νšŒμ›κ°€μž…μ— μ„±κ³΅ν•˜μ˜€λ‹€κ³  flashλ₯Ό μ „μ†‘ν•˜λ©° 둜그인 νŽ˜μ΄μ§€λ‘œ λ¦¬λ‹€μ΄λ ‰νŠΈν•©λ‹ˆλ‹€.

둜그인

  • μ‚¬μš©μžκ°€ λ‘œκ·ΈμΈμ„ μ‹œλ„ν•˜λ©΄μ„œ μž…λ ₯ν•œ 이메일과 λΉ„λ°€λ²ˆν˜Έκ°€ μ„œλ²„λ‘œ μ „μ†‘λ©λ‹ˆλ‹€.
  • μ„œλ²„λŠ” DB 내에 전솑받은 데이터와 μΌμΉ˜ν•˜λŠ” 데이터가 μžˆλŠ”μ§€ κ²€μ‚¬ν•©λ‹ˆλ‹€. 검사에 μ‹€νŒ¨ν•˜λ©΄ μ΄λ©”μΌμ΄λ‚˜ νŒ¨μŠ€μ›Œλ“œκ°€ 잘λͺ»λ˜μ—ˆλ‹€κ³  flashλ₯Ό μ „μ†‘ν•˜λ©° 둜그인 νŽ˜μ΄μ§€λ₯Ό ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ μ „μ†‘ν•˜κ³ , μ„±κ³΅ν•˜λ©΄ μ„Έμ…˜μ— 둜그인 정보λ₯Ό λ“±λ‘ν•©λ‹ˆλ‹€.

μ‹œν—˜ 관리

μ‹œν—˜ μΆ”κ°€

  • μƒˆλ‘œμš΄ μ‹œν—˜μ„ μΆ”κ°€ν•˜λŠ” νŽ˜μ΄μ§€μž…λ‹ˆλ‹€. μ‹œν—˜ 이름, μ‹œν—˜ 감독관, μ‹œν—˜ μ‹œμž‘/μ’…λ£Œ μ‹œκ°„, μ‹œν—˜ μ½”λ“œλ₯Ό κ²°μ •ν•©λ‹ˆλ‹€.
  • μ‚¬μš©μžλŠ” μ‹œν—˜ 이름, μ‹œν—˜ μ‹œμž‘/μ’…λ£Œ μ‹œκ°„μ„ μž…λ ₯ν•©λ‹ˆλ‹€. 감독관은 ν˜„μž¬ μ„Έμ…˜μ˜ 주인으둜, λ³€κ²½ν•  수 μ—†μŠ΅λ‹ˆλ‹€. μ‹œν—˜ μ½”λ“œλŠ” λ¬΄μž‘μœ„λ‘œ μƒμ„±λ˜λŠ” μ½”λ“œλ‘œ, λ³€κ²½ν•  수 μ—†μŠ΅λ‹ˆλ‹€.
  • μΆ”κ°€λœ μ‹œν—˜μ€ μ‹œν—˜ 관리 λͺ©λ‘μ— λ‚˜νƒ€λ‚˜ κ°œμš” μ—΄λžŒ/μˆ˜μ • 및 감독이 κ°€λŠ₯ν•˜κ²Œ λ©λ‹ˆλ‹€.

μ‹œν—˜ κ°œμš”

  • μ‹œν—˜μ— λŒ€ν•œ 정보λ₯Ό ν‘œμ‹œν•©λ‹ˆλ‹€. 이름, μ‹œμž‘/μ’…λ£Œ μ‹œκ°„, μ‹œν—˜ μ½”λ“œλ₯Ό 확인할 수 있고, μ‹œν—˜μ— 총 λͺ‡ λ¬Έμ œκ°€ μžˆλŠ”μ§€, μ‘μ‹œμžλŠ” 총 λͺ‡ λͺ…이 μžˆλŠ”μ§€ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. 이 νŽ˜μ΄μ§€μ—μ„œλŠ” 문제 관리, μ‘μ‹œμž 관리 νŽ˜μ΄μ§€λ‘œ λ„˜μ–΄κ°ˆ 수 μžˆμŠ΅λ‹ˆλ‹€.

문제 관리

  • μ‹œν—˜μ— λ“±λ‘λ˜μ–΄ μžˆλŠ” λ¬Έμ œλ“€μ˜ 문제 번호, 문제 λ‚΄μš©, 문제 ν˜•μ‹, 배점의 정보λ₯Ό 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • 문제 μΆ”κ°€ λ²„νŠΌμ„ 눌러 μƒˆλ‘œμš΄ 문제λ₯Ό μΆ”κ°€ν•˜λŠ” νŽ˜μ΄μ§€λ‘œ λ„˜μ–΄κ°ˆ 수 있고, 각 문제λ₯Ό 눌러 ν•΄λ‹Ή 문제λ₯Ό μˆ˜μ •ν•˜λŠ” νŽ˜μ΄μ§€λ‘œ λ„˜μ–΄κ°ˆ 수 μžˆμŠ΅λ‹ˆλ‹€.

문제 μΆ”κ°€

  • ν˜•μ‹, 배점, 문제, 정닡을 μž…λ ₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ‚¬μš©μžκ°€ μ™„λ£Œ λ²„νŠΌμ„ λˆ„λ₯΄λ©΄ μž…λ ₯ν•œ 데이터가 μ„œλ²„λ‘œ μ „μ†‘λ˜μ–΄ DB에 μ €μž₯λ©λ‹ˆλ‹€.

문제 νŽΈμ§‘

  • μΆ”κ°€λœ 문제λ₯Ό μˆ˜μ •ν•  수 μžˆλŠ” νŽ˜μ΄μ§€μž…λ‹ˆλ‹€.

μ‘μ‹œμž 관리

  • μ‹œν—˜μ— λ“±λ‘λœ μ‘μ‹œμžλ“€μ˜ λͺ©λ‘μ„ λ³Ό 수 μžˆλŠ” νŽ˜μ΄μ§€μž…λ‹ˆλ‹€. μ‘μ‹œμž μΆ”κ°€ λ²„νŠΌμ„ 눌러 μƒˆλ‘œμš΄ μ‘μ‹œμžλ₯Ό μΆ”κ°€ν•˜λŠ” νŽ˜μ΄μ§€λ‘œ λ„˜μ–΄κ°ˆ 수 μžˆμŠ΅λ‹ˆλ‹€.

μ‘μ‹œμž μΆ”κ°€

  • μ‘μ‹œμž 이메일, 이름, μ‘μ‹œμž μ½”λ“œλ₯Ό λ“±λ‘ν•˜λŠ” νŽ˜μ΄μ§€μž…λ‹ˆλ‹€. 이 쀑 μ‘μ‹œμž μ½”λ“œλŠ” λ¬΄μž‘μœ„λ‘œ μƒμ„±λ˜λŠ” μ½”λ“œλ‘œ, λ³€κ²½ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

μ‹œν—˜ 감독

μ‹œν—˜μ΄ μΉ˜λ€„μ§€λŠ” λ™μ•ˆ μ°Έμ—¬μžλ“€μ„ κ°λ…ν•˜λŠ” νŽ˜μ΄μ§€μž…λ‹ˆλ‹€.

  • 감독 νŽ˜μ΄μ§€λŠ” 크게 μ°Έμ—¬μž λͺ©λ‘, μ°Έμ—¬μž μ˜μƒ, λΆ€μ •ν–‰μœ„ 둜그, μ±„νŒ…μ˜ 4개의 νŒ¨λ„λ‘œ λ‚˜λ‰˜μ–΄μ§‘λ‹ˆλ‹€.
  • μ°Έμ—¬μž λͺ©λ‘ νŒ¨λ„μ—μ„œλŠ” μ‹œν—˜μ— λ“±λ‘λœ μ°Έμ—¬μžλ₯Ό 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. (( μ°Έμ—¬μžκ°€ μ‹œν—˜μ— μž…μž₯ν–ˆλŠ”μ§€ 색을 톡해 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. ))
  • μ°Έμ—¬μž μ˜μƒ νŒ¨λ„μ—μ„œλŠ” μ°Έμ—¬μžλ“€μ˜ μ–Όκ΅΄ μ˜μƒκ³Ό μ‹œν—˜ 화면을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. μ°Έμ—¬μž λͺ©λ‘μ—μ„œ μ˜μƒμ„ ν™•μΈν•˜κ³  싢은 μ°Έμ—¬μžλ₯Ό λˆŒλŸ¬μ„œ μ„ νƒν•˜λ©΄ ν•΄λ‹Ή μ°Έμ—¬μžμ˜ μ–Όκ΅΄ μ˜μƒκ³Ό μ‹œν—˜ 화면이 μ‹€μ‹œκ°„μœΌλ‘œ 보이게 λ©λ‹ˆλ‹€.
  • λΆ€μ •ν–‰μœ„ 둜그 νŒ¨λ„μ—μ„œλŠ” μ°Έμ—¬μžκ°€ λΆ€μ •ν–‰μœ„λ₯Ό ν–ˆλ‹€κ³  μ˜μ‹¬λ  λ•Œλ§ˆλ‹€ μ „μ†‘λ˜λŠ” 둜그λ₯Ό λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€. λΆ€μ •ν–‰μœ„λ₯Ό ν–ˆλ‹€κ³  μ˜μ‹¬λ˜λŠ” μ°Έμ—¬μžκ°€ λˆ„κ΅¬κ³ , μ–Έμ œ μ–΄λ–€ 행동을 ν–ˆλŠ”μ§€ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • μ±„νŒ… νŒ¨λ„μ—μ„œλŠ” μ‹œν—˜μ— λŒ€ν•œ 정보, μ‹œν—˜ λ¬Έμ œμ— λŒ€ν•œ ν”Όλ“œλ°± 등을 μ‹€μ‹œκ°„μœΌλ‘œ μ°Έμ—¬μžλ“€κ³Ό μ£Όκ³ λ°›μœΌλ©° μ†Œν†΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ™ΈλΆ€ 라이브러리

  • Bootstrap (ν”„λ‘ νŠΈμ—”λ“œ ν”„λ ˆμž„μ›Œν¬)
  • Node.js (Javascript λŸ°νƒ€μž„)
  • Express.js (Node.js μ›Ή ν”„λ ˆμž„μ›Œν¬)
  • ejs (Jake) (ν…œν”Œλ¦Ώ 엔진)
  • socket.io (WebSocket 라이브러리)
  • MongoDB (λ¬Έμ„œν˜• NoSQL λ°μ΄ν„°λ² μ΄μŠ€)

Features

QRμ½”λ“œλ₯Ό ν†΅ν•œ μ‹€μ‹œκ°„ 인증
  • 처리 μ„œλ²„μ—μ„œ λ°›μ•„μ˜¨ QRμ½”λ“œ 데이터λ₯Ό Zxing라이브러리λ₯Ό μ΄μš©ν•΄μ„œ ν™”λ©΄μœΌλ‘œ 좜λ ₯ν•©λ‹ˆλ‹€. μ΄λŠ” λͺ¨λ°”일 앱을 톡해 μΈμ¦ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.
λΆ€μ •ν–‰μœ„ 방지
  1. QRμ½”λ“œλ₯Ό ν†΅ν•œ μ‹€μ‹œκ°„ 인증에 μ‹€νŒ¨ν•˜λ©΄ μ‹œν—˜ λ¬Έμ œκ°€ 보이지 μ•Šκ²Œ λ©λ‹ˆλ‹€.
  2. μ°½ 크기λ₯Ό μ‘°μ ˆν•˜κ±°λ‚˜, μ΅œμ†Œν™” μ‹œν‚¬ 수 μ—†κ²Œ λ©λ‹ˆλ‹€.
  3. 2개 μ΄μƒμ˜ λͺ¨λ‹ˆν„° μ‚¬μš© μ‹œ λ‹€λ₯Έ λͺ¨λ‹ˆν„°μ˜ 화면을 κ°€λ €μ„œ ν•˜λ‚˜μ˜ λͺ¨λ‹ˆν„°λ§Œ μ‚¬μš©ν•  수 있게 λ©λ‹ˆλ‹€.
  4. 이 ν”„λ‘œκ·Έλž¨ 외에 λ‹€λ₯Έ ν”„λ‘œκ·Έλž¨μ„ μ•žμœΌλ‘œ λ„μ›Œ λ³Ό 수 μ—†κ²Œ ν•©λ‹ˆλ‹€.
  5. μ‹œν—˜ μ‘μ‹œ 쀑인 화면은 κ΄€λ¦¬μžμš© μ›ΉνŽ˜μ΄μ§€μ—μ„œ κ΄€λ¦¬μžκ°€ λ³Ό 수 있게 λ©λ‹ˆλ‹€.
μ‹œν—˜ ν™˜κ²½ 제곡
  • ν™”λ©΄ 밖을 보지 μ•Šλ”λΌλ„ μ‹œν—˜μ„ λ³Ό 수 μžˆλŠ” ν™˜κ²½μ„ μ œκ³΅ν•©λ‹ˆλ‹€.
  1. λ©”λͺ¨ν•  수 μžˆλŠ” 곡간이 μ œκ³΅λ©λ‹ˆλ‹€.
  2. μ‹œν—˜ μ’…λ£ŒκΉŒμ§€ 남은 μ‹œκ°„μ„ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • 처음 μ‚¬μš©ν•˜λŠ” μ‚¬λžŒμ„ μœ„ν•΄ μ‹œν—˜ μ „ μƒ˜ν”Œ ν™˜κ²½μ„ μ œκ³΅ν•©λ‹ˆλ‹€.
  • μ‹œν—˜ μ „, 진행 쀑에 μ‹œν—˜ κ΄€λ¦¬μžμ™€ μ±„νŒ…μ„ 톡해 μ†Œν†΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
EyeTracking 및 λΆ€μ •ν–‰μœ„ 감지
  • 처리 μ„œλ²„μ—μ„œ μ „μ†‘ν•œ λͺ¨λ“  μ‹œμ„  λ°©ν–₯ λ²‘ν„°λŠ” μ΅œμ‹  5개의 값을 평균내어 μ‚¬μš©ν•©λ‹ˆλ‹€.
  1. Calibration λ‹¨κ³„μ—μ„œ ν™”λ©΄μƒμ˜ νŠΉμ§•μ μ„ 쳐닀보며 ν‚€ μž…λ ₯을 ν•˜λ©΄ ν•΄λ‹Ή μ’Œν‘œμ— λŒ€ν•œ μ‹œμ„  λ°©ν–₯ 벑터가 μž…λ ₯λ©λ‹ˆλ‹€.
  2. μ„œλ²„μ—μ„œ μ‹œμ„  데이터가 λ„˜μ–΄μ˜€λŠ” 경우, λ‹€μŒκ³Ό 같은 μˆœμ„œλ‘œ 화면상 μ’Œν‘œλ₯Ό κ³„μ‚°ν•©λ‹ˆλ‹€.
    1. 점 ν•œκ°œλ₯Ό κ³ λ₯΄κ³  그와 μ΄μ›ƒν•œ 3개의 점을 골라 μ§μ‚¬κ°ν˜•μ„ λ§Œλ“­λ‹ˆλ‹€. μ§μ‚¬κ°ν˜•μ΄ μ•„λ‹Œκ²½μš°λŠ” κ³„μ‚°ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
    2. iμ—μ„œ λ§Œλ“  μ§μ‚¬κ°ν˜•μ˜ 각 꼭짓점에 λ“±λ‘λ˜μ–΄ μžˆλŠ” μ‹œμ„  λ°©ν–₯ 벑터듀을 κ΅μ°¨ν•˜μ—¬ λ§Œλ“€μˆ˜ μžˆλŠ” λͺ¨λ“  μ‚¬κ°ν˜•μ— λŒ€ν•˜μ—¬ λ‹€μŒμ„ μ‹œλ„ν•©λ‹ˆλ‹€.
      1. 검사할 값이 μ‚¬κ°ν˜• 내뢀에 μžˆλŠ”μ§€ νŒλ³„ν•©λ‹ˆλ‹€.
      2. μ‚¬κ°ν˜• 내뢀에 μžˆλŠ”κ²½μš° 투영 λ³€ν™˜μ„ 톡해 ν•΄λ‹Ή μ‚¬κ°ν˜• λ‚΄λΆ€μ˜ μƒλŒ€μ’Œν‘œλ₯Ό κ΅¬ν•©λ‹ˆλ‹€.
      3. iμ—μ„œ λ§Œλ“  μ§μ‚¬κ°ν˜•μ˜ μ‹œμž‘μ κ³Ό 길이, bμ—μ„œ 얻은 λ‚΄λΆ€μ’Œν‘œλ₯Ό ν™œμš©ν•΄ ν™”λ©΄μƒμ˜ μ‹€ μ’Œν‘œλ₯Ό κ³„μ‚°ν•©λ‹ˆλ‹€.
  3. 2μ—μ„œ 얻은 λͺ¨λ“  값듀쀑 μ–‘ 끝 25%λ₯Ό μ œμ™Έν•œ 25%~75%의 값듀을 평균을 λ‚΄μ–΄ ν˜„μž¬ μ‹œμ„ μ— λŒ€ν•œ 화면상 μ’Œν‘œλ₯Ό μ–»μ–΄λƒ…λ‹ˆλ‹€.
  4. Calibration λ‹¨κ³„μ—μ„œ Eye-Tracking이 잘 λ˜λŠ”μ§€ 확인 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  5. λͺ¨λ“  νŠΉμ§•μ μ— λŒ€ν•΄ 5회 μ΄μƒμ˜ 값이 μž…λ ₯된경우 Calibration이 μ’…λ£Œλ©λ‹ˆλ‹€.
  6. μ‹œν—˜ μ‘μ‹œλ‹¨κ³„μ—μ„œ 2μ—μ„œ 얻은 값이 μ „ν˜€ μ—†λŠ” 경우, μ‹œμ„ μ΄ ν™”λ©΄ λ°–μœΌλ‘œ λ‚˜κ°„κ²ƒμœΌλ‘œ κ°„μ£Ό, μ„œλ²„λ‘œ λΆ€μ •ν–‰μœ„ 둜그λ₯Ό μ „μ†‘ν•©λ‹ˆλ‹€.

Library

- okhttp
- okio

μ„€μΉ˜

  1. Node.js 12 or later μ„€μΉ˜
  2. npm install λͺ…령을 μ‚¬μš©ν•˜μ—¬ μ˜μ‘΄μ„± νŒ¨ν‚€μ§€ μ„€μΉ˜

μ‹€ν–‰

  • npm start

μ„€μ •

  • settings.json νŒŒμΌμ„ μˆ˜μ •ν•˜μ—¬ μ„€μ •

net: λ„€νŠΈμ›Œν¬ μ„€μ •

  • key: TLS에 μ‚¬μš©ν•  κ°œμΈν‚€
  • cert: TLS에 μ‚¬μš©ν•  μΈμ¦μ„œ
  • desktop.port: λ°μŠ€ν¬νƒ‘ μ•± 연결을 μœ„ν•œ 포트
  • mobile.port: λͺ¨λ°”일 μ•± 연결을 μœ„ν•œ 포트

db: λ°μ΄ν„°λ² μ΄μŠ€ μ„€μ •

  • uri: MongoDB μ„œλ²„ μ£Όμ†Œ

auth: μ‚¬μš©μž 인증 μ„€μ •

  • size: 인증 μ½”λ“œμ˜ 길이
  • interval: 인증 μ½”λ“œ κ°±μ‹  μ£ΌκΈ°

crypto: μ•”ν˜Έν™” μ„€μ •

  • algorithm: μ•”ν˜Έν™” μ•Œκ³ λ¦¬μ¦˜
  • length: μ•”ν˜Έν™”μ— μ‚¬μš©ν•  ν‚€μ˜ 길이