Olá, eu sou um aluno da 11ª série, estou interessado em programação, sobre tópicos de TI.
Estou escrevendo este post para compartilhar meu projeto, que levou 10 horas da minha vida no fim de semana e foi concluído para entender as possibilidades dos métodos modernos de análise de dados. A publicação pode ser considerada como um exemplo de implementação bem-sucedida para pessoas ignorantes nesse campo do conhecimento, bem como uma solicitação para indicar meus erros para pessoas que tenham conhecimento adequado.
Dado: fluxo de vídeo de uma câmera de vigilância, na qual há um fragmento de 100x50 pixels com uma imagem de um espaço de estacionamento específico, no qual apenas um carro específico pode estar presente ou ausente.
Imagem de um espaço de estacionamento Objetivo: determinar a presença ou ausência de um carro no estacionamento.
Recebendo uma imagem da câmera
Eu uso a biblioteca openCV para obter e pré-processar a imagem.
O código a seguir que eu usei para criar o conjunto de dados que eu uso para treinar a rede neural: fotografo a vaga a cada hora e, depois de receber 60 fotos, as divido manualmente em uma foto com e sem uma máquina.
dataminer.pyimport cv2 as cv import numpy as np import time cap = cv.VideoCapture() r = 0 while r <=100: cap.open('http://**.**.***.***:***/*****CG?container=mjpeg&stream=main')
Processamento de imagem
Eu pensei que era a decisão certa treinar a rede neural não nas imagens de origem, mas nas imagens com os contornos do carro encontrados usando a função cv2.findcontours (...).
Aqui está o código que converte a imagem original em uma imagem de estrutura de tópicos:
Localizando contornos def contoursfinder(image): img = image.copy() srcimg = img.copy() hsv_min = np.array((0, 0, 0), np.uint8) hsv_max = np.array((255, 255, 60), np.uint8)
O resultado da função:
Rede neural
Eu usei a biblioteca tensorflow (keras).
A arquitetura de rede foi copiada do exemplo da Internet: para mim, uma explicação não é óbvia por que é assim. Se pessoas bem informadas dizem ou sabem onde ler, por que essa arquitetura é eficaz ou por que outras serão mais eficazes, ficarei imensamente grato.
O modelo de rede neural: seqüencial, consiste em duas camadas ocultas densas de 256 e 128 neurônios e camadas de entrada e saída.
Código model = keras.Sequential([ keras.layers.Flatten(input_shape=(100, 50)), keras.layers.Dense(256, activation=tf.nn.relu), keras.layers.Dense(128, activation=tf.nn.relu), keras.layers.Dense(2, activation=tf.nn.softmax) ]) model.compile(optimizer=tf.train.AdamOptimizer(), loss='sparse_categorical_crossentropy', metrics=['accuracy']) model.fit(trainingimagesarr, trainingimagesarrlabel, epochs=1, callbacks=[tbCallBack])
Antes do treinamento, toda a matriz numpy era dividida por 255, a fim de fornecer números na faixa de 0 a 1 para a entrada da rede neural.
trainingimagesarr = trainingimagesarr / 255.0 trainingimagesarrlabel = np.array(trainingimagesarrlabel)-1
Agora eu posso chamar a função:
def realtest(): cap = cv.VideoCapture() cap.open('http://**.**.***.***:***/*****CG?container=mjpeg&stream=main') hasFrame, frame = cap.read() frame = frame[100:200, 300:750] quantframe = frame[0:100,275:325] quantframe = contoursfinder(quantframe) return model.predict(np.array([quantframe]))[0][1]>0.60
Obter dados sobre a presença de um carro no estacionamento
Não chute muito, mas um pouco :-)
Obrigada