OpenCV & Tensorflow - обнаружение объектов и рисование рамок вокруг них - PullRequest
0 голосов
/ 09 марта 2020

Привет, у меня есть модель, которую я сделал с использованием Tensorflow & Keras. Она работает безупречно, когда я использую ее на изображении, которое фокусируется на объекте.

Как ... Итак: Single Object

Но сейчас я пытаюсь найти лучший способ сделать снимок, скажем, несколько таких объектов, как этот, а также обнаружить и нарисовать рамку вокруг них:

Multiple Objects

Чего я пытаюсь достичь: Goals

В настоящее время мой код состоит из загрузки модели, и используя его, чтобы предсказать скриншот, который фокусируется на объекте.

Вот мой код:

from PIL import ImageGrab
import cv2
import numpy as np
import tensorflow as tf

def grabScreen():
    # img = ImageGrab.grab(bbox=(1078,351,1477,748))
    img = ImageGrab.grab(bbox=(1,29,1255,793))
    img_np = np.array(img)
    frame = cv2.cvtColor(img_np, cv2.COLOR_BGR2RGB)
    return frame

def analyze(frame):
    IMG_SIZE = 200
    img_array = cv2.cvtColor(frame, cv2.COLOR_RGB2GRAY)
    new_array = cv2.resize(img_array, (IMG_SIZE, IMG_SIZE))
    return new_array.reshape(-1, IMG_SIZE, IMG_SIZE, 1)

if __name__ == "__main__":
    model = tf.keras.models.load_model("v3.model")
    CATEGORIES = ["Tree", "Stump"]

    while True:
        frame = grabScreen()

        prediction = model.predict([analyze(frame)])
        print(CATEGORIES[int(prediction[0][0])])

        cv2.imshow("Frame", frame)

        if cv2.waitKey(1) == 27:
            break
    cv2.destroyAllWindows()

У меня есть представление о том, как добиться того, что я пытаюсь сделать, и это состоит в том, чтобы разделить весь скриншот на части, а затем использовать модель для прогнозирования каждой части. Но разве это не будет очень требовательным на моем ноутбуке? Конечно, должен быть лучший способ добиться этого.

Я ценю любую помощь :) Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...