Teacheable Machine là 1 trang web của google mà mình được một thầy chỉ cho vào lúc mình tìm hiểu về AI , Machine Learning . Mình thấy nó khá là hữu ích . Nay mình quyết định sẽ chỉ cách sử dụng nó .

I. Giới thiệu

  • Nó là 1 trang phép cho bạn training model phân biệt vật thể , âm thanh và hành động .
  • Nó là free , còn vì sao nó free thì mình không biết
  • Nó dễ sử dụng cứ gọi vui là dành cho trẻ em đi.
  • Cho phép bạn tải code chạy model cũng như model về để chạy local.

II. Sử dụng

ảnh trang chủ
  • Xuất hiện giao diện chọn chế độ train nhé , các bạn chọn image project nhé . Ngoài ra có thể train phân biệt âm thanh và hành động nữa . Nhưng trong bài viết mình sẽ hướng dẫn train detect vật thể thôi.
danh mục chọn project
  • Xuất hiện giao diện train :
  • Các bạn đổi tên class là vật thể cần detect hay phân biệt , ảnh dùng để train các bạn có thể tải từ máy hoặc mở cam . Để thêm class các bạn cứ bấm vào add class là được .
Ảnh chuẩn bị
  • Ở đây mình sẽ nhận diện điện thoại với chìa khóa của mình
  • Sau khi có ảnh rồi các bạn chú ý epochs với batch size nhe .
  • Ví dụ bạn cho epochs là thì nó sẽ chạy hết dự liệu của bạn 50 lần . Trong 1 lần nó sẽ chạy số iteration  = tổng số ảnh / batch size . Các bạn nên cho khoảng hoặc 100 là được .
  • Sau đó các bạn bấm train model và chờ cho nó train xong thôi .
Đang train
  • Sau khi train xong nó sẽ hiện giao diện test .
  • Mình đã test ra điện thoại rồi đấy .
  • Tiếp theo để chạy trên local mình sẽ tải model về . Và copy code sẵn về sửa . Các bạn click vào export model và chọn tensorflow => cuối cùng chọn download nhé .
  • Các bạn chờ xíu nó sẽ tải model xuống .
  • Tiếp theo , các bạn tạo 1 thư mục và giải nén file zip vừa tải xuống . Được 2 file .
  • Tiếp theo các bạn mở Vscode và mở thư mục vừa tạo. Sau đó tạo file test.py và quay lại trang copy đoạn code bỏ vào .
  • Sẽ có code như thế này . Mình chạy thử nhé . Mình sẽ tải 1 hình điện thoại ở trên mạng về .
  • Cài thư viện tensorflow , opencv .
  • Ra một mảng 2 số như vậy đấy . Giải thích 1 xíu thì đó là nó dự đoán 99% là phone và 99% là phone nha . Xíu custom code mình sẽ nói rõ hơn .
  • Tiếp theo làm sao để cho nó chạy real time ???? Mình sẽ dùng open cv để hổ trợ .

III. Custom Real Time

  • Vào lại đoạn code và sửa thôi .
  • Mình sẽ thay biến này thành frame hình opencv là được rồi . Và nhớ cài cv2 nha “pip install opencv-python”.
  • code đây nhé :
import tensorflow.keras
from PIL import Image, ImageOps
import numpy as np
import cv2 
# Disable scientific notation for clarity
np.set_printoptions(suppress=True)
font=cv2.FONT_HERSHEY_SIMPLEX
# Load the model
model = tensorflow.keras.models.load_model('keras_model.h5')

# Create the array of the right shape to feed into the keras model
# The 'length' or number of images you can put into the array is
# determined by the first position in the shape tuple, in this case 1.
data = np.ndarray(shape=(1, 224, 224, 3), dtype=np.float32)

# Replace this with the path to your image
#image = Image.open('test_photo.jpg')
cap = cv2.VideoCapture(0)


while True :
    ret,frame = cap.read()
#resize the image to a 224x224 with the same strategy as in TM2:
#resizing the image to be at least 224x224 and then cropping from the center
    frame = cv2.resize(frame,(224,224))

    #size = (224, 224)
    #frame = ImageOps.fit(frame, size, Image.ANTIALIAS)

#turn the image into a numpy array
    image_array = np.asarray(frame)

# display the resized image
    

# Normalize the image
    normalized_image_array = (image_array.astype(np.float32) / 127.0) - 1

# Load the image into the array
    data[0] = normalized_image_array

# run the inference
    prediction = model.predict(data)
    print(prediction)
    for obj in prediction :
        if obj[0] > obj[1] and obj[0]> 0.8 :
            print("phone")
            cv2.putText(frame,"phone",(20,40),font,1,(255,255,255))
        elif obj[0] < obj[1] and obj[1]> 0.8 :  
            cv2.putText(frame,"key",(20,40),font,1,(255,255,255))
        else :
            cv2.putText(frame,"ko biet",(20,40),font,1,(255,255,255))
    cv2.imshow("frame",frame)
    k = cv2.waitKey(7) & 0xFF
    if k ==27 :
        break
    
cap.release()
cv2.destroyAllWindows()
  • Code thì không cần giải thích nhiều nhỉ , à mà đã làm nhanh thì cần gì quan tâm code :v .
  • Thứ quan tâm là dòng này , nó để load model thôi .
model = tensorflow.keras.models.load_model('keras_model.h5')
  • Code mình đã làm sẵn rồi các bạn giờ chỉ cần tải model về bỏ vào cùng thư mục với code là được .

IV. Tổng Kết

Vậy là xong rồi nhỉ hehe . Các bạn có thể detect thứ mình thích rồi đấy .