• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

MATLAB GUI程序打包成.exe的方法流程和注意事项

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

Matlab GUI程序打包成.exe的功能,对Matlab GUI程序而言,无疑是一种解脱。

比如,重在算法设计和数据测试的自动驾驶ADAS感知系统。

流程

第一步:打开编译工具

在Matlab命令窗口,输入 deploytool函数。

deploytool

出现application Compiler 窗口,如下图

第二步:设置编译信息

在这里,可以设置多类信息:

A GUI程序信息

毕竟要为GUI程序,打包成.exe文件。需要GUI程序信息,包括GUI主程序,

B 软件信息

目标.exe文件的封面、作者联系信息、软件功能描述

C GUI程序的支持包

这是非常重要的支持信息。Matlab工具箱集合非常强大,便于程序开发,但是在打包过程中,也就需要把支持包,都要打包附带。

D 设置目标.exe文件打包后的存储路径

E 软件执行所依赖的所有文件和文件夹

 

第三步:设置打包方式

这里打包方式,取决于Matlab Runtime的来源设置。

A 来自Web

打包速度快,体积小。用户得到.exe文件后,安装时,需要下载Matlab runtime,占用时间。

B 打包者,下载,并入到打包后的文件中

打包速度慢,但是用户根据简单提示,就能安装使用.exe文件。

最后,点击Package,执行打包过程

执行完成之后,得到系统提示。

 1 for_redistribution
 2 ----MyAppInstaller_web.exe
 3 for_redistribution_files_only
 4 ----myCameraGUI.exe
 5 ----readme.txt
 6 ----splash.png
 7 for_testing
 8 ----mccExcludedFiles.log
 9 ----myCameraGUI.exe
10 ----readme.txt
11 ----requiredMCRProducts.txt
12 ----splash.png

这是打包输出后的文件目录。

当用户电脑有对应版本的Matlab Runtime时,只需要运行 for_testing 文件夹中的文件。

如果没有,就需要for_redistribution文件夹中的文件,安装Matlab Runtime。

案例

第一个:基于USB镜头的实时影像获取与显示

编译方式: Web式打包

