型抜きクッキーの効率化を機械学習で出来るかな?①

M10i
2025-03-18
2025-03-18

ハイ。M10iです。今回も機械学習やAWSで遊んでみたいと思います。

先日、子供と型抜きクッキーを作ってたんですけど、子供ってこう・・・ど真ん中を気持ちよく型抜きするじゃないですか。嗚呼、端から効率よく型で抜いてくれたら生地を伸ばす手間が
省けるのになーなんて考えると・・・

やってみたくなりますよね、機械学習を使って型抜きクッキーの効率化!

ってことで、やるべきことをさっくりとまとめると

  1. クッキー型のサイズや形のパターンでデータ化
  2. データをベースに配置の最適化
  3. 結果の画像生成

この中でも1と2がボリューム大きくなりそうです。まずは1から詳細に考えていきましょう。
機械学習をやってると何よりも壁として立ちはだかってくるのは「データ化」ですよね。
(長くなる場合キリのいいとこで終わりたいのでシリーズ化しますね)

・なるべくラクをしたい。
・どうせならAWSの学習もついでにしたい。

ってことでデータ化するにあたりChatGPT君に相談した結果、aws Rekognitionで
型の取込ができるとの事で今回もaws Rekognitionを使っていこうかと思います。

Rekognitionは前にも使ったことがあるのですが、画像認識サービスです。
参考:AWSの機械学習サービスを使ってアプリ開発!ChatGPTのオススメプロジェクトに挑戦④
今回はクッキー型の写真を認識してもらってデータを作ろうと思います!
ChatGPTによると型の認識(ラベル取得)→バウンディングボックスの取得→サイズ取得
といった手順で型のサイズが取れるそうです。

まずはクッキーの型の写真を撮って、S3にアップしておきます。

views.py

import boto3
from django.shortcuts import render
import os
import base64

s3_client = boto3.client('s3')
rekognition = boto3.client('rekognition')
 
bucket_name ='bucket_name'
file_name='file_name'
 
def index(request):
    # S3 から画像を取得
    s3_response = s3_client.get_object(Bucket=bucket_name, Key=file_name)
    image_data = s3_response['Body'].read()
    # base64 エンコード
    image_base64 = base64.b64encode(image_data).decode('utf-8')
    image_src = f"data:image/jpeg;base64,{image_base64}"
 
    # Rekognitionで画像解析
    response = rekognition.detect_labels(
        Image={'S3Object': {'Bucket': bucket_name, 'Name': file_name}},
        MaxLabels=10
    )

    labels = []
    boxes = []

    for label in response['Labels']:
        ①判定した結果(ラベル)を表示
        labels.append(
            {'Name': label['Name'], 'Confidence': label['Confidence']})
       ②物質として検出されていればバウンディングボックスを取得し
  位置、サイズを表示する
  if 'Instances' in label:
            for instance in label['Instances']:
                box = instance['BoundingBox']
                boxes.append({
                    'left': box['Left'] * 100,
                    'top': box['Top'] * 100,
                    'width': box['Width'] * 100,
                    'height': box['Height'] * 100
                })

    # テンプレートへデータを渡す
    return render(request, 'index.html', {'image_src': image_src, 'labels': labels, 'boxes': boxes})

indexhtml

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>クッキー型認識結果</title>
    <style>
        .bounding-box {
            position: absolute;
            border: 2px solid red;
            box-shadow: 0 0 5px red;
        }
    </style>
</head>
<body>
    <div class="container">
        <h2>クッキー型認識結果</h2>
        <div class="image-container">
            <img src=""  alt="Uploaded Image" id="uploaded-image" style="max-width: 100%;">
           
                <div class="bounding-box"
                    style="left: %; top: %;
                           width: %; height: %;">
                </div>
           
        </div>
        <h3>認識されたラベル</h3>
        <ul>
           
                <li> (信頼度: %)</li>
           
        </ul>
    </div>
</body>
</html>

ホント、コード書くだけならものの数分で書けちゃうのがAWSのいいところ。
※実際はセキュリティ権限とかもろもろで考慮しないといけないです。はい。

ではでは早速。
サイトにアクセスしてみます。
cookieAI_1

赤枠boxがラベリングできたモノです。ちゃんと認識していますが・・・
Instancesが取れてない=物質として検知されなかったため
サイズがわからないですね。
ただの☆のシンボルでしかありません・・・・残念。

なんと・・・AWSを使ってもラクできませんでした。
これは波乱の予感。。。

そもそも、バウンディングボックス(四角)だと、☆の凹部分が検知されませんよね?
starこれはクッキー生地を効率よく型抜く、というテーマには悪手でした。
ChatGTP君も万能ではないので過信せずちゃんと下調べをするべきでした(反省)
しかし記事にするからには責任もって効率化したいと思います!

そんな訳で今回はここまで!
次回、型抜きクッキーの効率化を機械学習で出来るかな?②
~~~どうにかサイズを取得してみよう!~~~に続きます笑

M10iでした。