Lesson Progress
0% Complete
이 활동에서는 PictoBlox 스테이지에서 유명인 탐지를 수행할 코드를 작성합니다. 한 명 이상의 유명인이 포함된 이미지를 PictoBlox 배경으로 업로드합니다. 이 단계를 분석하기 위해 실행하는 코드는 이미지에서 다음 항목을 감지합니다.
- 유명인의 얼굴, x 위치, y 위치 및 얼굴 높이
- 연예인 이름
- 알고리즘이 유명인을 감지한 신뢰도(%)
이것은 이미지에 있는 모든 유명인사에 대해 수행됩니다.
코딩하자
- Pictoblox에서 새 파일을 열고 Python Coding 환경을 선택합니다.
- Choose a sprite 버튼(오른쪽 하단 모서리)을 클릭하고 스프라이트 Square Box를 선택합니다.
- 이 세션에서는 아래 이미지에서 유명인 감지를 수행합니다.
- 이를 위해 먼저 아래 단계에 따라 이 이미지를 PictoBlox의 배경으로 업로드하십시오.
- 위의 이미지를 마우스 오른쪽 버튼으로 클릭하고 save image as 옵션을 선택하여 컴퓨터에 다운로드하십시오.
- Choose a Backdrop 버튼(오른쪽 하단 모서리) 위에 마우스를 놓고 Upload Backdrop 옵션을 선택합니다.
- 방금 다운로드한 이미지를 선택하고 Open을 클릭합니다.
- Python(베타 탭)을 클릭합니다.
- 프로젝트 파일 에서 Square Box.py를 클릭합니다. 이제 이미지가 배경으로 업로드되었습니다.
- 스프라이트 오브젝트 ‘사각형 상자’는 이미 기본적으로 시작됩니다. 시간 라이브러리를 가져오겠습니다.
sprite = Sprite('Square Box') import time
- 이제 이 클래스의 기능을 사용할 수 있도록 Computer Vision 클래스도 시작하겠습니다.
cv = ComputerVision()
- 유명인 감지를 위해 추가한 배경 이미지를 분석하기 위해 Computer Vision 클래스의 함수 analysisbackdrop([1])을 사용하고 매개변수 “유명인”을 선택합니다.
cv.analysebackdrop("celebrity")
- 이제 imagefeaturecount() 함수를 사용하여 배경 이미지에 있는 유명인의 수를 계산합니다. 이 함수는 문자열을 반환하므로 Python의 int() 함수를 사용하여 정수로 변환하여 변수에 저장합니다.
num_celebrities = int(cv.imagefeaturecount("celebrity"))
- 이미지에서 모든 유명인을 하나씩 감지하려고 합니다. 따라서 for 루프를 사용하여 범위를 1에서 num_celebrities + 1까지 유지하여 모든 항목을 통과할 것입니다. range() 함수의 end 매개변수가 제외되었으므로 ‘+1’을 추가합니다.
for i in range(1, num_celebrities + 1):
- 이제 Square Box 스프라이트의 x 위치를 감지된 유명인의 얼굴과 동일하게 설정하려고 합니다.
- 유명인 얼굴의 x 위치를 추출하기 위해 Computer Vision 클래스의 imagefeatureinfo() 함수를 사용하고 다음과 같이 적절한 매개변수를 추가합니다.
- [1] = “연예인”(감지하려는 대상)
- [2] = i(현재 유명인의 경우)
- [3] = “xPos”(x 위치용)
- 위의 함수를 Sprite 클래스의 setx() 함수 안에 포함하여 스프라이트의 x 위치를 설정합니다.
for i in range(1, num_celebrities + 1): sprite.setx(cv.imagefeatureinfo("celebrity", i, "xPos"))
- 유명인 얼굴의 x 위치를 추출하기 위해 Computer Vision 클래스의 imagefeatureinfo() 함수를 사용하고 다음과 같이 적절한 매개변수를 추가합니다.
- 위의 포인트에서 사용한 것과 유사한 단계를 사용하여 스프라이트의 y 위치를 유명인의 얼굴과 동일하게 설정할 수 있습니다.
- 여기서 다시 매개변수 [3] = “yPos”(y-위치의 경우)의 차이와 함께 imagefeatureinfo() 함수를 사용합니다.
- 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"))
- 위의 포인트에서 사용한 것과 유사한 단계를 사용하여 스프라이트의 크기를 유명인 얼굴의 높이와 동일하게 설정할 수 있습니다.
- 여기서도 매개변수 [3] = “너비”(y 위치의 경우)의 차이와 함께 imagefeatureinfo() 함수를 사용합니다.
- 이 함수를 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"))
- Square Box 스프라이트를 배치하고 크기를 설정했으므로 이제 해당 유명인의 이름을 말하게 할 것입니다. 이를 위해 매개변수 [3]를 추가하지 않는다는 점을 제외하고는 위와 동일한 매개변수로 imagefeatureinfo() 함수를 다시 사용합니다.
이 함수를 Sprite 클래스의 say() 함수에 넣었습니다.sprite.say(cv.imagefeatureinfo("celebrity", i))
- 이제 유명인의 이름을 표시했으므로 자신감을 표시하기 전에 표시를 1초 동안 일시 중지하려고 합니다. 이를 위해 time 모듈의 sleep() 함수를 사용합니다.
time.sleep()
- AI에서 “신뢰도” 는 기계 학습 알고리즘이 예측을 확신하는 확률입니다. 특정 유명인 감지에 대한 컴퓨터 비전 알고리즘의 신뢰도를 계산하고 변수에 저장합니다. 이를 위해 다음 기능을 사용합니다.
- 우리는 [3] = “confidence”를 추가하는 매개변수 [3]을 제외하고 위와 동일한 매개변수로 imagefeatureinfo() 함수를 사용합니다.
- imagefeatureinfo() 함수의 반환 값은 문자열입니다. 그래서 우리는 float() 파이썬 내장 함수를 사용하여 float()로 변환합니다.
- 파이썬 내장 함수 round([1], 4) 의 첫 번째 매개변수 [1]에 위의 코드를 넣어 소수점 이하 자릿수를 ‘ 4 ‘로 제한합니다.
confidence = round(float(cv.imagefeatureinfo("celebrity", i, 'confidence')), 4)
- 이제 신뢰도 값에 100을 곱하여 스프라이트가 ‘신뢰도 백분율’을 말하도록 합니다. 또한 파이썬의 내장 함수 str()을 사용하여 ‘신뢰도 비율’을 숫자에서 문자열로 변환합니다.
sprite.say("Confidence = " + str(confidence * 100) + "%")
- 마지막으로 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)
- Run 버튼을 눌러 스크립트를 테스트합니다.
추가 테스트
다음 이미지에서 유명인 감지를 추가로 시도할 수 있습니다.
테스트 이미지 – 1
테스트 이미지- 2
과제
다음 수업으로 넘어가기 전에 작은 과제가 기다리고 있습니다!
이 활동에서 작성한 PictoBlox 프로그램을 웹 사이트에 업로드해야 합니다. 과정을 마친 후 수료증을 받으려면 과제를 제출해야 합니다.
과제를 업로드하려면 아래 단계를 따르세요.
- Browse를 클릭합니다.
- 저장된 프로젝트 파일(.sb3)을 검색하여 선택하고 Open을 클릭합니다.
- Upload를 클릭하여 과제를 제출합니다.
허용되는 파일 유형은 PictoBlox 프로그램에서 생성된 SB3 파일입니다. 허용되는 최대 파일 크기는 5 MB입니다.
행운을 빕니다!