色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

VisionPro項(xiàng)目組成簡(jiǎn)介

新機(jī)器視覺 ? 來源:新機(jī)器視覺 ? 2020-09-24 13:17 ? 次閱讀

一、腳本簡(jiǎn)介

1.1VisionPro項(xiàng)目組成簡(jiǎn)介

在介紹腳本之前先簡(jiǎn)單介紹一下VisionPro開發(fā)環(huán)境(QuickBuild)的項(xiàng)目結(jié)構(gòu),Job是QuickBuild工程的基本組成單位,一個(gè)QucikBuild工程至少含有一個(gè)Job,工程中所有的Job是并行結(jié)構(gòu),各個(gè)Job之間不會(huì)相互影響。每個(gè)Job中默認(rèn)包含一個(gè)toolGroup,用戶可以在默認(rèn)的toolGroup中添加項(xiàng)目所需的工具和工具塊。工具塊(toolBlock)與工具組(toolGroup)都是工具的**“容器”**,通過使用工具塊與工具組可以將完成某一功能的工具進(jìn)行封裝,實(shí)現(xiàn)項(xiàng)目模塊化,同時(shí)亦可將某一特定功能的工具塊或工具組導(dǎo)出實(shí)現(xiàn)重復(fù)使用,類似于編程語言中“函數(shù)”功能。工具塊中亦可以包含工具塊與工具組,兩者之間的包含關(guān)系沒有明確層次關(guān)系。

1.2VisionPro腳本簡(jiǎn)介


VisionPro工具封裝了視覺算法與用戶交互界面,toolGroup與toolBlock提供了組合工具的容器,但是并非所有的功能都能通過既定交互界面實(shí)現(xiàn)。為了讓用戶實(shí)現(xiàn)客制化功能更加“隨心所欲”,實(shí)現(xiàn)VisionPro本身無法實(shí)現(xiàn)的邏輯功能,VisionPro預(yù)留了腳本功能。腳本的類型、作用與支持語言如下圖所示:

二、腳本類與方法

VisionPro通過”多態(tài)”技術(shù)實(shí)現(xiàn)腳本功能,VisionPro 的每一Job、toolGroup、toolBlock對(duì)象都含有一個(gè)接口對(duì)象,用戶通過重寫接口方法實(shí)現(xiàn)自定義拓展功能。以toolGroup為例, ICogToolGroupScript接口中定義了子類中必須實(shí)現(xiàn)的函數(shù),當(dāng)toolGruoup執(zhí)行到某一節(jié)點(diǎn)(工具準(zhǔn)備運(yùn)行、工具運(yùn)行完成等)時(shí)會(huì)調(diào)用相應(yīng)的接口函數(shù)實(shí)現(xiàn)用戶指定的功能。


如果你對(duì)接口、多態(tài)理解不夠深入,你只需要明白腳本就是**“填空題”**,VisionPro在適當(dāng)?shù)奈恢媒o你留下空白,在這個(gè)空白區(qū)域你可以在滿足條件的情況下“自由發(fā)揮”,實(shí)現(xiàn)你想要實(shí)現(xiàn)的功能。


2.1 toolGroup腳本類


以ToolGroup腳本為例展開,toolGroup 腳本是繼承于CogToolGroupBaseScript,實(shí)現(xiàn)了ICogToolGroupScript接口,該接口有四個(gè)方法,詳細(xì)介紹如下:

