Commit e020b492 authored by Bruce's avatar Bruce

修正 分段錄影的 bug

parent cbc73367
...@@ -12,7 +12,9 @@ ...@@ -12,7 +12,9 @@
"name": "stdout", "name": "stdout",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"Not Using GSTREAMER\n", "h264\n",
"Using GSTREAMER\n",
"rtspsrc location=rtsp://192.168.5.218/txg/01 latency=30 ! rtph264depay ! h264parse ! omxh264dec ! nvvidconv ! video/x-raw, width=(int)1920, height=(int)1080, format=(string)BGRx ! videoconvert ! appsink\n",
"camera stop\n" "camera stop\n"
] ]
} }
...@@ -25,7 +27,7 @@ ...@@ -25,7 +27,7 @@
"\n", "\n",
"source=\"rtsp://192.168.5.218/txg/01\"\n", "source=\"rtsp://192.168.5.218/txg/01\"\n",
"\n", "\n",
"cam=Camera(1,source,encoder = \"h265\",width=1920,height=1080,use_gstr=False)\n", "cam=Camera(1,source,encoder = \"h264\",width=1920,height=1080,use_gstr=True)\n",
"\n", "\n",
"cam.start()\n", "cam.start()\n",
"break_flag=False\n", "break_flag=False\n",
...@@ -168,10 +170,30 @@ ...@@ -168,10 +170,30 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 2, "execution_count": 3,
"id": "f5590c70", "id": "f5590c70",
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"30.0\n"
]
},
{
"ename": "TypeError",
"evalue": "integer argument expected, got float",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-3-223b1a260d61>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 39\u001b[0m \u001b[0;32mbreak\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 40\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mException\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 41\u001b[0;31m \u001b[0;32mraise\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0me\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 42\u001b[0m \u001b[0mcap\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrelease\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 43\u001b[0m \u001b[0;31m#del(VioWri)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m<ipython-input-3-223b1a260d61>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 34\u001b[0m \u001b[0mwriter\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mwrite\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mframe\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 35\u001b[0m \u001b[0mcv2\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mimshow\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"1\"\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mframe\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 36\u001b[0;31m \u001b[0mkey\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mcv2\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mwaitKey\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m/\u001b[0m\u001b[0mfps\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 37\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mkey\u001b[0m\u001b[0;34m==\u001b[0m\u001b[0mord\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'q'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 38\u001b[0m \u001b[0mbreak_flag\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mTypeError\u001b[0m: integer argument expected, got float"
]
}
],
"source": [ "source": [
"# video writer per hour\n", "# video writer per hour\n",
"import cv2\n", "import cv2\n",
...@@ -184,16 +206,17 @@ ...@@ -184,16 +206,17 @@
"# VioWri = VideoSplitWriter()\n", "# VioWri = VideoSplitWriter()\n",
"# VioWri.start()\n", "# VioWri.start()\n",
"\n", "\n",
"\n", "fps=cap.get(cv2.CAP_PROP_FPS)\n",
"print(fps)\n",
"dd = datetime.datetime.now()\n", "dd = datetime.datetime.now()\n",
"SaveRoot = \"../../Videos/save\"\n", "SaveRoot = \"../../Videos/save\"\n",
"video_folder = os.path.join(SaveRoot,f\"{str(dd.month).zfill(2)}/{str(dd.day).zfill(2)}/{str(dd.hour).zfill(2)}\")\n", "video_folder = os.path.join(SaveRoot,f\"{str(dd.month).zfill(2)}/{str(dd.day).zfill(2)}/{str(dd.hour).zfill(2)}\")\n",
"if not os.path.exists(video_folder):\n", "if not os.path.exists(video_folder):\n",
" os.makedirs(video_folder)\n", " os.makedirs(video_folder)\n",
"video_path = os.path.join(video_folder,f\"{str(dd.minute).zfill(2)}-{str(dd.second).zfill(2)}.mp4\")\n", "video_path = os.path.join(video_folder,f\"{str(dd.minute).zfill(2)}-{str(dd.second).zfill(2)}.mp4\")\n",
"cv2.VideoWriter_fourcc('m','p','4','v')\n", "\n",
"fourcc= cv2.VideoWriter_fourcc('m','p','4','v')\n", "fourcc= cv2.VideoWriter_fourcc('m','p','4','v')\n",
"writer = cv2.VideoWriter(video_path,fourcc,30.0,(1920,1080))\n", "writer = cv2.VideoWriter(video_path,fourcc,fps,(1920,1080))\n",
"\n", "\n",
"break_flag=False\n", "break_flag=False\n",
"try:\n", "try:\n",
...@@ -422,9 +445,75 @@ ...@@ -422,9 +445,75 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": null, "execution_count": 4,
"id": "85f60b71", "id": "85f60b71",
"metadata": {}, "metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Not Using GSTREAMER\n",
"camera stop\n"
]
}
],
"source": [
"\n",
"\n",
"from VideoAnalysis.Camera_Jetson import Camera\n",
"import cv2\n",
"\n",
"source=\"rtsp://192.168.5.218/txg/01\"\n",
"\n",
"cam=Camera(1,source,encoder = \"h265\",width=1920,height=1080,use_gstr=False)\n",
"\n",
"dd = datetime.datetime.now()\n",
"SaveRoot = \"../../Videos/save\"\n",
"video_folder = os.path.join(SaveRoot,f\"{str(dd.month).zfill(2)}/{str(dd.day).zfill(2)}/{str(dd.hour).zfill(2)}\")\n",
"if not os.path.exists(video_folder):\n",
" os.makedirs(video_folder)\n",
"video_path = os.path.join(video_folder,f\"{str(dd.minute).zfill(2)}-{str(dd.second).zfill(2)}.mp4\")\n",
"fourcc= cv2.VideoWriter_fourcc('m','p','4','v')\n",
"writer = cv2.VideoWriter(video_path,fourcc,30,(1920,1080))\n",
"\n",
"cam.start()\n",
"break_flag=False\n",
"try:\n",
" cv2.namedWindow(\"1\",cv2.WINDOW_NORMAL)\n",
" cv2.resizeWindow(\"1\",1280,720)\n",
" while True:\n",
" if break_flag:\n",
" break\n",
" ret,frame=cam.resultQueue.get()\n",
" if ret:\n",
" writer.write(frame)\n",
" cv2.imshow(\"1\",frame)\n",
" key=cv2.waitKey(1)\n",
" if key==ord('q'):\n",
" break_flag=True\n",
" break\n",
"except Exception as e:\n",
" raise(e)\n",
" cam.stop()\n",
" del (cam)\n",
" writer.release()\n",
" cv2.destroyAllWindows()\n",
" \n",
"finally:\n",
" cam.stop()\n",
" del (cam)\n",
" writer.release()\n",
" cv2.destroyAllWindows()\n",
"\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "78266468",
"metadata": {},
"outputs": [], "outputs": [],
"source": [] "source": []
} }
......
{ {
"cells": [ "cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "8369dfff",
"metadata": {},
"outputs": [],
"source": [
"import cv2\n",
"import threading\n",
"\n",
"class AnnoFormater(object):\n",
" def __init__(self):\n",
" self.crop_img = None\n",
" self.x1 = None\n",
" self.y1 = None\n",
" self.x2 = None\n",
" self.y2 = None\n",
" self.obj_ID = None\n",
" self.obj_Name = None\n",
" \n",
" def __call__(self,crop_img=None,x1=None,y1=None,x2=None,y2=None,obj_ID=None,obj_Name=None):\n",
" self.crop_img = crop_img if crop_img else self.crop_img\n",
" self.x1 = x1 if x1 else self.x1\n",
" self.y1 = y1 if y1 else self.y1\n",
" self.x2 = x2 if x2 else self.x2\n",
" self.y2 = y2 if y2 else self.y2\n",
" self.obj_ID = obj_ID if obj_ID else self.obj_ID\n",
" self.obj_Name = obj_Name if obj_Name else self.obj_Name\n",
" return f\"{x1} {y1} {x2} {y2},{obj_ID},{obj_Name}\"\n",
" \n",
" \n",
"class AnnoWriter(threading.Thread):\n",
" def __init__(self):\n",
" threading.Thread.__init__(self)\n",
" self.isRunning = False\n",
" "
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "0ff13a82",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Not Using GSTREAMER\n",
"camera stop\n"
]
}
],
"source": [
"\n",
"\n",
"from VideoAnalysis.Camera_Jetson import Camera\n",
"import cv2\n",
"\n",
"source=\"rtsp://192.168.5.218/txg/01\"\n",
"#source=\"/home/tx2/Videos/20220504173000.mp4\"\n",
"\n",
"\n",
"cam=Camera(1,source,encoder = \"h265\",width=1920,height=1080)\n",
"\n",
"cam.start()\n",
"break_flag=False\n",
"try:\n",
" cv2.namedWindow(\"1\",cv2.WINDOW_NORMAL)\n",
" cv2.resizeWindow(\"1\",1280,720)\n",
" while True:\n",
" if break_flag:\n",
" break\n",
" ret,frame=cam.resultQueue.get()\n",
" if ret:\n",
" cv2.imshow(\"1\",frame)\n",
" key=cv2.waitKey(33)\n",
" if key==ord('q'):\n",
" break_flag=True\n",
" break\n",
"except Exception as e:\n",
" raise(e)\n",
" cam.stop()\n",
" del (cam)\n",
" cv2.destroyAllWindows()\n",
" \n",
"finally:\n",
" cam.stop()\n",
" del (cam)\n",
" cv2.destroyAllWindows()\n",
"\n",
"\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "e64ced7e",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[ 658 307 18 20]\n",
" [1302 804 23 28]\n",
" [1149 910 26 21]\n",
" [ 531 340 18 23]]\n"
]
}
],
"source": [
"from VideoAnalysis.SystemModule import TrafficFlowMeta\n",
"\n",
"TFMeta=TrafficFlowMeta(width=1920,height=1080,polyPoints = [[658 , 307],[1302 , 804],[1149 , 910],[531 , 340]] )\n",
"\n",
"print(cv2.selectROIs(\"1\",cv2.add(TFMeta.draw_map_TFC,frame)))\n",
"cv2.destroyAllWindows()"
]
},
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 7, "execution_count": 7,
...@@ -24,24 +145,24 @@ ...@@ -24,24 +145,24 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 50, "execution_count": 51,
"id": "2e370bb1", "id": "2e370bb1",
"metadata": {}, "metadata": {},
"outputs": [ "outputs": [
{ {
"data": { "data": {
"text/plain": [ "text/plain": [
"'1654064465230171'" "1654065637.218047"
] ]
}, },
"execution_count": 50, "execution_count": 51,
"metadata": {}, "metadata": {},
"output_type": "execute_result" "output_type": "execute_result"
} }
], ],
"source": [ "source": [
"from datetime import datetime\n", "from datetime import datetime\n",
"str(datetime.now().timestamp()).replace('.','')\n" "datetime.now().timestamp()\n"
] ]
}, },
{ {
......
import cv2
class AnnoFormater(object):
def __init__(self):
self.crop_img = None
self.x1 = None
self.y1 = None
self.x2 = None
self.y2 = None
self.obj_ID = None
self.obj_Name = None
def __call__(self,crop_img=None,x1=None,y1=None,x2=None,y2=None,obj_ID=None,obj_Name=None):
self.crop_img = crop_img if crop_img else self.crop_img
self.x1 = x1 if x1 else self.x1
self.y1 = y1 if y1 else self.y1
self.x2 = x2 if x2 else self.x2
self.y2 = y2 if y2 else self.y2
self.obj_ID = obj_ID if obj_ID else self.obj_ID
self.obj_Name = obj_Name if obj_Name else self.obj_Name
return f"{x1} {y1} {x2} {y2},{obj_ID},{obj_Name}"
class AnnoWriter()
\ No newline at end of file
...@@ -91,7 +91,7 @@ try: ...@@ -91,7 +91,7 @@ try:
for cls,box in results: for cls,box in results:
x1,y1,x2,y2=box x1,y1,x2,y2=box
w,h=x2-x1,y2-y1 w,h=x2-x1,y2-y1
rect=(x1,y1,w,h) rect=(x1,y1,w,h)
obj_bbox_xyxys.append([x1,y1,x2,y2]) obj_bbox_xyxys.append([x1,y1,x2,y2])
#obj_crop_imgs.append(frame[y1:y2,x1:x2,:].copy()) #obj_crop_imgs.append(frame[y1:y2,x1:x2,:].copy())
obj_crop_imgs.append(None) obj_crop_imgs.append(None)
......
...@@ -37,7 +37,7 @@ class ObjectMeta(object): ...@@ -37,7 +37,7 @@ class ObjectMeta(object):
self.lock_plate_num = True self.lock_plate_num = True
self.lpr_plate_num = self.get_plate_num() self.lpr_plate_num = self.get_plate_num()
def update_lpr_time(self): # 更新車辨次數 若大於xx次 則放棄車牌辨識 def update_lpr_time(self): # Try to 車辨次數 若大於xx次 則放棄車牌辨識
self.give_up_lpr_count+=1 self.give_up_lpr_count+=1
if self.give_up_lpr_count > 5: if self.give_up_lpr_count > 5:
self.lock_plate_answer() self.lock_plate_answer()
......
...@@ -4,6 +4,7 @@ import numpy as np ...@@ -4,6 +4,7 @@ import numpy as np
import sys import sys
import time import time
import threading import threading
class VideoSplitWriter(threading.Thread): class VideoSplitWriter(threading.Thread):
"""VideoSplitWriter """VideoSplitWriter
Saving Video Stream as mp4 per hours. With random 5 minute range. Saving Video Stream as mp4 per hours. With random 5 minute range.
...@@ -17,8 +18,10 @@ class VideoSplitWriter(threading.Thread): ...@@ -17,8 +18,10 @@ class VideoSplitWriter(threading.Thread):
self.is_Running = False self.is_Running = False
self.fourcc= cv2.VideoWriter_fourcc('m','p','4','v') self.fourcc= cv2.VideoWriter_fourcc('m','p','4','v')
self.writer = None # cv2.VideoWriter('datetime',fourcc,30.0,(1920,1080)) self.writer = None # cv2.VideoWriter('datetime',fourcc,30.0,(1920,1080))
self.video_path = None
self.SaveRoot= os.path.join(os.path.expanduser("~"),"Videos","save") self.SaveRoot= os.path.join(os.path.expanduser("~"),"Videos","save")
self.Frame = None self.Frame = None
self.symbo=['/','-','\\','-']
def run(self): def run(self):
self.is_Running = True self.is_Running = True
...@@ -31,30 +34,27 @@ class VideoSplitWriter(threading.Thread): ...@@ -31,30 +34,27 @@ class VideoSplitWriter(threading.Thread):
Write_minute = np.random.randint(dd.minute,60) Write_minute = np.random.randint(dd.minute,60)
Write_second = np.random.randint(dd.second,60) Write_second = np.random.randint(dd.second,60)
wait_flag = True wait_flag = True
symbo=['/','-','\\']
count = 0 count = 0
while wait_flag: while wait_flag:
dd = datetime.datetime.now() dd = datetime.datetime.now()
if dd.minute >= Write_minute and dd.second >= Write_second: if dd.minute >= Write_minute and dd.second >= Write_second:
wait_flag = False wait_flag = False
sys.stdout.write(f"\rwait for writing until {str(self.lastRunTime.hour).zfill(2)}:{str(Write_minute).zfill(2)}:{str(Write_second).zfill(2)}...{symbo[count%3]}") sys.stdout.write(f"\rWait for writing at {str(self.lastRunTime.hour).zfill(2)}:{str(Write_minute).zfill(2)}:{str(Write_second).zfill(2)}...{self.symbo[count%len(self.symbo)]}")
count+=1 count+=1
time.sleep(1) time.sleep(1)
self.StarWriting() self.StarWriting()
print (f"StarWriting at {self.lastWritingTime}") print (f"StartWriting at {self.lastWritingTime}")
while datetime.datetime.now() - self.lastWritingTime < datetime.timedelta(minutes = 5):
sys.stdout.write(f"\r Writing frame...{self.symbo[count%len(self.symbo)]}")
#self.writer.write(self.Frame)
time.sleep(1)
while datetime.datetime.now() - self.lastWritingTime < datetime.timedelta(minute = 5):
count = 0
while self.Frame is None:
sys.stdout.write(f"\rwait for new frame...{symbo[count%3]}")
count+=1
self.writer.write(self.Frame)
cv2.waitKey(33)
self.Frame = None
self.StopWriting() self.StopWriting()
print (f"StopWriting at {datetime.datetime.now()}") print (f"StopWriting at {datetime.datetime.now()}")
else: else:
print (f"Wait for next hour at {datetime.datetime.now()+datetime.timedelta(hours = 1)}")
time.sleep(1000*60*60) time.sleep(1000*60*60)
...@@ -69,8 +69,8 @@ class VideoSplitWriter(threading.Thread): ...@@ -69,8 +69,8 @@ class VideoSplitWriter(threading.Thread):
video_folder = os.path.join(self.SaveRoot,f"{str(dd.month).zfill(2)}/{str(dd.day).zfill(2)}/{str(dd.hour).zfill(2)}") video_folder = os.path.join(self.SaveRoot,f"{str(dd.month).zfill(2)}/{str(dd.day).zfill(2)}/{str(dd.hour).zfill(2)}")
if not os.path.exists(video_folder): if not os.path.exists(video_folder):
os.makedirs(video_folder) os.makedirs(video_folder)
video_path = os.path.join(video_folder,f"{str(dd.minute).zfill(2)}-{str(dd.second).zfill(2)}.mp4") self.video_path = os.path.join(video_folder,f"{str(dd.minute).zfill(2)}-{str(dd.second).zfill(2)}.mp4")
self.writer = cv2.VideoWriter(video_path,self.fourcc,30.0,(1920,1080)) #self.writer = cv2.VideoWriter(self.video_path,self.fourcc,30.0,(1920,1080))
def StopWriting(self): def StopWriting(self):
self.is_Saving = False self.is_Saving = False
...@@ -78,6 +78,7 @@ class VideoSplitWriter(threading.Thread): ...@@ -78,6 +78,7 @@ class VideoSplitWriter(threading.Thread):
self.writer.release() self.writer.release()
print("Saved before Released") print("Saved before Released")
self.writer = None self.writer = None
self.video_path = None
def __del__(self): def __del__(self):
...@@ -96,13 +97,20 @@ if __name__ == '__main__': ...@@ -96,13 +97,20 @@ if __name__ == '__main__':
# video writer per hour # video writer per hour
import cv2 import cv2
import datetime import datetime
from Camera_Jetson import Camera
source="rtsp://192.168.5.218/txg/01" source="rtsp://192.168.5.218/txg/01"
cam=Camera(1,source,encoder = "h265",width=1920,height=1080,use_gstr=False)
is_display = False cam.start()
is_display = False
cap=cv2.VideoCapture(source)
VioWri = VideoSplitWriter() VioWri = VideoSplitWriter()
VioWri.start() VioWri.start()
fourcc= cv2.VideoWriter_fourcc('m','p','4','v')
writer = None
break_flag=False break_flag=False
try: try:
if is_display: if is_display:
...@@ -111,22 +119,39 @@ if __name__ == '__main__': ...@@ -111,22 +119,39 @@ if __name__ == '__main__':
while True: while True:
if break_flag: if break_flag:
break break
ret,frame=cap.read() ret,frame = cam.resultQueue.get()
if ret: if ret:
VioWri.Frame = frame #VioWri.Frame = frame
if VioWri.is_Saving:
if writer is None:
writer = cv2.VideoWriter(VioWri.video_path,fourcc,30.0,(1920,1080))
writer.write(frame)
else:
if writer is not None:
writer.release()
writer = None
if is_display: if is_display:
cv2.imshow("1",frame) cv2.imshow("1",frame)
key=cv2.waitKey(33) key=cv2.waitKey(1)
if key==ord('q'): if key==ord('q'):
break_flag=True break_flag=True
break break
else:
cv2.waitKey(1)
except Exception as e: except Exception as e:
raise(e) raise(e)
cap.release() cam.stop()
del (cam)
del(VioWri) del(VioWri)
if writer is not None:
writer.release()
cv2.destroyAllWindows() cv2.destroyAllWindows()
finally: finally:
cap.release() cam.stop()
del (cam)
del(VioWri) del(VioWri)
if writer is not None:
writer.release()
cv2.destroyAllWindows() cv2.destroyAllWindows()
...@@ -12,7 +12,9 @@ ...@@ -12,7 +12,9 @@
"name": "stdout", "name": "stdout",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"Not Using GSTREAMER\n", "h264\n",
"Using GSTREAMER\n",
"rtspsrc location=rtsp://192.168.5.218/txg/01 latency=30 ! rtph264depay ! h264parse ! omxh264dec ! nvvidconv ! video/x-raw, width=(int)1920, height=(int)1080, format=(string)BGRx ! videoconvert ! appsink\n",
"camera stop\n" "camera stop\n"
] ]
} }
...@@ -25,7 +27,7 @@ ...@@ -25,7 +27,7 @@
"\n", "\n",
"source=\"rtsp://192.168.5.218/txg/01\"\n", "source=\"rtsp://192.168.5.218/txg/01\"\n",
"\n", "\n",
"cam=Camera(1,source,encoder = \"h265\",width=1920,height=1080,use_gstr=False)\n", "cam=Camera(1,source,encoder = \"h264\",width=1920,height=1080,use_gstr=True)\n",
"\n", "\n",
"cam.start()\n", "cam.start()\n",
"break_flag=False\n", "break_flag=False\n",
...@@ -168,10 +170,30 @@ ...@@ -168,10 +170,30 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 2, "execution_count": 3,
"id": "f5590c70", "id": "f5590c70",
"metadata": {}, "metadata": {},
"outputs": [], "outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"30.0\n"
]
},
{
"ename": "TypeError",
"evalue": "integer argument expected, got float",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-3-223b1a260d61>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 39\u001b[0m \u001b[0;32mbreak\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 40\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mException\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 41\u001b[0;31m \u001b[0;32mraise\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0me\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 42\u001b[0m \u001b[0mcap\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrelease\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 43\u001b[0m \u001b[0;31m#del(VioWri)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m<ipython-input-3-223b1a260d61>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 34\u001b[0m \u001b[0mwriter\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mwrite\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mframe\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 35\u001b[0m \u001b[0mcv2\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mimshow\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"1\"\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mframe\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 36\u001b[0;31m \u001b[0mkey\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mcv2\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mwaitKey\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m/\u001b[0m\u001b[0mfps\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 37\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mkey\u001b[0m\u001b[0;34m==\u001b[0m\u001b[0mord\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'q'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 38\u001b[0m \u001b[0mbreak_flag\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mTypeError\u001b[0m: integer argument expected, got float"
]
}
],
"source": [ "source": [
"# video writer per hour\n", "# video writer per hour\n",
"import cv2\n", "import cv2\n",
...@@ -184,16 +206,17 @@ ...@@ -184,16 +206,17 @@
"# VioWri = VideoSplitWriter()\n", "# VioWri = VideoSplitWriter()\n",
"# VioWri.start()\n", "# VioWri.start()\n",
"\n", "\n",
"\n", "fps=cap.get(cv2.CAP_PROP_FPS)\n",
"print(fps)\n",
"dd = datetime.datetime.now()\n", "dd = datetime.datetime.now()\n",
"SaveRoot = \"../../Videos/save\"\n", "SaveRoot = \"../../Videos/save\"\n",
"video_folder = os.path.join(SaveRoot,f\"{str(dd.month).zfill(2)}/{str(dd.day).zfill(2)}/{str(dd.hour).zfill(2)}\")\n", "video_folder = os.path.join(SaveRoot,f\"{str(dd.month).zfill(2)}/{str(dd.day).zfill(2)}/{str(dd.hour).zfill(2)}\")\n",
"if not os.path.exists(video_folder):\n", "if not os.path.exists(video_folder):\n",
" os.makedirs(video_folder)\n", " os.makedirs(video_folder)\n",
"video_path = os.path.join(video_folder,f\"{str(dd.minute).zfill(2)}-{str(dd.second).zfill(2)}.mp4\")\n", "video_path = os.path.join(video_folder,f\"{str(dd.minute).zfill(2)}-{str(dd.second).zfill(2)}.mp4\")\n",
"cv2.VideoWriter_fourcc('m','p','4','v')\n", "\n",
"fourcc= cv2.VideoWriter_fourcc('m','p','4','v')\n", "fourcc= cv2.VideoWriter_fourcc('m','p','4','v')\n",
"writer = cv2.VideoWriter(video_path,fourcc,30.0,(1920,1080))\n", "writer = cv2.VideoWriter(video_path,fourcc,fps,(1920,1080))\n",
"\n", "\n",
"break_flag=False\n", "break_flag=False\n",
"try:\n", "try:\n",
...@@ -422,9 +445,75 @@ ...@@ -422,9 +445,75 @@
}, },
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": null, "execution_count": 4,
"id": "85f60b71", "id": "85f60b71",
"metadata": {}, "metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Not Using GSTREAMER\n",
"camera stop\n"
]
}
],
"source": [
"\n",
"\n",
"from VideoAnalysis.Camera_Jetson import Camera\n",
"import cv2\n",
"\n",
"source=\"rtsp://192.168.5.218/txg/01\"\n",
"\n",
"cam=Camera(1,source,encoder = \"h265\",width=1920,height=1080,use_gstr=False)\n",
"\n",
"dd = datetime.datetime.now()\n",
"SaveRoot = \"../../Videos/save\"\n",
"video_folder = os.path.join(SaveRoot,f\"{str(dd.month).zfill(2)}/{str(dd.day).zfill(2)}/{str(dd.hour).zfill(2)}\")\n",
"if not os.path.exists(video_folder):\n",
" os.makedirs(video_folder)\n",
"video_path = os.path.join(video_folder,f\"{str(dd.minute).zfill(2)}-{str(dd.second).zfill(2)}.mp4\")\n",
"fourcc= cv2.VideoWriter_fourcc('m','p','4','v')\n",
"writer = cv2.VideoWriter(video_path,fourcc,30,(1920,1080))\n",
"\n",
"cam.start()\n",
"break_flag=False\n",
"try:\n",
" cv2.namedWindow(\"1\",cv2.WINDOW_NORMAL)\n",
" cv2.resizeWindow(\"1\",1280,720)\n",
" while True:\n",
" if break_flag:\n",
" break\n",
" ret,frame=cam.resultQueue.get()\n",
" if ret:\n",
" writer.write(frame)\n",
" cv2.imshow(\"1\",frame)\n",
" key=cv2.waitKey(1)\n",
" if key==ord('q'):\n",
" break_flag=True\n",
" break\n",
"except Exception as e:\n",
" raise(e)\n",
" cam.stop()\n",
" del (cam)\n",
" writer.release()\n",
" cv2.destroyAllWindows()\n",
" \n",
"finally:\n",
" cam.stop()\n",
" del (cam)\n",
" writer.release()\n",
" cv2.destroyAllWindows()\n",
"\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "78266468",
"metadata": {},
"outputs": [], "outputs": [],
"source": [] "source": []
} }
......
{ {
"cells": [ "cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "8369dfff",
"metadata": {},
"outputs": [],
"source": [
"import cv2\n",
"import threading\n",
"\n",
"class AnnoFormater(object):\n",
" def __init__(self):\n",
" self.crop_img = None\n",
" self.x1 = None\n",
" self.y1 = None\n",
" self.x2 = None\n",
" self.y2 = None\n",
" self.obj_ID = None\n",
" self.obj_Name = None\n",
" \n",
" def __call__(self,crop_img=None,x1=None,y1=None,x2=None,y2=None,obj_ID=None,obj_Name=None):\n",
" self.crop_img = crop_img if crop_img else self.crop_img\n",
" self.x1 = x1 if x1 else self.x1\n",
" self.y1 = y1 if y1 else self.y1\n",
" self.x2 = x2 if x2 else self.x2\n",
" self.y2 = y2 if y2 else self.y2\n",
" self.obj_ID = obj_ID if obj_ID else self.obj_ID\n",
" self.obj_Name = obj_Name if obj_Name else self.obj_Name\n",
" return f\"{x1} {y1} {x2} {y2},{obj_ID},{obj_Name}\"\n",
" \n",
" \n",
"class AnnoWriter(threading.Thread):\n",
" def __init__(self):\n",
" threading.Thread.__init__(self)\n",
" self.isRunning = False\n",
" "
]
},
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": 2, "execution_count": 2,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment