精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

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

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

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

一、腳本簡介

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

在介紹腳本之前先簡單介紹一下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腳本簡介


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對象都含有一個(gè)接口對象,用戶通過重寫接口方法實(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)用戶指定的功能。


如果你對接口、多態(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()顧名思義,該方法用于對toolGroup工具進(jìn)行初始化,當(dāng)退出腳本編輯工具時(shí)腳本會(huì)進(jìn)行編譯并進(jìn)行初始化,此時(shí)該方法會(huì)被調(diào)用。此外,在對該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è)置輸入輸出終端。

//對于當(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對象 base.Initialize(host); }}

2.2 toolBlcok腳本類


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

//使用簡單腳本為輸出賦值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è)置曝光、增益、對比度等圖像參數(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ù)邏輯等。本例以最簡單的方式介紹toolBloc腳本使用方法,本例的具體應(yīng)用為在各個(gè)獨(dú)立的Blob區(qū)域顯示其中心坐標(biāo)值。


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


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

step1.根據(jù)需求添加程序集以及命名空間
step2.聲明對應(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對你完善的子類進(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)對腳本子類成員函數(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)中,而且每次對腳本進(jìn)行編輯之后會(huì)重新編譯,但是舊版本的程序集會(huì)一致在內(nèi)存中直到你重新啟動(dòng)QuickBuild,因此頻繁修改腳本會(huì)增加一點(diǎn)點(diǎn)的內(nèi)存消耗。

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

在進(jìn)行腳本編輯時(shí),如果腳本內(nèi)容比較多,最好經(jīng)常進(jìn)行保存,保存時(shí)需要退出腳本編輯環(huán)境對整個(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(),取消事件注冊。腳本每次修改退出后都會(huì)進(jìn)行編譯,運(yùn)行時(shí)重新注冊事件,如果沒有在Dispose總?cè)∠詴?huì)造成多次注冊;

當(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)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 編程語言
    +關(guān)注

    關(guān)注

    10

    文章

    1939

    瀏覽量

    34604
  • VisionPro
    +關(guān)注

    關(guān)注

    6

    文章

    19

    瀏覽量

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

    關(guān)注

    1

    文章

    387

    瀏覽量

    14833

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

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

收藏 人收藏

    評論

    相關(guān)推薦

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

    項(xiàng)目進(jìn)行深入創(chuàng)新,在畢業(yè)設(shè)計(jì)中取得優(yōu)異的成績,為未來的職業(yè)生涯打下堅(jiān)實(shí)的基礎(chǔ)。畢設(shè)項(xiàng)目推薦1智能小車項(xiàng)目功能介紹:本項(xiàng)目由三部分組成:應(yīng)用
    的頭像 發(fā)表于 11-26 15:26 ?216次閱讀
    【畢設(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)用簡介

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

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

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

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

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

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

    目錄一、前言二、項(xiàng)目簡介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 ?403次閱讀
    STM32<b class='flag-5'>項(xiàng)目</b>分享:智慧農(nóng)業(yè)(機(jī)智云)系統(tǒng)

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

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

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

    現(xiàn)實(shí)太骨感的蘋果,正變成一家賣夢的公司。上一季度財(cái)報(bào)發(fā)布時(shí),正值Visionpro正式發(fā)售前夜,一切熱鬧都被蘋果轉(zhuǎn)化為推銷給投資者們的“下一個(gè)iPhone”的美夢。而一個(gè)季度過去,到今天第一個(gè)包含
    的頭像 發(fā)表于 05-13 17:10 ?312次閱讀
    Vision Pro沒起飛,下個(gè)故事是AI:蘋果變成了一家賣夢的公司

    CAN和CANFD協(xié)議簡介(下)

    CAN和CANFD協(xié)議簡介(下)
    的頭像 發(fā)表于 02-19 12:08 ?874次閱讀
    CAN和CANFD協(xié)議<b class='flag-5'>簡介</b>(下)

    蘋果VisionPro頭顯無法通過“查找”確定位置

    蘋果最新發(fā)布的VisionPro頭顯已正式開售,但根據(jù)蘋果日前發(fā)布的支持文件,這款頭顯目前存在一些功能上的限制。最值得注意的是,用戶無法在iCloud網(wǎng)站或“查找”應(yīng)用中確定VisionPro頭顯的位置。這意味著,如果頭顯丟失或被盜,用戶將難以追蹤其位置。
    的頭像 發(fā)表于 02-04 14:21 ?1108次閱讀

    蘋果VisionPro頭顯開售后遭遇多項(xiàng)重大缺陷:不能定位、遠(yuǎn)程發(fā)聲

    蘋果官方發(fā)布的技術(shù)支持文檔顯示,這項(xiàng)被稱為“視覺專業(yè)版(”VisionPro“)”的設(shè)備并沒有最基本的定位和遠(yuǎn)程音頻傳輸能力。對此,MacRumors猜測可能因?yàn)樵擃^戴式顯示器缺少外部電池組和全球定位系統(tǒng)(GPS)而導(dǎo)致這些功能無法實(shí)現(xiàn)。
    的頭像 發(fā)表于 02-03 10:06 ?723次閱讀

    CAN和CANFD協(xié)議簡介(上)

    CAN和CANFD協(xié)議簡介(上)
    的頭像 發(fā)表于 01-26 08:06 ?1164次閱讀
    CAN和CANFD協(xié)議<b class='flag-5'>簡介</b>(上)

    壽寧縣五校遷建項(xiàng)目企業(yè)微電網(wǎng)能效管理系統(tǒng)項(xiàng)目的設(shè)計(jì)與應(yīng)用

    基本信息:項(xiàng)目名稱:壽寧縣五校遷建項(xiàng)目(現(xiàn)為壽寧縣一中)企業(yè)微電網(wǎng)能效管理系統(tǒng)項(xiàng)目地點(diǎn):福建省壽寧縣實(shí)施時(shí)間:2023年4月項(xiàng)目總覽圖:項(xiàng)目
    的頭像 發(fā)表于 01-12 08:07 ?517次閱讀
    壽寧縣五校遷建<b class='flag-5'>項(xiàng)目</b>企業(yè)微電網(wǎng)能效管理系統(tǒng)<b class='flag-5'>項(xiàng)目</b>的設(shè)計(jì)與應(yīng)用

    基于光譜共焦技術(shù)的VR/AR眼鏡鏡片厚度檢測

    蘋果正要求中國廠商加速生產(chǎn)首款頭顯,計(jì)劃2024年2月發(fā)售VisionPro頭顯;而蘋果分析師郭明錤則表示,VisionPro將是蘋果2024年最重要的產(chǎn)品,預(yù)計(jì)2024年的出貨量將達(dá)到50萬部
    的頭像 發(fā)表于 01-02 16:45 ?2726次閱讀
    基于光譜共焦技術(shù)的VR/AR眼鏡鏡片厚度檢測

    維信諾ViP AMOLED量產(chǎn)項(xiàng)目首片模組成功點(diǎn)亮

    12月15日,維信諾ViP AMOLED量產(chǎn)項(xiàng)目首片模組成功點(diǎn)亮。這標(biāo)志著ViP技術(shù)量產(chǎn)工藝全線跑通,完成了向大規(guī)模量產(chǎn)的關(guān)鍵一躍。
    的頭像 發(fā)表于 12-15 16:36 ?916次閱讀

    開關(guān)電容轉(zhuǎn)換原理簡介

    開關(guān)電容轉(zhuǎn)換原理簡介
    的頭像 發(fā)表于 12-05 16:49 ?653次閱讀
    開關(guān)電容轉(zhuǎn)換原理<b class='flag-5'>簡介</b>