Lesson Progress
0% Complete

이 활동에서는 객체 감지를 수행할 코드를 작성합니다. 개체 감지는 PictoBlox 스테이지에 배경으로 업로드한 이미지에서 수행됩니다.

이 코드는 감지된 개체의 위치에서 사각형 상자를 하나씩 이동하고 사각형 상자가 개체의 클래스를 말하도록 합니다.

코딩하자

  1. Pictoblox 에서 새 파일을 열고 Python Coding 환경을 선택합니다.
  2. Choose a sprite 버튼(오른쪽 하단 모서리)을 클릭하고 스프라이트 Square Box를 선택합니다.
  3. 이 세션에서는 아래 이미지에서 객체 감지를 수행합니다.
  4. 이를 위해 먼저 아래 단계에 따라 이 이미지를 PictoBlox의 배경으로 업로드하십시오.
    1. 위의 이미지를 마우스 오른쪽 버튼으로 클릭하고 save image as 옵션을 선택하여 컴퓨터에 다운로드하십시오.
    2. Choose a Backdrop 버튼(오른쪽 하단 모서리) 위에 마우스를 놓고 Upload Backdrop 옵션을 선택합니다.
    3. 방금 다운로드한 이미지를 선택하고 Open을 클릭합니다.
    4. Python(베타 탭)을 클릭합니다.
    5. 프로젝트 파일에서 Square Box.py를 클릭합니다. 이제 이미지가 배경으로 업로드되었습니다.
  5. 스프라이트 객체 ‘Square Box’는 이미 기본적으로 시작됩니다. 시간 라이브러리를 가져오겠습니다.
    sprite = Sprite('Square Box')
    
    import time
  6. 이제 ObjectDetection 개체와 Pen 개체도 시작하겠습니다.
    obj = ObjectDetection()
    pen = Pen()
  7. 이제 pen.clear()를 사용하여 이전 세션의 펜 표시를 지울 것입니다.
    pen.clear()
  8. 객체 감지 임계값을 0.5로 설정합니다. 물체 감지를 위해 유지하려는 신뢰 수준(50%)입니다.
    obj.setthreshold(0.5)
  9. 또한 ObjectDetection 클래스에서 다음 두 함수를 추가합니다.
    1. analysestage(): 스테이지에서 이미지 분석
    2. disablebox(): 스테이지에 나타나는 개체 주변의 상자를 비활성화합니다.
      obj.analysestage()
      obj.disablebox()
  10. 이제 이미지의 모든 객체를 하나씩 감지하고 그 위에 Square Box 스프라이트를 배치하려고 합니다. 이를 위해 for 루프를 사용하여 모든 개체를 반복합니다. 이를 위해 다음 기능을 사용합니다.
    1. 내장 함수 range()는 모든 객체를 반복합니다.
    2. ObjectDetection 클래스의 count() 함수는 감지된 최대 개체 수를 제공합니다. range() 함수의 end 매개변수가 제외되었으므로 ‘+1’을 추가합니다.
      for i in range(1,obj.count()+1):
  11. 각 객체에 따라 Square Box의 x 위치, y 위치 및 너비를 설정해 보겠습니다. 작업에 다음 기능을 사용합니다.
    1. sprite.setx() – 스프라이트의 x 위치 설정(Square Box)
    2. obj.x(i) – 개체 ‘i’의 x 위치 가져오기(1에서 obj.count())
    3. sprite.sety() – 스프라이트의 y 위치 설정(Square Box)
    4. obj.y(i) – 개체 ‘i’의 y 위치를 가져옵니다.
    5. sprite.setsize() – 스프라이트의 크기 설정(Square Box)
    6. obj.width(i) – 개체 ‘i’의 너비를 가져옵니다.
      for i in range(1,obj.count()+1):
        sprite.setx(obj.x(i))
        sprite.sety(obj.y(i))
        sprite.setsize(obj.width(i))
  12. 우리는 또한 사각형 상자(스프라이트)를 만들 것입니다. 감지하는 각 개체의 클래스를 말합니다 .
      sprite.say(obj.classname(i))
  13. 또한 Pen 클래스의 stamp() 함수를 사용하여 감지된 각 객체에 사각형 상자를 표시합니다.
      pen.stamp()
  14. 마지막으로 시간 확장에서 sleep() 함수를 추가하여 각 객체를 감지하는 사이에 약간의 시간을 가집니다.
      time.sleep(2)
  15. 전체 코드는 다음과 같습니다.
    sprite = Sprite('Square Box')
    
    import time
    
    obj = ObjectDetection()
    pen = Pen()
    
    pen.clear()
    obj.setthreshold(0.5)
    
    obj.analysestage()
    obj.disablebox()
    
    for i in range(1,obj.count()+1):
      sprite.setx(obj.x(i))
      sprite.sety(obj.y(i))
      sprite.setsize(obj.width(i))
      
      sprite.say(obj.classname(i))
      pen.stamp()
      time.sleep(2)
    
  16. Run 버튼을 눌러 코드를 테스트합니다.

객체 감지를 위한 추가 이미지

아래 이미지에서 코드를 실험할 수도 있습니다.

과제

다음 수업으로 넘어가기 전에 작은 과제가 기다리고 있습니다!

이 활동에서 작성한 PictoBlox 프로그램을 웹 사이트에 업로드해야 합니다. 과정을 마친 후 수료증을 받으려면 과제를 제출해야 합니다.

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

  1. Browse를 클릭합니다.
  2. 저장된 프로젝트 파일(.sb3)을 검색하여 선택하고 Open을 클릭합니다.
  3. Upload를 클릭하여 과제를 제출합니다.
evive Alert
허용되는 파일 유형은 PictoBlox 프로그램에서 생성된 SB3 파일입니다. 허용되는 최대 파일 크기는 5 MB입니다.

행운을 빕니다!