首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用OpenVINO自动初始化的PyQt5环境不能正常工作

用OpenVINO自动初始化的PyQt5环境不能正常工作
EN

Stack Overflow用户
提问于 2021-12-27 03:29:27
回答 1查看 351关注 0票数 0

我已经集成了OpenVINO和PyQt5,在Windows11上完成了像这样的推理工作。

因为我们必须首先通过执行OpenVINO来初始化setupvars.bat环境。

我认为用户在进行推理之前手动初始化OpenVINO环境是很麻烦的。

因此,我尝试用我的PyQt5代码建立自动初始化程序.

代码语言:javascript
运行
复制
from PyQt5 import QtWidgets
import os
#import time
import sys

if __name__ == '__main__':
    cwd = os.getcwd()
    os.chdir(r"C:\Program Files (x86)\Intel\openvino_2021.4.752\bin")    
    os.system("setupvars.bat")  
    #time.sleep(1)
    os.chdir(cwd)

    from controller import MainWindow  
    
    app = QtWidgets.QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())

在执行我的程序之后,虽然我可以在命令提示符上看到初始化的消息,但在此之后,无法找到名为“openvino”的模块。

代码语言:javascript
运行
复制
Python 3.9.7
[setupvars.bat] OpenVINO environment initialized
Traceback (most recent call last):
  File "C:\Users\Hsien\Desktop\pyqt\start.py", line 16, in <module>
    from controller import MainWindow
  File "C:\Users\Hsien\Desktop\pyqt\controller.py", line 8, in <module>
    from inference_engine import openvino_inference_engine
  File "C:\Users\Hsien\Desktop\pyqt\inference_engine.py", line 1, in <module>
    from openvino.inference_engine import IECore, Blob, TensorDesc
ModuleNotFoundError: No module named 'openvino'

我还尝试使用sleep函数来延迟等待OpenVINO环境的设置,但没有成功。

但是这个问题可以通过在同一个命令提示符上手动执行C:\Program Files (x86)\Intel\openvino_2021.4.752\bin\setupvars.bat来解决。

如果我首先手动初始化OpenVINO环境,所有函数都执行得很好。

(我的环境是带有openvino_2021.4.752版本的Windows 11。)

我的controller.py来了

代码语言:javascript
运行
复制
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QFileDialog, QListWidgetItem, QGraphicsScene, QGraphicsPixmapItem
from PyQt5.QtCore import QDir
from PyQt5.QtGui import QPixmap, QImage 
import cv2
from ui import Ui_Window
import global_variable as gv
from inference_engine import openvino_inference_engine

class MainWindow(QtWidgets.QMainWindow):        
    def __init__(self):
        super().__init__()
        self.ui = Ui_Window()
        self.ui.setupUi(self)
        self.setup_control()

    def setup_control(self):
        self.ui.BrowseFolderPath.clicked.connect(self.choose_folder)  
        self.ui.Reload.clicked.connect(self.refresh_list) 
        self.ui.ShowFileName.itemClicked.connect(self.show_which_image)
        self.ui.Inference.clicked.connect(self.show_inference_result)
        self.display_logo()
        
    def choose_folder(self):            
        gv.gFpath = QFileDialog.getExistingDirectory(self, "Please choose OCT InImages folder")
        self.ui.ShowFolderPath.setText(gv.gFpath)        
        gv.gIpath = QDir(gv.gFpath).entryList(['*.jpg', '*.jpeg', '*.png'])
        self.ui.ShowFileName.clear()
        
        for i in gv.gIpath:
            QListWidgetItem(self.ui.ShowFileName).setText(i)           
            
    def refresh_list(self):
        gv.gIpath = QDir(gv.gFpath).entryList(['*.jpg', '*.jpeg', '*.png'])
        self.ui.ShowFileName.clear()
        
        for i in gv.gIpath:
            QListWidgetItem(self.ui.ShowFileName).setText(i) 
    
    def show_which_image(self, item):
        gv.gInImgPath = gv.gFpath + '/' + item.text()
        
        self.InImage = QPixmap()
        self.InImage.load(gv.gInImgPath)
        self.ui.ShowInputImage.scene = QGraphicsScene()
        self.ui.ShowInputImage.scene.addItem(QGraphicsPixmapItem(self.InImage.scaledToWidth(600)))
        self.ui.ShowInputImage.setScene(self.ui.ShowInputImage.scene)
        self.reset_output_image()            
    
    def reset_output_image(self):
        self.OutImage = QPixmap()
        self.OutImage.load("inferencing.jpg")        
        self.ui.ShowOutputImage.scene = QGraphicsScene()
        self.ui.ShowOutputImage.scene.addItem(QGraphicsPixmapItem(self.OutImage))
        self.ui.ShowOutputImage.setScene(self.ui.ShowOutputImage.scene)
        
    def show_inference_result(self):
        openvino_inference_engine();
        self.OutImage = QPixmap()
        self.OutImage.load("tmp.jpg")
        self.ui.ShowOutputImage.scene = QGraphicsScene()
        self.ui.ShowOutputImage.scene.addItem(QGraphicsPixmapItem(self.OutImage.scaledToWidth(430)))
        self.ui.ShowOutputImage.setScene(self.ui.ShowOutputImage.scene)  

    def display_logo(self):      
        self.img = cv2.imread("logo.png")
        height, width, channel = self.img.shape
        bytesPerline = 3 * width
        self.qimg = QImage(self.img, width, height, bytesPerline, QImage.Format_RGB888).rgbSwapped()
        self.ui.logo.setPixmap(QPixmap.fromImage(self.qimg))  

下面的OpenVINO setupvars.bat

代码语言:javascript
运行
复制
@echo off

:: Copyright (C) 2018-2021 Intel Corporation
:: SPDX-License-Identifier: Apache-2.0

set ROOT=%~dp0
call :GetFullPath "%ROOT%\.." ROOT
set SCRIPT_NAME=%~nx0

set "INTEL_OPENVINO_DIR=%ROOT%"
set "INTEL_CVSDK_DIR=%INTEL_OPENVINO_DIR%"

set "python_version="

:: command line arguments parsing
:input_arguments_loop
if not "%1"=="" (
    if "%1"=="-pyver" (
        set "python_version=%2"
        shift
    )
    shift
    goto :input_arguments_loop
)

:: OpenCV
if exist "%INTEL_OPENVINO_DIR%\opencv\setupvars.bat" (
call "%INTEL_OPENVINO_DIR%\opencv\setupvars.bat"
) else (
set "OpenCV_DIR=%INTEL_OPENVINO_DIR%\opencv\x64\vc14\lib"
set "PATH=%INTEL_OPENVINO_DIR%\opencv\x64\vc14\bin;%PATH%"
)

:: Model Optimizer
if exist %INTEL_OPENVINO_DIR%\deployment_tools\model_optimizer (
set PYTHONPATH=%INTEL_OPENVINO_DIR%\deployment_tools\model_optimizer;%PYTHONPATH%
set "PATH=%INTEL_OPENVINO_DIR%\deployment_tools\model_optimizer;%PATH%"
)

:: Inference Engine
set "InferenceEngine_DIR=%INTEL_OPENVINO_DIR%\deployment_tools\inference_engine\share"
set "HDDL_INSTALL_DIR=%INTEL_OPENVINO_DIR%\deployment_tools\inference_engine\external\hddl"
set "OPENMP_DIR=%INTEL_OPENVINO_DIR%\deployment_tools\inference_engine\external\omp\lib"
set "GNA_DIR=%INTEL_OPENVINO_DIR%\deployment_tools\inference_engine\external\gna\lib"

set "OPENVINO_LIB_PATHS=%INTEL_OPENVINO_DIR%\deployment_tools\inference_engine\bin\intel64\Release;%INTEL_OPENVINO_DIR%\deployment_tools\inference_engine\bin\intel64\Debug;%HDDL_INSTALL_DIR%\bin;%OPENMP_DIR%;%GNA_DIR%;%OPENVINO_LIB_PATHS%"
if exist %INTEL_OPENVINO_DIR%\deployment_tools\inference_engine\bin\intel64\arch_descriptions (
set ARCH_ROOT_DIR=%INTEL_OPENVINO_DIR%\deployment_tools\inference_engine\bin\intel64\arch_descriptions
)
if exist %INTEL_OPENVINO_DIR%\deployment_tools\inference_engine\bin\intel64\arch_descriptions (
set ARCH_ROOT_DIR=%INTEL_OPENVINO_DIR%\deployment_tools\inference_engine\bin\intel64\arch_descriptions
)

