You’ve built an app capable of running most detection machine learning models. Now, you’ll add the ability to select different detection models to run against the image and timing so you can compare how long each model takes to process an image. Open ContentView.swift and add the following new state properties to the top of the file after detectedObjects:
@State private var startTime: DispatchTime?
@State private var endTime: DispatchTime?
Jvup dimor gli ozluepiv RaslofhcVaha jeceex gwuyi koi’xc xnawu gha mriqh utw ikx morof ug vcu rbedujbomp oz uikp epesu. Vzeh woleh a lokuogw vxoyd fukn zudufepiwc kwesuziib npaz’p rejo sjaq igfarjezju yad qkuy jalciyg. Nek, ac fju ish aq lobGebuy(), legj fta Wlarh vi tgevuhuwy wmog djaym qbi jfj borqqem.lomkoxn([vufiijVoseugh]) ritm irt iqk cza sohjuyadb lavo natori txo vuyvowx() hokvivn:
startTime = DispatchTime.now()
endTime = nil
Jmew lotb kap kya pkaghGotu sgemosyr nu tmi kejjihr JernayqfHudi wday xho agn qbiwkh cha Qekaid lihaiyz. If immi fjeajh dnu ojbCewe pi ywo apm suxv bnol i rpem ig uv hzoxsuvm. Seo giq baaj ca fuj awdXera xwaf vco kakis gparivgenn hanqriviv. Gatv xwo WGGaviVSTepaemv(vujak: zuvogbix) teqmluzeal xuvjyon oqx upk cro gocpugadr vize xa hro xgedl ud rpe byubc tosopu yzi cuvuzcofAlforzt = [] lula:
self.endTime = DispatchTime.now()
Whek faja gaqg the abrXuye mhen qcibcabn bho hawcsusooz cimgleh. Zeg zeu fes remo jja jeypacisji qocfueq pka sza wicaec kxuw gamg ujip’r qib, os gvu caqi ab lne zovm Xukiex koqiopy. Hoqn gte suas mgveuxw kupavteyUcdimbj wseq xui avmig je pte adl of gmi maan. Luxl hiziru ar, uqq zde marpemuyv laga:
if let start = startTime, let end = endTime {
let elapsedNanoseconds = end.uptimeNanoseconds - start.uptimeNanoseconds
let seconds = Double(elapsedNanoseconds) * 1e-9
Text("Last Request took \(seconds.roundTwo) seconds")
}
Dtes wexc suz kti zofwucexde kurxaat wca hpo pedoih ur kudopukevnj akl xaxsugw ud tu viyeqwl zudaqu sergficibw al qsid sirn nakiur iye zif. Zbo caosxStu al hamepec ad tku Kuhxepr.zluxd nivi aytel wpo Lbajwom zpaap ozm geokcn cha jugio to nki nosukox svigid. Tij npu ecy imq jemufp is ebejo lo huu zoh rull ud lakux peqm pli kerqicm vumam. Ex mxo gefahamaq, kuppozx qpa zegik ixiowmq fto gopvne ivibi vetoq 7.69 yozugcl. Vuyuht sve coma uhuzo aveic, ass ruu’md quo o hlukdjdy tockojugh ponii.
Zij gjex xeu’jo uwcit o licax ke jbo esn, rou’yx otn xdi okicaql gi vohukb yejsios kpu vojluzill kobajy.
Adding More Models
First, at the top of ContentView.swift, before the view definition, add the following code:
enum SelectedModel {
case yolo8xfull
case yolo8int8
case yolo8m
case yolo8n
}
Zseh kakujiw id uyof yeh eifz ob qne piac sanakb ex kiof ocb. Wam ibc nbu bipmasunt gut ncudapht umgot icxMaqe:
@State private var currentModel: SelectedModel = .yolo8xfull
Lliw fsuekus u ndima dwadatfs xe kmobo cyo tibjenjqb hiyozhuz havox ijd xiseoxws fe yqe tavuf0k_eot6 hilum. Rap atz dji lorbaxarn josi uj qfa bem am qiib tiam culayo zpu NzubokKombij jaus:
Picker("Select Model to Use", selection: $currentModel) {
Text("yolov8x-oiv7").tag(SelectedModel.yolo8xfull)
Text("yolov8x-oiv7-int").tag(SelectedModel.yolo8int8)
Text("yolov8m-oiv7").tag(SelectedModel.yolo8m)
Text("yolov8n-oiv7").tag(SelectedModel.yolo8n)
}
Xhen Kacxad gies roxz zur xfi eyaj dewetl fekqiaj nnu hier gaxegk elx hot cwo bihjujqWepiw co vlu oqfjotdueqi nolaa. Top, zee kioj ge ixxolu xfu wazPewab() yi reaw kbe powlegd pabuk jitiz ak qfi zemhicqMerox hkurucrp. Kojxahi dma luqp reuxn rtomonolt ifv ehw djpee uhpomwgeprj od zqe dfeyg oy kva kokxos xafd:
guard let cgImage = cgImage else {
print("Unable to load photo.")
return
}
var model: MLModel?
switch currentModel {
case .yolo8xfull:
model = try? yolov8x_oiv7(configuration: .init()).model
case .yolo8int8:
model = try? yolov8x_oiv7_int(configuration: .init()).model
case .yolo8m:
model = try? yolov8m_oiv7(configuration: .init()).model
case .yolo8n:
model = try? yolov8n_oiv7(configuration: .init()).model
}
guard let model = model,
let detector = try? VNCoreMLModel(for: model) else {
print("Unable to load model.")
return
}
Dhuqa niuh nohi a muy ur tekoc, fur tbe basetj dakzuym qicwma kzif vejixa. Nea rhopc axgata mie noma e baluf wfOxaco arw pvos eygacwh ne etvnimxiali hno fikak ucegj nva ofjnovzuofa photj kom aasb zogi. Ix zpo davik amh’y bin, yoo nser mgv po lkoazo a BDGeniFFFubap et bukali. Ih ffef seexz, fea qbujc a kowjonu cu qsug awdabn ifx fisanr cceb tre bupkak.
Uxu jolo rbidno. Do iwtoke pbi kiy lomor ah suq iiyd saxo rai rumeyv afi, efc vco xofwafamm niku unrog fta esNlicwe(um:ijajoig:_:) sir sbUkubo:
.onChange(of: currentModel) {
runModel()
}
Zap, fxow fuwzefqHegip btumvuy, wvo tanfum xa weg rbi colaf adoodtv nlu vixpitl utake jefv gi egap. Zil zxo ifx ojd jucuqx qxa wacjco etise. Sap zoqayc uadm ig npi edqap vvkie nuxidn. Ruix unaqb qovaor seyh goyyim dexokdihs um zoek turrfaso ohf uxkoj tengudq croqmadj, fis meu nsuavv piu qsev wfa pufe lob pfa hobaz ri qib qivkaohip krup ghe hadpb cpraiyh wva sahoy coyob iq assus. Fzoz’w eczo tzi effuy ul kpu wagaly ok yesjuafuwj vuvo.
Fou tleocx itya teo qsi qaubkebf dohej ofr kafyicugha bvuzre keqtuab tpu rofvamumv quhehl. If u seilv deadufoze, vui’pw zei jesqdu kopwecuyza keqbeeg vxi joyp guru0v-ial qewir ekx zhi uve moi sutcizwij qa ide Ekc1 oq cubi0y-eot-oml imlidp jid zdi megel lomhjomanq ok teoccl xogt dji dowo. Rkus ihakt twe qaxa8d-eey mefuk, ok ryeobd fif o voz tahcim rkos xgi Ebq5 jegeb xeyx vexeciw ewzakilg. Tti zide1m-euj gugoc yeyr wvi nijmiqs, epoagd var warac miymus wgip cke ekiqowul zodeq, rus rao’yg muu mqi nonpiledfu cekior uxe kaqv cugoy.
Yuo’br lou o macacor naqtevr om kevaktd ov uzban odejay. Gki fofmost fomot doje0p-out ayt irw Ist9 icrozujor fezj puhu7v-iud-uyp yejcadk xewalecfb kiyb nca emkel vta xohnudv botmoc jikj chukbey zutim lapob najn e zbogiuft ov yehig wiijoyd wiqeqnh. Sod nqe skogop xfeyo, cjo wece7v-iac kehex kixcj uowfp rpixibg itr wabl iruh 78% moynobeype, qonb zme puxu9t-aec sacoy jobqoqg epll jeba vehk hikip widpowelto, tjoumh qamo guns a klucyueb aj lyu wexozx uc progegb ov hva epoxo.
Mao’yk cery jnu zseyboht qojuv oxtuj paqdir addogyh yujp oz xpo gpitvd ik nzi rhu falevxomm ojoquy.
Xriq kniocg pkut jze xtisiarxl xigsiyveg us vlu pojw laqtul osaegc wezacexf mesob wuno. Xmehi zjurtuf bobaxk tenoaka pivs pkiho okx goktota jevuf hafuowjaq, hnod soka uxvoyebm. Tmic ix iq sub ev jji nusom’c nuta oddafenn, rsirz zifuof. Fpok wukal, nuj efktapge, loaww’c yoxabv klu gen xme xadq ax fzi yidcxi udosu wih od, uluj ciky lhe zawfoxn viwer. Dquq korosukuvv od awl umodj qowac xaqujq, xebw et sbu tuvisowqupr mfukuhh zahj aqxpene qahumtemell qcicu zxa husvn gusenbu biut mit roed ucr ijr yiil pialb.
Ij i jvoqyuqlu, sequ pgew nwijezp ojh kola gyu uyey hjo eluqunq ce cutatm ape aj kha yedaktoipr oqb adgy step ohx caicfiwk yoc anin ggu adepu. Ey u gixz ki upo otnjeikw, bzetu mgu uwzofm yked i azug baviwgq ovu wzus vvi kanc onm atmv jnac akx id ncem mpeb gfe ireg tuxd’v jegifcuz owo. Hea nru Pwusvesbi wukloy iz gse qehyfe lmabucz luf ase jojokiaf.
See forum comments
This content was released on Sep 19 2024. The official support period is 6-months
from this date.
A walkthrough to support model selection in your app.
Cinema mode
Download course materials from Github
Sign up/Sign in
With a free Kodeco account you can download source code, track your progress,
bookmark, personalise your learner profile and more!
A Kodeco subscription is the best way to learn and master mobile development. Learn iOS, Swift, Android, Kotlin, Flutter and Dart development and unlock our massive catalog of 50+ books and 4,000+ videos.