Lesson Progress
0% Complete
코딩하자!
테스트 상자의 오른쪽 상단에 있는 ” Export Model ” 버튼을 클릭하면 PictoBlox가 모델을 Python Coding Environment로 로드합니다.
다음은 PictoBlox에서 생성한 코드입니다.
####################imports####################
# Do not change
import numpy as np
import tensorflow as tf
import time
# Do not change
####################imports####################
#Following are the model and video capture configurations
# Do not change
model = tf.keras.models.load_model("num_model.h5",
custom_objects=None,
compile=True,
options=None)
pose = Posenet() # Initializing Posenet
pose.enablebox() # Enabling video capture box
pose.video("on", 0) # Taking video input
class_list = ['Forward', 'Backward', 'Left', 'Right',
'Stop'] # List of all the classes
# Do not change
###############################################
#This is the while loop block, computations happen here
# Do not change
while True:
pose.analysehand() # Using Posenet to analyse hand pose
coordinate_xy = []
# for loop to iterate through 21 points of recognition
for i in range(21):
if (pose.gethandposition(1, i, 0) != "NULL"
or pose.gethandposition(2, i, 0) != "NULL"):
coordinate_xy.append(int(240 + float(pose.gethandposition(1, i, 0))))
coordinate_xy.append(int(180 - float(pose.gethandposition(2, i, 0))))
else:
coordinate_xy.append(0)
coordinate_xy.append(0)
coordinate_xy_tensor = tf.expand_dims(
coordinate_xy, 0) # Expanding the dimension of the coordinate list
predict = model.predict(
coordinate_xy_tensor) # Making an initial prediction using the model
predict_index = np.argmax(predict[0],
axis=0) # Generating index out of the prediction
predicted_class = class_list[
predict_index] # Tallying the index with class list
print(predicted_class)
이 코드는 세 가지 라이브러리를 사용합니다.
- OpenCV – 이미지 캡처 및 이미지 처리용
- Numpy – 배열 조작용
- Tensorflow – 기계 학습용
Run 버튼을 클릭하여 코드를 실행하고 테스트합니다.
코드 수정
Quarky Movements에 대한 코드를 추가해 보겠습니다.
다음을 수행해야 합니다.
- Quarky 클래스 선언.
- Quarky가 손짓으로 움직일 수 있는 조건을 추가합니다.
시작하자!
클래스 선언
- 프로그램 시작 부분에 quarky 클래스 선언을 추가합니다.
무빙 쿼키
여기서는 사용자 정의 함수인 runQuarky를 호출합니다.
def runQuarky(predicted_class):
예측된 클래스 결과는 루프의 predicted_class 변수에 저장됩니다. If else를 실행하여 각 조건을 확인하고 그에 따라 스프라이트가 다음 조건을 말하도록 합니다. 코드는 다음과 같습니다.
def runQuarky(predicted_class):
if pose.ishanddetected():
if predicted_class == "Forward":
quarky.runrobot("F", 60)
if predicted_class == "Backward":
quarky.runrobot("B", 60)
if predicted_class == "Left":
quarky.runrobot("L", 60)
if predicted_class == "Right":
quarky.runrobot("R", 60)
if predicted_class == "Stop":
quarky.stoprobot()
else:
quarky.stoprobot()
전체 코드는 다음과 같습니다.
####################imports####################
# Do not change
import numpy as np
import tensorflow as tf
import time
quarky = Quarky()
quarky.setorientation("VERTICAL")
# Do not change
####################imports####################
#Following are the model and video capture configurations
# Do not change
model=tf.keras.models.load_model(
"num_model.h5",
custom_objects=None,
compile=True,
options=None)
pose = Posenet() # Initializing Posenet
pose.enablebox() # Enabling video capture box
pose.video("on flipped",0) # Taking video input
class_list=['Forward','Backward','Left','Right','Stop'] # List of all the classes
# Do not change
###############################################
def runQuarky(predicted_class):
if pose.ishanddetected():
if predicted_class == "Forward":
quarky.runrobot("F", 60)
if predicted_class == "Backward":
quarky.runrobot("B", 60)
if predicted_class == "Left":
quarky.runrobot("L", 60)
if predicted_class == "Right":
quarky.runrobot("R", 60)
if predicted_class == "Stop":
quarky.stoprobot()
else:
quarky.stoprobot()
#This is the while loop block, computations happen here
# Do not change
while True:
pose.analysehand() # Using Posenet to analyse hand pose
coordinate_xy=[]
# for loop to iterate through 21 points of recognition
for i in range(21):
if(pose.gethandposition(1,i,0)!="NULL" or pose.gethandposition(2,i,0)!="NULL"):
coordinate_xy.append(int(240-float(pose.gethandposition(1,i,0))))
coordinate_xy.append(int(180-float(pose.gethandposition(2,i,0))))
else:
coordinate_xy.append(0)
coordinate_xy.append(0)
coordinate_xy_tensor = tf.expand_dims(coordinate_xy, 0) # Expanding the dimension of the coordinate list
predict=model.predict(coordinate_xy_tensor) # Making an initial prediction using the model
predict_index=np.argmax(predict[0], axis=0) # Generating index out of the prediction
predicted_class=class_list[predict_index] # Tallying the index with class list
print(predicted_class)
runQuarky(predicted_class)
과제 업로드
과정을 마친 후 수료증을 받으려면 과제를 제출해야 합니다.
과제를 업로드하려면 아래 단계를 따르세요.
- 먼저 Pictoblox 파일을 선택해야 하므로 Browse를 클릭합니다.
- .sb3 파일을 선택합니다.
- 그리고 Upload 버튼을 클릭합니다.
행운을 빕니다! ????