Created
February 19, 2022 12:19
-
-
Save iandol/ebf722f75251bb9f5bc57ba967fd12ba to your computer and use it in GitHub Desktop.
Revisions
-
iandol created this gist
Feb 19, 2022 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,59 @@ ❯ python client.py 12:08:59 :: Helper :: INFO :: Running VidGear Version: 0.2.5 12:08:59 :: Helper_Async :: DEBUG :: Found valid WebGear data-files successfully. 12:08:59 :: WebGear :: DEBUG :: `/Users/ian/.vidgear/webgear` is the default location for saving WebGear data-files. 12:08:59 :: WebGear :: WARNING :: Given source is of NoneType. Therefore, JPEG Frame-Compression is disabled! 12:08:59 :: WebGear :: DEBUG :: Initiating Video Streaming. 12:08:59 :: WebGear :: DEBUG :: Running Starlette application. INFO: Started server process [17175] INFO: Waiting for application startup. INFO: Application startup complete. INFO: Uvicorn running on http://localhost:8000 (Press CTRL+C to quit) INFO: ::1:54225 - "GET / HTTP/1.1" 200 OK INFO: ::1:54225 - "GET /css/custom.css HTTP/1.1" 304 Not Modified INFO: ::1:54225 - "GET /js/custom.js HTTP/1.1" 304 Not Modified INFO: ::1:54225 - "GET /video HTTP/1.1" 200 OK 12:09:06 :: NetGear :: ERROR :: Can't assign requested address Traceback (most recent call last): File "/Users/ian/.venv/vidgear/lib/python3.10/site-packages/vidgear/gears/netgear.py", line 620, in __init__ self.__msg_socket.bind( File "/Users/ian/.venv/vidgear/lib/python3.10/site-packages/zmq/sugar/socket.py", line 214, in bind super().bind(addr) File "zmq/backend/cython/socket.pyx", line 540, in zmq.backend.cython.socket.Socket.bind File "zmq/backend/cython/checkrc.pxd", line 28, in zmq.backend.cython.checkrc._check_rc zmq.error.ZMQError: Can't assign requested address ERROR: Exception in ASGI application Traceback (most recent call last): File "/Users/ian/.venv/vidgear/lib/python3.10/site-packages/uvicorn/protocols/http/h11_impl.py", line 366, in run_asgi result = await app(self.scope, self.receive, self.send) File "/Users/ian/.venv/vidgear/lib/python3.10/site-packages/uvicorn/middleware/proxy_headers.py", line 75, in __call__ return await self.app(scope, receive, send) File "/Users/ian/.venv/vidgear/lib/python3.10/site-packages/starlette/applications.py", line 119, in __call__ await self.middleware_stack(scope, receive, send) File "/Users/ian/.venv/vidgear/lib/python3.10/site-packages/starlette/middleware/errors.py", line 181, in __call__ raise exc File "/Users/ian/.venv/vidgear/lib/python3.10/site-packages/starlette/middleware/errors.py", line 159, in __call__ await self.app(scope, receive, _send) File "/Users/ian/.venv/vidgear/lib/python3.10/site-packages/starlette/exceptions.py", line 87, in __call__ raise exc File "/Users/ian/.venv/vidgear/lib/python3.10/site-packages/starlette/exceptions.py", line 76, in __call__ await self.app(scope, receive, sender) File "/Users/ian/.venv/vidgear/lib/python3.10/site-packages/starlette/routing.py", line 659, in __call__ await route.handle(scope, receive, send) File "/Users/ian/.venv/vidgear/lib/python3.10/site-packages/starlette/routing.py", line 259, in handle await self.app(scope, receive, send) File "/Users/ian/.venv/vidgear/lib/python3.10/site-packages/starlette/routing.py", line 64, in app await response(scope, receive, send) File "/Users/ian/.venv/vidgear/lib/python3.10/site-packages/starlette/responses.py", line 241, in __call__ async with anyio.create_task_group() as task_group: File "/Users/ian/.venv/vidgear/lib/python3.10/site-packages/anyio/_backends/_asyncio.py", line 574, in __aexit__ raise exceptions[0] File "/Users/ian/.venv/vidgear/lib/python3.10/site-packages/starlette/responses.py", line 244, in wrap await func() File "/Users/ian/.venv/vidgear/lib/python3.10/site-packages/starlette/responses.py", line 233, in stream_response async for chunk in self.body_iterator: File "/Users/ian/Code/gears/client.py", line 24, in my_frame_producer client = NetGear( File "/Users/ian/.venv/vidgear/lib/python3.10/site-packages/vidgear/gears/netgear.py", line 669, in __init__ raise RuntimeError( RuntimeError: [NetGear:ERROR] :: Receive Mode failed to bind address: tcp://192.168.1.44:5454 and pattern: 1! Kindly recheck all parameters. This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,7 @@ ❯ python server.py 12:08:45 :: Helper :: INFO :: Running VidGear Version: 0.2.5 12:08:46 :: NetGear :: DEBUG :: Reliable transmission is enabled for this pattern with max-retries: 3 and timeout: 1024.0 secs. 12:08:46 :: NetGear :: DEBUG :: Successfully connected to address: tcp://192.168.1.44:5454 with pattern: 1. 12:08:46 :: NetGear :: DEBUG :: JPEG Frame-Compression is activated for this connection with Colorspace:`BGR`, Quality:`90`%, Fastdct:`enabled`, and Fastupsample:`enabled`. 12:08:46 :: NetGear :: DEBUG :: Unique System ID is 6T4VWWHU. 12:08:46 :: NetGear :: DEBUG :: Send Mode is successfully activated and ready to send data. This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,60 @@ # import necessary libs import uvicorn, asyncio, cv2 from vidgear.gears import NetGear from vidgear.gears.asyncio import WebGear from vidgear.gears.asyncio.helper import reducer # initialize WebGear app without any source web = WebGear(logging=True) # activate jpeg encoding and specify other related parameters options = { "jpeg_compression": True, "jpeg_compression_quality": 90, "jpeg_compression_fastdct": True, "jpeg_compression_fastupsample": True, } # create your own custom frame producer async def my_frame_producer(): ''' frame producer ''' client = NetGear( receive_mode=True, address="192.168.1.44", port="5454", protocol="tcp", pattern=1, logging=True, **options, ) # loop over frames while True: # receive frames from network frame = client.recv() # if NoneType if frame is None: return # reducer frames size if you want more performance otherwise comment this line frame = await reducer( frame, percentage=30, interpolation=cv2.INTER_AREA ) # reduce frame by 30% # handle JPEG encoding encodedImage = cv2.imencode(".jpg", frame)[1].tobytes() # yield frame in byte format yield (b"--frame\r\nContent-Type:image/jpeg\r\n\r\n" + encodedImage + b"\r\n") await asyncio.sleep(0) # close stream client.close() # add your custom frame producer to config with adequate IP address web.config["generator"] = my_frame_producer # run this app on Uvicorn server at address http://localhost:8000/ uvicorn.run(web(), host="localhost", port=8000) # close app safely web.shutdown() This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,45 @@ # import required libraries from vidgear.gears import VideoGear from vidgear.gears import NetGear import cv2 # activate jpeg encoding and specify other related parameters options = { "request_timeout": 1024, "jpeg_compression": True, "jpeg_compression_quality": 90, "jpeg_compression_fastdct": True, "jpeg_compression_fastupsample": True, } stream = VideoGear(source=0).start() server = NetGear( address="192.168.1.44", port="5454", protocol="tcp", pattern=1, logging=True, **options ) while True: try: # read frames from stream frame = stream.read() # check for frame if None-type if frame is None: break # send frame to server server.send(frame) except KeyboardInterrupt: break # safely close video stream stream.stop() # safely close server server.close()