public class CogToolGroupBaseScript : ICogToolGroupScript{ // public virtual bool GroupRun(ref string message,ref Cognex.VisionPro.CogToolResultConstants result) { return true; } public virtual void ModifyCurrentRunRecord(ICogRecord currentRecord) {} public virtual void ModifyLastRunRecord(ICogRecord lastRecord) {} public virtual void Initialize(Cognex.VisionPro.ToolGroup.CogToolGroup host) { toolGroup = host; } protected Cognex.VisionPro.ToolGroup.CogToolGroup toolGroup=null;}

Initialize()顧名思義,該方法用于對(duì)toolGroup工具進(jìn)行初始化,當(dāng)退出腳本編輯工具時(shí)腳本會(huì)進(jìn)行編譯并進(jìn)行初始化,此時(shí)該方法會(huì)被調(diào)用。此外,在對(duì)該group通過*.vpp文件進(jìn)行加載時(shí)也會(huì)被立即調(diào)用。所以,所有的“一次性”的初始化工作都應(yīng)該寫在該方法中。

GroupRun()方法運(yùn)行該Group中的工具,如果該方法返回值為true,所有的屬于當(dāng)前Group的視覺工具都將運(yùn)行,如果返回值為false,用戶可以自定義工具的執(zhí)行順序,返回值為false為常見情況。

ModifyCurrentRunRecord()方法用于修改CurrentRecord,在toolGroup的CurrentRecord被創(chuàng)建后調(diào)用。

ModifyLastRunRecord()方法用于修改LastRunRecord,在toolGroup的LastRunRecord被創(chuàng)建后調(diào)用,例如:在最終生成圖像中添加標(biāo)簽、該表顏色、用不同幾何圖像標(biāo)記目標(biāo)區(qū)域。

成員變量toolGroup為CogToolGroup類型,該類的runTool方法用于運(yùn)行指定視覺工具;Tools 屬性為當(dāng)前Group的工具集合,一般用于獲取當(dāng)前工具組中某一工具的引用;DefineScriptTerminal、GetScriptTerminalData、SetScriptTerminalData 方法用于定義、獲取、設(shè)置輸入輸出終端。

//對(duì)于當(dāng)前Group存在的視覺工具的程序集與命名空間會(huì)自動(dòng)添加,如果用戶想要使用當(dāng)前Group不存在的工具或者添加自定義程序集可以手動(dòng)添加//詳細(xì)的操作步驟會(huì)在后續(xù)實(shí)例中進(jìn)行介紹using System;using Cognex.VisionPro;using Cognex.VisionPro3D;using Cognex.VisionPro.ToolGroup; public class UserScript : CogToolGroupBaseScript{ //默認(rèn)情況下遍歷group中所有的工具并運(yùn)行,用戶可以根據(jù)實(shí)際情況自定義運(yùn)行邏輯與順序 public override bool GroupRun(ref string message, ref CogToolResultConstants result) for (Int32 toolIdx = 0; toolIdx < toolGroup.Tools.Count; toolIdx++) toolGroup.RunTool(toolGroup.Tools[toolIdx], ref message, ref result); return false;//默認(rèn)情況下為false表示用戶可以控制工具的運(yùn)行順序,返回值為true則運(yùn)行當(dāng)前Group中所有工具。 } public override void ModifyCurrentRunRecord(Cognex.VisionPro.ICogRecord currentRecord) { //在此處添加用戶代碼實(shí)現(xiàn)自定義修改CurrentRunRecord的功能 } public override void ModifyLastRunRecord(Cognex.VisionPro.ICogRecord lastRecord) { //在此處添加用戶代碼用于所有工具運(yùn)行完成后根據(jù)用戶需求創(chuàng)建Record或者在既有Record中添加標(biāo)記等 } public override void Initialize(CogToolGroup host) { //調(diào)用父類初始化函數(shù),初始化toolGroup對(duì)象 base.Initialize(host); }}

2.2 toolBlcok腳本類


與toolGroup腳本類似,toolBlock的腳本父類CogToolBlockAdvancedScriptBase,該類實(shí)現(xiàn)的接口與toolGroup相同,都是ICogToolGroupScript,不同之處在于toolBlock與兩個(gè)腳本基類,CogToolBlockSimpleScript 與 CogToolBlockAdvancedScript 分別用于“簡(jiǎn)單腳”與“復(fù)雜”腳本,兩者之間的區(qū)別在于復(fù)雜腳本能夠?qū)崿F(xiàn):①動(dòng)態(tài)定義toolBlock的輸入輸出終端,② 能夠訪問當(dāng)前工具塊所包含工具的所有屬性與方法,為保證與toolGroup腳本使用的統(tǒng)一性,推薦直接使用復(fù)雜腳本。
存在即合理,簡(jiǎn)單腳本具有使用的便利性,在訪問工具塊的輸入輸出終端時(shí),兩者的具體訪問方式如下:

//使用簡(jiǎn)單腳本為輸出賦值Outputs.Degrees = Inputs.Radians * 180 / Math.PI;//使用復(fù)雜腳本為輸出賦值this.mToolBlock.Outputs["Degrees"].Value = ((double) this.mToolBlock.Inputs["Radians"].Value) * 180 / Math.PI;

既然與toolGroup實(shí)現(xiàn)了相同的接口,toolBlock腳本基類的方法與toolGroup必然相同,功能基本無異,不再贅述。


2.3Job腳本類


Job腳本用于控制與圖像獲取相關(guān)的設(shè)備屬性與參數(shù),基類為CogJobBaseScript,實(shí)現(xiàn)ICogJobScript接口。

public class CogJobBaseScript : ICogJobScript { public virtual void Initialize(CogJob jobParam) { job = jobParam; } public virtual void AcqFifoConstruction(ICogAcqFifo fifo) {} public virtual void PreAcquisition() {} public virtual void PostAcquisition(ICogImage image) {} public virtual bool PostAcquisitionRef(ref ICogImage image) { PostAcquisition(image); return true; } public virtual bool PostAcquisitionRefInfo(ref ICogImage image, ICogAcqInfo info) { return PostAcquisitionRef(ref image); } protected CogJob job = null; }}

Initialize()初始化方法,獲取當(dāng)前job引用以及用戶需要的初始化數(shù)據(jù)。

PreAcquisition()在FIFO的StartAcquire()方法調(diào)用之前被調(diào)用,即在進(jìn)行圖像采集之前調(diào)用,如在圖像采集之前設(shè)置曝光、增益、對(duì)比度等圖像參數(shù)。

PostAcquisition()在圖像采集完成之后被調(diào)用。

PostAcquisitionRef()該方法與 PostAcquisition 類似,不同之處在于 image 是以引用的方式傳遞,如果這個(gè)方法返回 Ture , VisionPro 將處理這個(gè) image,如果這個(gè)方法返回 False ,這個(gè) image 將不會(huì)被立即進(jìn)行處理 ,而是采集下一幅圖像,這可以使你能夠在處理所取的多個(gè) image 之前將它們聯(lián)合在一起.(如果 PostAcquisition 和 PostAcquisitionRef 都被重寫,PostAcquisition 將被忽略)。例如你需要同一個(gè)相機(jī)采集多張不同曝光的圖像進(jìn)行合成,并不是每次采集后都立即進(jìn)行處理,而是采集到固定數(shù)量或者滿足某一條件時(shí)進(jìn)行處理。

PostAcquisitionRefInfo()與PostAcquisiitonRef相似,多了一個(gè)參數(shù),用戶可以通過ICogAcqInfo獲取圖像的時(shí)間戳,重寫該方法后 PostAcquisition 、PostAcquisitionRef、 PostAcquisitionRef會(huì)被忽略。

三、腳本使用案例

3.1 job本實(shí)用實(shí)例-----自動(dòng)調(diào)節(jié)曝光時(shí)間


setp1.新建Job,雙擊進(jìn)入job中。


step2配置->作業(yè)屬性->編輯腳本->C#腳本,進(jìn)入Job腳本編輯環(huán)境

using System;using Cognex.VisionPro;using Cognex.VisionPro.QuickBuild;using Cognex.VisionPro.ImageProcessing; public class UserScript : CogJobBaseScript{ double exposure = 10;#region "When an Acq Fifo Has Been Constructed and Assigned To The Job" // This function is called when a new fifo is assigned to the job. This usually // occurs when the "Initialize Acquisition" button is pressed on the image source // control. This function is where you would perform custom setup associated // with the fifo. public override void AcqFifoConstruction(Cognex.VisionPro.ICogAcqFifo fifo) { }#endregion #region "When an Acquisition is About To Be Started" // Called before an acquisition is started for manual and semi-automatic trigger // models. If "Number of Software Acquisitions Pre-queued" is set to 1 in the // job configuration, then no acquisitions should be in progress when this // function is called. public override void PreAcquisition() { // To let the execution stop in this script when a debugger is attached, uncomment the following lines. // #if DEBUG // if (System.Diagnostics.Debugger.IsAttached) System.Diagnostics.Debugger.Break(); // #endif ICogAcqExposure IExposure = job.AcqFifo.OwnedExposureParams; IExposure.Exposure = exposure; }#endregion #region "When an Acquisition Has Just Completed" // Called immediately after an acquisition has completed. // Return true if the image should be inspected. // Return false to skip the inspection and acquire another image. public override bool PostAcquisitionRefInfo(ref Cognex.VisionPro.ICogImage image, Cognex.VisionPro.ICogAcqInfo info) { // To let the execution stop in this script when a debugger is attached, uncomment the following lines. // #if DEBUG // if (System.Diagnostics.Debugger.IsAttached) System.Diagnostics.Debugger.Break(); // #endif CogHistogram curImageHist = new CogHistogram(); CogHistogramResult curHistResult = curImageHist.Execute(image,null); if(curHistResult.Mean>150) exposure *= 0.75; if(curHistResult.Mean < 50) exposure *= 1.5; if(exposure<0.1) exposure = 0.1; return true; }#endregion //Perform any initialization required by your script here. public override void Initialize(CogJob jobParam) { //DO NOT REMOVE - Call the base class implementation first - DO NOT REMOVE base.Initialize(jobParam); }#endregion }

3.2 toolBlock腳本使用實(shí)例-----顯示Blob區(qū)域的中心坐標(biāo)于當(dāng)前Blob區(qū)域
toolBlock腳本的應(yīng)用最為廣泛,用于控制工具的運(yùn)行邏輯,修改生成的record,拓展數(shù)據(jù)邏輯等。本例以最簡(jiǎn)單的方式介紹toolBloc腳本使用方法,本例的具體應(yīng)用為在各個(gè)獨(dú)立的Blob區(qū)域顯示其中心坐標(biāo)值。


在進(jìn)行腳本編輯之前,根據(jù)用戶需要添加程序集以及命名空間,添加引用程序集的具體過程如下圖所示:


在編寫C#toolBlock腳本時(shí),其常規(guī)流程為:

step1.根據(jù)需求添加程序集以及命名空間
step2.聲明對(duì)應(yīng)toolBlock的相關(guān)變量以及用戶自定義變量
step3.在Initialize()函數(shù)中獲取toolBlock中工具的引用
step4.在GroupRun()方法中通過工具變量控制工具的執(zhí)行順序以及獲取所需用戶數(shù)據(jù)
step5.修改Record得到用戶所需效果

//==========================step1===================================#region namespace importsusing System;using System.Collections;using System.Collections.Generic;using System.Drawing;using System.IO;using System.Windows.Forms;using Cognex.VisionPro;using Cognex.VisionPro.ToolBlock;using Cognex.VisionPro3D;using Cognex.VisionPro.Blob;using Cognex.VisionPro.ResultsAnalysis;#endregion public class CogToolBlockAdvancedScript : CogToolBlockAdvancedScriptBase{//==========================step2=================================== #region Private Member Variables private Cognex.VisionPro.ToolBlock.CogToolBlock mToolBlock; private CogBlobTool mBlob; private List mLabels; #endregion ///

/// Called when the parent tool is run. /// Add code here to customize or replace the normal run behavior. /// /// Sets the Message in the tool's RunStatus. /// Sets the Result in the tool's RunStatus /// True if the tool should run normally, /// False if GroupRun customizes run behavior public override bool GroupRun(ref string message, ref CogToolResultConstants result) { // To let the execution stop in this script when a debugger is attached, uncomment the following lines. // #if DEBUG // if (System.Diagnostics.Debugger.IsAttached) System.Diagnostics.Debugger.Break(); // #endif //==========================step4=================================== mLabels.Clear(); // Run each tool using the RunTool function //foreach(ICogTool tool in mToolBlock.Tools) //mToolBlock.RunTool(tool, ref message, ref result); mToolBlock.RunTool(mBlob, ref message, ref result); CogBlobResultCollection blobs = mBlob.Results.GetBlobs(); foreach(CogBlobResult blob in blobs) { CogGraphicLabel tempLabel = new CogGraphicLabel(); tempLabel.Alignment = CogGraphicLabelAlignmentConstants.BaselineCenter; tempLabel.SetXYText(blob.CenterOfMassX, blob.CenterOfMassY, Convert.ToString(blob.CenterOfMassX)+","+Convert.ToString(blob.CenterOfMassY)); tempLabel.Color = CogColorConstants.Red; mLabels.Add(tempLabel); } return false; } #region When the Current Run Record is Created /// /// Called when the current record may have changed and is being reconstructed /// /// /// The new currentRecord is available to be initialized or customized. public override void ModifyCurrentRunRecord(Cognex.VisionPro.ICogRecord currentRecord) { } #endregion #region When the Last Run Record is Created /// /// Called when the last run record may have changed and is being reconstructed /// /// /// The new last run record is available to be initialized or customized. public override void ModifyLastRunRecord(Cognex.VisionPro.ICogRecord lastRecord) { //==========================step5=================================== foreach(CogGraphicLabel label in mLabels) { mToolBlock.AddGraphicToRunRecord(label, lastRecord, "CogBlobTool1.InputImage"," "); } } #endregion #region When the Script is Initialized /// /// Perform any initialization required by your script here /// /// The host tool public override void Initialize(Cognex.VisionPro.ToolGroup.CogToolGroup host) { // DO NOT REMOVE - Call the base class implementation first - DO NOT REMOVE base.Initialize(host); // Store a local copy of the script host //==========================step3=================================== this.mToolBlock = ((Cognex.VisionPro.ToolBlock.CogToolBlock)(host)); mBlob = this.mToolBlock.Tools["CogBlobTool1"] as CogBlobTool; mLabels = new List(); } #endregion}

效果圖為:

四、腳本進(jìn)階

4.1腳本是“插件”程序集


無論你是通過Job腳本、ToolGroup腳本還是ToolBlock腳本拓展QuickBuild程序功能時(shí),實(shí)際上是完善了繼承于某一接口的腳本類(繼承于CogToolGroupBaseScript、CogJobBaseScript或者CogToolBlockAdvancedScriptBase類),在退出腳本編輯環(huán)境時(shí)QuickBuild對(duì)你完善的子類進(jìn)行編譯,如果出現(xiàn)語法錯(cuò)誤會(huì)報(bào)錯(cuò)提示,在語法錯(cuò)誤改正前當(dāng)前腳本的所有內(nèi)容都不會(huì)被調(diào)用,因?yàn)闆]有通過編譯。如果出現(xiàn)邏輯錯(cuò)誤不會(huì)提示,需要在VS環(huán)境下進(jìn)行調(diào)試,調(diào)試方法后續(xù)會(huì)詳細(xì)介紹。QuickBuild程序運(yùn)行時(shí)通過接口實(shí)現(xiàn)對(duì)腳本子類成員函數(shù)的調(diào)用,從而將腳本函數(shù)的拓展功能進(jìn)行實(shí)現(xiàn)。


關(guān)于腳本,你還需要明白以下幾點(diǎn):

用戶在腳本中編寫的代碼會(huì)成為VisionPro程序的一部分,其中的bug也不可避免影響到VisionPro 的運(yùn)行。

用戶實(shí)現(xiàn)的腳本類會(huì)被編譯為程序集加載到內(nèi)存當(dāng)中,而且每次對(duì)腳本進(jìn)行編輯之后會(huì)重新編譯,但是舊版本的程序集會(huì)一致在內(nèi)存中直到你重新啟動(dòng)QuickBuild,因此頻繁修改腳本會(huì)增加一點(diǎn)點(diǎn)的內(nèi)存消耗。

腳本程序集被加載到內(nèi)存之后,VisionPro會(huì)創(chuàng)建一個(gè)該腳本類的接口對(duì)象。腳本重新編輯之后接口對(duì)象會(huì)釋放Dispose之前對(duì)象,運(yùn)行GC進(jìn)行垃圾回收,創(chuàng)建新腳本類的接口實(shí)例。

在進(jìn)行腳本編輯時(shí),如果腳本內(nèi)容比較多,最好經(jīng)常進(jìn)行保存,保存時(shí)需要退出腳本編輯環(huán)境對(duì)整個(gè)QuickBuild工程進(jìn)保存。補(bǔ)充一點(diǎn),在QuickBuild環(huán)境下進(jìn)行工具編輯時(shí)亦需要進(jìn)行隨手保存,工具Block誤刪除之后好像是無法恢復(fù)的只有退出QuickBuild時(shí)選擇不保存,前提是你誤刪除之前剛好保存過,慘痛的經(jīng)歷已不止一次。

4.2腳本實(shí)現(xiàn)事件與委托

事件響應(yīng)函數(shù)中要增加異常處理機(jī)制(Try …Catch),否則容易導(dǎo)致VisionPro運(yùn)行出現(xiàn)異常;

不要在事件處理函數(shù)中產(chǎn)生當(dāng)前的事件,否則會(huì)造成無限循環(huán);

重寫實(shí)現(xiàn)Dispose(),取消事件注冊(cè)。腳本每次修改退出后都會(huì)進(jìn)行編譯,運(yùn)行時(shí)重新注冊(cè)事件,如果沒有在Dispose總?cè)∠?cè)會(huì)造成多次注冊(cè);

當(dāng)前事件的響應(yīng)函數(shù)可能不止你在腳本中實(shí)現(xiàn),在VisionPro內(nèi)部機(jī)制中可能也有實(shí)現(xiàn),這些事件的響應(yīng)函數(shù)執(zhí)行順序是不確定的。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 編程語言
    +關(guān)注

    關(guān)注

    10

    文章

    1952

    瀏覽量

    35265
  • VisionPro
    +關(guān)注

    關(guān)注

    6

    文章

    20

    瀏覽量

    15686
  • 腳本
    +關(guān)注

    關(guān)注

    1

    文章

    395

    瀏覽量

    15049

原文標(biāo)題:VisionPro之腳本(一文讀懂VisionPro腳本原理與使用方法)

文章出處:【微信號(hào):vision263com,微信公眾號(hào):新機(jī)器視覺】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    STM32項(xiàng)目分享:智能臺(tái)燈(機(jī)智云)系統(tǒng)

    01—項(xiàng)目簡(jiǎn)介1.功能詳解STM32智能臺(tái)燈(機(jī)智云)系統(tǒng)功能如下:1.檢測(cè)功能:系統(tǒng)檢測(cè)周圍溫濕度數(shù)據(jù)、距離、人體信號(hào)、光照強(qiáng)度L
    的頭像 發(fā)表于 03-10 08:03 ?54次閱讀
    STM32<b class='flag-5'>項(xiàng)目</b>分享:智能臺(tái)燈(機(jī)智云)系統(tǒng)

    晶科能源與UTI簽署儲(chǔ)能項(xiàng)目合同

    標(biāo)志性項(xiàng)目將分兩個(gè)地點(diǎn)實(shí)施:其中一處部署20MWh(由4套SunTera藍(lán)鯨儲(chǔ)能系統(tǒng)組成),另一處部署5MWh(由1套SunTera藍(lán)鯨儲(chǔ)能系統(tǒng)組成)。該項(xiàng)目的核心目標(biāo)是助力工廠從傳統(tǒng)
    的頭像 發(fā)表于 02-28 17:57 ?367次閱讀

    康耐視VisionPro智能視覺軟件助力孚能科技突破鋰電檢測(cè)瓶頸

    在鋰電池制造領(lǐng)域,精度與效率的平衡始終是行業(yè)難題。面對(duì)鋰電缺陷檢測(cè)復(fù)雜度高、質(zhì)量要求嚴(yán)苛等挑戰(zhàn),孚能科技通過部署康耐視VisionPro智能視覺軟件,突破傳統(tǒng)檢測(cè)技術(shù)局限,最終實(shí)現(xiàn)漏檢率
    的頭像 發(fā)表于 02-21 15:32 ?171次閱讀

    ElfBoard開源項(xiàng)目|智能消防車項(xiàng)目

    智慧城市的建設(shè)推動(dòng)了城市各個(gè)領(lǐng)域的智能化發(fā)展,消防領(lǐng)域也不例外。智慧消防作為智慧城市的重要組成部分,其建設(shè)和發(fā)展與智慧城市的建設(shè)緊密相連。 在此背景下,ElfBoard團(tuán)隊(duì)完成了一個(gè)創(chuàng)新性的開源
    的頭像 發(fā)表于 01-04 16:43 ?434次閱讀
    ElfBoard開源<b class='flag-5'>項(xiàng)目</b>|智能消防車<b class='flag-5'>項(xiàng)目</b>

    STM32項(xiàng)目分享:機(jī)智云智慧農(nóng)業(yè)系統(tǒng)

    01—項(xiàng)目簡(jiǎn)介1.功能詳解基于STM32的機(jī)智云智慧農(nóng)業(yè)系統(tǒng)。功能如下:溫濕度采集:使用DHT11溫濕度傳感器采集環(huán)境溫濕度土壤濕度
    的頭像 發(fā)表于 12-19 18:40 ?601次閱讀
    STM32<b class='flag-5'>項(xiàng)目</b>分享:機(jī)智云智慧農(nóng)業(yè)系統(tǒng)

    STM32項(xiàng)目分享:智能臺(tái)燈系統(tǒng)

    01—項(xiàng)目簡(jiǎn)介1.功能詳解基于STM32智能臺(tái)燈系統(tǒng)。功能如下:亮度控制:按鍵控制照明燈的亮度(5擋亮度)計(jì)時(shí)功能:按鍵啟動(dòng)計(jì)時(shí),累
    的頭像 發(fā)表于 11-29 01:02 ?1132次閱讀
    STM32<b class='flag-5'>項(xiàng)目</b>分享:智能臺(tái)燈系統(tǒng)

    【畢設(shè)項(xiàng)目參考】物聯(lián)網(wǎng)10+項(xiàng)目推薦,附項(xiàng)目文檔/源碼/視頻

    項(xiàng)目進(jìn)行深入創(chuàng)新,在畢業(yè)設(shè)計(jì)中取得優(yōu)異的成績(jī),為未來的職業(yè)生涯打下堅(jiān)實(shí)的基礎(chǔ)。畢設(shè)項(xiàng)目推薦1智能小車項(xiàng)目功能介紹:本項(xiàng)目由三部分組成:應(yīng)用
    的頭像 發(fā)表于 11-26 15:26 ?996次閱讀
    【畢設(shè)<b class='flag-5'>項(xiàng)目</b>參考】物聯(lián)網(wǎng)10+<b class='flag-5'>項(xiàng)目</b>推薦,附<b class='flag-5'>項(xiàng)目</b>文檔/源碼/視頻

    閃電定位儀應(yīng)用簡(jiǎn)介

    閃電定位儀應(yīng)用簡(jiǎn)介
    發(fā)表于 11-13 16:34 ?0次下載

    超聲波簡(jiǎn)介

    電子發(fā)燒友網(wǎng)站提供《超聲波簡(jiǎn)介.pdf》資料免費(fèi)下載
    發(fā)表于 10-25 09:14 ?0次下載
    超聲波<b class='flag-5'>簡(jiǎn)介</b>

    STM32項(xiàng)目分享:智能門禁鎖系統(tǒng)

    01—項(xiàng)目簡(jiǎn)介1.功能詳解基于STM32智能門禁鎖系統(tǒng)。功能如下:按鍵解鎖:系統(tǒng)通過4×4矩陣鍵盤模塊輸入密碼進(jìn)入主菜單門禁刷卡:通
    的頭像 發(fā)表于 09-12 08:04 ?2379次閱讀
    STM32<b class='flag-5'>項(xiàng)目</b>分享:智能門禁鎖系統(tǒng)

    STM32項(xiàng)目分享:智能大棚/智慧農(nóng)業(yè)系統(tǒng)

    01—項(xiàng)目簡(jiǎn)介1.功能詳解基于STM32的智慧農(nóng)業(yè)系統(tǒng)。功能如下:溫濕度采集:使用DHT11溫濕度傳感器采集環(huán)境溫濕度土壤濕度采集:
    的頭像 發(fā)表于 08-30 12:15 ?1485次閱讀
    STM32<b class='flag-5'>項(xiàng)目</b>分享:智能大棚/智慧農(nóng)業(yè)系統(tǒng)

    STM32項(xiàng)目分享:智慧農(nóng)業(yè)(機(jī)智云)系統(tǒng)

    目錄一、前言二、項(xiàng)目簡(jiǎn)介1、功能詳解2、主要器件三、原理圖設(shè)計(jì)四、PCB硬件設(shè)計(jì)1、PCB圖2、PCB板打樣焊接圖五、程序設(shè)計(jì)六、實(shí)驗(yàn)效果七、資料內(nèi)容項(xiàng)目分享一、前
    的頭像 發(fā)表于 07-27 08:10 ?747次閱讀
    STM32<b class='flag-5'>項(xiàng)目</b>分享:智慧農(nóng)業(yè)(機(jī)智云)系統(tǒng)

    RA6T2的16位模數(shù)轉(zhuǎn)換器操作 [12] 應(yīng)用項(xiàng)目簡(jiǎn)介

    RA6T2的16位模數(shù)轉(zhuǎn)換器操作 [12] 應(yīng)用項(xiàng)目簡(jiǎn)介
    的頭像 發(fā)表于 06-10 08:06 ?446次閱讀
    RA6T2的16位模數(shù)轉(zhuǎn)換器操作 [12] 應(yīng)用<b class='flag-5'>項(xiàng)目</b><b class='flag-5'>簡(jiǎn)介</b>

    產(chǎn)品簡(jiǎn)介 | RZ/A系列MPU

    產(chǎn)品簡(jiǎn)介 | RZ/A系列MPU
    的頭像 發(fā)表于 05-24 08:06 ?528次閱讀
    產(chǎn)品<b class='flag-5'>簡(jiǎn)介</b> | RZ/A系列MPU

    Vision Pro沒起飛,下個(gè)故事是AI:蘋果變成了一家賣夢(mèng)的公司

    現(xiàn)實(shí)太骨感的蘋果,正變成一家賣夢(mèng)的公司。上一季度財(cái)報(bào)發(fā)布時(shí),正值Visionpro正式發(fā)售前夜,一切熱鬧都被蘋果轉(zhuǎn)化為推銷給投資者們的“下一個(gè)iPhone”的美夢(mèng)。而一個(gè)季度過去,到今天第一個(gè)包含
    的頭像 發(fā)表于 05-13 17:10 ?312次閱讀
    Vision Pro沒起飛,下個(gè)故事是AI:蘋果變成了一家賣夢(mèng)的公司
    主站蜘蛛池模板: 好紧好湿太硬了我太爽了小说 | 欧美日韩北条麻妃一区二区 | 国产免费69成人精品视频 | 啦啦啦 中文 中国 免费 高清在线 | 久久精品国产免费中文 | 吉吉影音先锋av资源网 | 欧美日韩视频一区二区三区 | 在线 国产 欧美 亚洲 天堂 | 成人小视频免费在线观看 | 亚洲精品卡2卡3卡4卡5卡区 | 狠狠鲁 我喜欢 | 天天影视网网色色欲 | 久久国产综合精品欧美 | 妓女嫖客叫床粗话对白 | 美女露100%全身无遮挡 | 久久精品免费观看久久 | 欧美重口绿帽video | 欧美成人精品高清在线观看 | 婷婷久久综合九色综合伊人色 | 国产成人久久AV免费看澳门 | 免费看黄色一级 | 狼人无码伊人AV啪啪 | 无码国产成人午夜在线观看不卡 | 三级黄色小视频 | 99久久国产综合色 | 97蜜桃网123| 美女裸露100%奶头视频 | A片毛片免费视频在线看 | 亚洲va精品中文字幕 | 中国国产不卡视频在线观看 | 人妻满熟妇AV无码区国产 | 色欲档案之麻雀台上淫 | 影音先锋av男人资源 | 国产在线观看网址你懂得 | 国产成人自产拍免费视频 | 欧洲日韩av无线在码 | 久久青青草原综合伊人 | 永久免费精品影视网站 | 赤兔CHINESE最新男18GUY | 久久精品男人影院 | 伦理片在线线249 |