回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>在我的python项目中,我使用了baslergigevision以太网摄像头,因为pylon不支持python,所以我使用<a href="https://github.com/StudentCV/PyPylon" rel="nofollow noreferrer">pypylon.pylon wrapper</a>在python中打开它。这是我用来打开相机的类,但是在制作了可执行文件之后,我在打开它时会出错。<a href="https://stackoverflow.com/a/48264244/1364213">I used spec file to work with pyinstaller.</a>我得到以下错误:</p>
<pre><code>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()
</code></pre>
<p>主代码:</p>
^{pr2}$
<blockquote>
<p>Traceback (most recent call last): File
"site-packages\pypylon\pylon.py", line 42, in swig_import_helper<br/>
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
<strong>ModuleNotFoundError: No module named 'pypylon._pylon'</strong></p>
<p>During handling of the above exception, another exception occurred:</p>
<p>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.<strong>dict</strong>) 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.<strong>dict</strong>) File "site-packages\pypylon\pylon.py", line 45, in File
"site-packages\pypylon\pylon.py", line 44, in swig_import_helper<br/>
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: <strong>No module named 'pypylon._genicam'</strong> [4300] Failed to execute script
MainGuiLogic [4300] LOADER: OK. [4300] LOADER: Cleaning up Python
interpreter.</p>
</blockquote>