머신 러닝에 대해 전혀 모르는 경우에도 마이크로 컨트롤러(아두이노)에 AI 이미지 / 사운드 인식을 쉽게 적용하는 방법을 알아봅니다. 이 글은 “Use Teachable Machine AI to Control Anything” 블로그 내용을 번역기를 사용하여 작성하였습니다.

구성품 및 소모품

Webcam, Logitech® HD Pro×1
micro:bit BBC micro:bit board×1
Arduino UNO×1
LED (generic)×1
SG90 Micro-servo motor×1

앱 및 온라인 서비스

ABOUT THIS PROJECT

Teachable Machine은 Google에서 개발 한 웹 기반 AI 도구로, AI 지식 없이도 AI 모델을 학습하고 사용할 수 있습니다. 초보자를 위한 AI 도구입니다.

웹 브라우저에서 단순히 기계 학습을 사용해보는 것 이상을 할 수 있을까요? 실용적인 도구가 될 수도 있습니까? 이 웹 도구는 웹 브라우저에서 기계 학습을 사용해볼 수 있는데 외부 기기를 연결하여 기계 학습 결과를 확인해 볼 수 있습니다.

Teachable Machine 웹 사이트에 Tiny Sorter라는 데모가 있습니다. 이 데모는 p5.js (온라인 자바 스크립트 편집기 / 컴파일러)를 사용하여 Arduino Leonardo에서 서보 모터를 제어합니다. 따라서 컴퓨터에서 AI를 실행하고 유용한 작업을 수행하는 것이 가능합니다.

이글에서 티처블 머신의 인식 결과를 마이크로 컨트롤러와 같은 외부 장치로 출력하는 방법을 알아 봅니다. 여기서 소개하는 내용은 Tiny Sorter 데모에서 사용한 방법과 똑같지는 않지만 원리는 비슷합니다. 인공지능에 대한 지식이 부족하지만 메이커나 물리적 컴퓨팅 프로젝트에 사용하는 데 관심이 있는 사람들에게 특히 유용합니다.

장점

  • 인공지능 기술을 잘 몰라도 됩니다.
  • 인공지능 모델 학습을 빠르고 쉽게 만들며 무료입니다.
  • 필요로 하는 프로그램을 설치할 필요가 없습니다.
  • 컴퓨터가 있다면 비용이 작습니다.
  • 직렬 입력을 읽고 작업을 수행하도록 프로그래밍하는 방법을 알고 있다면 모든 마이크로컨트롤러에서 사용할 수 있습니다.

단점

  • 인공지능 학습 과정을 컴퓨터에서 처리해야 하므로 마이크로컨트롤러의 이동이 제한적입니다.
  • 컴퓨터는 인터넷 연결이 필요합니다.
  • 티처블 머신 AI 모델은 한계가 있고 잘못된 판독값을 얻을 수 있으며 사용자가 모델을 수정할 수 없습니다.
  • 마이크로컨트롤러에서 에러를 찾는 것이 어려울 수 있습니다.
  • 어떤 AI 전문가들은 티처블머신 기술이 흥미롭지만 제품이나 서비스에 사용하기는 부족하다고 말할 수 있습니다. 그래도 인공지능 기술을 이해하는데 도움이 됩니다.

1단계: AI 모델 만들기 및 업로드

모델을 학습 할 때 클래스 0은 아무것도 인식하지 않는 배경 이미지로 사용하고 인식 할 항목의 이름은 “1”, “2”, “3”… 등으로 지정합니다. 이렇게 하면 장치에서 결과를 쉽게 읽을 수 있습니다.

이미지 인식의 경우 물체를 움직여 AI 정확도를 높일 수 있으며, 캡처되는 물체 사진에 충분한 차이가 있어야합니다.

소리를 인식하는 AI 모델을 학습하는 경우 먼저 충분한 배경 잡음 샘플을 만들어야 합니다. 앞에서 이미지를 분류하는 것처럼 인식되는 소리의 이름을 “1”, “2”, “3”으로 지정합니다.

모델 학습이 끝나면 모델 내보내기(Export Model)를 클릭하고 Tensorflow.js-> 업로드(Upload)를 선택합니다. 완료된 후 모델 링크를 복사하세요. (현재 사운드 인식은 Tensorflow.js 만 선택할 수 있습니다.)

2 단계 : p5.js 스크립트 준비

