Lesson 9, Topic 3
In Progress

활동: 홈 자동화 – 조명 제어

Lesson Progress
0% Complete

이 활동에서는 (하나의 명령이 아닌) 일련의 다양한 음성 명령을 사용하여 집에 있는 다양한 기기를 켜거나 끌 수 있는 시스템을 만들 것입니다. 이러한 시스템은 학습이 필요한 기계 학습 모델인 텍스트 분류기를 기반으로 실행됩니다.

이를 위해 일련의 명령에 대해 자연어 처리(NLP) 모델을 교육합니다. 모델은 이러한 명령이 lights on 범주, lights off 범주 또는 fan on 범주에 속하는지 여부에 따라 분류합니다.

코드하자

  1. 아래 주어진 Pictoblox 파일을 열고 Python Coding 환경을 선택하십시오.
    9 Blank_Home Automation 시스템
  2. 다음과 같이 Abby , Lamp , Fan 3개의 스프라이트가 이미 시작되었음을 알 수 있습니다(기본값).
    sprite = Sprite('Abby')
    lamp = Sprite('Lamp')
    fan = Sprite('Fan')
  3. 시간 라이브러리를 가져오겠습니다. 또한 다음 세 가지 클래스를 시작하겠습니다.
    1. 자연어 처리: 이 클래스에는 고유한 텍스트 분류기를 만들고 훈련하는 기능이 있습니다.
    2. 음성 인식: 이 클래스는 우리의 음성을 인식하고 그에 따라 작업을 수행하는 기능을 가지고 있습니다.
    3. TexttoSpeech: 이 클래스에는 텍스트를 음성으로 변환하는 기능이 있습니다.
      import time
      
      nlp = NaturalLanguageProcessing()
      sr = SpeechRecognition()
      ts = TexttoSpeech()
  4. 먼저 NaturalLanguageProcessing 클래스의 reset() 함수를 사용하여 NLP 모델을 재설정합니다. 이는 이전 교육에서 포함할 수 있는 과거 데이터의 NLP 모델을 지우기 위해 수행됩니다.
    nlp.reset()

    이제 우리의 NLP 모델은 명확하고 교육 데이터를 공급할 준비가 되었습니다.

  5. 클래스의 pushdata() 함수를 사용하여 훈련 데이터를 NLP 모델에 추가해 보겠습니다. 이 기능은 다양한 텍스트 데이터를 특정 클래스에 레이블링하는 데 사용됩니다. 구문은 다음과 같습니다.
    1. 구문: pushdata(text_data, class_label)
    2. 매개변수:
      1. text_data: 레이블을 지정할 텍스트 데이터
      2. class_label: text_data에 레이블을 지정하려는 특정 클래스
  6. ‘lights on’ 클래스로 레이블을 지정하기 위해 데이터를 추가하는 코드는 다음과 같습니다.
    # Data for lights On
    nlp.pushdata("turn on the light", "lights on")
    nlp.pushdata("lights on", "lights on")
    nlp.pushdata("light on", "lights on")
    nlp.pushdata("lied on", "lights on")
    nlp.pushdata("i need some sunshine", "lights on")
  7. 마찬가지로 ‘lights off’ 클래스로 일부 텍스트에 레이블을 지정하는 코드를 추가할 수 있습니다.
    # Data for lights off
    nlp.pushdata("turn off the light", "lights off")
    nlp.pushdata("lights off", "lights off")
    nlp.pushdata("light off", "lights off")
    nlp.pushdata("lied off", "lights off")
    nlp.pushdata("i need to rest", "lights off")
  8. 마찬가지로 ‘fan on’ 클래스로 일부 텍스트에 레이블을 지정하는 코드를 추가할 수 있습니다.
    # Data for fan on
    nlp.pushdata("switch on fan", "fan on")
    nlp.pushdata("fan on", "fan on")
    nlp.pushdata("climate hot", "fan on")
    nlp.pushdata("so hot here", "fan on")
    nlp.pushdata("turn on fan", "fan on")
  9. 이제 위에서 추가한 text_data에서 NLP 모델을 학습합니다. NaturalLanguageProcessing 클래스의 train() 함수를 사용하여 이 작업을 수행합니다.
    nlp.train()
  10. 이제 Abby 스프라이트가 Sprite 클래스의 say() 함수를 사용하여 3초 동안 무대에서 “Hello I am your AI assistant”라고 말하도록 하겠습니다. 우리는 또한 장치가 이렇게 말하도록 할 것입니다. 이를 위해 TexttoSpeech 클래스의 speak() 함수를 사용할 것입니다.
    sprite.say("Hello I am your AI assistant", 3)
    ts.speak("Hello I am your AI assistant")
  11. 코드를 계속 실행하려면 while True 루프를 사용합니다. 이제 위의 단계에서 했던 것처럼 스프라이트가 무대에서 “What do you want me to do today”라고 말하게 할 것입니다.
    while True:
      sprite.say("What do you want me to do today", 3)
      ts.speak("What do you want me to do today")
  12. 홈 오토메이션에 사용할 NLP 모델을 준비했습니다. 이제 우리는 우리가 말한 연설을 받아들이고 그것을 분석하기를 원합니다. 이를 위해 SpeechRecognition 클래스의 analysisespeech() 함수를 사용합니다.
      #Recognize speech           
      sr.analysespeech(7, "en-US")

    여기서 첫 번째 매개변수는 음성이 녹음되는 시간입니다. 7초로 유지합니다. 두 번째 매개변수는 선택한 언어입니다. 우리는 같은 미국 영어를 선택했습니다.

  13. 위의 기능에서 우리는 음성을 녹음하고 분석했습니다. 이 음성은 이제 코드 내의 어딘가에 문자열 형식으로 저장됩니다. 이 문자열에 액세스하려면 SpeechRecognition 클래스의 speechresult() 함수를 사용해야 합니다. 다음과 같이 이 문자열을 ‘command’라는 변수에 할당합니다.
      # store the speech result
      command = sr.speechresult()
      command = command.lower()
  14. 우리는 ‘lights on’ 클래스에 나열된 명령 중 하나를 제공할 때 램프가 켜지기를 원합니다. 따라서 이러한 명령이 감지될 때마다 if 조건을 실행하여 감지된 명령이 ‘lights on’ 클래스에 속하는지 확인합니다. 말한 특정 텍스트가 특정 클래스에 속하는지 확인하기 위해 NaturalLanguageProcessing 클래스의 analysis() 함수를 사용하십시오. 이 함수는 말한 텍스트(변수: command 에 저장됨)를 받아 텍스트가 속한 class_name을 반환합니다. 그런 다음 등호 연산자(==)를 사용하여 ‘Lights On’과 같이 클래스에 속하는지 확인합니다.
      if nlp.analyse(command) == 'lights on':
  15. 위의 조건이 True를 반환하면 Sprite 클래스의 램프 개체에서 다음 함수를 사용하여 램프를 켭니다.
    1. switchcostume(costume_name): 램프 스프라이트의 의상을 파라미터로 주어진 의상으로 변경합니다.
    2. seteffect(effect_name, effect_value): 스프라이트에 지정된 효과를 지정된 양으로 설정합니다.
      1. effect_name = 색상, 어안, 소용돌이, 픽셀화, 모자이크, 밝기, 고스트 등 7가지 효과 중에서 선택할 수 있습니다.
      2. effect_value = 0 ~ 100
          if nlp.analyse(command) == 'lights on':
            lamp.switchcostume('lamp-light-animation2')
            lamp.seteffect("BRIGHTNESS", 100)
  16. 마찬가지로 클래스 ‘lights off’가 감지되면 다른 의상으로 전환합니다. 여기서는 의상 ‘lamp-light-animation‘ = 및 brightness = -20
    을 사용합니다.

    
      if nlp.analyse(command) == 'lights off':
        lamp.switchcostume('lamp-light-animation')
        lamp.seteffect("BRIGHTNESS", -20)
  17. ‘fan on’ 클래스가 감지된 경우 팬이 일정 시간 동안 실행된 다음 꺼지기를 원합니다(전기 절약!). 이를 위해 fan의 nextcostume() 함수를 사용하여 fan 스프라이트의 의상을 변경합니다. 스프라이트 클래스의 객체. 또한 time 클래스의 sleep() 함수를 사용하여 팬의 의상이 특정 속도로 변경되도록 합니다. 이렇게 하면 팬이 움직이는 것처럼 보입니다.
      if nlp.analyse(command) == 'fan on':
        for i in range(1000):
          fan.nextcostume()
          time.sleep(0.005)
  18. 최종 코드는 다음과 같습니다.
    sprite = Sprite('Abby')
    lamp = Sprite('Lamp')
    fan = Sprite('Fan')
    
    import time
    
    nlp = NaturalLanguageProcessing()
    sr = SpeechRecognition()
    ts = TexttoSpeech()
    
    # Clear any residual data from the model (if any)
    nlp.reset()
    
    # Data for lights On
    nlp.pushdata("turn on the light", "lights on")
    nlp.pushdata("lights on", "lights on")
    nlp.pushdata("light on", "lights on")
    nlp.pushdata("lied on", "lights on")
    nlp.pushdata("i need some sunshine", "lights on")
    
    # Data for lights off
    nlp.pushdata("turn off the light", "lights off")
    nlp.pushdata("lights off", "lights off")
    nlp.pushdata("light off", "lights off")
    nlp.pushdata("lied off", "lights off")
    nlp.pushdata("i need to rest", "lights off")
    
    # Data for fan on
    nlp.pushdata("switch on fan", "fan on")
    nlp.pushdata("fan on", "fan on")
    nlp.pushdata("climate hot", "fan on")
    nlp.pushdata("so hot here", "fan on")
    nlp.pushdata("turn on fan", "fan on")
    
    # Train the nlp model
    nlp.train()
    
    sprite.say("Hello I am your AI assistant", 3)
    ts.speak("Hello I am your AI assistant")
    
    
    while True:
      sprite.say("What do you want me to do today", 3)
      ts.speak("What do you want me to do today")
      
      # Recognize speech
      sr.analysespeech(7, "en-US")
      # store the speech result
      command = sr.speechresult()
      command = command.lower()
    
      if nlp.analyse(command) == 'lights on':
        lamp.switchcostume('lamp-light-animation2')
        lamp.seteffect("BRIGHTNESS", 100)
        
      if nlp.analyse(command) == 'lights off':
        lamp.switchcostume('lamp-light-animation')
        lamp.seteffect("BRIGHTNESS", -20)
        
      if nlp.analyse(command) == 'fan on':
        for i in range(1000):
          fan.nextcostume()
          time.sleep(0.005)
  19. Run 버튼을 눌러 스크립트를 테스트합니다.

과제

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

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

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

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

행운을 빕니다!