vision_classify · 분류기 모델

분류기 화면에서 가르친 모델로 이미지를 분류합니다.

Class: TeachableMachine CustomClassifier

TensorFlow 를 쓰지 않습니다. 이미지 모델은 TFLite 런타임(LiteRT / tflite_runtime)으로, 손·얼굴·포즈 모델은 MediaPipe 로 돌립니다.

class openpibo.vision_classify.TeachableMachine[소스]

기반 클래스: object

Functions: load() predict()

파이보의 카메라 Teachable Machine 기능을 사용합니다.

  • 이미지 프로젝트 의 표준 이미지 모델 을 사용합니다.

  • Teachable Machine 에서 학습한 모델을 적용하여 추론할 수 있습니다.

  • 학습한 모델은 Tensorflow Lite 형태로 다운로드 해주세요.

example:

from openpibo.vision_classify import TeachableMachine

tm = TeachableMachine()
# 아래의 모든 예제 이전에 위 코드를 먼저 사용합니다.
load(model_path, label_path)[소스]

Tflite 모델로 불러옵니다. (부동소수점/양자화) 모두 가능

example:

tm.load('model_unquant.tflite', 'labels.txt')
매개변수:
  • model_path (str) – Teachable Machine의 모델파일

  • label_path (str) – Teachable Machine의 라벨파일

predict(img)[소스]

Tflite 모델로 추론합니다.

example:

cm = Camera()
img = cm.read()
tm.predict(img)
매개변수:

img (numpy.ndarray) – 이미지 객체

반환:

가장 높은 확률을 가진 클래스 명, 결과(raw 데이터)

class openpibo.vision_classify.CustomClassifier[소스]

기반 클래스: object

Functions: load() predict() draw()

파이보의 분류기(classifier) 화면에서 학습한 모델을 사용합니다.

  • 이미지 · 손 · 얼굴 · 포즈 네 가지로 가르칠 수 있습니다.

  • 분류기 화면에서 저장하면 /home/pi/mymodel/<모델 이름>/ 폴더가 생깁니다. 그 폴더 이름(또는 경로)을 load 에 넘기면 됩니다.

  • 예전 분류기의 keras 모델(model.keras)은 더 이상 쓸 수 없습니다. 다시 학습해 저장하세요.

example:

from openpibo.vision_classify import CustomClassifier

cf = CustomClassifier()
# 아래의 모든 예제 이전에 위 코드를 먼저 사용합니다.
load(model_path)[소스]

분류기 화면에서 저장한 모델을 불러옵니다. 종류 이름은 모델 폴더 안에 들어 있습니다.

example:

cf.load('/home/pi/mymodel/과일')
cf.load('과일')                   # /home/pi/mymodel/과일 과 같습니다
매개변수:

model_path (str) – 모델 폴더 (/home/pi/mymodel/<모델 이름>) 또는 모델 이름

predict(img, threshold=0.0, draw=False)[소스]

불러온 모델로 분류합니다.

example:

cm = Camera()
img = cm.read()
name, probs = cf.predict(img)
print(name)                           # 사과
print(dict(zip(cf.classes, probs)))   # {'사과': 0.97, '바나나': 0.03}
매개변수:
  • img (numpy.ndarray) – 이미지 객체 (카메라 이미지, BGR)

  • threshold (float) – 가장 높은 확률이 이 값보다 낮으면 이름 대신 None 을 돌려줍니다 (0~1)

  • draw (bool) – True 면 분류하면서 img 에 바로 그립니다(draw() 와 같음). 손·포즈는 점과 뼈대, 얼굴은 점, 그리고 모든 모델은 종류 이름과 확률

반환:

(종류 이름, 종류별 확률)

손·얼굴·포즈 모델은 화면에 손·얼굴·몸이 안 보이면 (None, None) 을 돌려줍니다.

draw(img, label=True)[소스]

바로 전 predict() 가 본 것을 이미지에 그립니다. img 를 바로 고치고 그대로 돌려줍니다.

  • 손 — 손마다 점 21개와 뼈대 · 포즈 — 점 33개와 뼈대 · 얼굴 — 얼굴 점

  • label=True 면 종류 이름과 확률도 씁니다(이미지 모델은 이것만 그립니다)

  • 손·얼굴·몸이 안 보였으면 아무것도 그리지 않습니다

example:

img = cm.read()
name, probs = cf.predict(img)
cf.draw(img)
cm.imwrite('/home/pi/result.jpg', img)

name, probs = cf.predict(img, draw=True)   # 분류하면서 바로 그리기
매개변수:
  • img (numpy.ndarray) – predict() 에 넣었던 이미지(크기가 같아야 점이 제자리에 찍힌다)

  • label (bool) – 종류 이름·확률을 쓸지

반환:

img

close()[소스]

불러온 모델을 내려놓습니다. (다른 모델을 load 하면 알아서 부릅니다)