<jupyter_start><jupyter_text>カメラでの画像分類 学習させたモデルを使ってカメラ画像に対して画像分類をします。注：このノートブックはハードウェアアクセラレータをGPUよりNone(CPU)で実行した方がレスポンスが良い場合もあります。  事前準備<jupyter_code>%tensorflow_version 2.x
import tensorflow as tf
print(tf.__version__)
from tensorflow.keras.preprocessing.image import img_to_array, load_img
import numpy as np
import time<jupyter_output><empty_output><jupyter_text>モデルとラベルをGoogle Driveからコピーします。<jupyter_code>from google.colab import drive
drive.mount('/content/drive')
!cp '/content/drive/My Drive/my_model.h5' './my_model.h5'
!cp '/content/drive/My Drive/labels.txt' './labels.txt'
!ls -lh<jupyter_output><empty_output><jupyter_text>AIモデルとラベルの読み込み MNISTベースのAIモデルを読み込んで中身を確認します<jupyter_code>keras_model = tf.keras.models.load_model("my_model.h5")
keras_model.summary()<jupyter_output><empty_output><jupyter_text>ラベルを読み込みます<jupyter_code>labels = []
with open('./labels.txt','r') as f:
  for line in f:
    labels.append(line.rstrip())
print(labels)

NUM_CLASSES = len(labels)<jupyter_output><empty_output><jupyter_text>画像分類デモの実行 Webカメラを使うJavascriptのコードをダウンロードします。<jupyter_code>!wget https://raw.githubusercontent.com/karaage0703/karaage-ai-book/master/util/colab_camera.py<jupyter_output><empty_output><jupyter_text>コードを読み込みます。<jupyter_code>import colab_camera<jupyter_output><empty_output><jupyter_text>処理を行うコールバック関数を定義します。<jupyter_code>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)

  # image classify
  img = cv2.resize(decimg, (64, 64))
  img = img_to_array(img)
  img = img / 255.0
  img = img[np.newaxis]
  img = np.asarray(img)
  preds = keras_model.predict(img)
  result = np.argmax(preds[0])

  # draw output
  out_img = decimg
  cv2.putText(out_img, labels[result], (10,50), \
      cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 1, cv2.LINE_AA)

  #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})

output.register_callback('notebook.run', run)<jupyter_output><empty_output><jupyter_text>デモを実施します。<jupyter_code>colab_camera.use_cam()<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.12984956452889945, 'fraction_numerical': 0.021773555027711798, 'mean_word_length': 6.896875, 'pattern_counts': {'":': 0, '<': 33, '<?xml version=': 0, '>': 33, 'https://': 1, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '8', 'dir': 'jupyter-structured-clean-dedup', 'id': '618078', 'license': 'MIT', 'n_tokens_mistral': 1181, 'n_tokens_neox': 1141, 'n_words': 141, 'path': 'ch02/02_karaage_ai_book_image_classification_on_camera.ipynb', 'repo_name': 'ykatsu24/karaage-ai-book', 'size': '2526'}