初心者でもできる!画像認識AIの作り方6

 こんにちは!インターン生の保です。

 突然ですが皆さん、AIって聞いたことありますか?又の名を人工知能。昨今の世界において、いろいろな場面で出てくる言葉だと思います。AIを使ったことがあると感じている人は少ないと思いますが、意外と身近なところに隠れているんです。例えばスマートフォンのカメラ機能や、SNSのチャットボットなどがそうです。皆さんも、使ったことがあると思います。

 前回に引き続き、そんなAIの中でも画像認識AIについてのお話です。前回の記事、動画をまだみていらっしゃらない方は、是非そちらをみてからお越しください。今回説明している画像認識AIというAIは、ほんの少しプログラミングの知識があれば、簡単にできてしまう代物なんです!一度自分の手でAIを作って、「僕・私はAIを作ったことがあるんだ!」と言ってみませんか?

前回では一番最初に説明した二値化の部分に入っていきました。前回の最後で言った通り、今回はこれの続きで、二値化の肝となる部分、閾値決定の部分を実装します。新しいファイルを作り、最初に書いたインポート文のfromの部分が力を発揮します。それでは早速コードを書いて参りましょう。

 前に作成したdetect_image.pyというファイルを開いてください。前回書いたimg_hsv_H, img_hsv_S, img_hsv_V = cv2.split(hsv)の行の次の行から、以下の行を書いてください。

# 閾値を決定
thresh_hls = thresh_kmeans(img_hls_L)
thresh_hsv = thresh_kmeans(img_hsv_S)

 コードの各行の頭にはタブひとつ分、スペース4つが隠れていることに注意してください。コメントにある通り、閾値を決定しています。hlsのLつまり輝度、hsvのSつまり彩度をそれぞれ引数に取り、thresh_kmeansという関数に渡しています。さて、このthresh_kmeansという関数ですが、冒頭のインポート文にあるように、自分たちで作るutilsというファイルからのインポートです。そのため、utilsというファイルを作成していきます。
 detect_image.pyがあるフォルダまたはディレクトリと同じ場所に、utils.pyを作成し、以下のコードを書いてください。

import cv2
import numpy as np
from statistics import mean

# k-means法の実装
def thresh_kmeans(img):
data = img.reshape(-1)
# ラベルの初期化
labels = np.random.randint(0,2,data.shape[0])

# 終了条件
OPTIMIZE_EPSILON = 0.1

m_0_old = -np.inf
m_1_old = np.inf

for i in range(1000):
# それぞれの平均の計算
m_0 = data[labels==0].mean()
m_1 = data[labels==1].mean()
# ラベルの再計算
labels[np.abs(data-m_0) < np.abs(data-m_1)] = 0 labels[np.abs(data-m_0) >= np.abs(data-m_1)] = 1
# 終了条件
if np.abs(m_0 – m_0_old) + np.abs(m_1 – m_1_old) < OPTIMIZE_EPSILON: break m_0_old = m_0 m_1_old = m_1 # 初期値によって,クラスが変化するため上界の小さい方を採用 thresh_kmeans = np.minimum(data[labels==0].max(),data[labels==1].max()) return thresh_kmeans  インポート文と、kー平均法による平均値を求める関数です。画像を引数に取り、求めた平均値を返り値に持ちます。詳しくはkー平均法で調べてみると良いでしょう。これはクラスタリングを用いた手法の一つです。コードの各部分の説明については、コメントにある通りです。ラベルとは、各クラスタについているものです。  さて、今回は前回の続きで、二値化の肝となる部分、閾値決定の部分を実装ました。次回もこれの続きで、いよいよ今回決定した閾値を用いて二値化を実行します。実際に二値化した画像の確認もしてみましょう。それでは、ありがとうございました!

インターンシップへの申し込み・お問い合わせ先

インターンシップへの申し込み・お問い合わせ先
メールでのお問い合わせは、下記フォームに入力して送信してください。
ご氏名 (例)山田 太郎
メールアドレス 半角英数字:ご入力間違いのないようにご注意ください
メールアドレス(確認用) 半角英数字:ご入力間違いのないようにご注意ください
電話番号 (例)0354339211 ※ハイフン抜きで入力してください
題名
お問合わせ内容

アーカイブ

カテゴリー