源代码:

 1 function varargout = myCameraGUI(varargin)
 2 gui_Singleton = 1;
 3 gui_State = struct(\'gui_Name\',       mfilename, ...
 4                    \'gui_Singleton\',  gui_Singleton, ...
 5                    \'gui_OpeningFcn\', @myCameraGUI_OpeningFcn, ...
 6                    \'gui_OutputFcn\',  @myCameraGUI_OutputFcn, ...
 7                    \'gui_LayoutFcn\',  [] , ...
 8                    \'gui_Callback\',   []);
 9 if nargin && ischar(varargin{1})
10     gui_State.gui_Callback = str2func(varargin{1});
11 end
12 
13 if nargout
14     [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
15 else
16     gui_mainfcn(gui_State, varargin{:});
17 end
18 
19 function myCameraGUI_OpeningFcn(hObject, eventdata, handles, varargin)
20 
21 handles.output = hObject;
22 
23 handles.video = videoinput(\'winvideo\', 1);
24 set(handles.video,\'TimerPeriod\', 0.05, ...
25 \'TimerFcn\',[\'if(~isempty(gco)),\'...
26 \'handles=guidata(gcf);\'... % Update handles
27 \'image(getsnapshot(handles.video));\'... % Get picture using GETSNAPSHOT and put it into axes using IMAGE
28 \'set(handles.cameraAxes,\'\'ytick\'\',[],\'\'xtick\'\',[]),\'... % Remove tickmarks and labels that are inserted when using IMAGE
29 \'else \'...
30 \'delete(imaqfind);\'... % Clean up - delete any image acquisition objects
31 \'end\']);
32 triggerconfig(handles.video,\'manual\');
33 handles.video.FramesPerTrigger = Inf; % Capture frames until we manually stop it
34 
35 % Update handles structure
36 guidata(hObject, handles);
37 
38 % UIWAIT makes mycameragui wait for user response (see UIRESUME)
39 uiwait(handles.myCameraGUI);
40 
41 
42 % --- Outputs from this function are returned to the command line.
43 function varargout = myCameraGUI_OutputFcn(hObject, eventdata, handles)
44 handles.output = hObject;
45 varargout{1} = handles.output;
46 
47 
48 % --- Executes on button press in startStopCamera.
49 function startStopCamera_Callback(hObject, eventdata, handles)
50 % Start/Stop Camera
51 if strcmp(get(handles.startStopCamera,\'String\'),\'Start Camera\')
52     % Camera is off. Change button string and start camera.
53     set(handles.startStopCamera,\'String\',\'Stop Camera\')
54     start(handles.video)
55     set(handles.startAcquisition,\'Enable\',\'on\');
56     set(handles.captureImage,\'Enable\',\'on\');
57     
58 else
59     % Camera is on. Stop camera and change button string.
60     set(handles.startStopCamera,\'String\',\'Start Camera\')
61     stop(handles.video)
62     set(handles.startAcquisition,\'Enable\',\'off\');
63     set(handles.captureImage,\'Enable\',\'off\');
64 end
65 
66 % --- Executes on button press in captureImage.
67 function captureImage_Callback(hObject, eventdata, handles)
68 
69 frame = get(get(handles.cameraAxes,\'children\'),\'cdata\'); % The current displayed frame
70 save(\'testframe.mat\', \'frame\');
71 disp(\'Frame saved to file \'\'testframe.mat\'\'\');
72 
73 
74 % --- Executes on button press in startAcquisition.
75 function startAcquisition_Callback(hObject, eventdata, handles)
76 if strcmp(get(handles.startAcquisition,\'String\'),\'Start Acquisition\')
77     % Camera is not acquiring. Change button string and start acquisition.
78     set(handles.startAcquisition,\'String\',\'Stop Acquisition\');
79     trigger(handles.video);
80 else
81     % Camera is acquiring. Stop acquisition, save video data,
82     % and change button string.
83     stop(handles.video);
84     disp(\'Saving captured video...\');
85     
86     videodata = getdata(handles.video);
87     save(\'testvideo.mat\', \'videodata\');
88     disp(\'Video saved to file \'\'testvideo.mat\'\'\');
89     
90     start(handles.video); % Restart the camera
91     set(handles.startAcquisition,\'String\',\'Start Acquisition\');
92 end
93 
94 % --- Executes when user attempts to close myCameraGUI.
95 function myCameraGUI_CloseRequestFcn(hObject, eventdata, handles)
96 
97 delete(hObject);
98 delete(imaqfind);

 


第二个:Matlab计算器

编译方式:集成式打包

calculator本身只有2.5m,代码可能只有6k.但是打包后的文件,达到850M。

这是M语言的弊端。类似的状况有LabVIEW语言编程,想要打包成.exe,也产生一个体积巨大的安装包。

 1 function varargout = calculator(varargin)
 2 
 3 gui_Singleton = 1;
 4 gui_State = struct(\'gui_Name\',       mfilename, ...
 5                    \'gui_Singleton\',  gui_Singleton, ...
 6                    \'gui_OpeningFcn\', @calculator_OpeningFcn, ...
 7                    \'gui_OutputFcn\',  @calculator_OutputFcn, ...
 8                    \'gui_LayoutFcn\',  [] , ...
 9                    \'gui_Callback\',   []);
10 if nargin && ischar(varargin{1})
11     gui_State.gui_Callback = str2func(varargin{1});
12 end
13 
14 if nargout
15     [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
16 else
17     gui_mainfcn(gui_State, varargin{:});
18 end
19 
20 function calculator_OpeningFcn(hObject, eventdata, handles, varargin)
21 
22 handles.output = hObject;
23 
24 % Update handles structure
25 guidata(hObject, handles);
26 
27 % --- Outputs from this function are returned to the command line.
28 function varargout = calculator_OutputFcn(hObject, eventdata, handles) 
29 
30 varargout{1} = handles.output;
31 
32 
33 
34 function edit1_Callback(hObject, eventdata, handles)
35 
36 input1 = str2num(get(hObject,\'String\'));
37 if (isempty(input1))
38     set(hObject,\'String\',\'0\');
39 end
40 guidata(hObject,handles);
41 
42 
43 % --- Executes during object creation, after setting all properties.
44 function edit1_CreateFcn(hObject, eventdata, handles)
45 
46 if ispc && isequal(get(hObject,\'BackgroundColor\'), get(0,\'defaultUicontrolBackgroundColor\'))
47     set(hObject,\'BackgroundColor\',\'white\');
48 end
49 
50 
51 function edit2_Callback(hObject, eventdata, handles)
52 
53 input2 = str2num(get(hObject,\'String\'));
54 if (isempty(input2))
55     set(hObject,\'String\',\'0\');
56 end
57 guidata(hObject,handles);
58 
59 
60 % --- Executes during object creation, after setting all properties.
61 function edit2_CreateFcn(hObject, eventdata, handles)
62 if ispc && isequal(get(hObject,\'BackgroundColor\'), get(0,\'defaultUicontrolBackgroundColor\'))
63     set(hObject,\'BackgroundColor\',\'white\');
64 end
65 
66 
67 
68 function answer_Callback(hObject, eventdata, handles)
69 
70 function answer_CreateFcn(hObject, eventdata, handles)
71 
72 if ispc && isequal(get(hObject,\'BackgroundColor\'), get(0,\'defaultUicontrolBackgroundColor\'))
73     set(hObject,\'BackgroundColor\',\'white\');
74 end
75 
76 
77 % --- Executes on button press in AddPushbutton.
78 function AddPushbutton_Callback(hObject, eventdata, handles)
79 
80 input111 = get(handles.edit1,\'String\');
81 input222 = get(handles.edit2,\'String\');
82 total = str2num(input111) + str2num(input222)
83 c = num2str(total)
84 
85 set(handles.answer,\'String\',c);
86 guidata(hObject,handles);

 


第三个:自动驾驶感知系统

 (二维码自动识别)

智能USV实时感知系统是一套用于自动驾驶装备(无人车、船)智能感知的应用系统。其中,传感器硬件主要包括:camera * 6、stereo camera * 2、radar * 1、GPS、IMU、4G 通信。主要功能:实现对自动驾驶装备的架势环境进行实时感知,以辅助自动驾驶的控制决策,具体包括:GPS定位、车牌目标识别、汽车识别、雷达探测。目标属性有:ID、定位、距离、相对方位。

软件自2020.04.28开发。欢迎用户朋友,联系[email protected]反馈意见,共同优化。

这个部分,就不提供代码了。欢迎交流。

注意事项

1.Matlab Runtime的下载

说实话,我现在还是没有安装独立的Matlab Runtime。在解决这个问题的过程中,花费了一天的时间,到最后还是没有解决。但是,通过其他方式,避免了Matlab Runtime的下载。

补充一下:Matlab Runtime已经成功下载。

2.编译时间

集成式打包时间,非常长。第一次编译,需要耐心。

3. 涉及到硬件的GUI程序的打包

目前,仅仅涉及到多个USB硬件的程序,打包后,安装使用过程,没有出现出错。其他同学,如果遇到问题,可以在此留言。

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Pascal 和 delphi 关系发布时间:2022-07-18
下一篇:
Delphi中 StrToIntDef函数的用法发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap