From d9cd16b095fe6099fca2474df7761f0240b47448 Mon Sep 17 00:00:00 2001 From: Emiliana <38952746+emilianavt@users.noreply.github.com> Date: Wed, 30 Sep 2020 19:31:53 +0200 Subject: [PATCH] Fixed Blackmagic capture. --- Unity/Plugins/libminibmcapture32.dll | Bin 34304 -> 34816 bytes Unity/Plugins/libminibmcapture64.dll | Bin 39424 -> 39424 bytes dshowcapture.py | 18 +++++++++++++++--- dshowcapture/libminibmcapture32.dll | Bin 34304 -> 34816 bytes dshowcapture/libminibmcapture64.dll | Bin 39424 -> 39424 bytes facetracker.py | 26 ++++++++++++++++---------- run.bat | 2 +- tracker.py | 2 +- 8 files changed, 33 insertions(+), 15 deletions(-) diff --git a/Unity/Plugins/libminibmcapture32.dll b/Unity/Plugins/libminibmcapture32.dll index dc409da3bdb5ee57ad22f0703b3dead8750d03a7..d1bfeb5ae68a8bcdd6a81e73df3d9dc86ea132d5 100644 GIT binary patch delta 4029 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 aTiPYiL$_F=BQm;?)D!WqR_Sg delta 3986 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 diff --git a/Unity/Plugins/libminibmcapture64.dll b/Unity/Plugins/libminibmcapture64.dll index 658394757e28a66f82ac33324b9bfe02f99bd069..9bf333d151b9c16adc5e4980655bb1be7af60e2a 100644 GIT binary patch delta 8955 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 WJ%~bd6|h~WISX_&hduR8;Qs&!+|DHc delta 8950 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 Ah5!Hn diff --git a/dshowcapture.py b/dshowcapture.py index e1c5293..34d1d44 100644 --- a/dshowcapture.py +++ b/dshowcapture.py @@ -13,6 +13,11 @@ def resolve(name): lib = None bm_lib = None +bm_options = None + +def set_options(str): + global bm_options + bm_options = str def create_frame_buffer(width, height, factor): buffer = bytearray(width * height * 4 * factor) @@ -23,6 +28,7 @@ class DShowCapture(): def __init__(self): global lib global bm_lib + global bm_options if lib is None or bm_lib is None: if platform.architecture()[0] == '32bit': dll_path = resolve(os.path.join("dshowcapture", "dshowcapture_x86.dll")) @@ -62,6 +68,9 @@ class DShowCapture(): bm_lib.stop_capture_single.argtypes = [] bm_lib.get_json_length.argtypes = [] bm_lib.get_json.argtypes = [c_char_p, c_int] + if not bm_options is None: + bm_lib.set_options.argtypes = [c_char_p] + bm_lib.set_options(bm_options.encode()) self.lib = lib self.bm_lib = bm_lib self.cap = lib.create_capture() @@ -97,6 +106,7 @@ class DShowCapture(): self.info = json.loads(json_text) for cam in self.info: cam["type"] = "DirectShow" + cam["index"] = cam["id"] # Blackmagic json_length = self.bm_lib.get_json_length(); @@ -107,7 +117,7 @@ class DShowCapture(): dshow_len = len(self.info) for cam in bm_info: cam["type"] = "Blackmagic" - cam["id"] += dshow_len + cam["index"] = cam["id"] + dshow_len self.info.extend(bm_info) return self.info @@ -141,7 +151,7 @@ class DShowCapture(): if self.info[cam]['type'] == "DirectShow": ret = self.lib.capture_device_by_dcap(self.cap, cam, dcap, width, height, fps) == 1 elif self.info[cam]['type'] == "Blackmagic": - ret = self.bm_lib.start_capture_single(self.info[cam]['bmId'], self.info[cam]['caps'][dcap]['bmModecode'], None) != 0 + ret = self.bm_lib.start_capture_single(self.info[cam]['id'], self.info[cam]['caps'][dcap]['bmModecode'], None) == 1 if ret: self.type = self.info[cam]['type'] if self.type == "DirectShow": @@ -157,7 +167,7 @@ class DShowCapture(): self.width = self.info[cam]['caps'][dcap]['minCX'] self.height = self.info[cam]['caps'][dcap]['minCY'] self.fps = int(10000000 / self.info[cam]['caps'][dcap]['minInterval']) - self.flipped = False + self.flipped = True self.colorspace = 101 self.colorspace_internal = self.colorspace self.size = self.width * self.height * 4 @@ -209,6 +219,8 @@ class DShowCapture(): return self.lib.get_colorspace_internal(self.cap) def capturing(self): + if self.type == "Blackmagic": + return 1 return self.lib.capturing(self.cap) == 1 def get_frame(self, timeout): diff --git a/dshowcapture/libminibmcapture32.dll b/dshowcapture/libminibmcapture32.dll index dc409da3bdb5ee57ad22f0703b3dead8750d03a7..d1bfeb5ae68a8bcdd6a81e73df3d9dc86ea132d5 100644 GIT binary patch delta 4029 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 aTiPYiL$_F=BQm;?)D!WqR_Sg delta 3986 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 diff --git a/dshowcapture/libminibmcapture64.dll b/dshowcapture/libminibmcapture64.dll index 658394757e28a66f82ac33324b9bfe02f99bd069..9bf333d151b9c16adc5e4980655bb1be7af60e2a 100644 GIT binary patch delta 8955 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 WJ%~bd6|h~WISX_&hduR8;Qs&!+|DHc delta 8950 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 Ah5!Hn diff --git a/facetracker.py b/facetracker.py index 6ee0636..805f292 100644 --- a/facetracker.py +++ b/facetracker.py @@ -46,6 +46,7 @@ parser.add_argument("--dump-points", type=str, help="When set to a filename, the parser.add_argument("--benchmark", type=int, help="When set to 1, the different tracking models are benchmarked, starting with the best and ending with the fastest and with gaze tracking disabled for models with negative IDs", default=0) if os.name == 'nt': parser.add_argument("--use-dshowcapture", type=int, help="When set to 1, libdshowcapture will be used for video input instead of OpenCV", default=1) + parser.add_argument("--blackmagic-options", type=str, help="When set, this additional option string is passed to the blackmagic capture library", default=None) args = parser.parse_args() os.environ["OMP_NUM_THREADS"] = str(args.max_threads) @@ -69,20 +70,24 @@ if args.log_output != "": sys.stdout = OutputLog(output_logfile, sys.stdout) sys.stderr = OutputLog(output_logfile, sys.stderr) -if os.name == 'nt' and (args.list_cameras > 0 or not args.list_dcaps is None): +if os.name == 'nt': import dshowcapture + if not args.blackmagic_options is None: + dshowcapture.set_options(args.blackmagic_options) + +if os.name == 'nt' and (args.list_cameras > 0 or not args.list_dcaps is None): cap = dshowcapture.DShowCapture() + info = cap.get_info() + unit = 10000000.; if not args.list_dcaps is None: - info = cap.get_info() - unit = 10000000.; formats = {0: "Any", 1: "Unknown", 100: "ARGB", 101: "XRGB", 200: "I420", 201: "NV12", 202: "YV12", 203: "Y800", 300: "YVYU", 301: "YUY2", 302: "UYVY", 303: "HDYC (Unsupported)", 400: "MJPEG", 401: "H264" } for cam in info: if args.list_dcaps == -1: type = "" if cam['type'] == "Blackmagic": type = "Blackmagic: " - print(f"{cam['id']}: {type}{cam['name']}") - if args.list_dcaps != -1 and args.list_dcaps != cam['id']: + print(f"{cam['index']}: {type}{cam['name']}") + if args.list_dcaps != -1 and args.list_dcaps != cam['index']: continue for caps in cam['caps']: format = caps['format'] @@ -93,15 +98,16 @@ if os.name == 'nt' and (args.list_cameras > 0 or not args.list_dcaps is None): else: print(f" {caps['id']}: Resolution: {caps['minCX']}x{caps['minCY']}-{caps['maxCX']}x{caps['maxCY']} FPS: {unit/caps['maxInterval']:.3f}-{unit/caps['minInterval']:.3f} Format: {format}") else: - camera_count = cap.get_devices() if args.list_cameras == 1: print("Available cameras:") - for i in range(camera_count): - camera_name = cap.get_device(i) + for cam in info: + type = "" + if cam['type'] == "Blackmagic": + type = "Blackmagic: " if args.list_cameras == 1: - print(f"{i}: {camera_name}") + print(f"{cam['index']}: {type}{cam['name']}") else: - print(camera_name) + print(f"{type}{cam['name']}") cap.destroy_capture() sys.exit(0) diff --git a/run.bat b/run.bat index d0aced9..674c0c9 100644 --- a/run.bat +++ b/run.bat @@ -4,7 +4,7 @@ facetracker -l 1 set /p cameraNum=Select your camera from the list above and enter the corresponding number: -facetracker -a 1 +facetracker -a %cameraNum% set /p dcaps=Select your camera mode or -1 for default settings: set /p width=Select the width: diff --git a/tracker.py b/tracker.py index edbe8a4..a188ee2 100644 --- a/tracker.py +++ b/tracker.py @@ -1189,7 +1189,7 @@ class Tracker(): duration = (time.perf_counter() - start) * 1000 if not self.silent: - print(f"Took {duration:.2f}ms (detect: {duration_fd:.2f}ms, crop: {duration_pp:.2f}, track: {duration_model:.2f}ms, 3D points: {duration_pnp:.2f}ms)") + print(f"Took {duration:.2f}ms (detect: {duration_fd:.2f}ms, crop: {duration_pp:.2f}ms, track: {duration_model:.2f}ms, 3D points: {duration_pnp:.2f}ms)") results = sorted(results, key=lambda x: x.id)