Make Executable file of python pypylon project using pyinstaller spec file

ahad-aghapour report abuse

In my python project, I used Basler GigE Vision ethernet cameras, because of the pylon doesn't support python then I used pypylon.pylon wrapper to open it in python. This is my class to open the camera, but after making executable file I get errors when opening it. I used spec file to work with pyinstaller.I get this below errors:

import pypylon.pylon as py
import numpy as np


class PylonVideoReader:

def __init__ (self, deviceName=None):
    self.deviceName = deviceName
    tlfactory = py.TlFactory.GetInstance()
    if not self.deviceName is None:
        deviceInfoList = tlfactory.EnumerateDevices()
        deviceIndex = None
        for i in range(len(deviceInfoList)):
            if self.deviceName == deviceInfoList[i].GetUserDefinedName():
                deviceIndex = i
                break

        if deviceIndex is None:
            print("Device: {} not found please ensure that it is "
                  "connected".format(self.deviceName))
            exit()
        else:
            # Create new camera
            self.camera = py.InstantCamera(tlfactory.CreateDevice(
                deviceInfoList[deviceIndex]))
    else:
        # Create new camera
        self.camera = py.InstantCamera(tlfactory.CreateFirstDevice())

    # Open camera
    self.camera.Open()
    # Set max number of frame buffers
    self.camera.MaxNumBuffer = 50
    # Initialize the image format converter
    self.formatConverter = py.ImageFormatConverter()
    # Set output pixel format to BGR8 for opencv
    self.formatConverter.OutputPixelFormat = py.PixelType_BGR8packed

    # Start grabbing process
    self.camera.StartGrabbing(py.GrabStrategy_LatestImageOnly)
    # Grab a first image to get its size
    grabResult = self.camera.RetrieveResult(10000)
    # Stop grabbing process
    # self.camera.StopGrabbing()

    # Get dimensions of image
    self.frameWidth = grabResult.GetWidth()
    self.frameHeight = grabResult.GetHeight()

def get(self, code):
    if code == 3:
        return self.frameWidth
    elif code == 4:
        return self.frameHeight
    else:
        print("{} is not a known property code".format(code))

def read(self):
    # try:

    # Start grabing process
    # self.camera.StartGrabbing(py.GrabStrategy_LatestImageOnly)
    # Grab an image
    grabResult = self.camera.RetrieveResult(10000)
    # Stop grabing process
    # self.camera.StopGrabbing()
    # Get dimensions of image
    self.frameWidth = grabResult.GetWidth()
    self.frameHeight = grabResult.GetHeight()

    if grabResult.GrabSucceeded():
        # Convert Grab result from YUV422 to BGR8
        pylonImage = self.formatConverter.Convert(grabResult)
        # Convert pylon image to opencv image
        # image = np.frombuffer(bytearray(pylonImage.GetBuffer()), np.uint8)
        image = np.asarray(bytearray(pylonImage.GetBuffer()), np.uint8)
        image = image.reshape(self.frameHeight, self.frameWidth, 3)

        return (True, image)
    # except :
    return (False, None)

def release(self):
    self.camera.StopGrabbing()
    self.camera.Close()

main code:

if __name__ == " __main__":    
    cap = PylonVideoReader("Admin1")
    cv2.namedWindow("Test1", cv2.WINDOW_NORMAL)
    while True:
        ret, image = cap.read()                
        if ret:
            cv2.imshow("Test1", image)
        if cv2.waitKey(1) % 256 == ord('q'):
            break

Erro message:

Traceback (most recent call last): File "site-packages\pypylon\pylon.py", line 42, in swig_import_helper
File "importlib __init__.py", line 126, in import_module File "", line 994, in _gcd_import File "", line 971, in _find_and_load File "", line 953, in _find_and_load_unlocked ModuleNotFoundError: No module named 'pypylon._pylon'

During handling of the above exception, another exception occurred:

Traceback (most recent call last): File "MainGuiLogic.py", line 18, in File "c:\programdata\anaconda3\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 631, in exec_module exec(bytecode, module.dict) File "PylonVideoReader.py", line 1, in File "c:\programdata\anaconda3\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 631, in exec_module exec(bytecode, module.dict) File "site-packages\pypylon\pylon.py", line 45, in File "site-packages\pypylon\pylon.py", line 44, in swig_import_helper
File "importlib __init__.py", line 126, in import_module File "c:\programdata\anaconda3\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 714, in load_module module = loader.load_module(fullname) ModuleNotFoundError: No module named 'pypylon._genicam' [4300] Failed to execute script MainGuiLogic [4300] LOADER: OK. [4300] LOADER: Cleaning up Python interpreter.
Comments
communitymanager report abuse
Hi ahad aghapour! BIG SORRY that our answer has taken so long to come :( Your question seems a bit more difficult. We'll check it out and get back to you as soon as possible. Best regards, Katharina from the imaginghub team
stefanklug report abuse
Hi ahad, according to the error messages, it seems like the exe created by pyinstaller is missing the _pylon.dll (and most likely a few more like _genicam.dll and all the other dlls included in the pypylon package). The error lies most likely in your spec file for pyinstaller. See also https://stackoverflow.com/questions/38791685/how-do-i-include-dll-file-in-executable-using-pyinstaller
Add Answer

Need support?

Just drop us an email to ... Show more