Įvadas Šiame straipsnyje norėčiau pasidalinti savo patirtimi kuriant „iOS“ programą robotiniam mikroskopui su AI pagrįstu kraujo ląstelių atpažinimu - kaip jis buvo pastatytas, iššūkius, su kuriais turėjome susidurti, spąstus ir kaip „iPhone“ gali būti naudojamas kaip laboratorinis įrankis. Tai dar ne dar viena programinė įranga su autentifikavimu ar programa, skirta filtravimui į "selfie" - čia dėmesys skiriamas vaizdo srautui iš mikroskopo akių, neuroninių tinklų, aparatūros sąveikos, "Bluetooth" valdomų skaidrių judėjimo ir visa tai tiesiogiai veikia "iPhone". A Few Words About the Product Net ir naudojant šiuolaikinius hematologijos analizatorius, iki 15% mėginių vis dar reikalauja rankinio patikrinimo mikroskopu, ypač kai kraujyje randama anomalijų.Automatinės mikroskopijos sistemos egzistuoja, tačiau jos kainuoja tiek pat, kiek lėktuvo sparnas, todėl dauguma laboratorijų ir toliau tikrina kraujo tepinius rankiniu būdu. Be to, komanda į . Antanas3 Kėdainiai.lt Komplektas jungiasi su standartiniu laboratoriniu mikroskopu, paverčiant jį skaitmeniniu skaitytuvu. „iPhone“ – sistemos valdymas, ląstelių analizė Objektyvo adapteris - prijungti išmanųjį telefoną prie mikroskopo akies Robotikos etapas – leidžia slidinėti judesius, kontroliuoti fokusavimą ir perjungti pavyzdžius Iš programinės įrangos pusės sistema susideda iš: Mobilioji aplikacija „iPhone“ Stebėtojas scenoje Interneto svetainė / debesys Mobilioji programa atlieka šias užduotis: apdoroja vaizdo srautą iš fotoaparato, aptinka, klasifikuoja ir skaičiuoja ląsteles siunčia juos į žiniatinklio serverį kartu su kitais analizės artefaktais kontroliuoja robotų etapo judėjimą, atlieka tepimo skenavimą pagal iš anksto apibrėžtą algoritmą ir taip pat yra atsakingas už konfigūracijos ir analizės inicijavimą, fotoaparato parametrų koregavimą, trumpą analizės ataskaitą ir kitas susijusias užduotis Interneto portalas skirtas rezultatams peržiūrėti, gydytojo patvirtinimui atlikti analizę ir ataskaitų eksportui. Paaiškinkite, kaip viskas veikia kartu: Vaizdo A Bit of Context About Hematological Diagnostics Pagrindinė analizė, kurią atliekame, yra kraujo tepimo mikroskopija. Tai yra pilno kraujo skaičiavimo (CBC) sudedamoji dalis, viena iš labiausiai paplitusių ir pagrindinių medicininių testų. Daugelis žmonių tai patyrė ir matė panašias lenteles savo rezultatuose ( ) iš : Šaltinis Atliekant CBC, kraujo mėginiai apdorojami per hematologijos analizatorių. Jei prietaisas rodo nukrypimą nuo normos, mėginys tiriamas mikroskopu. Šis procesas atrodo taip: laboratorijos technikas įdeda kraujo lašą į stiklinį sluoksnį, Pažeidžia jį naudojant Romanovskio metodą (ar panašias alternatyvas)1 , nustato jį, ir vizualiai išnagrinėja paruoštą tepinėlį mikroskopu. Būtent šiame etape žmogus gali: aptikti nenormalias ląstelių morfologijas (pvz., nesubrendusius neutrofilus, netipinius limfocitus, sprogimo ląsteles), įvertinti brandumą, dydį, granuliarumą, įtrauktis ir kitus parametrus, Kartais netgi atlikti preliminarią diagnozę prieš gaunant PCR2 arba ELISA3 duomenis. But manual analysis is painful: Tai labai subjektyvu, Tai priklauso nuo technikos patirties. Žmonės yra linkę į nuovargį ir klaidas, Ir tai nėra gerai skalavimas. Automatinės mikroskopijos sistemos yra puikios, tačiau jos yra brangios (nuo 60 000 JAV dolerių ir daugiau), todėl daugiau nei 90% laboratorijų vis dar remiasi rankiniu metodu! Mes nustatėme sau tikslą sukurti prieinamą mikroskopo automatizavimo rinkinį (per kelis šimtus tūkstančių rublių), kuris galėtų būti plačiai diegiamas laboratorijose. [1] - kraujo mėginys ant slankstelio yra apdorojamas specialia Dmitrijus Leonidovichas Romanovskis (1861–1921). Šis dėmė daro įvairių kraujo ląstelių komponentų matomiau po mikroskopu, nes jie yra dažomi skirtingomis spalvomis [2] - PCR (polimerazės grandininė reakcija) leidžia aptikti net labai nedidelius genetinės medžiagos kiekius, tokius kaip virusai ar bakterijos, kurie yra labai svarbūs diagnozuojant infekcines ligas. [3] - ELISA (Enzyme-Linked Immunosorbent Assay) naudojamas, kai svarbu nustatyti specifinių baltymų buvimą What the iPhone Is Capable Of Kai mes kalbame apie „AI išmaniajame telefone“, dauguma žmonių įsivaizduoja tokius dalykus kaip fotoaparato filtrai, teksto automatinis užpildymas ar pokalbių robotai.Bet šiuolaikiniai „iPhone“ yra mini kompiuteriai su specialiais nervų moduliais, galinčiais atlikti rimtas užduotis – mūsų atveju realaus laiko kraujo ląstelių analizė. Grafikos apdorojimo vienetas (GPU). Naudojamas vaizdo operacijoms: išankstiniam apdorojimui, filtravimui, korekcijai. Pavyzdžiui: drumstumo vertinimui, spalvų korekcijai, artefaktų šalinimui ir kitoms konkrečioms užduotims, susijusioms su grafika ir vaizdo analize. Neural Processing Unit (NPU / Neural Engine). „Apple“ integruoja „Neural Engine“ į savo įrenginius, pradedant nuo A11 lusto (iPhone 8 / X), o nuo A12 (iPhone XR ir naujesnių), jau galima atlikti daugiau nei 5 trilijonus operacijų per sekundę NPU (TOPS). Rašymo metu naujausi A17 Pro ir A18 / A18 Pro lustai sugeba 35 TOPS. Tai naudojama modelių išvadoms ląstelių aptikimui ir klasifikavimui, mėginio foniniam vertinimui ir panašioms užduotims, išlaisvinant CPU / GPU. Atsakingas už bendrą logiką, valdymą, konfigūracijos apdorojimą, serializavimą / deserializavimą, darbą su API ir failų sistema - iš esmės viskas, kas nepatenka į ankstesnius du komponentus. Mes tai aptarsime naudodami „iPhone XR“ (A12 Bionic, 2018) kaip bazinę liniją, nors tai jau yra senesnis įrenginys. apdoroti 50 fps vaizdo srautą iš mikroskopo kameros, tuo pačiu metu atlikti CoreML išvadą (~ 15 ms už kadrą), vienu metu išsaugoti duomenis į diską ir sinchronizuoti su debesimi, išlaikyti temperatūrą per priimtinas ribas (jei gręžimas ir užduočių prioritetas yra kruopščiai konfigūruojami). Nepaisant to, prietaisas gali pastebimai sušilti ir pradėti lėtėti. Pavyzdžiui, analizuojant maliarijos tepinėlius, kur būtina apdoroti daugiau nei 100 ląstelių vienoje sistemoje, šiluminis gręžimas prasidėtų jau antroje ar trečioje tepinėlyje – CPU dažnis sumažėtų, atsirastų sąsajos vėlavimų ir sulėtėjimo. Žemiau esantis ekrano vaizdas rodo kitokią analizę, o ne maliariją, tačiau čia svarbu, kiek aptikimų sukelia kiekvienas kadras. Apskritai, "iOS" galima stebėti sistemos terminę būseną per Mūsų gamybos aplinkoje mes niekada nepasiekėme kritinio lygio, tačiau rimtas lygis reguliariai pasireiškia esant labai dideliam apkrovimui.Siekiant matuoti našumą, mes naudojome „Xcode Profiler“, kuris leidžia matuoti procesorių, GPU ir atminties apkrovą, taip pat terminę būseną: ProcessInfo.processInfo.thermalState Paslaugos Ir čia yra termostatinių verčių lentelė su paaiškinimais iš dokumentacijos: Thermal State Recommendations System Actions Nominal No corrective action required. — Fair Temperature is slightly elevated. Applications may proactively begin power-saving measures. Photo analysis is paused. Serious System performance is reduced. Applications should decrease usage of the CPU, GPU, and I/O operations. ARKit and FaceTime lower the frame rate (FPS). iCloud backup restoration is paused. Critical Applications should reduce CPU, GPU, and I/O usage and stop using peripheral devices (e.g., the camera). ARKit and FaceTime significantly lower the frame rate (FPS). Nominacijos Nereikia jokių taisomųjų veiksmų. — sąžiningai Aplikacijos gali aktyviai pradėti energijos taupymo priemones. Nuotraukų analizė sustabdyta. rimtai Programos turėtų sumažinti CPU, GPU ir I/O operacijų naudojimą. ARKit ir FaceTime sumažina kadro dažnį (FPS). „iCloud“ atsarginės kopijos atkūrimas yra sustabdytas. Kritikai Programos turėtų sumažinti CPU, GPU ir I/O naudojimą ir nustoti naudoti periferinius įrenginius (pvz., fotoaparatą). ARKit ir FaceTime žymiai sumažina kadro dažnį (FPS). Pilna šilumos ir energijos analizė nusipelno atskiro straipsnio - kaip minėjau pradžioje, aš nenoriu eiti per giliai čia. Iš esmės galima daryti prielaidą, kad būklė atitinka 80–90 ° C lustų lygyje ir apie ~40 ° C paviršiuje. Viešai prieinami šaltiniai Serious „iPhone“ veikia su bet kuriuo kitiems įrenginiams yra atskiras srautas, kuriame prietaisas turi turėti (Made for iPhone) sertifikavimas, veikimas per iAP2 (Apple Accessory Protocol), ir tt Trumpai tariant – tai ne mūsų atveju. „Bluetooth“ mažos energijos MFI Čia naudinga prisiminti pagrindinius protokolo vaidmenis ir struktūrą: Paprastai periferinis siunčia duomenis arba laukia ryšio (pavyzdžiai: laikrodis, termometras, širdies ritmo monitorius). Centrinis - įrenginys, kuris prisijungia prie periferijos. Jis inicijuoja ryšį, siunčia komandas ir gauna duomenis. GATT (Generic Attribute Profile) – struktūra, per kurią BLE įrenginiai keičiasi duomenimis. Paslaugos ir charakteristikos – BLE ryšio duomenys yra suskirstyti į paslaugas (logines grupes) ir charakteristikas (specifinius parametrus). Mūsų atveju „iPhone“ valdo sceną per savo įmontuotą BLE modulį, kuris pripažįstamas kaip periferinis su pritaikyta GATT paslauga ir atlieka dvi užduotis: judėjimo komandų perdavimas valdikliui XY ašims ir fokusavimo kontrolė išilgai Z ašies Duomenų gavimas iš duomenų valdytojo (statuso, padėties) Kalbant apie šilumos apkrovą, BLE ryšys neturėtų pastebimai prisidėti. , siunčiant komandas arba gaunant būseną 20 Hz dažniu (50 ms intervalu): BLE energijos suvartojimo ataskaita Tipiškas „iPhone XR“ nenaudojamos galios suvartojimas yra apie 50–100 mW. Mažiau nei 1 mW papildymas yra beveik nereikšmingas, ypač palyginti su neuroninių tinklų apdorojimu, GPU naudojimu ir ekranu. Radijo kanalas yra aktyvus tik apie 2% laiko, o likusį laiką miega. Mes giliau įžvelgsime programos darbą su BLE moduliu ir valdikliu skyriuje „Darbas su motorizuotu etapu“. Mes naudojame pagrindinį (plačiaanglio užpakalinį) fotoaparatą: mes užfiksuojame H.264 vaizdo įrašą 1280×720 skiriamoji geba ir maždaug 40 Mbps bitų dažniu. Kuo didesnis bitų greitis, tuo daugiau duomenų per laiko vienetą → tuo didesnė vaizdo kokybė. 40 Mbps yra gana didelė 1280×720 (HD) skiriamoji geba. H.264 yra tarptautinis vaizdo kodavimo standartas, taip pat žinomas kaip AVC - Išplėstinis vaizdo kodavimas arba MPEG-4 dalis 10. Taigi, tai, ką mes galiausiai sukursime, yra ne tik mobilusis UI klientas, bet ir visavertis krašto įrenginys – tai yra įrenginys, kuris apdoroja duomenis vietoje, be nuolatinio ryšio su serveriu. Mobilioji aplikacija Dabar, kai apžvelgėme aparatūros dalį, pažiūrėkime, kaip visa tai veikia taikomosios programos lygiu. Įvesties metu programa gauna kadrų srautą iš fotoaparato - mikroskopo matymo laukas, judantis per teptuką. At the , the application must: output detect leukocytes (and other cells depending on the analysis) display detected objects with bounding boxes (BBoxes) perform cell counting send data in the background to the backend (images of cells, the scan, individual frames) Kaip parodyta aukščiau pateiktoje diagramoje, viskas sukasi aplink fotoaparato rėmą – aptikimas, navigacija per diapazoną ir nustatymas, kurie artefaktai turi būti siunčiami į debesį, viskas priklauso nuo jo. Tai apima iškraipymų korekciją, artefaktų pašalinimą, drumstumo lygio įvertinimą ir šviesos bei spalvų korekciją. 1) Preprocess the frames Pavyzdžiui, kiekvienoje laboratorijoje ar mikroskope yra tam tikrų apšvietimo sąlygų, dėl kurių gali sutrikti nervų tinklas.Čia būtina atlikti baltos spalvos balanso normalizavimą – nukreipiant matymo lauką į tuščią plotą ir inicijuojant fotoaparato baltos spalvos balanso koregavimą. Mes taip pat turėjome klaidą, kurioje ląstelės buvo siunčiamos į portalą be spalvų kalibravimo. ir Ląstelės be dublikatų 2) Detect, classify, count Pavyzdžiui, žemiau esančioje nuotraukoje kai kurie dublikatai yra pažymėti raudonai vienoje iš senesnių analizių: taip, kad jis teisingai juda per skaidrę, pereina iš vienos skaidrės į kitą ir, svarbiausia, tiksliai sutelkia dėmesį į skaidrę, aptikdamas, kai jis peržengia skaidrės ribas arba nusileidžia tuščiose vietose. 3) Control the microscope ląstelių partijos į debesį (snapshots, metaduomenys), netrukdant kitos analizės apdorojimui. 4) Upload Šis procesas n kartus, nes analizės atliekamos partijose. 5) Repeat Ir visa tai pasiekti be telefono perkaitimo. 6) Programa vystėsi tipišku startuolio būdu: koncepcijos įrodymas buvo greitai sumontuotas, o po to rafinuotas į MVP (Minimum Viable Product), tinkamą bandymams laboratorijose ir investuotojams.Kaip rezultatas, programos architektūra tapo hibridine: kai kurie ekranai įgyvendinami naudojant UIKit pagrįstus MVP (Model-View-Presenter) ekranus, o naujos funkcijos ir sąsajos yra parašytos Swift su MVVM (Model-View-ViewModel). Mes naudojame paslaugų sluoksnį, kad izoliuotume verslo logiką: , , Visos priklausomybės įšvirkščiamos per konstruktorius arba per DI konteinerius. Kalbant apie reaktyvumą ir asynchroniškas grandines su įvykių prenumeratais, mes turėjome „evoliucinį kelią“: iš pradžių priėmėme „RxSwift“, tada pradėjome pereiti prie „Combine“, o su async/await atsiradimu dalis grandinių persikėlė ten. Rezultatas buvo tam tikras „Frankenstein“, tačiau vėliau mes izoliuodavome šiuos komponentus į atskirus modulius, kad ateityje galėtume paprasčiausiai pakeisti vieną komponentą naujai technologijai. CameraService BluetoothController AnalysisService Apie testavimą būtų galima parašyti visą straipsnį: nuo atskirų analizės dalių išjuokimo iki greito norimų būsenų nustatymo. (Beje, aš turiu apie šią temą), imituoti atskirus analizės etapus ir apimti visus integravimo ir vieneto bandymus. ProcessInfo Maža techninė pastaba Tačiau grįžkime prie rėmo apdorojimo ir pažvelkime į šiek tiek išsamesnę architektūrinę diagramą nei aukščiau: Analizės valdytojas – sprendimų priėmimo centras: gauna rėmus ir pradeda apdorojimą „Frame Pipeline“. Fotoaparato aptarnavimas - gauna žalią kadro srautą iš fotoaparato, transformuoja jį ir perduoda jį į priekį. Mikroskopo valdytojas – valdo mikroskopo valdytoją. — a chain consisting of several stages: Frame Pipeline — correction, filtering Preprocessing — object/cell detection Detection — counting unique objects Counting — final filtering and preparation for visualization Postprocessing UI – atsakingas už rezultatų rodymą vartotojui realiu laiku (ribojimo laukeliai, statistika, įspėjimai). Uploader — sinchronizuoja analizės artefaktus (snapshots, ląsteles, konfig) su užpakalinės dalies. Dėl priklausomybės valdytojo: mes iš pradžių naudojome CocoaPods (kuris įėjo į Kai kurios paslaugos (Computer Vision, Bluetooth, utilities) buvo perkeltos į SPM modulius. Taip pat buvo bandoma atskirti ObjC / C++ kodą į atskirus xcframeworks, bet nebuvo pakankamai laiko, kad būtų galima viską išdėstyti, todėl mes palikome šį kodą pagrindiniame projekte. ObjC reikėjo kaip apvynioti aplink C++, kad jį būtų galima skambinti iš Swift. Tai lėmė ObjC++ klases: jų sąsajos yra grynai ObjC, leidžiančios Swift bendrauti su jais, o jų įgyvendinimai sumaišyti ObjC ir C++ kodą. Tai buvo prieš tai . maintenance mode and stopped active development „Swift“ palaiko tiesioginius skambučius į C++ Reikėtų paminėti, kad aš toli gražu nesu C++ ir "Computer Vision" algoritmų guru, tačiau mano atsakomybė apėmė pagrindinio supratimo įgijimą ir algoritmų ir heuristikos perkėlimą iš "Python", kur vyko dauguma mūsų mokslinių tyrimų ir plėtros. Užduotys Iškraipymo pašalinimas Vienas iš adapterių paveikslėlyje parodė optinio iškraipymo artefaktą. Kaip rezultatas, ląstelė, kuri turėtų atrodyti apvali, atrodytų pailginta arba iškraipyta, ypač link rėmo kraštų. Norėdami atkurti rėmo geometriją: „OpenCV“ CV::undistort() We calibrate the camera — capturing images of a chessboard/grid with known geometry. OpenCV computes: the camera matrix K (projection parameters) distortion coefficients D = [k1, k2, p1, p2, k3, …] We apply cv::undistort() or cv::initUndistortRectifyMap() + remap(): this computes where each point “should have landed” in reality the image is “straightened” back to correct geometry Vėliau adapteris buvo pakeistas - šis žingsnis buvo pašalintas. Determining Position on the Slide Pozicijos nustatymas slide Norint tiksliai suskaičiuoti ląsteles, labai svarbu kuo tiksliau žinoti jų koordinates. Čia galite pamatyti, kas atsitinka, kai pakeitimo apibrėžimas yra neteisingas. Vaizdo Iš pradžių bandėme apskaičiuoti santykinį pokytį tarp dviejų kadrų ir apibendrinti absoliutų pokytį. Klasikinis vaizdų registravimo metodas per fazinę koreliaciją, pagrįstą Greituoju Fourierio transformavimu. metodai, pagrįsti vietiniais raktiniais taškais su aprašymais: SURF, SIFT, ORB ir kt. Optinis srautas „Apple Vision“ įmontuotas VNTranslationalImageRegistrationRequest Iš vienos pusės, mes turėjome keletą prielaidų: Nebuvo jokių skalavimo ar rotacijų optinis: švarus, nepažeistas tepinėlis, be tuščių vietų Nepaisant to, vis dar buvo problemų dėl apšvietimo pokyčių, fokusavimo, sukauptų klaidų, staigių pokyčių, triukšmo ar artefaktų vaizde. Tai lėmė palyginimo lentelę, tokią kaip žemiau: Štai jūsų tikslus pateiktos lentelės ir teksto vertimas: Method Advantages Disadvantages Usage Notes Speed Comment FFT + cross-correlation (OpenCV, Accelerate) Very fast, global shift detection, simple to implement Accumulates error, not robust to abrupt shifts Requires images of identical size, suitable for “pure” shifts Very high Used as the primary method SIFT High accuracy, scale/rotation invariant Slow, used to be non-free Excellent for diverse scenes with texture and complex transformations Slow Experimental option SURF Faster than SIFT, also scale/rotation invariant Proprietary, not always available Slightly better suited for real-time but still “heavy” Medium Experimental option, especially since under patent ORB Fast, free, rotation invariant Sensitive to lighting, not robust to scale changes Works fairly well for image stitching High Before we moved stitching to the cloud, we had versions using this Optical Flow (Lucas-Kanade) Tracks movement of points between frames, good for video Doesn’t handle global transformations, sensitive to lighting Best in videos or sequences with minimal movement Medium We experimented with this for digitization (stitching) of images Optical Flow (Farneback) Dense motion map, applicable to the whole image Slow, sensitive to noise Good for analyzing local motions within a frame Slow We experimented with this for digitization (stitching) of images Apple Vision (VNTranslationalImageRegistrationRequest) Very convenient API, fast, hardware-optimized In our case, accuracy was poor Perfect for simple use cases on iOS/macOS Very high We tried it and abandoned it FFT + cross-correlation (OpenCV, Accelerate) Labai greitas, visuotinis pokyčių aptikimas, paprastas įgyvendinimas Kaupiasi klaidų, o ne tvirtas staigiems pokyčiams Reikalingi vienodo dydžio vaizdai, tinkami „grynoms“ pamainoms Labai aukštas Naudojamas kaip pagrindinis metodas SIFT Aukštas tikslumas, skalė / sukimosi invariantas Lėtas, anksčiau nebuvo laisvas Puikiai tinka įvairioms scenoms su tekstūra ir sudėtingomis transformacijomis Lėtai Eksperimentinis pasirinkimas SURF Greitesnis nei SIFT, taip pat skalės / sukimosi invariantas Savininkas, ne visada prieinamas Šiek tiek geriau tinka realiam laikui, bet vis dar „sunkus“ Vidutinis Eksperimentinė galimybė, ypač kai pagal patentą ORB Greitas, laisvas, besikeičiantis sukimasis Jautrus apšvietimui, ne tvirtas skalės pokyčiams Veikia gana gerai vaizdo siuvinėjimui aukštai Prieš persikeliant į debesį, mes turėjome versijas, naudojančias šį Optical Flow (Lucas-Kanade) Stebi taškų judėjimą tarp kadrų, geras vaizdo įrašams Nesugeba susidoroti su pasaulinėmis transformacijomis, jautrūs apšvietimui Geriausias vaizdo įrašų ar sekų su minimaliu judesiu Vidutinis Mes eksperimentuojame su tuo, kad skaitmenizuotume (nuvalytume) vaizdus Optical Flow (Farneback) tankus judesio žemėlapis, taikomas visam vaizdui Lėtas, jautrus triukšmui Geras vietinių judesių analizei rėmuose Lėtai Mes eksperimentuojame su tuo, kad skaitmenizuotume (nuvalytume) vaizdus Apple Vision (VNTranslationalImageRegistrationRequest) Labai patogus API, greitas, aparatūros optimizavimas Mūsų atveju tikslumas buvo prastas Puikiai tinka paprastiems naudojimo atvejams „iOS“ / „macOS“ Labai aukštas Išbandėme ir atsisakėme Kiekvienai galimybei bandėme rasti optimalią konfigūraciją, kiek tai susiję su tikslumu ir našumu, palyginti su atskaitos pasikeitimu: mes keitėme vaizdo rezoliucijas, algoritmų parametrus ir skirtingus fotoaparato ir mikroskopo optikos nustatymus. Štai kaip atrodė atkūrimo procesas nustatant raktinius taškus, kuriuos vėliau ketinome naudoti skaičiuojant poslinkį. Kaip rezultatas, kai robotų etapas buvo įvestas į mūsų sistemą, mes pradėjome naudoti jo valdiklio koordinates, kurias tada patobulinome naudojant CV heuristiką. Ląstelės skaičiavimas Iš esmės ląstelių skaičiavimo užduotis yra konkretus objektų sekimo ir deduplikavimo atvejis: "nustatyti, kas yra ląstelė, išvengti jos skaičiavimo du kartus, išvengti perkainojimo ir nepraleisti būtinų ląstelių - visa tai sekundės dalimis, realiu laiku per kamerą ir veikiant telefono aparatūrai". Objektų aptikimas. Mes naudojame neuroninius tinklus, kad aptiktume objektus rėmuose (Bounding Box, BB). Kiekvienas BB turi savo pasitikėjimo balas (tinklo pasitikėjimas) ir ląstelių klasę. Siekiant kovoti su fono triukšmu ir klaidingais teigiamais, taikome greitą filtravimą: Pavyzdžiui, čia kairėje pusėje raudonas akcentas pažymi eritrocitą, tačiau neuroninis tinklas iš pradžių jį klasifikuoja kaip leukocitą. Tačiau spalvų filtrai atėjo į žaidimą vėliau, ir jis buvo filtruojamas. Raudonas akcentas žymi eritrocitą, kurį išmeta filtrai. geometric: we discard objects whose sizes fall outside typical cell dimensions. we also discard cells that partially extend beyond the frame edges — those are of no interest to us Counting unique objects. Some BBs may be counted more than once for the same cell, so it’s important to detect such cases and count them only once. At one point, we were inspired by a guide from MTurk that describes two options: Option 1: Compare the distances between BB centers — if a new BB is too close to one already recorded, it’s likely “the same” cell. Option 2: Calculate IoU (intersection over union, Jaccard Index) — the metric for overlap between rectangles. If a new BB overlaps significantly with an existing one, we count it only once. Apskritai, būtina išlaikyti objektų sekimą tarp kadrų, ypač jei mes pakartotinai peržiūrime anksčiau nuskaitytas tepinėlio sritis. skaitmeninimas Viena iš užduočių buvo skaitmeninti nuskaitymą, iš esmės sukuriant programinės įrangos pagrindu histologinį skaitytuvą tepimui. Žemiau pateiktoje nuotraukoje parodyta, kaip jis atrodo: strėlės rodo judėjimą, naudojamą nuskaitymui sukurti, kur mes užfiksuojame rėmus ir susiuvame juos į vieną didelį vaizdą. Vaizdo lauko judėjimas per teptuką Čia dar kartą buvo labai svarbu tiksliai nustatyti padėtį, po to sekė sklandus siuvimas. Verta paminėti, kad iš pradžių neturėjome motorizuoto etapo ir pasitikėjome rankine navigacija. Įsivaizduokite, kad bandote surinkti mozaiką iš šimtų fragmentų. Štai kaip atrodė pirmieji eksperimentai: šokinėja regėjimo laukai, siūlės, apšvietimo skirtumai, tuščios erdvės. Kairėje pusėje - žemėlapis su nevienodu ryškumu ir ekspozicija, kur "švytuoklės" yra matomos rėmo sankirtose. Arba, pavyzdžiui, vartotojas nuskaito tepinėlį, greitai per jį perkelia - kai kurios sritys galiausiai tampa drumstos (judėjimo blyksnis). Mes bandėme išmesti tokius rėmus, jei jie neatitiko priimtino blyksnio slenksčio arba jei jų negalima apskaičiuoti. Neryškūs rėmai, uždengti skenavimu staigaus judėjimo metu Palaipsniui mes pereiname prie tokio požiūrio: Buvo daug iteracijų: siuvimas ant prietaiso, naudojant skirtingus metodus, skirtingomis kadrų rezoliucijomis ir fotoaparato konfigūracijomis. galiausiai pasiekėme sprendimą, kuriame nuskaitymas surenkamas debesyje, o mobilusis įrenginys siunčia rėmus su kalibruota balto balanso ir ekspozicija. Žemiau pateikiamas pavyzdys, kaip mes matavome atskirų rėmo apdorojimo komponentų apdorojimo greitį, priklausomai nuo konfigūracijos: fotoaparato nustatymai, pasirinkti algoritmai ir jų parametrai. (čia yra tam tikras sumaišymas su rusų kalba, bet tikiuosi, kad bendra idėja yra aiški) Darbas su motorizuotu etapu Dabar – detalės apie ryšį tarp „iPhone“ ir motorizuoto etapo: kaip mes bendraujame per „BLE“, kokius komandas siunčiame ir kaip mes sukonfigūruojame autofokusą.Mobilusis įrenginys per „Bluetooth“ prijungiamas prie scenos valdiklio ir juda palei XYZ koordinates. Mūsų etapas taip pat yra sukurtas pagal užsakymą – ne todėl, kad „norime viską padaryti patys“, bet todėl, kad komerciniai sprendimai prasideda nuo 10 000 JAV dolerių, ir tai nėra pokštas. Mes samdėme dizaino biurą ir pastatėme savo versiją maždaug už 800 JAV dolerių. Tai pasirodė gerokai pigiau, nes vienas iš inžinierių laiku pastebėjo, kad motorizuoto mikroskopo etapo statyba įtartinai primena 3D spausdintuvą. Tas pats XYZ kinematika, tie patys žingsnio varikliai, tie patys geležinkeliai. Kaip rezultatas, mes naudojame masiškai pagamintus ir nebrangius komponentus, bet pritaikytus prie konkrečių mūsų reikalavimų. Struktūriškai etapas susideda iš trijų dalių: pa Motorizuoto mikroskopo etapo komponentai Rankinio etapo judėjimui mes naudojame virtualųjį jutiklį (kuris ekrane rodo vartotojui judėjimo mygtukus) – jis naudojamas kalibravimo ir sistemos nustatymo scenarijuose. tačiau analizės metu kontrolė visada yra automatizuota. Communication Protocol Komunikacijos protokolas Kaip „Bluetooth“ sąsaja, mes naudojame BLE modulis veikia pagal numatytuosius nustatymus teksto terminalo režimu, o tai reiškia, kad užklausos ir atsakymai paprasčiausiai perduodami atgal ir atgal. Konfigūracijos ir sistemos užduotims (pakeitus pavadinimą, ryšio greitį) naudojami AT komandos. VK-08 Pats valdiklis veikia firmware remiantis GRBL, naudojant Pagrindiniai scenarijai čia: G kodas ryšio inicijavimas (telefonas turi aptikti, kad etapas yra prijungtas) nuskaityti skaidrę (perkelti sceną palei visas ašis) Skenavimo sustabdymas / atnaujinimas išskirtinių situacijų tvarkymas: pasiekiant ribinį jungiklį, pertraukiant judėjimą, komandos buferio perteklius. GRBL turi savo komandų rinkinį, kuris prasideda nuo Pavyzdžiui, kaip simbolis $ $H - homing arba kalibravimas ir ieškant aparatūros nulio per ribinius jungiklius. Paprastai atliekamas pradiniame paleidime ir vėliau, jei reikia, jei judėjimo metu atsiranda didelė sukaupta klaida. — Jogging mode, which simulates joystick control. The command itself should describe relative movement along all axes. An example of such a command: $J=<command> $J=G21G91Y1F10 — units in millimeters G21 — relative positioning G91 — movement along the Y-axis by 1 millimeter Y1 — movement speed. F10 ? — GRBL būsenos užklausa. Grąžina eilutę su pagrindiniais mašinos parametrais. Pavyzdinis atsakymas: <Alarm̧MPos:0.000,0.000,0.000 ÁthaFS:0,0 ÁthaPn:XYZ ÁthaWCO:-5.300,0.000,-2.062> Mums rūpi pirmieji du parametrai: Jis gali būti „Idle“, „Running“ arba „Alarm“. MPos – dabartinė etapo padėtis. Trumpai tariant: GRBL yra atviro kodo programinė įranga iš CNC pasaulio, puikiai tinka kontroliuoti trijų ašies sistemas (XY+Z) per paprastus G-kodo komandas. Mes pasirinkome paprasčiausią įmanomą BLE modulį – HC-08 – kad išvengtume susidūrimo su MFi ir iAP. Mums buvo labai svarbu, kad „iPhone“ galėtų patikimai siųsti komandas ir gauti būsenos atnaujinimus su minimaliu vėlavimu, žymiai nepadidinant rinkinio kainos. Užduotys Autofokusas Anksčiau minėjau fokusavimą. Šis procesas periodiškai atliekamas tepimo skenavimo metu, nes mėginys yra taikomas nevienodai, o tai ypač pastebima esant dideliam padidėjimui. Būtina stebėti drumstumo lygį ir laiku koreguoti dėmesį. Žemiau esančioje diagramoje rodomas ryšys tarp fokusavimo lygio ir laiko.Mes pradedame nuo drumsto vaizdo, palaipsniui perkeliant sceną į optimalią fokusavimo padėtį. Skenavimas Verta paminėti, kad skaitmeninimas gali būti atliekamas įvairiais padidinimais: nuo 5x iki 40x. Esant mažesniam priartinimo lygiui, lengviau naršyti ir aptikti tepinėlio ribas, o esant didesniam padidinimui matomos ląstelių detalės. Mūsų atveju dirbame dviem lygmenimis: Boundary detection at 4x magnification. The algorithm scans the entire slide, determines the smear area, and generates a boundary map for the next stage. The output is something like a heat map. For example, from the low-magnification image on the left, we obtain a matrix that we then use to plan the steps for navigating at higher magnification: Scanning the smear at 20x magnification (or another level). The algorithm scans and saves images for subsequent assembly into a single map. Scanning proceeds line by line, within the boundaries of the smear. A photo is captured for stitching when: the image is in focus the controller is in an idle state, i.e., not moving Kad vartotojas nebūtų priverstas kiekvieną kartą keisti objektyvų, mes vienu metu atliekame sienų aptikimą ir skenavimą visose diapazonuose partijoje, o ankstesnę partiją įkelia į debesį lygiagrečiai. Išvada Šis projektas parodė, kad net išmanusis telefonas nuo 2018 m. Gali atlikti užduotis, kurioms anksčiau reikėjo stalinių kompiuterių, serverių ir brangių automatizuotų mikroskopų. Žinoma, vis dar lieka daug užkulisių: nuo duomenų rinkimo iki išsamiai sureguliuojamų ekspozicijos nustatymų. Jei jus domina, aš norėčiau tai padengti atskirai. Leiskite mums prisijungti! Antanas Elektroninis paštas: ansaril3g@gmail.com Žymė: Ansar Zhalyal Žymė: @celly_ai Aminas Elektroninis paštas: amin.benarieb@gmail.com Žymė: Amin Benarieb Žymė: @aminbenarieb