2章 p.71-78

Webカメラ画像を扱う

dl_book15_ch02_02a の操作に続いて、 カメラ画像をクラス分類して結果を文字で 表示することにする。

Google Drive からモデルをロードする。

Google Drive をマウントして、dl_book15_ch02_01b で学習させたモデル model_ch02_01b4.h5 を用いる。

コールバックを使う方法

# callback function の定義
import IPython
from google.colab import output
import cv2
import numpy as np
from PIL import Image
from io import BytesIO
import base64

def run(img_str):
    #decode to image
    decimg = base64.b64decode(img_str.split(',')[1], validate=True)
    decimg = Image.open(BytesIO(decimg))
    decimg = np.array(decimg, dtype=np.uint8); 
    decimg = cv2.cvtColor(decimg, cv2.COLOR_BGR2RGB)

    #############your process###############

    img = cv2.resize(decimg, (64, 64))
    img = np.array(img) / 255
    img = np.expand_dims(img, 0)  # [64, 64, 3] --> [1, 64, 64, 1]
    predicts = model.predict(img)
    predict = np.argmax(predicts[0])

    out_img = decimg

    #############your process###############

    #encode to string
    _, encimg = cv2.imencode(".jpg", out_img, [int(cv2.IMWRITE_JPEG_QUALITY), 80])
    img_str = encimg.tobytes()
    img_str = "data:image/jpeg;base64," + base64.b64encode(img_str).decode('utf-8')
    return IPython.display.JSON({'img_str': img_str}), predict

output.register_callback('notebook.run', run)
      // text to display predict
      const para_predict = document.createElement('P');
      para_predict.innerText = 'not predict'
      document.body.appendChild(para_predict);