noname_npc

 
<<< Back

Распознование обьектов с камеры OpenCV для RaspberryOS 64bit

Делал методом тыка так как питон совсем не знаю. Может кому то пригодится

Делал на основе вот этой статьи https://connect.smartliving.ru/profile/303/blog/da... за что огромное спасибо Xor.
Установку OpenCV делал по инструкции из этого видео https://www.youtube.com/watch?v=ma7J0HPSFcY..

Так же как и у Xor камера отправляет по детекции фото которое модуль SMTPcatcher сохраняется в папку и запускает метод

$file = "cms/images/474/DS-I250L-1/Camera1-1.jpg"; // путь к файлу присланому с камеры
$cam = "DS-I250L-1";
safe_exec('python '.ROOT.'/apps/py/detect.py --from "' . $cam . '" --image '.ROOT.$file);

который в свою очередь запускает скрипт Python "detect.py" позаимствованый у Xor

import numpy as np
import argparse
import cv2
import urllib.request

ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", required=True,
    help="path to input image")
#ap.add_argument("-p", "--prototxt", required=True,
#   help="path to Caffe 'deploy' prototxt file")
#ap.add_argument("-m", "--model", required=True,
#   help="path to Caffe pre-trained model")
ap.add_argument("-c", "--confidence", type=float, default=0.35,
    help="minimum probability to filter weak detections")
ap.add_argument("-f", "--from", required=True,
    help="from which camera")
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("/var/www/html/apps/py/MobileNetSSD_deploy.prototxt", "/var/www/html/apps/py/MobileNetSSD_deploy.caffemodel")

image = cv2.imread(args["image"])
(h, w) = image.shape[:2]
blob = cv2.dnn.blobFromImage(cv2.resize(image, (672, 384)), 0.007843, (672, 384), 127.5)

#print("[INFO] computing object detections...")
net.setInput(blob)
detections = net.forward()

for i in np.arange(0, detections.shape[2]):
    confidence = detections[0, 0, i, 2]

    if confidence > args["confidence"]:
        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")

        label = "{}: {:.2f}%".format(CLASSES[idx], confidence * 100)
        #print("[INFO] {}".format(label))
        sss = str(CLASSES[idx])
        cam = (args["from"])
        if sss == "person":

            link="http://10.10.28.200/objects/?op=set&object=" + cam + "&p=detect&v=" + sss
            f=urllib.request.urlopen(link)

            cv2.rectangle(image, (startX, startY), (endX, endY),
            COLORS[idx], 2)
            y = startY - 15 if startY - 15 > 15 else startY + 15
            cv2.putText(image, label, (startX, y),
            cv2.FONT_HERSHEY_SIMPLEX, 1.0, COLORS[idx], 2)

            cv2.imwrite('/var/www/html/cms/images/474/' + cam + '/object.jpg',image)
                    Использовал вот эти [файлы] ([https://codeload.github.com/Qengineering/MobileNetV1_SSD_OpenCV_Caffe/zip/refs/heads/master] MobileNetSSD_deploy.caffemodel и MobileNetSSD_deploy.prototxt 

Discuss (4) (0)

See also:
2024-06-17 ПУ датчик движения и камера
2024-03-04 Установка go2rtc на Linux
2024-01-19 Еще о продлении жизни SD карты

Калининград, Россия

На форуме: noname_npc