# подключение библиотек
from imutils.video import VideoStream
from imutils.video import FPS
import numpy as np
import sys
import argparse
import imutils
import time
import cv2
from urllib.request import urlopen
from datetime import datetime
import os
tekcamera=1
pathSaveImg="/home/petin/python3_prgs_1/OpenVino01"
cameras=[[0,0,0,0,0],
[0,0,0,0,0],
[False,True,False,True,False],
["","Camera1","Camera2","Camera3","Camera4"]]
for i in range(1,5):
cameras[1][i] = 'rtsp://admin:191066@192.168.0.109:554/mode=real&idc='+str(i)+'&ids=1'
fps = FPS().start()
# получение аргументов командной строки
# --prototxt путь к файлу mobilenet-ssd.prototxt
# --model путь к файлу модели mobilenet-ssd.caffemodel
# --show вывод изображений с камер в окна
# -c минимальная точность определения объекта
ap = argparse.ArgumentParser()
ap.add_argument("--prototxt", required=True,
help="path to Caffe 'deploy' prototxt file")
ap.add_argument("--model", required=True,
help="path to Caffe pre-trained model")
ap.add_argument("--show", required=True,
help="Show cv2.imshow)")
ap.add_argument("-c", "--confidence", type=float, default=0.2,
help="minimum probability to filter weak detections")
args = vars(ap.parse_args())
# загрузка модели
CLASSES = ["background", "aeroplane", "bicycle", "bird", "boat",
"bottle", "bus", "car", "cat", "chair", "cow", "diningtable",
"dog", "horse", "motorbike", "person", "pottedplant", "sheep",
"sofa", "train", "tvmonitor"]
COLORS = np.random.uniform(0, 255, size=(len(CLASSES), 3))
print("[INFO] loading model...")
net = cv2.dnn.readNetFromCaffe(args["prototxt"], args["model"])
# обработка в Neural Compute Stick
net.setPreferableTarget(cv2.dnn.DNN_TARGET_MYRIAD)
# инициализация получения потока с камер
print("[INFO] starting video stream...")
for i in range(1,5):
cameras[0][i] = cv2.VideoCapture(cameras[1][i])
print("OK")
time.sleep(5.0)
detected_objects = []
# цикл
while(1):
tekcamera = tekcamera+1
if tekcamera+==5:
tekcamera=1
logfile=open("last.txt","w+")
ftime=datetime.now()
str1=.strftime("%d-%m-%Y % %H:%M:%S\n ")
logfile.write(str1)
logfile.close()
if cameras[2][tekcamera] == False:
continue
# получение кадров из потока
ret, frame = cameras[0][tekcamera].read()
frame = imutils.resize(frame, width=800)
# grab the frame dimensions and convert it to a blob
(h, w) = frame.shape[:2]
blob = cv2.dnn.blobFromImage(cv2.resize(frame, (300, 300)),
0.007843, (300, 300), 127.5)
# pass the blob through the network and obtain the detections and
# predictions
net.setInput(blob)
detections = net.forward()
# обработка результатов детектирования
print("******************")
for i in np.arange(0, detections.shape[2]):
confidence = detections[0, 0, i, 2]
idx = int(detections[0, 0, i, 1])
#if confidence > args["confidence"] and idx==15 :
if confidence > args["confidence"] and (idx==8 or idx==12) :
# save files
ftime=datetime.now()
if(os.path.exists(pathSaveImg+"/cam"+str(tekcamera)+"/"+ftime.strftime("%d-%m-%Y"))==False):
os.mkdir(pathSaveImg+"/cam"+str(tekcamera)+"/"+ftime.strftime("%d-%m-%Y"))
f=cv2.imwrite(pathSaveImg+"/cam"+str(tekcamera)+"/"+ftime.strftime("%d-%m-%Y")+"/_"+ftime.strftime("%H:%M:%S.%f")+".jpg", frame)
print("write file = ",f)
# extract the index of the class label from the
# `detections`, then compute the (x, y)-coordinates of
# the bounding box for the object
#idx = int(detections[0, 0, i, 1])
box = detections[0, 0, i, 3:7] * np.array([w, h, w, h])
(startX, startY, endX, endY) = box.astype("int")
# draw the prediction on the frame
label = "{}: {:.2f}%".format(CLASSES[idx],
confidence * 100)
print(confidence," ",idx," - ",CLASSES[idx])
detected_objects.append(label)
cv2.rectangle(frame, (startX, startY), (endX, endY),
COLORS[idx], 2)
y = startY - 15 if startY - 15 > 15 else startY + 15
cv2.putText(frame, label, (startX, y),
cv2.FONT_HERSHEY_SIMPLEX, 0.5, COLORS[idx], 2)
# show the output frame
if args["show"] == "True":
cv2.imshow(cameras[3][tekcamera], frame)
key = cv2.waitKey(1) & 0xFF
# выход по клавише 'q'
if key == ord("q"):
break
fps.update()
fps.stop()
print("[INFO] elasped time: {:.2f}".format(fps.elapsed()))
print("[INFO] approx. FPS: {:.2f}".format(fps.fps()))
# do a bit of cleanup
cv2.destroyAllWindows()
Хозяин: делает систему видеонаблюдения за котами, медитирует на них.
Коты: делятся на группы А и Б, и пока группа А отвлекает внимание хозяина, валяясь, потягиваясь и вылизываясь под камерами, группа Б проникает на кухню и взламывает холодильник.
Комментарий недоступен
Такие можно ставить в гостиницах для кошек, чтобы в отъезде можно было наблюдать за ушастыми и не беспокоиться ^_^
У нас в гостинице просто стоят камеры в каждом номере. Нужны ли там такие усложнения? У автора задачи посложнее.
Наверно идеально чтобы просто приходил ответ со списком котов и временем их последнего появления на камере
камера наблюдения за питомцами.
Узко товарищи смотрите применение данного проекта не ограничено питомцами! Автору спасибо за статью познавательно показательно!