import cv2 as cv
# Caminhos para o arquivo de configuração e o modelo congelado
config_file = './ssd_mobilenet_v3_large_coco_2020_01_14.pbtxt'
frozen_model = './frozen_inference_graph.pb'
# Modelo de detecção usando o módulo de rede neural profunda
model = cv.dnn_DetectionModel(frozen_model, config_file)
# labels.txt contém todas as anotações para a detecção
class_labels = [ ]
file_name = './labels.txt'
with open(file_name, 'rt') as fpt:
class_labels = fpt.read().rstrip('\n').split("\n")
# Parâmetros de entrada para o modelo de detecção
model.setInputSize(320, 320)
model.setInputScale(1.0/127.5)
model.setInputMean((127.5, 127.5, 127.5))
model.setInputSwapRB(True)
# Ler uma imagem
img = cv.imread("./test.jpeg")
# Executar uma inferência na imagem
class_index, confidence, bbox = model.detect(img, confThreshold=0.6)
# Configurar a escala da fonte e o tipo para exibir texto na imagem após a detecção
font_scale = 3
font = cv.FONT_HERSHEY_PLAIN
# Contador para acompanhar o número de bicicletas detectadas
counter = 0
# Iterar sobre os objetos detectados na imagem
for class_ind, conf, boxes in zip(class_index, confidence, bbox):
# Desenhar um retângulo ao redor do objeto detectado
cv.rectangle(img, boxes, (255, 0, 0), 2)
# Exibir o rótulo perto do objeto detectado
cv.putText(img, class_labels[class_ind - 1], (boxes[0] + 10, boxes[1] + 40), font, font_scale, (0, 255, 0), thickness=3)
# Verificar se há uma bicicleta na imagem
if class_labels[class_ind - 1] == 'bicycle':
counter += 1 # Incrementar o contador se uma bicicleta for detectada
# Exibir o número de bicicletas detectadas
print(f"Número de bicicletas detectadas: {counter}")
# Salvar a imagem com rótulos e caixas ao redor dos objetos detectados
cv.imwrite('./output.jpg', img)