:: TBB
if exist %INTEL_OPENVINO_DIR%\deployment_tools\inference_engine\external\tbb (
set "OPENVINO_LIB_PATHS=%INTEL_OPENVINO_DIR%\deployment_tools\inference_engine\external\tbb\bin;%OPENVINO_LIB_PATHS%"
set "TBB_DIR=%INTEL_OPENVINO_DIR%\deployment_tools\inference_engine\external\tbb\cmake"
)

:: nGraph
if exist %INTEL_OPENVINO_DIR%\deployment_tools\ngraph (
set "OPENVINO_LIB_PATHS=%INTEL_OPENVINO_DIR%\deployment_tools\ngraph\lib;%OPENVINO_LIB_PATHS%"
set "ngraph_DIR=%INTEL_OPENVINO_DIR%\deployment_tools\ngraph\cmake"
)

:: Add libs dirs to the PATH
set "PATH=%OPENVINO_LIB_PATHS%;%PATH%"

:: Check if Python is installed
python --version 2>NUL
if errorlevel 1 (
   echo Error^: Python is not installed. Please install one of Python 3.6 - 3.8 ^(64-bit^) from https://www.python.org/downloads/
   exit /B 1
)

:: Check Python version if user did not pass -pyver

if "%python_version%" == "" (
    for /F "tokens=* USEBACKQ" %%F IN (`python -c "import sys; print(str(sys.version_info[0])+'.'+str(sys.version_info[1]))" 2^>^&1`) DO (
       set python_version=%%F
    )
)

for /F "tokens=1,2 delims=. " %%a in ("%python_version%") do (
   set pyversion_major=%%a
   set pyversion_minor=%%b
)

if "%pyversion_major%" geq "3" (
   if "%pyversion_minor%" geq "6" (
      set check_pyversion=okay
   )
)

if not "%check_pyversion%"=="okay" (
   echo Unsupported Python version. Please install one of Python 3.6 - 3.8 ^(64-bit^) from https://www.python.org/downloads/
   exit /B 1
)

:: Check Python bitness
python -c "import sys; print(64 if sys.maxsize > 2**32 else 32)" 2 > NUL
if errorlevel 1 (
   echo Error^: Error during installed Python bitness detection
   exit /B 1
)

for /F "tokens=* USEBACKQ" %%F IN (`python -c "import sys; print(64 if sys.maxsize > 2**32 else 32)" 2^>^&1`) DO (
   set bitness=%%F
)

if not "%bitness%"=="64" (
   echo Unsupported Python bitness. Please install one of Python 3.6 - 3.8 ^(64-bit^) from https://www.python.org/downloads/
   exit /B 1
)

set PYTHONPATH=%INTEL_OPENVINO_DIR%\python\python%pyversion_major%.%pyversion_minor%;%INTEL_OPENVINO_DIR%\python\python3;%PYTHONPATH%

if exist %INTEL_OPENVINO_DIR%\deployment_tools\open_model_zoo\tools\accuracy_checker (
    set PYTHONPATH=%INTEL_OPENVINO_DIR%\deployment_tools\open_model_zoo\tools\accuracy_checker;%PYTHONPATH%
)

if exist %INTEL_OPENVINO_DIR%\deployment_tools\tools\post_training_optimization_toolkit (
    set PYTHONPATH=%INTEL_OPENVINO_DIR%\deployment_tools\tools\post_training_optimization_toolkit;%PYTHONPATH%
)

echo [setupvars.bat] OpenVINO environment initialized

exit /B 0

:GetFullPath
SET %2=%~f1

GOTO :EOF
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-29 02:06:18

首先,请注意,Windows 11不受OpenVINO的官方支持。因此,预计会出现问题。PyQt5与OpenVINO包的集成也是如此。

您可以在Windows中使用批处理文件创建OpenVINO setupvars.bat初始化。

创建一个批处理文件,初始化OpenVINO环境并启动您想要的软件(例如: VS2019)

在.bat文件中编写以下脚本:

@echo on

光盘箱

调用setupvars.bat

cd \2019\Community\Common7\IDE

调用devenv.exe

以管理员的身份运行.bat文件

由于OpenVINO和PyQt5的集成不受官方支持,因此没有具体的文档可作为指南。

另外,在开放式智能图书馆中实现了类似的集成。您可以参考此存储库以获得参考/解决方法。

除此之外,您还需要将OpenVINO推理引擎集成到应用程序中(为此目的只支持C++或Python )。您可以参考这个将推理引擎与Python应用程序集成

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70491435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档