From 1af6fe3161ec791689466e8a1767a469432f2ed2 Mon Sep 17 00:00:00 2001 From: scito Date: Sat, 31 Dec 2022 21:02:05 +0100 Subject: [PATCH] fix camera type and enhance readme with pyzbar problem --- README.md | 23 +++++++++++++++++++++++ src/extract_otp_secrets.py | 4 ++-- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 5cd6352..6b8d591 100644 --- a/README.md +++ b/README.md @@ -108,6 +108,29 @@ For a detailed installation documentation of [pyzbar](https://github.com/Natural The zbar DLLs are included with the Windows Python wheels. On other operating systems, you will need to install the zbar shared library. +##### Windows error message + +If you see an ugly ImportError when importing [pyzbar](https://pypi.org/project/pyzbar/) on Windows you will most likely need the [Visual C++ Redistributable Packages for Visual Studio 2013](https://www.microsoft.com/en-US/download/details.aspx?id=40784). Install vcredist_x64.exe if using 64-bit Python, vcredist_x86.exe if using 32-bit Python. + +``` +Traceback (most recent call last): + File "C:\Users\Admin\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\LocalCache\local-packages\Python311\site-packages\pyzbar\zbar_library.py", line 58, in load + dependencies, libzbar = load_objects(Path('')) + ^^^^^^^^^^^^^^^^^^^^^^ + File "C:\Users\Admin\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\LocalCache\local-packages\Python311\site-packages\pyzbar\zbar_library.py", line 50, in load_objects + deps = [ + ^ + File "C:\Users\Admin\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\LocalCache\local-packages\Python311\site-packages\pyzbar\zbar_library.py", line 51, in + cdll.LoadLibrary(str(directory.joinpath(dep))) + File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.11_3.11.496.0_x64__qbz5n2kfra8p0\Lib\ctypes\__init__.py", line 454, in LoadLibrary + return self._dlltype(name) + ^^^^^^^^^^^^^^^^^^^ + File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.11_3.11.496.0_x64__qbz5n2kfra8p0\Lib\ctypes\__init__.py", line 376, in __init__ + self._handle = _dlopen(self._name, mode) + ^^^^^^^^^^^^^^^^^^^^^^^^^ +FileNotFoundError: Could not find module 'libiconv.dll' (or one of its dependencies). Try using the full path with constructor syntax. +``` + #### Linux (Debian, Ubuntu, ...) sudo apt-get install libzbar0 diff --git a/src/extract_otp_secrets.py b/src/extract_otp_secrets.py index 4d414ff..02125cd 100644 --- a/src/extract_otp_secrets.py +++ b/src/extract_otp_secrets.py @@ -165,7 +165,7 @@ python extract_otp_secrets.py = < example_export.png""" arg_parser.add_argument('infile', help="""a) file or - for stdin with 'otpauth-migration://...' URLs separated by newlines, lines starting with # are ignored; b) image file containing a QR code or = for stdin for an image containing a QR code""", nargs='*' if qreader_available else '+') if qreader_available: - arg_parser.add_argument('--camera', '-C', help='camera number of system (default camera: 0)', default=0, nargs=1, metavar=('NUMBER')) + arg_parser.add_argument('--camera', '-C', help='camera number of system (default camera: 0)', default=0, type=int, nargs=1, metavar=('NUMBER')) arg_parser.add_argument('--qr', '-Q', help=f'QR reader (default: {QRMode.ZBAR.name})', type=str, choices=[mode.name for mode in QRMode], default=QRMode.ZBAR.name) arg_parser.add_argument('--json', '-j', help='export json file or - for stdout', metavar=('FILE')) arg_parser.add_argument('--csv', '-c', help='export csv file or - for stdout', metavar=('FILE')) @@ -213,7 +213,7 @@ def extract_otps_from_camera(args: Args) -> Otps: qr_mode = QRMode[args.qr] - cam = cv2.VideoCapture(args.camera) + cam = cv2.VideoCapture(args.camera[0]) window_name = "Extract OTP Secrets: Capture QR Codes from Camera" cv2.namedWindow(window_name, cv2.WINDOW_AUTOSIZE)