from http.server import BaseHTTPRequestHandler, HTTPServer
import cv2
import os
import time
import threading
import sys
import torch
CURRENT_DIR = os.path.dirname(os.path.abspath(__file__))
sys.path.append(os.path.dirname(CURRENT_DIR))
from util import LogUtils
from util import ConfigUtils
from util import Constants
from util import ExtractFrames
from detection import drawOnImage
log = LogUtils.log
config = ConfigUtils.config
[docs]class Worker(object):
"""Worker implementation for jobs
"""
[docs] def __init__(self, date,time, interval=1):
"""Initialize Worker for submitted jobs
Args:
date (string): current date.\n
time(string): threshold parameter used for binary label prediction.
Returns:
dataset (BinaryLabelDataset): Transformed Dataset.
"""
self.interval = interval
self.dateParameter = date
self.timeParameter = time
thread = threading.Thread(target=self.run, args=())
thread.daemon = True # Daemonize thread
thread.start() # Start the execution
[docs] def generateVisualization(self,framesDir,redAlertDir):
"""Generated visualization.
"""
log.info("Generating video from frames dir: " + framesDir + " in: " + redAlertDir)
[docs] def doAlert(self,framesDir,fps,averageNumOfPersons,greenAlertDir,redAlertDir,alertPercentage):
""" Performs alert
Args:
framesDir (string): directory where frames are located
Returns:
Test: Returns self.
"""
log.info("Processing alert ...")
if (averageNumOfPersons < alertPercentage):
log.info("Processing RED alert (1 person detected) !!")
outFile = os.path.join(redAlertDir,"result.avi")
ExtractFrames.generateVisualization(framesDir, outFile, fps)
else:
log.info("Processing GREEN alert (2 person detected) !!")
outFile = os.path.join(greenAlertDir, "result.avi")
ExtractFrames.generateVisualization(framesDir, outFile,fps)
[docs] def funcToCheck(self, a,b,c):
""" funcToCheck method
Args:
a (string): b c
Returns:
Test: Returns -1
"""
log.info("Processing alert ...")
return -1
[docs] def getVideoByDate(self,year,month,day,hours,minutes,seconds,jobTempDir,threshold):
""" Retrieves relevant video file according to provided date/time
Args:
param: Input param.
Returns:
Test: Returns self.
"""
foundDavFiles = []
log.info("Searching for folder with name=date(yyyy-mm-dd): " + str(year) + "-" + str(month) + "-" + str(day) + " in " + self.rootVideoFolder)
targetFolder = os.path.join(self.rootVideoFolder,str(year) + "-" + str(month) + "-" + str(day))
if (not os.path.exists(targetFolder )):
log.error("Not able to find records folder: " + targetFolder + " skipping ...")
return foundDavFiles
log.info("Video folder: " + targetFolder + " found, searching for DAV file by time ...")
log.info("Searching for video by time(hh:mm:ss): " + str(hours) + "-" + str(minutes) + "-" + str(seconds))
inputStartAbsoluteSeconds = int(hours)*60*60 + int(minutes)*60 + int(seconds) - threshold
inputEndAbsoluteSeconds = int(hours) * 60 * 60 + int(minutes) * 60 + int(seconds) + threshold
log.info("inputStartAbsoluteSeconds: " + str(inputStartAbsoluteSeconds) )
log.info("inputEndAbsoluteSeconds: " + str(inputEndAbsoluteSeconds))
for targetVideo in os.listdir(targetFolder):
log.info("Checking time range of targetVideo: " + targetVideo)
tempArr = targetVideo.split(".")[0].split("_")
startTime = tempArr[len(tempArr)-2].replace(year+month+day,"")
endTime = tempArr[len(tempArr)- 1].replace(year+month+day,"")
timeArr = list(startTime)
targetAbsoluteStartTime = int(timeArr[0] + timeArr[1])*60*60 + int(timeArr[2]+timeArr[3])*60 + int(timeArr[4]+timeArr[5])
timeArr.clear()
timeArr = list(endTime)
targetAbsoluteEndTime = int(timeArr[0] + timeArr[1]) * 60 * 60 + int(timeArr[2] + timeArr[3]) * 60 + int(timeArr[4] + timeArr[5])
if (targetAbsoluteStartTime <= inputStartAbsoluteSeconds and inputEndAbsoluteSeconds <= targetAbsoluteEndTime):
log.info(
"targetAbsoluteStartTime <= inputStartAbsoluteSeconds and inputEndAbsoluteSeconds <= targetAbsoluteEndTime : "
+ str(targetAbsoluteStartTime) + " <= " + str(inputStartAbsoluteSeconds) + " and " + str(
inputEndAbsoluteSeconds) + " <= " + str(targetAbsoluteEndTime))
log.info("Adding target video: " + targetVideo)
foundDavFiles.append(os.path.join(targetFolder, targetVideo))
continue
if (targetAbsoluteStartTime <= inputStartAbsoluteSeconds and inputStartAbsoluteSeconds <= targetAbsoluteEndTime):
log.info(
"targetAbsoluteStartTime <= inputStartAbsoluteSeconds and inputStartAbsoluteSeconds <= targetAbsoluteEndTime : "
+ str(targetAbsoluteStartTime) + " <= " + str(inputStartAbsoluteSeconds) + " and " + str(
inputStartAbsoluteSeconds) + " <= " + str(targetAbsoluteEndTime))
log.info("Adding target video: " + targetVideo)
foundDavFiles.append(os.path.join(targetFolder, targetVideo))
continue
if (targetAbsoluteStartTime <= inputEndAbsoluteSeconds and inputEndAbsoluteSeconds <= targetAbsoluteEndTime):
log.info(
"targetAbsoluteStartTime <= inputEndAbsoluteSeconds and inputEndAbsoluteSeconds <= targetAbsoluteEndTime : "
+ str(targetAbsoluteStartTime) + " <= " + str(inputEndAbsoluteSeconds) + " and " + str(
inputEndAbsoluteSeconds) + " <= " + str(targetAbsoluteEndTime))
log.info("Adding target video: " + targetVideo)
foundDavFiles.append(os.path.join(targetFolder, targetVideo))
continue
if (len(foundDavFiles) == 0):
log.error("No DAV video files found for specified time: " + str(hours) + "-" + str(minutes) + "-" + str(seconds))
return foundDavFiles
print(foundDavFiles)
log.info("Found total relevant DAV videos: " + str(len(foundDavFiles)))
foundMp4Files = ExtractFrames.convertDAVtoMP4(foundDavFiles,jobTempDir)
log.info("Total converted to MP4 videos: " + str(len(foundMp4Files)))
#foundVideoPath = "D:/poc4paz/paz_videos/PAZ_input.avi"
return foundMp4Files
def main():
hostName = config[Constants.GLOBAL][Constants.HTTP_HOST]
hostPort = config[Constants.GLOBAL][Constants.HTTP_PORT]
myServer = HTTPServer((hostName, int(hostPort)), MyServer)
log.info(str(time.asctime()) + "Starting REST Engine Service on - " + hostName + ":" + str(hostPort) + ".")
try:
myServer.serve_forever()
except KeyboardInterrupt:
pass
myServer.server_close()
log.info(str(time.asctime()) + "Terminating REST Engine Service on - " + hostName + ":" + str(hostPort) + ".")
if __name__ == "__main__":
main()