λ Έλ ΉμΈ΅ μ΄μνλ κ°μ§ λ° λ³΄νΈμ μλ¦Ό μλΉμ€
νμ₯_μ μμ€ : π§ μ μ μ΄κ΄
νμ_κΉλ―Όμ : π μμ± λ°μ΄ν° λΆμ λ° νμ΅
νμ_κΉμ§μ : π μ΄λ―Έμ§ λ° μμ λ°μ΄ν° λΆμ λ° νμ΅
νμ_μμμ§ : π μΉ νμ΄μ§ μ μ
νμ_μ€μ§μ : π μ΄λ―Έμ§ λ° μμ λ°μ΄ν° λΆμ λ° νμ΅
PYTHON 3.9.16
CUDA 11.3
<μ¬μ© λͺ¨λΈ, api λ±>
μ΄λ―Έμ§λ°μ΄ν° : YOLOv7-tiny
μμλ°μ΄ν° : YOLOv7, media pipe, yolov7-w6-pose
μμ±λ°μ΄ν° : webkitSpeechRecognition, BERT
λ‘κ·ΈμΈ DB : Firebase
(λ°μ΄ν° μΆμ² : AI-Hub)
65μΈ μ΄μμ κ³ λ Ή μΈκ΅¬κ° μ¦κ°ν¨μ λ°λΌ, νλ‘ κ³μλ μ΄λ₯΄μ λν λ§μμ§κ³ μλ€.
μ΄ νλ‘μ νΈλ νΌμ κ³μλ μ΄λ₯΄μ μ νλ νΉμ±κ³Ό λ°μ μ리λ₯Ό λͺ¨λν°λ§νμ¬
μνμ¬νμ μμΈ‘ λ° κ°μ§νκ³ λ³΄νΈμμκ² μ¦μ μ리기 μν΄ μ μλμλ€.
μ νλ μ΄μλ‘ μΈν΄ μ μ μ μΈ
AI-Hubμμ μ΄ 80κ°μ§μ μΌμμν λΌλ²¨λ§ λ°μ΄ν°λ₯Ό λ΄μ
< μΌμμν μ΄λ―Έμ§ λ°μ΄ν° > λ₯Ό κ°μ Έμ, κ°μ μμ νν λ°μν μ μλ 17κ°μ§μ μν©λ§μ μ λ³νμλ€.
μ΄λ―Έμ§λ€μ YOLOv7-tinyμ νμ΅μ μν΄ μ΄λ―Έμ§ ν¬κΈ°λ₯Ό 1920x1080 μ¬μ΄μ¦μμ 640x360μ μ¬μ΄μ¦λ‘ μ‘°μ νμλ€.
μ΄λ―Έμ§λ§λ€ κ° νλμ λ°μ΄λ©λ°μ€ μ’νκ° λ€μ΄μμκ³ , λ°μ΄λ©λ°μ€μ μ’ν λν μ΄λ―Έμ§ ν¬κΈ° λΉμ¨μ λ§μΆ° μ κ·νμμΌμ£Όμλ€.
-
YOLOv7-tinyλ₯Ό μ μ ν μ΄μ λ YOLOv7-tinyκ° κ°μ²΄ νμ§μ κ°μ₯ κΈ°λ³Έμ μ΄κ³ μλκ° λ§€μ° λΉ λ₯Έ μκ³ λ¦¬μ¦μΌλ‘,
νλ‘μ νΈμ νμν μ€μκ° μμ μ²λ¦¬μ μ ν©νλ€κ³ μκ°νκΈ°μ μ μ νμλ€.
μ΄λ―Έμ§ μ¬μ΄μ¦μ λ°μ΄λ©λ°μ€ μ’ν μ κ·νκ° λλ 5325κ°μ λ°μ΄ν°λ€μ Batch Size=4, Epoch=100μΌλ‘ YOLOv7-tinyλ₯Ό ν΅ν΄ νμ΅μμΌ
17κ°μ§μ νλ λΆλ₯ κ²°κ³Όλ₯Ό ν μ€νΈλ‘ μΆμΆνλ€.
μ΄μ μμ λ°μ΄ν°
AI-Hubμμ κ³ λ Ήμ κ°μΈμ μΈνκ³Ό νμ νΉμ±(μ΅κ΄), κ±΄κ° μν, μν ν¨ν΄ λ±μ λ΄κ³ μλ
< μ΄μνλ μμ λ°μ΄ν° > λ₯Ό κ°μ Έμ, μΌμ μνμμ μΌμ΄λ μ μλ€κ³ νλ¨ν λμ/μΌμ/λ°°ν μ΄ 3κ°μ§ sectionμ λ°μ΄ν°λ₯Ό μ λ³νμλ€.
μ΄ νλ‘μ νΈμμλ λ³΄ν΅ μ¬ν 곡κ°(μ€λ΄)μμ μΌμ΄λλ μ΄μ μν©μ κ°μ§νμ§λ§, λͺ¨λΈμ νμ΅μ μν΄ μ€λ΄μ μ€μΈ λ°μ΄ν° λͺ¨λ μ¬μ©νμλ€.
μμ λ°μ΄ν° μ€ λμ/μΌμ/λ°°νκ° μΌμ΄λλ μκ°μΈ 2μ΄ μ λλ₯Ό νμ΄λΌμ΄νΈλ‘ κ°μ Έμ μμμ μ μ²λ¦¬λ₯Ό λ§μ³€λ€.
μ 체μ μΈ κ·Έλ¦Όμ
μ€μκ° μμ > κ΄μ κ°λ μΆμΆ > κ·Έλν μ‘μΆ λ° μ΄μνλ κ°μ§
μ΄λ κ΄μ κ°λλ₯Ό μΆμΆν΄ μ΄μνλμ κ°μ§νλ λ°©λ²μ
λμκ³Ό κ°μ μ΄μμμΈ, 보νκ³Ό κ°μ λμ μΈ μμΈ, λͺ μκ³Ό κ°μ μ μ μΈ μμΈμ
κ΄μ κ°λ μ°¨μ΄κ° νμ°νκ² λλ¬λ¬κΈ°μ μ¬μ©νκ² λμλ€.
LSTMμ κΈ°μ‘΄μ RNNμ 보μν΄ μ₯/λ¨κΈ° κΈ°μ΅μ κ°λ₯νκ² μ€κ³ν μ κ²½λ§μ κ΅¬μ‘°λ‘ μ£Όλ‘ μκ³μ΄μ²λ¦¬, μμ°μ΄μ²λ¦¬μ μ¬μ©λλ€.
μ΄ νλ‘μ νΈμμλ μ€μκ° μμμμ κ΄μ κ°λλ₯Ό μΆμΆν΄λ΄ κ·Έλνλ‘ λ°λ‘ 보μ¬μ£Όλλ°μ μ΄μ μ λμκΈ°μ, LSTMμ μ¬μ©νμλ€.
λͺ¨λΈ νμ΅ μμλ κΈ°μ‘΄ 375κ°μ λ°μ΄ν°λ°μ μμκΈ°μ, λ°μ΄ν°λ₯Ό μ¦κ°νμ¬ 15000κ°μ λ°μ΄ν°λ₯Ό νμ΅μμΌ°λ€.
λν, κ·Έλνλ₯Ό 그릴 λ μ΅λν λκΉ μμ΄ λΆλλ½κ² μ‘μΆνκΈ° μν΄ λ°μ΄ν°λ₯Ό 1μ΄μ νλ²μ© 보μ¬μ£Όλ κ²κ³Ό κ°μ΄ μ§§κ² λλ κ²μ΄ μλ,
3μ΄μ νλ²μ© 보μ¬μ£Όλλ‘ κΈΈκ² λμ΄λ΄ μ‘°κΈ λ λΆλλ½κ² λ§λ€μλ€.
<YOLOv7, media pipe>
media pipeλ₯Ό μ΄μ©ν΄μ μ€μκ° μμμμ μλμΌλ‘ κ΄μ κ°λλμ μΆμΆν΄ κ·Έλνλ‘ μ‘μΆνλ € νμΌλ, μ¬λμ μΈμνλ μ νλ λ©΄μμ λ¬Έμ κ° λ°μνλ€.
λ°λΌμ YOLOv7μ νμ©ν΄ μ¬λλ§ λ¨Όμ μΈμν ν, μ¬λλ§ ν¬λ‘ν μμμ media pipeμ λ£μ΄ κ΄μ κ°λλ₯Ό μΆμΆνλ νμμΌλ‘ λ°κΎΈμλ€.
μμ κ°μ λ°©μμ νΌμ¬μ²΄κ° ν¬κ² λ³νν λ μΆμ λ 골격μ μ€μ°¨κ° λ§€μ° μ»€μ Έ λ체 κ°λ₯ν λ€λ₯Έ λ°©λ²μ μ°ΎμμΌ νλ€.
λ¨Όμ , AI-hubμμ ꡬν μμ λ°μ΄ν°λ 2μΈ μ΄μμ΄ μ΄¬μλκ±°λ νΌμ¬μ²΄κ° λ§€μ° μκ³ νμ΄λΌμ΄νΈκ° κΈΈμ΄μ λΉν΄ λ§€μ° μ§§μ νΈμ΄μκΈ°μ μκ° μ κ³ μ μ²λ¦¬νκΈ°μ λΆνΈνλ€.
λ°λΌμ ν΄λμ€ λ³λ‘ μμμ μ§μ 촬μνμλ€.
λμμ λν ꡬλΆμ μ΅μ°μ μ μΈ λͺ©νλ‘ λμκΈ°μ λμ, λμκ³Ό κ°μ₯ λΉμ·ν νλ μ νμΈ λκΈ°, λ°°νμ κ°μ μΌμμ μΈ νλ μ΄ 3κ°μ§λ‘ ꡬλΆνμλ€.
κ° ν΄λμ€μ λν μμμ 40κ° μ λλ‘ ν보νμκ³ κ° μμμ μ½ 3~4μ΄ κΈΈμ΄, νΌμ¬μ²΄ μ μ²΄κ° λ³΄μ΄λ κ°λλ‘ νλμ΄ μ΄λ£¨μ΄μ§λ μ¬λ¬ κ²½μ°μ μλ₯Ό μ¬ννμ¬ μ΄¬μνμλ€.
촬μν μμμ yolov7-w6-pose.pt λͺ¨λΈμ νμ©νμ¬ κ³¨κ²©μ μμΉλ₯Ό μΆμ , μΆμ ν 2μ°¨μ μ’νλ₯Ό λ°νμΌλ‘ κ°λλ₯Ό κ³μ°νμλ€. (https://github.com/WongKinYiu/yolov7)
(κ°λμ© μ 리창μ λΉμΉ λͺ¨μ΅λ 골격μ μΆμ ν΄λ΄λλ°, ν νλ μμ λν λͺ¨λΈμ μΆλ ₯κ°μ΄ 2λ°°κ° λλ€. κ°μ₯ μ λ’°λκ° λμ κ° κ³¨κ²©μ μΆμΆν΄λ΄λ©΄ μ¬λ¬ νΌμ¬μ²΄κ° μμ΄λ λͺ©ν νΌμ¬μ²΄μ λν κ°λ§ κ°μ Έμ¬ μ μμλ€.)
pose-estimate.pyλ λλ ν 리μ ν¬ν¨λ μ 체 μμμ λν΄ ν΄λΉ κ³Όμ μ μννκ³ νλ μ λ¨μλ‘ κ° κ΄μ κ°λλ₯Ό κΈ°λ‘νμ¬ csvνμΌλ‘ μμ±νλ€.
골격 μΆμ μ μ νλλ₯Ό νμΈνκΈ° μν΄ κ³¨κ²©μ΄ κ·Έλ €μ§ μμμ κ°μ λλ ν 리μ μ μ₯λλλ‘ νμμ§λ§ μΆμΆ κ³Όμ μ μλΉν μκ°μ΄ μΆκ° λκΈ°μ λ³νν΄μΌν μμμ΄ μΆκ°λμ΄μΌ νλ€λ©΄ μ΄ κ³Όμ μ μλ΅λλμΌ νλ€. (μ½ 120κ° μμ λ³νμ 5μκ° μ λ μμ)
μ΄μ μκ°λ³ κ΄μ κ°λ λ³ν λ°μ΄ν°λ₯Ό μ μ²λ¦¬ ν΄μ€λ€.
νμ§λ§ 촬μλ μμμ λλ νμλ λμ μ νμ λκΈ° λμκΉμ§ ν¬ν¨νκΈ°μ λͺ¨λ κ°μ λΌλ²¨λ§μ νλ©΄ μ νλμ μν₯μ λ―ΈμΉκ² λλ€.
μ΄λ₯Ό λ°©μ§νκΈ° μν΄ κ΅¬κ°λ³λ‘ νμ€νΈμ°¨λ₯Ό κ³μ°νμ¬ 4κ°μ§ κ΄μ λͺ¨λ λ³νκ° ν¬κ² μλ ꡬκ°μ νκ²μ΄ μλλΌκ³ νμ , μ μΈνμ¬ νμ΄λΌμ΄νΈλ§ μΆμΆνλ€.
μμ κ°μ΄ ꡬκ°λ³λ‘ νμ€ νΈμ°¨λ₯Ό μΆμΆν λ€μ,
νμ€ νΈμ°¨κ° μκ³κ° μ΄νμΈ λΆλΆμ λν΄ νν°λ§νλ©΄ λ€μκ³Ό κ°μ΄ νμ κ°μκ° μ€μ΄λ , νμ΄λΌμ΄νΈλ§ μΆμΆν΄λΌ μ μλ€.
μμ κ°μ΄ νμ΄λΌμ΄νΈλ§ μΆμΆλ κ²μ νμΈμ΄ κ°λ₯νλ€.
λ, μ΅μ’ λͺ¨λν°λ§ νλ‘κ·Έλ¨μ 1μ΄μ 10νμ© λμμ μΆμ ν κ²μ΄λ―λ‘ 30fpsλ‘ μ΄¬μλ νλ ¨ λ°μ΄ν°λ average poolingμ μ¬μ©νμ¬ 10fpsλ‘ λ§μΆ°μ€λ€.
μ΄λ κ² μ μ²λ¦¬κ° λλ λ°μ΄ν° μ¬μ©νμ¬ μν« μΈμ½λ©μ μ¬μ©ν νκ² λ°μ΄ν°μ ν¨κ» νλ ¨ λ°μ΄ν°μ μΌλ‘ λ§λ λ€.
κΈΈμ΄κ° 5μΈ μκ³μ΄ λ°μ΄ν°μ΄κΈ°μ lstmμΈ΅μ μ¬μ©ν λͺ¨λΈμ μ¬μ©νλλ°, μ νλ ν₯μμ μν΄μ dropout, batch normalizationμΈ΅μ νμ©ν΄λ³΄μκ³ ,
μ€νμ μΌλ‘λ μ΄λ‘ μ μΌλ‘λ batch normalizationμΈ΅ λ§μ μ¬μ©νλ κ²μ΄ μ±λ₯μ΄ μ’μμ BNμΈ΅λ§ μ¬μ©νμλ€(Batch Normalized Recurrent Neural Networks,2015).
μ κ³Όμ μ λͺ¨λ preprocessing_sequential_datas.ipynbμμ μ²λ¦¬νμλ€.
yolov7+mediapipe μμ yolov7 pose estimation λͺ¨λΈλ‘ λ³νν΄μ κ΄μ κ°λλ³ν μΆμ΄λ‘ μ νλλ₯Ό λΉκ΅ν΄λ³΄λ μλΉ λΆλΆ κ°μ μ΄ μ΄λ£¨μ΄μ§ κ²μ νμΈν μ μμλ€.
[μ’ : yolov7+mediapipe, μ° : yolov7-pose-estimation]
AI-Hubμμ "λΆμ΄μΌ!", " λμμ£ΌμΈμ.."μ κ°μ μκΈμν© λ°μμ λ°λ₯Έ λ€μν μν©κ³Ό νκ²½λ³ μμ± λ° μν₯μ ν¬ν¨ν λ°μ΄ν°λ₯Ό
μ€μκ° μμμμ μμ±μ μΆμΆν΄λ΄ κ·Έλν μλμ 보μ¬μ£Όλλ° νμ©νκΈ° μν΄ κ°μ Έμλ€.
μ°μ μμ±μΈμ APIλ‘ ν¬λ‘¬ λΈλΌμ°μ λ₯Ό μ¬μ©ν΄ μ½κ² ꡬν κ°λ₯ν webkitSpeechRecognitionμ ν΅ν΄
μμ±μ λ¬Έμλ‘ λ³νν΄μ€λ€.
μ΄ν ν μ€νΈ λ°μ΄ν°λ‘ μ¬μ νλ ¨λ λμ μ±λ₯μ κ°μ§ μΈμ΄ λͺ¨λΈμΈ BERT λͺ¨λΈμ ν΅ν΄
λ¬Έμλ‘ λ³νλ μμ±μ μν©μ μΈμν΄ μν μν©μΌλ‘ μΈμλλ©΄ 보νΈμμκ² μλ¦°λ€.
μ΄λ μ¬μ©λ νλ ¨ λ°μ΄ν°λ 19474κ°μ΄λ©°, Batch Sizeλ 32λ‘ μ΄ 15λ² νλ ¨μμΌ°λ€.
μ μ¬μ©ν μ΄λ―Έμ§ λ°μ΄ν°, μμ λ°μ΄ν°, μμ± λ°μ΄ν°λ₯Ό λͺ¨λ λͺ¨μ ν νμ΄μ§μ 보μ¬μ£ΌκΈ° μν΄
νμ΄μ¬ κΈ°λ°μ μΉ νλ μμν¬μΈ Flaskλ₯Ό μ¬μ©ν΄ μΉ μλΉμ€λ₯Ό λ§λ€μλ€.
λ‘κ·ΈμΈ νμ΄μ§μ κ²½μ° firebase μλ²μ μ°λνμ¬ νμ μ 보λ₯Ό κ΄λ¦¬νμλ€.
μ€ν νμΌμ μμ±ν λ dockerλ₯Ό μ¬μ©νμ§μκ³ pyinstaller λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νμλ€.
pyinstaller --onefile --add-data="templates;templates" --add-data="static;static" --add-data="models;models" --add-data="utils;utils" --add-data="latest_sequential_model.h5;." --add-data="yolov7-w6-pose.pt;." --hidden-import=seaborn --hidden-import=scipy.signal --hidden-import=matplotlib --hidden-import=matplotlib.pyplot --hidden-import=matplotlib.backends.backend_agg --hidden-import=yaml webcam_with_another_checking_skeleton_makingexe.py
















