iT邦幫忙

2022 iThome 鐵人賽

DAY 13
0

昨天一整天其實都睡不好,所以今天的內容大概會有點詭異(?,不過至少稍微脫離進度危機了

昨天可以辨識叉叉以後,接下來直接擷取螢幕畫面下來,並且針對畫面來進行辨識,不過這邊我想用連續影像的方式來進行擷取看看,後續再看是要按鍵截圖辨識還是連續影像辨識

首先先引入模組

from PIL import ImageGrab
import numpy as np
import cv2

接著擷取連續畫面

while True:
    # 全螢幕擷取
    img_rgb = ImageGrab.grab()
    img_bgr = cv2.cvtColor(np.array(img_rgb), cv2.COLOR_RGB2BGR)
    cv2.imshow('imm', img_bgr)

    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
        
cv2.destroyAllWindows()

看起來其實就是用迴圈來連續擷取
實際效果

有些詭異的畫面w

那接下來針對這個連續畫面來進行辨識

import numpy as np
import cv2
from keras.models import load_model
from PIL import Image, ImageOps, ImageGrab

model = load_model('x.h5')
data = np.ndarray(shape=(1, 224, 224, 3), dtype=np.float32)

def cross_detect(image):

    # resize to 224, 224
    size = (224, 224)
    image = ImageOps.fit(image, size, Image.ANTIALIAS)

    # 轉換成np數組
    image_array = np.asarray(image)
    normalized_image_array = (image_array.astype(np.float32) / 127.0) - 1
    data[0] = normalized_image_array

    # 進行辨識
    prediction = model.predict(data)
    print(prediction)

    x, not_x, skip = prediction[0]
    if x > 0.8:
        print("x!")
    elif skip > 0.8:
        print("skip!")
    

while True:
    # 指定畫面大小
    img_rgb = ImageGrab.grab(bbox = (300, 300, 360, 360))
    img_bgr = cv2.cvtColor(np.array(img_rgb), cv2.COLOR_RGB2BGR)
    cv2.imshow('imm', img_bgr)

    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cv2.destroyAllWindows()

呈現的效果

功能是有了,但是辨識的效果不如預期,主要應該是因為沒有背景樣本,看來需要再多一些樣本進去訓練

參考資料:
https://clay-atlas.com/blog/2019/07/30/%E4%BD%BF%E7%94%A8-python-%E9%80%B2%E8%A1%8C%E8%9E%A2%E5%B9%95%E9%8C%84%E5%BD%B1/


上一篇
Day12 把圖片分割
下一篇
Day14 開始實作廣告關閉
系列文
最近迷上了三消遊戲 那就來寫一個自動消珠程式吧30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言