2021年4月28日水曜日

lobeを使った機械学習のマスク判定について

概要

機械学習を扱う装置を作る際、学習モデルをlobeで作っているのですが、マスク処理を行った画像の判定論理が気になったので調べてみました。


やったこと

  1. 右下にクマがいる画像とクマがいない画像を5枚ずつ登録
  2. その状態で左上にクマがいる画像を判定できるか
  3. →期待は「bear」だったが、「no_bear」だった。
  4. 判定できるようになるまでに何枚の画像を登録する必要がるのか
  5. →左上にクマがいる画像を追加で11枚登録したら、「bear」と認識するようになった。
  6. 判定できるようになったとき、右下に画像がある情報を判定できるか
  7. →右下にクマがいない画像を判定したところ、期待は「no_bear」だったが「bear」と判定された。

結論

  • マスク処理を行う場合は同じ場所をマスク処理したもので学習モデルを作ったほうが良い。
  • 判定に使うための情報はラベルごとに同じ枚数のデータを学習させたほうが良い。
いわれてみれば、当たり前のことなんだけども。

2021年4月27日火曜日

ビーコン検知

概要

ビーコンを3秒周期で検知してその結果をキューに貯めます。
貯めたキューは7個まで保存できて、要素の多い宛先を選択します。


# coding: utf-8

import bluepy

def get_uuid():
  scanner = bluepy.btle.Scanner(0)
  devices = scanner.scan(3) #3秒のスキャンデータ

  rssi_dic = {}
  rssi_dic2 = {}

  #アドレスとRSSIをディクショナリに登録
  for device in devices:
    rssi_dic[device.addr] = str(device.rssi)

  #ディクショナリを昇順に並べ替え
  rssi_dic2 = sorted(rssi_dic.items(), key=lambda x:x[1])

  #一番強いRSSIを返す
  ret = rssi_dic2[0][0]

  #RSSIが-40以下ならunknown
  if int(rssi_dic2[0][1]) <= -40:
    ret = "unknown"
  return ret

def main():

  from collections import Counter

  check_uuid = []

  i = 0
  while True:

    check_uuid.append(str(get_uuid()))
    uuid_ranking = Counter(check_uuid).most_common()
    best_uuid = uuid_ranking[0][0]

    if len(check_uuid) >= 7 :
      check_uuid.pop(0)


if __name__ == "__main__":
  main()

2021年4月3日土曜日

Pythonで画像に四角形を描く

概要

windowsにあるファイルに対して、pythonで四角形を描写する方法です。
画像の解像度によって座標は変わると思うのでよく確認する必要があると思います

サンプルコード

デスクトップにある、「tomato.jpg」に四角形の線を描画して、「sq_tomato.jpg」というファイル名で保存します。
import cv2

in_img = "C:\\Users\\redpe\\Desktop\\tomato.jpg"
out_img = "C:\\Users\\redpe\\Desktop\\sq_tomato.jpg"

img = cv2.imread(in_img)
cv2.rectangle(img, (1250, 250), (4250, 2600), color=(255, 0, 0), thickness=8)
cv2.imwrite(out_img, img, [cv2.IMWRITE_JPEG_QUALITY, 100])

Pythonでマスク画像を合成

概要

windowsのデスクトップ上にあるファイルにマスク画像を合成する方法です。
cv2モジュールを使ってます。

サンプルコード

デスクトップ上に置いている、「tomato.jpg」に「mask.jpg」を合成して、「mask_tomato.jpg」を作成しています。
上下に余計な情報があって、マスクしたいときはこのようにします。
import cv2

path="C:\\Users\\redpe\\Desktop\\tomato.jpg"
maskfile = "C:\\Users\\redpe\\Desktop\\mask.jpg"
maskimg= "C:\\Users\\redpe\\Desktop\\mask_tomato.jpg"

#マスク処理
src1 = cv2.imread(path)
src2 = cv2.imread(maskfile)
src2 = cv2.resize(src2, src1.shape[1::-1])
dst = cv2.bitwise_and(src1, src2)
cv2.imwrite(maskimg, dst)

pythonでカラー画像から白黒画像を作成

概要

Pythonを使ってwindows上のファイルを白黒にする方法です。
cv2を使って画像を加工します。

サンプルコード

デスクトップに置かれている「tomato.jpg」というファイルを読み込んで、白黒の「gray_tomato.jpg」というファイルを作成する方法は以下です。

import cv2

path="C:\\Users\\redpe\\Desktop\\tomato.jpg"
grayimg="C:\\Users\\redpe\\Desktop\\gray_tomato.jpg"

img=cv2.imread(path)

#グレースケール処理
gray_cv = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
cv2.imwrite(grayimg, gray_cv)

Pythonでフォルダ配下のファイル名を取得

概要

Windows上でpythonを使って、特定のフォルダ配下の絶対パスを取得する方法です。
globモジュールのiglobという関数を使って条件に一致するファイルを出力します。

使用例

Desktop配下にあるファイル名をすべて表示する場合はこのようになります。

import glob

#条件に一致するファイルの数だけ繰り返し
for path in glob.iglob(r'C:\Users\redpe\Desktop\*', recursive=True):
    
    #表示
    print(path)