Back to Course

Quarky 및 파이썬을 사용한 로봇 공학 및 AI - 레벨 1

0% Complete
0/0 Steps
  1. 로봇 공학의 기초
    수업 1: Quarky 로봇의 기초
    5 Topics
  2. 수업 2: 로봇 동작의 기초
    3 Topics
  3. 수업 3: 무선 제어 로봇
    4 Topics
  4. 라인 팔로워
    수업 4: 라인 감지를 위한 IR 센서 보정
    3 Topics
  5. 수업 5: 로봇을 따라가는 라인
    4 Topics
  6. 로봇 공학을 이용한 AI
    수업 6: AI 배달 봇으로서의 Quarky - 파트 1
    3 Topics
  7. 수업 7: AI 배달 봇으로서의 Quarky - 파트 2
    4 Topics
  8. 수업 8: 자율주행차 - 파트 1
    4 Topics
  9. 수업 9: 로봇 애완동물
    4 Topics
  10. 수업 10: 제스처 기반 로봇 제어 - 1부
    3 Topics
  11. 수업 11: 제스처 기반 로봇 제어 - 파트 2
    3 Topics
  12. 캡스톤 프로젝트
    수업 12: 캡스톤 프로젝트
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)

이 코드는 세 가지 라이브러리를 사용합니다.

  1. OpenCV – 이미지 캡처 및 이미지 처리용
  2. Numpy – 배열 조작용
  3. Tensorflow – 기계 학습용

Run 버튼을 클릭하여 코드를 실행하고 테스트합니다.

코드 수정

Quarky Movements에 대한 코드를 추가해 보겠습니다.

 

다음을 수행해야 합니다.

  1. Quarky 클래스 선언.
  2. Quarky가 손짓으로 움직일 수 있는 조건을 추가합니다.

시작하자!

클래스 선언

  1. 프로그램 시작 부분에 quarky 클래스 선언을 추가합니다.
    quarky <span class="token operator">=</span> Quarky<span class="token punctuation">(</span><span class="token punctuation">)</span>

무빙 쿼키

여기서는 사용자 정의 함수인 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)
	

과제 업로드

과정을 마친 후 수료증을 받으려면 과제를 제출해야 합니다.

과제를 업로드하려면 아래 단계를 따르세요.

  1. 먼저 Pictoblox 파일을 선택해야 하므로 Browse를 클릭합니다.
  2. .sb3 파일을 선택합니다.
  3. 그리고 Upload 버튼을 클릭합니다.

행운을 빕니다! ????