Распознавание лиц

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

lihodeev
Сообщения: 148
Зарегистрирован: Ср июл 25, 2018 10:37 pm
Благодарил (а): 43 раза
Поблагодарили: 8 раз

Re: Распознавание лиц

Сообщение lihodeev » Ср сен 02, 2020 3:08 pm

tarasfrompir писал(а):
Ср сен 02, 2020 2:37 pm

уменьшай картинку и соответсветнно размер нейронки для распознавания - просто долго грузит саму обученную сеть
где тут...

Код: Выделить всё

# load the image, resize it to have a width of 600 pixels (while
# maintaining the aspect ratio), and then grab the image dimensions
image = cv2.imread(args["image"])
image = imutils.resize(image, width=600)
(h, w) = image.shape[:2]
# construct a blob from the image
imageBlob = cv2.dnn.blobFromImage(
	cv2.resize(image, (300, 300)), 1.0, (300, 300),
задержка я так понимаю не в распознавании (если на прямую дать команду на распознавание, то время около 3 сек. ) , а в обработке моего кода и обработке ffmpega-
exec('ffmpeg -y -i "rtsp://192.168.1.4:554/user=admin_password=255990_channel=1_stream=0.sdp?real_stream" -t 5 -f mp4 -vcodec libx264 -pix_fmt yuv420p -an -r 15 /var/www/html/cms/cached/webcam_recorder/out.mp4');

//вытаскивем фото с потока и сохраняем
exec('ffmpeg -i /var/www/html/cms/cached/webcam_recorder/out.mp4 -r 1 -f image2 /home/pi/test_reg/images/cam.jpg', $result);
Raspberry 3, AMS 16, arduinka 2560, Orange pi Zero, Broadlink RM3, Xiaomi Mi Robot Vacuum SKV4000GL
Аватара пользователя
tarasfrompir
Сообщения: 3216
Зарегистрирован: Ср мар 02, 2016 8:18 pm
Откуда: Украина Пирятин
Благодарил (а): 223 раза
Поблагодарили: 815 раз

Re: Распознавание лиц

Сообщение tarasfrompir » Ср сен 02, 2020 3:18 pm

lihodeev писал(а):
Ср сен 02, 2020 3:08 pm
tarasfrompir писал(а):
Ср сен 02, 2020 2:37 pm

уменьшай картинку и соответсветнно размер нейронки для распознавания - просто долго грузит саму обученную сеть
где тут...

Код: Выделить всё

# load the image, resize it to have a width of 600 pixels (while
# maintaining the aspect ratio), and then grab the image dimensions
image = cv2.imread(args["image"])
image = imutils.resize(image, width=600)
(h, w) = image.shape[:2]
# construct a blob from the image
imageBlob = cv2.dnn.blobFromImage(
	cv2.resize(image, (300, 300)), 1.0, (300, 300),
задержка я так понимаю не в распознавании (если на прямую дать команду на распознавание, то время около 3 сек. ) , а в обработке моего кода и обработке ffmpega-
exec('ffmpeg -y -i "rtsp://192.168.1.4:554/user=admin_password=255990_channel=1_stream=0.sdp?real_stream" -t 5 -f mp4 -vcodec libx264 -pix_fmt yuv420p -an -r 15 /var/www/html/cms/cached/webcam_recorder/out.mp4');

//вытаскивем фото с потока и сохраняем
exec('ffmpeg -i /var/www/html/cms/cached/webcam_recorder/out.mp4 -r 1 -f image2 /home/pi/test_reg/images/cam.jpg', $result);
ну так тут же не правильно сделано - ты сразу пишеш видео а потом только его распознаеш - а нужно ффмпегом брать кадр в секунду (я брал два) - запихивать его в память - а потом с памяти напрямую распознавать минуя запись
где '-r', '2', - это 2 кадра в секунду

вот типо кусок кода моего

Код: Выделить всё

CREATE_NO_WINDOW = 0x08000000
command = [ 'c:/_majordomo/apps/ffmpeg/ffmpeg', 
            '-i', camnumber,
            '-pix_fmt', 'rgb24',
            '-ss', '0',
            '-to', str(timetochek),
            '-r', '2',
            '-vcodec', 'rawvideo',
            '-an','-sn', #-an, -sn disables audio and sub-title processing respectively
            '-f', 'image2pipe', '-'] # we need to output to a pipe
pipe = sp.Popen(command, stdout = sp.PIPE, stderr = sp.PIPE, creationflags = CREATE_NO_WINDOW)

stop = 0
for i in range(int(timetochek)*2-2):
    raw_image = pipe.stdout.read(1280*720*3)
    image1 =  numpy.fromstring(raw_image, dtype='uint8')
    image = image1.reshape((720,1280,3))  
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    # Get all face from the video waiting
    faces = faceCascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=8, minSize=(100, 100), flags = 0)
    # For each face in faces
    for(x,y,w,h) in faces:
        # Recognize the face belongs to which ID
        prediction, conf= recognizer.predict(gray[y:y+h,x:x+w])
        face_id = usersname[int(prediction)]
        face_id = str(face_id[0:-3])
        print (face_id, conf, rumname, camnumber)
        if int(conf)< int(porog): 
            rna = requests.get('http://127.0.0.1/objects/?object='+(str(face_id))+'&op=set&p=atHome&v=1')
            rna = requests.get('http://127.0.0.1/objects/?object='+(str(face_id))+'&op=set&p=seenAt&v='+rumname)
            rna = requests.get('http://127.0.0.1/objects/?object='+rumname+'&op=set&p=activeUser&v='+(str(face_id)))
            stop = 1
    if stop == 1:
        break
    # Display the video waiting with the bounded rectangle
    # write video frame to file just to verify
    #videoFrameName = 'Video_Frame{0}.jpg'.format(i)
    #cv2.imwrite(videoFrameName, gray)

# Close all windows
cv2.destroyAllWindows()
pipe.terminate()
Спасибо нам ПОМОЖЕТ..!
lihodeev
Сообщения: 148
Зарегистрирован: Ср июл 25, 2018 10:37 pm
Благодарил (а): 43 раза
Поблагодарили: 8 раз

Re: Распознавание лиц

Сообщение lihodeev » Ср сен 02, 2020 4:59 pm

я явно что то пропустил - line 11, in import MySQLdb as mdb ImportError: No module named MySQLdb
Raspberry 3, AMS 16, arduinka 2560, Orange pi Zero, Broadlink RM3, Xiaomi Mi Robot Vacuum SKV4000GL
Аватара пользователя
tarasfrompir
Сообщения: 3216
Зарегистрирован: Ср мар 02, 2016 8:18 pm
Откуда: Украина Пирятин
Благодарил (а): 223 раза
Поблагодарили: 815 раз

Re: Распознавание лиц

Сообщение tarasfrompir » Ср сен 02, 2020 5:05 pm

lihodeev писал(а):
Ср сен 02, 2020 4:59 pm
я явно что то пропустил - line 11, in import MySQLdb as mdb ImportError: No module named MySQLdb
Это ж Питоновский скрипт ..... мускул точно там отсутсвует
Спасибо нам ПОМОЖЕТ..!
lihodeev
Сообщения: 148
Зарегистрирован: Ср июл 25, 2018 10:37 pm
Благодарил (а): 43 раза
Поблагодарили: 8 раз

Re: Распознавание лиц

Сообщение lihodeev » Ср сен 02, 2020 5:25 pm

наверное тут проблема в том, что я работаю через SSH и оболочки у меня нет? Раз есть возможность создать окно CREATE_NO_WINDOW = 0x08000000 ??
Raspberry 3, AMS 16, arduinka 2560, Orange pi Zero, Broadlink RM3, Xiaomi Mi Robot Vacuum SKV4000GL
Аватара пользователя
tarasfrompir
Сообщения: 3216
Зарегистрирован: Ср мар 02, 2016 8:18 pm
Откуда: Украина Пирятин
Благодарил (а): 223 раза
Поблагодарили: 815 раз

Re: Распознавание лиц

Сообщение tarasfrompir » Ср сен 02, 2020 5:57 pm

lihodeev писал(а):
Ср сен 02, 2020 5:25 pm
наверное тут проблема в том, что я работаю через SSH и оболочки у меня нет? Раз есть возможность создать окно CREATE_NO_WINDOW = 0x08000000 ??
ну это чтобю ффмпег - не появлялся в окне работы
Спасибо нам ПОМОЖЕТ..!
lihodeev
Сообщения: 148
Зарегистрирован: Ср июл 25, 2018 10:37 pm
Благодарил (а): 43 раза
Поблагодарили: 8 раз

Re: Распознавание лиц

Сообщение lihodeev » Ср сен 02, 2020 6:46 pm

Идея очень блестящая с чтением в память, но не пойму что делать... создал файл mem.py в каталоге с recognize.py сыпит ошибками
Traceback (most recent call last):
File "memory.py", line 3, in <module>
'-i', camnumber,
NameError: name 'camnumber' is not defined
Raspberry 3, AMS 16, arduinka 2560, Orange pi Zero, Broadlink RM3, Xiaomi Mi Robot Vacuum SKV4000GL
lihodeev
Сообщения: 148
Зарегистрирован: Ср июл 25, 2018 10:37 pm
Благодарил (а): 43 раза
Поблагодарили: 8 раз

Re: Распознавание лиц

Сообщение lihodeev » Ср сен 02, 2020 8:18 pm

что такое str(timetochek), ?
Raspberry 3, AMS 16, arduinka 2560, Orange pi Zero, Broadlink RM3, Xiaomi Mi Robot Vacuum SKV4000GL
Аватара пользователя
tarasfrompir
Сообщения: 3216
Зарегистрирован: Ср мар 02, 2016 8:18 pm
Откуда: Украина Пирятин
Благодарил (а): 223 раза
Поблагодарили: 815 раз

Re: Распознавание лиц

Сообщение tarasfrompir » Ср сен 02, 2020 8:56 pm

lihodeev писал(а):
Ср сен 02, 2020 8:18 pm
что такое str(timetochek), ?
вот полный текст скрипта там все видно

Код: Выделить всё

#!/usr/bin/env python
# -*- coding: utf-8 -*-

# импортируем для получения времени
import time
import os
# Import OpenCV2 for image processing
import cv2
# импортируем для получения аргументов
import sys
import subprocess as sp
import numpy
# Для отправки данніх
import requests
import urllib

path = "/_majordomo/apps/ocv"
os.chdir(path)

#proverka na fail
if not os.path.exists('users.dat'):
    print ("netu vvedennih polyzovateley")
    exit

#работа с аргументами
# nomer porta
portout=80 # так как нулевой аргумент это названия файла
# 1 argument nazvanie komnaty
rumname=sys.argv[1]
#rumname="hall"
# porog
porog=350 
# 2 argument vremya raspoznavaniya после превышения которого скрипт прекращает работу
timetochek=sys.argv[2]
#timetochek=10
# 3 argument potok camery
camnumber=sys.argv[3]
#camnumber="rtsp://192.168.100.99:554/user=admin&password=&channel=1&stream=0.sdp?"

# октрываем файл для определения пользователей
users = open('users.dat', 'r')
# считиваем пользователей в список
usersname = users.read().split("\n")[:-1]
users.close()

# Create Local Binary Patterns Histograms for face recognization
recognizer = cv2.face.LBPHFaceRecognizer_create(radius=1, neighbors=8, grid_x=16, grid_y=16)
# Using prebuilt frontal face training model, for face detection
detector = cv2.CascadeClassifier("haarcascade_frontalface_default.xml");
# Load the trained mode
recognizer.read('trainer.yml')
# Create classifier from prebuilt model
faceCascade = cv2.CascadeClassifier("haarcascade_frontalface_default.xml");

CREATE_NO_WINDOW = 0x08000000
command = [ 'c:/_majordomo/apps/ffmpeg/ffmpeg', 
            '-i', camnumber,
            '-pix_fmt', 'rgb24',
            '-ss', '0',
            '-to', str(timetochek),
            '-r', '2',
            '-vcodec', 'rawvideo',
            '-an','-sn', #-an, -sn disables audio and sub-title processing respectively
            '-f', 'image2pipe', '-'] # we need to output to a pipe
pipe = sp.Popen(command, stdout = sp.PIPE, stderr = sp.PIPE, creationflags = CREATE_NO_WINDOW)

stop = 0
for i in range(int(timetochek)*2-2):
    raw_image = pipe.stdout.read(1280*720*3)
    image1 =  numpy.fromstring(raw_image, dtype='uint8')
    image = image1.reshape((720,1280,3))  
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    # Get all face from the video waiting
    faces = faceCascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=8, minSize=(100, 100), flags = 0)
    # For each face in faces
    for(x,y,w,h) in faces:
        # Recognize the face belongs to which ID
        prediction, conf= recognizer.predict(gray[y:y+h,x:x+w])
        face_id = usersname[int(prediction)]
        face_id = str(face_id[0:-3])
        print (face_id, conf, rumname, camnumber)
        if int(conf)< int(porog): 
            rna = requests.get('http://127.0.0.1/objects/?object='+(str(face_id))+'&op=set&p=atHome&v=1')
            rna = requests.get('http://127.0.0.1/objects/?object='+(str(face_id))+'&op=set&p=seenAt&v='+rumname)
            rna = requests.get('http://127.0.0.1/objects/?object='+rumname+'&op=set&p=activeUser&v='+(str(face_id)))
            stop = 1
    if stop == 1:
        break
    # Display the video waiting with the bounded rectangle
    # write video frame to file just to verify
    #videoFrameName = 'Video_Frame{0}.jpg'.format(i)
    #cv2.imwrite(videoFrameName, gray)

# Close all windows
cv2.destroyAllWindows()
pipe.terminate()
sys.exit()

За это сообщение автора tarasfrompir поблагодарил:
lihodeev (Чт сен 03, 2020 8:20 pm)
Рейтинг: 1.16%
Спасибо нам ПОМОЖЕТ..!
Аватара пользователя
tarasfrompir
Сообщения: 3216
Зарегистрирован: Ср мар 02, 2016 8:18 pm
Откуда: Украина Пирятин
Благодарил (а): 223 раза
Поблагодарили: 815 раз

Re: Распознавание лиц

Сообщение tarasfrompir » Ср сен 02, 2020 8:57 pm

lihodeev писал(а):
Ср сен 02, 2020 6:46 pm
Идея очень блестящая с чтением в память, но не пойму что делать... создал файл mem.py в каталоге с recognize.py сыпит ошибками
Traceback (most recent call last):
File "memory.py", line 3, in <module>
'-i', camnumber,
NameError: name 'camnumber' is not defined
это ж ссылка на камеру - передаваемая в аргументе - смотри полный текст выше
Спасибо нам ПОМОЖЕТ..!
Ответить