Lesson Progress
0% Complete

이 활동에서는 PictoBlox 스테이지에서 유명인 탐지를 수행할 코드를 작성합니다. 한 명 이상의 유명인이 포함된 이미지를 PictoBlox 배경으로 업로드합니다. 이 단계를 분석하기 위해 실행하는 코드는 이미지에서 다음 항목을 감지합니다.

  1. 유명인의 얼굴, x 위치, y 위치 및 얼굴 높이
  2. 연예인 이름
  3. 알고리즘이 유명인을 감지한 신뢰도(%)

이것은 이미지에 있는 모든 유명인사에 대해 수행됩니다.

코딩하자

  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. 스프라이트 오브젝트 ‘사각형 상자’는 이미 기본적으로 시작됩니다. 시간 라이브러리를 가져오겠습니다.
    sprite = Sprite('Square Box')
    
    import time
  6. 이제 이 클래스의 기능을 사용할 수 있도록 Computer Vision 클래스도 시작하겠습니다.
    cv = ComputerVision()
  7. 유명인 감지를 위해 추가한 배경 이미지를 분석하기 위해 Computer Vision 클래스의 함수 analysisbackdrop([1])을 사용하고 매개변수 “유명인”을 선택합니다.
    cv.analysebackdrop("celebrity")
  8. 이제 imagefeaturecount() 함수를 사용하여 배경 이미지에 있는 유명인의 수를 계산합니다. 이 함수는 문자열을 반환하므로 Python의 int() 함수를 사용하여 정수로 변환하여 변수에 저장합니다.
    num_celebrities = int(cv.imagefeaturecount("celebrity"))
    
  9. 이미지에서 모든 유명인을 하나씩 감지하려고 합니다. 따라서 for 루프를 사용하여 범위를 1에서 num_celebrities + 1까지 유지하여 모든 항목을 통과할 것입니다. range() 함수의 end 매개변수가 제외되었으므로 ‘+1’을 추가합니다.
    for i in range(1, num_celebrities + 1):
  10. 이제 Square Box 스프라이트의 x 위치를 감지된 유명인의 얼굴과 동일하게 설정하려고 합니다.
    1. 유명인 얼굴의 x 위치를 추출하기 위해 Computer Vision 클래스의 imagefeatureinfo() 함수를 사용하고 다음과 같이 적절한 매개변수를 추가합니다.
      1. [1] = “연예인”(감지하려는 대상)
      2. [2] = i(현재 유명인의 경우)
      3. [3] = “xPos”(x 위치용)
    2. 위의 함수를 Sprite 클래스의 setx() 함수 안에 포함하여 스프라이트의 x 위치를 설정합니다.
      for i in range(1, num_celebrities + 1):
        sprite.setx(cv.imagefeatureinfo("celebrity", i, "xPos"))
  11. 위의 포인트에서 사용한 것과 유사한 단계를 사용하여 스프라이트의 y 위치를 유명인의 얼굴과 동일하게 설정할 수 있습니다.
    1. 여기서 다시 매개변수 [3] = “yPos”(y-위치의 경우)의 차이와 함께 imagefeatureinfo() 함수를 사용합니다.
    2. sprite의 y 위치를 설정하기 위해 이 함수를 sety() 함수 안에 포함합니다.
      for i in range(1, num_celebrities + 1):
        sprite.setx(cv.imagefeatureinfo("celebrity", i, "xPos"))
        sprite.sety(cv.imagefeatureinfo("celebrity", i, "yPos"))
  12. 위의 포인트에서 사용한 것과 유사한 단계를 사용하여 스프라이트의 크기를 유명인 얼굴의 높이와 동일하게 설정할 수 있습니다.
    1. 여기서도 매개변수 [3] = “너비”(y 위치의 경우)의 차이와 함께 imagefeatureinfo() 함수를 사용합니다.
    2. 이 함수를 setsize() 함수 안에 넣어 스프라이트의 크기를 설정합니다.
      for i in range(1, num_celebrities + 1):
        sprite.setx(cv.imagefeatureinfo("celebrity", i, "xPos"))
        sprite.sety(cv.imagefeatureinfo("celebrity", i, "yPos"))
        sprite.setsize(cv.imagefeatureinfo("celebrity", i, "height"))
  13. Square Box 스프라이트를 배치하고 크기를 설정했으므로 이제 해당 유명인의 이름을 말하게 할 것입니다. 이를 위해 매개변수 [3]를 추가하지 않는다는 점을 제외하고는 위와 동일한 매개변수로 imagefeatureinfo() 함수를 다시 사용합니다.
    이 함수를 Sprite 클래스의 say() 함수에 넣었습니다.

      sprite.say(cv.imagefeatureinfo("celebrity", i))
  14. 이제 유명인의 이름을 표시했으므로 자신감을 표시하기 전에 표시를 1초 동안 일시 중지하려고 합니다. 이를 위해 time 모듈의 sleep() 함수를 사용합니다.
      time.sleep()
  15. AI에서 “신뢰도” 는 기계 학습 알고리즘이 예측을 확신하는 확률입니다. 특정 유명인 감지에 대한 컴퓨터 비전 알고리즘의 신뢰도를 계산하고 변수에 저장합니다. 이를 위해 다음 기능을 사용합니다.
    1. 우리는 [3] = “confidence”를 추가하는 매개변수 [3]을 제외하고 위와 동일한 매개변수로 imagefeatureinfo() 함수를 사용합니다.
    2. imagefeatureinfo() 함수의 반환 값은 문자열입니다. 그래서 우리는 float() 파이썬 내장 함수를 사용하여 float()로 변환합니다.
    3. 파이썬 내장 함수 round([1], 4) 의 첫 번째 매개변수 [1]에 위의 코드를 넣어 소수점 이하 자릿수를 ‘ 4 ‘로 제한합니다.
        confidence = round(float(cv.imagefeatureinfo("celebrity", i, 'confidence')), 4)
      
  16. 이제 신뢰도 값에 100을 곱하여 스프라이트가 ‘신뢰도 백분율’을 말하도록 합니다. 또한 파이썬의 내장 함수 str()을 사용하여 ‘신뢰도 비율’을 숫자에서 문자열로 변환합니다.
      sprite.say("Confidence = " + str(confidence * 100) + "%")
    
  17. 마지막으로 time.sleep() 함수를 추가하여 두 명의 유명인 감지 사이에 일시 중지를 추가합니다. 최종 코드는 아래와 같습니다.
    sprite = Sprite('Square Box')
    import time
    
    cv = ComputerVision()
    
    cv.analysebackdrop("celebrity")
    
    num_celebrities = int(cv.imagefeaturecount("celebrity"))
    
    
    for i in range(1, num_celebrities + 1):
      sprite.setx(cv.imagefeatureinfo("celebrity", i, "xPos"))
      sprite.sety(cv.imagefeatureinfo("celebrity", i, "yPos"))
      sprite.setsize(cv.imagefeatureinfo("celebrity", i, "height"))
      sprite.say(cv.imagefeatureinfo("celebrity", i))
      
      time.sleep(1)
      confidence = round(float(cv.imagefeatureinfo("celebrity", i, 'confidence')), 4)
      sprite.say("Confidence = " + str(confidence * 100) + "%")
      time.sleep(2)
  18. Run 버튼을 눌러 스크립트를 테스트합니다.

추가 테스트

다음 이미지에서 유명인 감지를 추가로 시도할 수 있습니다.

테스트 이미지 – 1

테스트 이미지- 2

과제

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

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

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

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

행운을 빕니다!