p5.js 스크립트 소스는 다음 위치에서 찾을 수 있습니다.

  • 이미지 인식 : https://editor.p5js.org/krantas/sketches/IKUf43rB
  • 소리 인식 : https://editor.p5js.org/krantas/sketches/3wZ9hAwG

또는 여기서 전체 코드를 찾을 수 있습니다. 이 소스를 수정하여 동작 인식 버젼을 만들어 보세요.

이 스크립트는 기본적으로 Teachable Machine과 p5.js의 예제 코드의 조합입니다. 총 4개의 파일이 있습니다.

sketch.js (메인 코드)
index.html (라이브러리 가져오기)
style.css
p5.serialport.js (직렬 포트 함수)
p5.js에 로그인하여 스크립트를 복사/ 저장할 수 있습니다. 소스에서 다음 두가지 만 수정하세요.

컴퓨터에 USB로 연결된 마이크로 컨트롤러 직렬 포트 (4 단계 참조)
티처블 머신에서 복사한 모델의 링크 (1 단계)

3단계: 마이크로컨트롤러 프로그래밍

마이크로 컨트롤러 (이 경우 BBC 마이크로 비트)는 직렬 데이터 입력을 읽고 이 데이터를 처리 할 수있는 자체 프로그램이 필요합니다.

직렬 출력은 문자열 또는 문자이며 줄 바꿈 문자가 없습니다 (예 : \ r \ n).

다음 예제는 BBC micro : bit에서 색상이 다른 LED를 켜서 이미지 인식 결과를 표시하는 것입니다. 즉 마이크로비트 보드를 인식했을 때 빨간색 LED, 아두이노 나노는 녹색 LED를 켜지게 합니다.

  • Result 1 (a BPI:bit ESP32 board) – red LED (Pin 0)
  • Result 2 (a Arduino Nano 33 IoT with shield) – green LED (Pin 1)
  • Result 3 (a Adafruit Metro M4 Express) – blue LED (Pin 2)
  • Result 0 (background only) – white LED (Pin 8)

직렬 출력 전송 속도는 9600입니다. micro : bit의 기본 속도는 115200이므로 프로그램에서 설정하도록 해야 합니다.

4 단계 : 기기의 직렬 포트 연결

p5.js 직렬 제어 프로그램을 다운로드하고 압축을 풉니다. 마이크로 컨트롤러를 USB 포트에 연결하고 p5.serialcontrol.exe (Windows 용)를 실행합니다. 바이러스 백신 프로그램에서 실행되도록 설정해야 할 수도 있습니다.

프로그램이 시작되면 장치의 직렬 포트를 엽니다. 직렬 포트를 모르는 경우 윈도우의 장치 관리자를 열어 마이크로 컨트롤러가 연결된 USB COM 포트를 사용하고 있는지 확인하세요.

완료한 후 또는 보드를 프로그래밍해야 할 때 포트를 닫는 것을 잊지 마세요.

5 단계 : AI의 힘을 활용하기

p5.js 스크립트 편집기로 돌아가 실행을 클릭합니다. 잠시 후 스크립트 옆에 웹캠 창이 나타납니다. 장치의 직렬 포트 불이 깜박이며 수신된 데이터를 나타낼 수 있습니다.

직렬 포트를 여는 것을 잊은 경우에는 아무런 반응이 없습니다. p5.js 스크립트는 평상시처럼 실행됩니다.

아래 데모에서는 이미지 인식 결과를 micro:bit으로 전송하여 LED를 제어합니다.

여기서 또 다른 데모는 Arduino Nano와 미니 서보 모터를 사용하여 소리 인식 결과를 표시하는 것입니다. (배경 소음은 결과가 아닙니다. 결과는 모델이 무언가를 인식 할 때만 반환됩니다.)

  • 결과 1 (손가락 스냅)-0 도로 회전
  • 결과 2 (박수)-180도 회전

서보 모터가 회전을 완료하는 데 약간의 시간이 필요하기 때문에 끝에 약간의 지연을 추가했습니다.

원격 제어 가능 여부

여기서 마이크로컨트롤러(마이크비트, 아두이노)를 USB 직렬 통신으로 연결하였지만 컴퓨터에 직접 연결하지 않고 제어할 수 있습니다. 한 가지 가능한 방법은 아두이노에 블루투스 모듈을 사용하면 무선으로 연결할 수 있습니다.


0 Comments

Leave a Reply

Your email address will not be published. Required fields are marked *