`
gstarwd
  • 浏览: 1512303 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Lexware Assembly Reference Tool for Visual Studio 2005 / 2008

    博客分类:
  • .NET
阅读更多

http://www.codeproject.com/KB/macros/Lexware_AssemblyReference.aspx

 

 

Sample Image - maximum width is 600 pixels

Introduction

Visual Studio 2005 / 2008 both lack a good way to define assembly references per solution configuration (‘Debug’ or ‘Release’).

Background

There are some ways to define assembly references which change if the solution configuration changes, but they are not sufficient for larger projects. The following features of Visual Studio 2005 / 2008 are fine for small projects:

  • Set a Project reference from one project to another. The projects must be all in one solution. This is not always possible in projects where a lot of developers are working on multiple projects lying in different solutions.
  • Set a reference to an assembly lying in the output path of the project. Visual Studio 2005 searches for assembly references first in the output path of the project. A way to define assembly references per solution configuration is to put all assemblies in a common output directory (MSDN Article ). This is inflexible.


The Lexware Assembly Reference Tool fills this gap, by providing a new tool window in Visual Studio 2005 / 2008, which allows you to change ‘hard-coded’ assembly reference paths to flexible reference paths which change depending on the solution configuration. The tool detects ‘Debug’ or ‘Release’ in the assembly reference path and marks the assembly in red to show you the potential problem you have, when you build the project in another configuration. You only need to press a button and all these paths will be converted to paths which depend on the configuration of the project.


ToolWindow


Additionally the tool provides the following features:

  • Change the ‘Copy Local’ property
  • Manipulate the ‘Special Version’ property
  • Edit the assembly reference path (‘HintPath’)
  • Convert a project reference into an assembly references
  • Delete an assembly reference


Context menue


After installing and starting the Add-In you can open the assembly reference tool via the Visual Studio 2005 / 2008 tools menu.


VisualStudioMenue

 

How it works

The general idea behind it

The tool allows flexible assembly reference paths by replacing “\Debug\” or “\Release\” in the reference path against “\$Configuration\”, which is a placeholder for the solution configuration in Visual Studio 2005 / 2008. Visual Basic and CSharp projects are able to replace the placeholder back to “\Debug\” or “\Relase\” when trying to resolve an assembly path.

Since the Visual Studio 2005 / 2008 object model doesn’t allow any change to a reference path, the tool changes the path in the underlying project file. It manipulates the tag , the path to the assembly, which is referenced.


Hnit path

When the tool saves the project file, Visual Studio notices that change and asks you to reload the project.

For some features the tool holds a reference to the internal Visual Studio representation of an assembly reference (VSLangProj80.Reference3), which allows a manipulation of properties like ‘CopyLocal’, ‘SpecificVersion’ or deleting a reference. Changes to these properties are directly reflected by the original property window of the assembly reference in Visual Studio.

The Tool solution itself

The solution contains a CSharp and a setup project. The setup project was created with the Setup Project template. The CSharp project is originally created with a Visual Studio Add-In project template of Visual Studio 2005.


New project

Visual Studio automatically creates a ‘Tool’ menu item for the add-in, if you choose so in the project wizard. If you select ‘I would like my Add-In to load, …’ Visual Studio loads your Add-In directly when it starts.


Projectwizard

In the new project Visual Studio creates two files with the extension ‘AddIn’. One is lying in the project folder (e.g. ‘Lexware.Tools.AssemblyReferences.AddIn’) and this is used when the Add-In is deployed. The other one (e.g. ‘Lexware.Tools.AssemblyReferences - For Testing.AddIn’) is placed in the Visual Studio Add-In folder. This is the one which is used while debugging the Add-In. The Visual Studio Add-In folder is contained in your documents folder. For Windows Vista it should be found here: C:\Users\’Your User Name’\Documents\Visual Studio 2005\Addins. An Add-In file contains a full description of the Add-In. It provides a friendly name, the load behavior and other information, necessary for Visual Studio to display the Add-In in the ‘Add-in Manager’.


Addin Manager Menue


Addin Manager

The Add-In

The Add-In project contains the file ‘connect.cs’, which contains the code connecting to Visual Studio. The class ‘Connect’ is called, when the Add-In starts. In fact it is defined in the ‘FullClassName’ tag of the ‘.Addin’ file described below.


Connect

The class Connect

The class Connect implements the Visual Studio interface IDTExtensibility2 , which defines the Method OnConnection . This method is called, when Visual Studio loads the Add-In into its memory. This is the place where you can add menu items and in this case create a tool window.

Collapse
public
 void
 OnConnection(object
 application, ext_ConnectMode connectMode,
    object
 addInInst, ref
 Array custom)
{
    _applicationObject = (DTE2)application;
    _addInInstance = (AddIn)addInInst;

    CreateToolWindow();

    if
(connectMode == ext_ConnectMode.ext_cm_UISetup)
    {
        object
[] contextGUIDS = new
 object
[] {};
        Commands2 commands = (Commands2)_applicationObject.Commands;
        string
 toolsMenuName;

        try

        {
            //
If you would like to move the command to a different menu, change the

            //
word "Tools" to the English version of the menu. This code will take

            //
 the culture, append on the name of the menu then add the command to

            //
 that menu. You can find a list of all the top-level menus in the file

            //
  CommandBar.resx.

            ResourceManager resourceManager = new
 ResourceManager(
                "
Lexware.Tools.AssemblyReferences.CommandBar"
,
                Assembly.GetExecutingAssembly());
            CultureInfo cultureInfo = new
 CultureInfo(_applicationObject.LocaleID);
            string
 resourceName = String
.Concat(cultureInfo.TwoLetterISOLanguageName,
                LocalResources.ToolbarName);
            toolsMenuName = resourceManager.GetString(resourceName);
        }
        catch

        {
            //
We tried to find a localized version of the word Tools, but one was

            //
 not found.

            //
  Default to the en-US word, which may work for the current culture.

            toolsMenuName = LocalResources.ToolbarName;
        }

        //
Place the command on the tools menu.

        //
Find the MenuBar command bar, which is the top-level command bar holding

        //
all the main menu items:

        Microsoft.VisualStudio.CommandBars.CommandBar menuBarCommandBar = (
            (CommandBars)_applicationObject.CommandBars)["
MenuBar"
];

        //
Find the Tools command bar on the MenuBar command bar:

        CommandBarControl toolsControl = menuBarCommandBar.Controls[toolsMenuName];
        CommandBarPopup toolsPopup = (CommandBarPopup)toolsControl;

        //
This try/catch block can be duplicated if you wish to add multiple commands

        //
 to be handled by your Add-in,

        //
  just make sure you also update the QueryStatus/Exec method to include

        //
  the new command names.

        try

        {
            //
Add a command to the Commands collection:

            Command command = commands.AddNamedCommand2(_addInInstance,
                "
AssemblyReferences"
, "
Assembly Reference Tool"
,
"
Checks and fixes assembly references. Uses placeholder for debug and release directory."
,
                 true
, 0
, ref
 contextGUIDS,
                 (int
)vsCommandStatus.vsCommandStatusSupported +
                 (int
)vsCommandStatus.vsCommandStatusEnabled,
                 (int
)vsCommandStyle.vsCommandStyleText,
                 vsCommandControlType.vsCommandControlTypeButton);

            //
Add a control for the command to the tools menu:

            if
((command != null
) && (toolsPopup != null
))
            {
                command.AddControl(toolsPopup.CommandBar, 1
);
            }
        }
        catch
(ArgumentException)
        {
            //
If we are here, then the exception is probably because a

            //
 command with that name

            //
  already exists. If so there is no need to recreate the command and we can 

            //
  safely ignore the exception.

        }
    }
}

When the user clicks your menu item, the method Exec in the same class will be called. You can filter the commandName , to know whether the called menu item was yours.

Collapse
public
 void
 Exec(string
 commandName, vsCommandExecOption executeOption,
    ref
 object
 varIn, ref
 object
 varOut, ref
 bool
 handled)
{
    handled = false
;
    if
(executeOption == vsCommandExecOption.vsCommandExecOptionDoDefault)
    {
        if
(commandName == "
Lexware.Tools.AssemblyReferences.Connect.AssemblyReferences"
)
        {
            //
 Open Toolwindow

            CreateToolWindow();

            handled = true
;
            return
;
        }
    }
}

The tool window, which contains all the important code in this Add-In, is a UserControl. To create it, you can call CreateToolWindow2 . This method creates a new Visual Studio tool window and hosts a user control in it.

Collapse
private
 void
 CreateToolWindow()
{
    if
(_toolWindow != null
)
    {
        _toolWindow.Activate();
    }
    else

    {
        //
This guid must be unique for each different tool window,

        //
 but you may use the same guid for the same tool window.

        //
This guid can be used for indexing the windows collection,

        //
 for example: applicationObject.Windows.Item(guidstr)

        Windows2 windows2 = (Windows2)_applicationObject.Windows;
        Assembly asm = Assembly.GetExecutingAssembly();

        object
 customControl = null
;
        string
 className = "
Lexware.Tools.AssemblyReferences.ToolWindowControl"
;
        string
 caption = "
Assembly References"
;
        _toolWindow = windows2.CreateToolWindow2(_addInInstance, asm.Location, className, 
                                                 caption, _toolWindowGuid,
                                                 ref
 customControl);

        //
Set the picture displayed when the window is tab docked (this causes

        //
problems in Visual Studio 2008)

        try

        {
            _toolWindow.SetTabPicture(LocalResources.LexwareBmp.GetHbitmap());
        }
        catch

        {
        }

        //
When using the hosting control, you must set visible to true before calling

        //
 HostUserControl, otherwise the UserControl cannot be hosted properly.

        _toolWindow.Visible = true
;

        if
 (customControl != null
)
        {
            _toolWindowControl = (ToolWindowControl)customControl;
            _toolWindowControl.ApplicationObject = _applicationObject;
            _toolWindowControl.ParentToolWindow = _toolWindow;
        }
    }
}
                                                         

The ToolWindow

The tool window registers some events of the Visual Studio solution, document and the command object, so that changes in the solution will be noticed by the Add-In.

Collapse
private
 void
 RegisterEvents()
{
    if
 (_solutionEvents != null
)
    {
        UnregisterEvents();
    }
    _solutionEvents = _applicationObject.Events.SolutionEvents;

    //
 register new events

    _solutionEvents.Opened += new
 _dispSolutionEvents_OpenedEventHandler(
         _solutionEvents_Opened);
    _solutionEvents.ProjectAdded += new
 _dispSolutionEvents_ProjectAddedEventHandler(
         _solutionEvents_ProjectAdded);
    _solutionEvents.ProjectRemoved += new
 _dispSolutionEvents_ProjectRemovedEventHandler(
         _solutionEvents_ProjectRemoved);
    _solutionEvents.ProjectRenamed += new
 _dispSolutionEvents_ProjectRenamedEventHandler(
         _solutionEvents_ProjectRenamed);
    _solutionEvents.AfterClosing += new
 _dispSolutionEvents_AfterClosingEventHandler(
         _solutionEvents_AfterClosing);
    _documentEvents.DocumentSaved += new
 _dispDocumentEvents_DocumentSavedEventHandler(
         _documentEvents_DocumentSaved);

    _commandEvents.AfterExecute += new
 _dispCommandEvents_AfterExecuteEventHandler( 
         _commandEvents_AfterExecute);
}


private
 void
 _commandEvents_AfterExecute(string
 Guid, int
 ID, object
 CustomIn,
    object
 CustomOut)
{
    //
Command name: File.SaveSelectedItems

    //
Command GUID/ID: {5EFC7975-14BC-11CF-9B2B-00AA00573819}, 331


    //
Command name: File.SaveAll

    //
Command GUID/ID: {5EFC7975-14BC-11CF-9B2B-00AA00573819}, 224


    //
Command name: File.SaveSelectedItemsAs

    //
Command GUID/ID: {5EFC7975-14BC-11CF-9B2B-00AA00573819}, 226


    //
Command name: Build.SolutionConfigurations

    //
Command GUID/ID: {5EFC7975-14BC-11CF-9B2B-00AA00573819}, 684


    //
Command name: Project.Addreference

    //
Command GUID/ID: {1496A755-94DE-11D0-8C3F-00C04FC2AAE2}, 1113

    if
 (((Guid == "
{5EFC7975-14BC-11CF-9B2B-00AA00573819}"
) && (ID == 331
)) ||
        ((Guid == "
{5EFC7975-14BC-11CF-9B2B-00AA00573819}"
) && (ID == 224
)) ||
        ((Guid == "
{5EFC7975-14BC-11CF-9B2B-00AA00573819}"
) && (ID == 226
)))
    {
        ReadAllReferences();
    } 
    else
 if
 ((Guid == "
{1496A755-94DE-11D0-8C3F-00C04FC2AAE2}"
) && (ID == 1113
))
    {
        ParentToolWindow.Activate();
    }
}

When the solution changes, the Add-In iterates the projects contained in the solution and reads in the references of each project. It adds each reference to the list view and puts an instance of the class AssemblyReferenceInformation at the tag of the ListViewItem . This instance contains information about the project file (.csproj or .vbproj) and the assembly reference (VSLangProj80.Reference3 ), which will be used when manipulating the reference.

Collapse
private
 void
 ReadAllReferences()
{
    ClearHintLists();

    if
 ((_applicationObject != null
) && (_applicationObject.Solution != null
))
    {
        //
 Walk through the projects of the solution and search for assembly references

        foreach
 (Project currentProject in
 _applicationObject.Solution.Projects)
        {
            ReadProjectReferences(currentProject);
        }
    }
}

private
 void
 ReadProjectReferences(Project currentProject)
{
    try

    {
        if
 (currentProject != null
)
        {
            VSProject2 visualStudioProject = currentProject.Object
 as
 VSProject2;

            //
 The current project can be a 'real' project, but it can also be a

            //
 folder (see else if)

            if
 (visualStudioProject != null
)
            {
                string
 projectFullName = currentProject.FullName;

                if
 (!string.IsNullOrEmpty(projectFullName))
                {
                    FileInfo projectFileInfo = new
 FileInfo(projectFullName);

                    //
 If it is a csproj or a vbproj, add it the the list view

                    if
 (projectFileInfo.Exists &&
                        ((projectFileInfo.Extension == _csProjectFileExtension) || 
                            (projectFileInfo.Extension == _vbProjectFileExtension)))
                    {
                        //
 Add a group for this project

                        ListViewGroup projectGroup = GetProjectGroup(currentProject);

                        AddAssemblyHintsToListView(currentProject, projectFullName,
                            projectGroup, visualStudioProject);
                    }
                }
            }
            else
 if
 ((currentProject.ProjectItems != null
) && (
                currentProject.ProjectItems.Count > 0
))
            {
                //
 Project Item Type       GUID

                //
 Physical File         {6BB5F8EE-4483-11D3-8BCF-00C04F8EC28C}

                //
 Physical Folder       {6BB5F8EF-4483-11D3-8BCF-00C04F8EC28C}

                //
 Virtual Folder        {6BB5F8F0-4483-11D3-8BCF-00C04F8EC28C}

                //
 Subproject            {EA6618E8-6E24-4528-94BE-6889FE16485C}


                //
 The projects contains a sub folder -> search for projects in

                //
 these folders

                foreach
 (ProjectItem currentProjectItem in
 currentProject.ProjectItems)
                {
                    if
 (currentProjectItem.SubProject != null
)
                    {
                        ReadProjectReferences(currentProjectItem.SubProject);
                    }
                }
            }
        }
        //
 Enable fixit button, if there is something to fix

        toolStripButtonFixIt.Enabled = (_needsToBeSaved.Count > 0
);
    }
    catch
 (Exception ex)
    {
        ShowMessage(ex);
    }
}

When the user hits the 'FixIt' button, the tool changes the underlying project file. It save all projects which needs to be saved, due to an incorrect assembly path.


Convert to configuration based assembly paths

Collapse
private
 void
 SaveDirtyProjects()
{
    try

    {
        foreach
 (KeyValuePair project in
 _needsToBeSaved)
        {
            XmlDocumentHolder documentHolder = project.Value;

            SaveProject(documentHolder);
        }
    }
    catch
 (Exception ex)
    {
        ShowMessage(ex);
    }
}

private
 void
 SaveProject(XmlDocumentHolder documentHolder)
{
    string
 projectName = documentHolder.Project.FullName;

    if
 (!documentHolder.Project.Saved)
    {
        MessageBox.Show("
Please save all projects before you fix the problems."
);
        return
;
    }

    //
 Check out the project

    if
 ((_sourceControl != null
) && (_sourceControl.IsItemUnderSCC(projectName)) &&
        (!_sourceControl.IsItemCheckedOut(projectName)))
    {
        _sourceControl.CheckOutItem(projectName);
    }

    using
 (XmlTextWriter writer = new
 XmlTextWriter(documentHolder.ProjectFileName,
        Encoding.UTF8))
    {
        writer.Formatting = Formatting.Indented;
        documentHolder.XmlDocument.Save(writer);
    }
}

Visual Studio notices that the tool changed the project file and asks you to reload the project.


Reload the project

The setup project

The setup project deploys the Add-In to the AddIns folders of Visual Studio 2005 and Visual Studio 2008.
It automatically detects newer and older version, older versions will be removed before installing a new version. To create a new setup version for the Add-In, only change the version of the setup. Visual Studio will generate a new ProductCode for you, but it will not touch the UpgradeCode. With the combination of codes, Windows Installer is able to detect and update older or newer versions of the Add-In.


Setupproject

Requirements to build the solution

To build the solution, you need Visual Studio 2008. The Add-In is tested on Visual Studio 2005 and 2008 Team Developer and Team Suite.

History

no changes

<!-- Main Page Contents End -->

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

Thomas Dörr


Member
Thomas has been programming in C, C++, VB and C# since many years. He works as a Senior Software Architect for Lexware GmbH & Co.KG in Freiburg, Germany.
Occupation: Software Developer (Senior)
Company: Lexware GmbH & Co.KG
Location: Germany Germany

 

Other popular Macros and Add-ins articles:

分享到:
评论

相关推荐

    Lexware:Lexware的数据库访问

    这些类的特殊之处在于您具有对Lexware数据库的完全访问权限(包括写入),并且-与已知的ODBC解决方案相反-不必打开Lexware! 执照 该库受。 NuGet软件包 描述 徽章 基础库 Lexware基本组件 NHibernate组件 全球...

    lexweb:网络上的 Lexware 信息和工具

    网络上的 Lexware 信息和工具 有关 Web 文档和在线工具,请参阅 。 在这个存储库中: ├── lw2xml : Validator and dictionary formatter ├── analysis : Xquery extraction from xhtml ├── pages_md : ...

    cteward-sa-meckerfritze:Mtefritze(Lexware)cteward的脚本操作

    "cteward-sa-meckerfritze"项目似乎是一个针对"Mtefritze"(可能是 Lexware 公司的一个产品)的自动化脚本集,由用户"cteward"创建。"Lexware"是一家知名的德国软件公司,其产品主要面向小型和中型企业,提供财务、...

    elkatoAbrechnung:汽车共享会计程序-开源

    这是在簿记框架内完成的,为此还需要一个簿记程序——一个接口被内置到簿记程序中(例如“Lexware Buchhalter”)。 捐款可以通过会计部门作为俱乐部捐款(非物质领域)或作为参与者费用(需缴纳销售税!)在发票上...

    基于杜比NIR数据训练的一些深度学习模型.zip

    这个项目可以命名为“基于选择性核与多尺度注意力的非侵入式负载监测模型”。这个名称突出了项目中使用的关键技术:选择性核(Selective Kernel, SK)单元和高效多尺度注意力(Efficient Multi-scale Attention, EMA)模块。这样的命名方式有助于清晰地传达项目的技术特点和创新点。 如果需要更简洁或者更具吸引力的名称,可以考虑以下选项: 1. **SK-EMA NILM Framework**:结合了项目中两个核心技术的缩写,简洁且易于记忆。 2. **DeepNILM-SKEMA**:强调了深度学习在非侵入式负载监测(NILM)中的应用,并突出了模型的两个主要组件。 3. **AMSAM-NILM Model**:直接使用项目名称,表明这是一个针对特定应用(非侵入式负载监测)的模型。 4. **Multi-Scale Attention NILM**:强调了多尺度注意力机制在模型中的作用。 5. **Selective Kernel NILM System**:突出了选择性核单元在提高识别精度中的重要性。 选择项目名称时,考虑到项目的市场定位

    基于springboot生鲜农产品保鲜及溯源管理系统论文.docx

    基于springboot生鲜农产品保鲜及溯源管理系统论文

    【高创新】基于金枪鱼优化算法TSO-CNN-LSTM-Attention的用客流量预测算法研究Matlab实现.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手

    基于Scss的美食分享网站设计源码

    本项目是基于Scss开发的美食分享网站,包含180个文件,其中包括122个JavaScript脚本文件、14个MAP文件、14个HTML页面文件、13个CSS样式表文件、6个SCSS源代码文件、5个JSON配置文件、3个TXT文本文件和2个Markdown文档文件。此外,还有1个ZIP打包文件。该项目旨在为用户提供一个便捷、美观的美食分享平台,支持美食食谱分享、用户互动、社区交流等功能,以提升用户体验和网站的可访问性。

    R语言编程思想:以医学研究为例_Thinking_in_R_Programming_With_Medic

    R语言编程思想:以医学研究为例_Thinking_in_R_Programming_With_Medical_Research_Example

    基于J2ME的手机游戏-贪吃蛇游戏毕业设计(源代码+论文)

    【作品名称】:基于J2ME的手机游戏-贪吃蛇游戏【毕业设计】(源代码+论文) 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】: 本游戏的操作流程(如图3-1):用户在启动MIDlet后,即进入游戏主画面,屏幕开始显示为欢迎画面。用户按下[开始]按钮后,就可以开始玩游戏。当用户想暂停时,再次按一下[开始]按钮,游戏就暂停了,在暂停的情况下再按[开始]按钮,游戏继续运行。任何时候按[退出]按钮,游戏MIDlet都会终止。 屏幕的长度为行向为11单位,纵向为18单位;在这个范围内(如图3.3),玩家操作方向键控制蛇的运动方向。该游戏的最大特色是屏幕自适应,无论各种手机,PDA的屏幕大小如何,该游戏总是能获得最佳的显示效果。 贪吃蛇最初由3个小正方形组成,小正方形是蛇的身体和游戏容器的组成部分。食物也由一块小正方形组成,并且随 【资源声明】:本资源作为“参考资料”而不是“定制需求”,代码只能作为参考,不能完全复制照搬。需要有一定的基础能够看懂代码,能够自行调试代码并解决报错,能够自行添加功能修改代码。

    基于Python的滑坡灾害敏感性制图ArcGIS Pro工具设计源码

    本项目是基于Python开发的适用于ArcGIS Pro的滑坡灾害敏感性制图工具,包含40个文件,其中包括20个Python源代码文件、8个CSV数据文件、7个PNG图像文件、2个TBX工具箱文件、1个gitignore文件、1个LICENSE文件和1个Markdown文档文件。该项目旨在为地理信息系统用户提供一套便捷、高效的滑坡灾害敏感性分析工具,支持地形数据处理、滑坡危险性评估等功能,以提高滑坡灾害的预警和防范能力。

    含电热联合系统的微电网运行优化附Matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手

    基于python卷积神经网络(CNN)的人脸在线识别系统(含数据集)

    【作品名称】:基于python卷积神经网络(CNN)的人脸在线识别系统 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】:步骤1、使用数据集作为其他人脸,放到img_source 步骤2、运行faces_my.py 、faces_other.py进行数据准备 步骤3、运行faces_train.py进行模型训练 步骤4、运行face_recognition.py进行人脸二分类识别 步骤5、运行faces_train_multi.py进行人脸多分类识别的模型训练,运行face_recognition.py进行人脸识别 【资源声明】:本资源作为“参考资料”而不是“定制需求”,代码只能作为参考,不能完全复制照搬。不一定能够满足所有人的需求,需要有一定的基础能够看懂代码,能够自行调试代码并解决报错,能够自行添加功能修改代码。

    目标检测重卡(自卸车、载货车)翻斗车数据集468张VOC+YOLO格式.zip

    数据集介绍:图片468张无重复,均为翻斗车图片进行标注(翻斗车,也叫自卸车或载货车,属于重卡) 数据集格式:Pascal VOC格式+YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):468 标注数量(xml文件个数):468 标注数量(txt文件个数):468 标注类别数:1 标注类别名称:["Camion"] 每个类别标注的框数: Camion 框数 = 540 总框数:540 使用标注工具:labelImg 标注规则:对类别进行画矩形框 重要说明:暂无 特别声明:本数据集不对训练的模型或者权重文件精度作任何保证,数据集只提供准确且合理标注

    基于分时电价策略的家庭能量系统优化附Matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手

    vm15.1.0_解决linux安装出现Unable_to_start_services._See__vmshell.zip

    vm15.1.0_解决linux安装出现Unable_to_start_services._See__vmshell

    江苏的WSH2012-2

    WSH2012_2

    RHCA-260-Ceph.zip

    PPT CA学习方式及环境制作 cephadm部署ceph集群 CL260笔记 CL260教学环境勘误 cl260模拟题 red_hat_ceph_storage-5-hardware_guide-en-us 手动部署ceph

    Java-SpringBoot-vue基于微信小程序的高校餐厅食品留样管理系统实现源码

    Java-SpringBoot-vue基于微信小程序的高校餐厅食品留样管理系统 项目关键技术 开发工具:IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7+ 后端技术:Springboot 前端技术:Vue、HTML5、css、JavaScript 关键技术:springboot、vue、MYSQL、MAVEN 数据库工具:Navicat、SQLyog

Global site tag (gtag.js) - Google Analytics