주관 : 단국대학교 공학교육혁신 센터
AIOT Project
아이디어 소개
저희 학교에서 진행하는 도서관 데이터 분석을 통한 서비스 구현 대회와
이 AIOT디바이스 프로젝트를 연관 시키고자 하였습니다
저희 도서관의 문제점은 콘센트가 있는 자리가 부족하다는 것입니다.
하지만 생각보다 좌석은 많지만 사용하지 않지만 자리만 맡아 놓고 가는 사람들 때문에 문제점가 야기됩니다.
이를 해결하고자 Face detection을 통해 자리에 있는 사람들만 선별을 하고 자리를 2시간 비울 시에 빨간 LED를 켜는 등의 신호를 주어서 자리를 치우고 앉을 수 있게끔 서비스를 구현하고자 하였습니다
또한 외부에 있을때 도서관 내부에 사람이 몇명이 있는지 알려주므로써
즉, 도서관의 혼잡도를 실시간으로 제공하여
도서관 이용률을 높이는 효과를 기대할 수 있습니다
AIOT Project
실행 영상

구현 영상
AIOT Project
사용한 장치 및 기술
AI적 요소 : Face detection
IoT적 요소 : maixduino 내 Camera connector & K210

사용한 Maixduino
AIOT Project
Youtube
Youtube 링크 :https://youtu.be/DPy5HrJepqo
문제점 : 마스크를 쓴 상태 혹은 카메라를 응시하지 않은 상태는 선별하지 못함
AIOT Project
소스코드


AIOT Project
코드 설명
단순히 설명을 위한 부분이므로 들여쓰기가 맞지 않는다는 점 유의해 주시기 바랍니다
#라이브러리를 가져옵니다
import sensor, image, lcd, time
import KPU as kpu
import gc, sys
def lcd_show_except(e):
import uio
err_str = uio.StringIO()
sys.print_exception(e, err_str)
err_str = err_str.getvalue()
img = image.Image(size=(224,224))
img.draw_string(0, 10, err_str, scale=1, color=(0xff,0x00,0x00))
lcd.display(img)
#k210 의 저장시스템을 보면 k _model을 0x300000 부터 할당을 하므로 주소를 다음과 같이 지정을 해줍니다
def main(model_addr=0x300000, lcd_rotation=0, sensor_hmirror=False, sensor_vflip=False):
try:
sensor.reset()
except Exception as e:
raise Exception("please check hardware connection, or hardware damaged! err: {}".format(e))
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.set_hmirror(False)
sensor.set_vflip(sensor_vflip)
sensor.run(1)
lcd.init(type=1)
lcd.rotation(lcd_rotation)
lcd.clear(lcd.WHITE)
#수업자료로 제공된 parameter를 사용하였습니다
anchors = (1.889, 2.5245, 2.9465, 3.94056, 3.99987, 5.3658, 5.155437, 6.92275, 6.718375, 9.01025)
try:
task = None
task = kpu.load(model_addr)
kpu.init_yolo2(task, 0.5, 0.3, 5, anchors) # threshold:[0,1], nms_value: [0, 1]
while(True):
img = sensor.snapshot()
t = time.ticks_ms()
objects = kpu.run_yolo2(task, img)
t = time.ticks_ms() - t
if objects:
for obj in objects:
img.draw_rectangle(obj.rect())
#탐지한 오브젝트의 개수를 출력을 합니다
print(len(objects))
#print(obj) #obj dictionary is not class rect()[0] : x [1] : y
img.draw_string(0, 200, "t:%dms" %(t), scale=2)
lcd.display(img)
except Exception as e:
raise e
finally:
if not task is None:
kpu.deinit(task)
#위에서 작성한 main 문을 가져와 줍니다
if __name__ == "__main__":
try:
main( model_addr=0x300000, lcd_rotation=0, sensor_hmirror=False, sensor_vflip=False)
# main(model_addr="/sd/m.kmodel")
except Exception as e:
sys.print_exception(e)
lcd_show_except(e)
finally:
gc.collect()
'etc > 활동' 카테고리의 다른 글
| 네이버 부스트캠프 AI Tech 4기 합격후기 (0) | 2022.09.23 |
|---|