Introduksi Dalam artikel ini, saya ingin berbagi pengalaman saya mengembangkan aplikasi iOS untuk mikroskop robotik dengan pengenalan sel darah berbasis AI - bagaimana itu dibangun, tantangan yang kami hadapi, jebakan yang kami hadapi, dan bagaimana iPhone dapat digunakan sebagai alat laboratorium. Ini bukan lagi aplikasi daftar tugas dengan otentikasi atau aplikasi untuk menerapkan filter pada selfie - fokus di sini adalah pada aliran video dari mata mikroskop, jaringan saraf, interaksi perangkat keras, gerakan slide yang dikendalikan Bluetooth, dan semua ini berjalan langsung di iPhone. A Few Words About the Product Bahkan dengan analis hematologi modern, hingga 15% dari sampel masih memerlukan pemeriksaan manual di bawah mikroskop – terutama ketika anomali ditemukan dalam darah. sistem mikroskopi otomatis memang ada, tetapi mereka biaya sebanyak sayap pesawat, itulah sebabnya sebagian besar laboratorium terus memeriksa sampel darah secara manual. kami melakukannya dengan cara yang berbeda: solusi kami mengubah mikroskop laboratorium standar menjadi pemindai digital dengan pengiriman slide otomatis dan pengambilan gambar – sederhana, terjangkau, dan efisien. Dan tim dalam . @pandangan3 seluler.ai Kit ini terhubung ke mikroskop laboratorium standar, mengubahnya menjadi scanner digital. komponen perangkat keras termasuk: iPhone – kontrol sistem, analisis sel Adaptor lensa – menghubungkan smartphone ke bagian mata mikroskop Tahap robotik – memungkinkan gerakan slide, kontrol fokus, dan beralih antara sampel Di sisi software, sistem ini terdiri dari: Aplikasi Mobile di iPhone Seorang pengendali di atas panggung Situs Web / Cloud Aplikasi mobile melakukan tugas-tugas berikut: memproses aliran gambar dari kamera, mendeteksi, mengklasifikasikan, dan menghitung sel mengirimkannya ke server web bersama dengan artefak analisis lainnya mengontrol pergerakan tahap robotik, melakukan pemindaian pemotongan sesuai dengan algoritma yang telah ditentukan dan juga bertanggung jawab untuk konfigurasi dan inisiasi analisis, penyesuaian parameter kamera, melihat laporan analisis singkat, dan tugas terkait lainnya Portal web dimaksudkan untuk melihat hasil, konfirmasi dokter dari analisis, dan laporan ekspor. Menunjukkan bagaimana semuanya bekerja sama: Video yang A Bit of Context About Hematological Diagnostics Penelitian ini bertujuan untuk mengidentifikasi faktor-faktor yang berpengaruh signifikan terhadap penurunan berat badan dan faktor-faktor yang berpengaruh signifikan terhadap penurunan berat badan ( ) : sumber Ketika melakukan CBC, sampel darah diproses melalui analis hematologi.Jika perangkat menunjukkan penyimpangan dari norma, sampel menjalani pemeriksaan mikroskopis. Proses ini terlihat seperti berikut: seorang teknisi laboratorium menempatkan tetes darah pada slide kaca, menggunakan metode Romanowsky (atau alternatif serupa <)1, memperbaikinya, dan memeriksa campuran yang disiapkan di bawah mikroskop secara visual. Pada tahap ini seseorang dapat: mendeteksi morfologi sel abnormal (seperti neutrofil tak matang, limfosit atipikal, sel-sel ledakan), mengevaluasi kesuburan, ukuran, granularitas, inklusi, dan parameter lainnya, Dan kadang-kadang bahkan membuat diagnosis awal sebelum mendapatkan data PCR2 atau ELISA3. But manual analysis is painful: Hal ini sangat subjektif, Berdasarkan pengalaman teknisi, Manusia cenderung menderita kelelahan dan kesalahan. Dan itu tidak skala dengan baik. Sistem mikroskopi otomatis sangat baik, tetapi mereka mahal (mulai dari $ 60.000 dan di atas), itulah sebabnya lebih dari 90% laboratorium masih mengandalkan metode manual! Kami menetapkan tujuan untuk menciptakan kit otomatisasi mikroskop yang terjangkau (dalam beberapa ratus ribu rubel) yang dapat digunakan secara luas di laboratorium. [1] - Sampel darah pada slide diperlakukan dengan bintik khusus yang dikembangkan oleh Dmitry Leonidovich Romanowsky (1861-1921). bintik ini membuat berbagai komponen sel darah lebih terlihat di bawah mikroskop, karena mereka dicat dengan warna yang berbeda [2] - PCR (Polymerase Chain Reaction) memungkinkan untuk mendeteksi bahkan sejumlah kecil bahan genetik, seperti virus atau bakteri, yang sangat penting untuk mendiagnosis penyakit menular. [3] - ELISA (Enzyme-Linked Immunosorbent Assay) digunakan ketika penting untuk mendeteksi keberadaan protein spesifik What the iPhone Is Capable Of When we talk about “AI on a smartphone,” most people picture things like camera filters, text autocomplete, or chatbots. But modern iPhones are mini-computers with dedicated neural modules capable of performing serious tasks — in our case, real-time blood cell analysis. Let’s look at three key components that make this possible: Graphics Processing Unit (GPU). Digunakan untuk operasi gambar: preprocessing, filtration, correction. misalnya: penilaian blur, koreksi warna, penghapusan artefak, dan tugas spesifik lainnya yang terkait dengan grafis dan analisis gambar. Apple telah mengintegrasikan Neural Engine ke dalam perangkatnya mulai dengan chip A11 (iPhone 8/X), dan dari A12 (iPhone XR dan yang lebih baru), sudah mungkin untuk melakukan lebih dari 5 triliun operasi per detik pada NPU (TOPS). Pada saat penulisan, chip terbaru A17 Pro dan A18/A18 Pro mampu 35 TOPS. Ini digunakan untuk inferensi model untuk deteksi dan klasifikasi sel, penilaian latar belakang sampel, dan tugas serupa, membebaskan CPU/GPU. Central Processing Unit (CPU) bertanggung jawab untuk keseluruhan logika, kontrol, pengolahan konfigurasi, serialisasi / deserialisasi, bekerja dengan API dan sistem file - pada dasarnya semua yang tidak termasuk dalam dua komponen sebelumnya. Kami akan membahas ini menggunakan iPhone XR (A12 Bionic, 2018) sebagai semacam dasar, meskipun itu sudah perangkat yang lebih tua. memproses aliran video 50fps dari kamera mikroskop, melakukan inferensi CoreML secara bersamaan (~ 15ms per frame), simultan menyimpan data ke disk dan sinkronisasi dengan awan, menjaga suhu dalam batas yang dapat diterima (jika throttling dan prioritas tugas dikonfigurasi dengan hati-hati). Namun, perangkat dapat terasa panas dan mulai melambat. misalnya, selama analisis malaria smear, di mana perlu untuk memproses lebih dari 100 sel dalam satu bingkai, termal throttling akan dimulai segera setelah kedua atau ketiga smear - frekuensi CPU akan turun, dan keterlambatan antarmuka dan keterlambatan akan muncul. Screenshot di bawah ini menunjukkan analisis yang berbeda, bukan malaria - tetapi apa yang penting di sini adalah berapa banyak deteksi yang diaktifkan per frame. Secara umum, pada iOS, adalah mungkin untuk memantau kondisi termal sistem melalui Dalam lingkungan produksi kami, kami tidak pernah mencapai level Critical, tetapi level Serious terjadi secara teratur di bawah beban yang sangat tinggi.Untuk pengukuran kinerja, kami menggunakan Xcode Profiler, yang memungkinkan Anda untuk mengukur CPU, GPU, dan beban memori, serta Kondisi Termal: ProsesInfo.processInfo.thermalState Dan berikut adalah tabel nilai thermalState dengan penjelasan dari dokumentasi: 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). Nominasi Tidak ada tindakan koreksi yang diperlukan. — adil Suhu sedikit meningkat. aplikasi dapat secara proaktif memulai langkah-langkah penghematan energi. Analisis foto dihentikan. Serius Aplikasi harus mengurangi penggunaan CPU, GPU, dan operasi I/O. ARKit dan FaceTime menurunkan tingkat frame rate (FPS). pemulihan cadangan iCloud terhenti. Kritikan Aplikasi harus mengurangi penggunaan CPU, GPU, dan I/O dan berhenti menggunakan perangkat perifer (misalnya, kamera). ARKit dan FaceTime secara signifikan menurunkan tingkat frame rate (FPS). Analisis panas dan daya yang lengkap layak artikel terpisah - seperti yang saya sebutkan di awal, saya tidak ingin terlalu mendalam di sini. Secara umum, dapat diandalkan bahwa keadaan sesuai dengan 80–90 ° C pada tingkat chip dan sekitar ~40 ° C pada permukaan. Sumber yang tersedia secara publik Serious iPhone bekerja dengan semua Untuk perangkat lain, ada aliran terpisah, di mana perangkat harus memiliki (Made for iPhone) sertifikasi, beroperasi melalui iAP2 (Apple Accessory Protocol), dll Singkatnya - itu bukan kasus kami. Bluetooth dengan Energi Rendah MFI Hal ini berguna di sini untuk mengingat peran dasar dan struktur protokol: Biasanya, perifer mengirimkan data atau menunggu koneksi (contoh: jam tangan, termometer, monitor detak jantung). Central - perangkat yang terhubung ke peripheral.Ini memulai koneksi, mengirim perintah, dan menerima data. GATT (Generic Attribute Profile) — struktur melalui mana perangkat BLE bertukar data. GATT mendefinisikan apa yang tersedia, apa yang dapat dibaca, ditulis, atau berlangganan untuk pemberitahuan. Layanan dan Karakteristik – data dalam koneksi BLE terstruktur menjadi layanan (kelompok logis) dan karakteristik (parameter spesifik). misalnya, pelacakan kebugaran mungkin memiliki layanan Rate Heart, yang mencakup karakteristik Pengukuran Rate Heart (rate Heart Current). Dalam kasus kami, iPhone mengontrol panggung melalui modul BLE built-in, yang diakui sebagai Peripheral dengan layanan GATT kustom dan melakukan dua tugas: mengirimkan perintah gerakan ke kontroler untuk sumbu XY dan kontrol fokus di sepanjang sumbu Z menerima data dari pengontrol (status, posisi) Berbicara tentang beban termal, koneksi BLE tidak harus berkontribusi secara nyata. menurut data dari Silicon Labs di , mengirimkan perintah atau menerima status pada frekuensi 20 Hz (interval 50 ms): Dokumen Konsumsi Listrik BLE Konsumsi daya normal iPhone XR adalah sekitar 50-100 mW. Penambahan kurang dari 1 mW hampir tidak signifikan, terutama dibandingkan dengan pemrosesan jaringan saraf, penggunaan GPU, dan tampilan. saluran radio aktif hanya sekitar 2% dari waktu, tidur sisa waktu. Kami akan menyelidiki lebih dalam rincian pekerjaan aplikasi dengan modul BLE dan kontroler di bagian “Bekerja dengan Motorized Stage.” Sekarang, beberapa kata tentang kamera. kami menggunakan kamera utama (angle broad) belakang: kami menangkap video H.264 dengan resolusi 1280×720 dan bitrate sekitar 40 Mbps. Semakin tinggi bitrate, semakin banyak data per unit waktu → semakin tinggi kualitas gambar. 40 Mbps cukup tinggi untuk resolusi 1280×720 (HD). H.264 adalah standar pengkodean video internasional, juga dikenal sebagai AVC – Advanced Video Coding atau MPEG-4 Part 10.Ini menghilangkan data yang berlebihan (baik inter-frame dan kompresi intra-frame), mengurangi bitrate dan, akibatnya, ukuran file. (Selain itu, kami juga memiliki tugas merekam video dari seluruh analisis untuk tujuan debugging dan validasi.) Dengan demikian, apa yang kita hasilkan bukan hanya klien UI mobile, tetapi perangkat ujung yang lengkap - yang berarti perangkat yang memproses data secara lokal, tanpa koneksi konstan ke server. Aplikasi Mobile Sekarang bahwa kita telah mencakup bagian hardware, mari kita lihat bagaimana semua ini bekerja pada tingkat aplikasi. Pada input, aplikasi menerima aliran bingkai dari kamera - bidang pandangan mikroskop yang bergerak di atas pemotongan. 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) Seperti yang ditunjukkan dalam diagram di atas, semuanya berputar di sekitar bingkai kamera – deteksi, navigasi di seluruh slide, dan menentukan artefak mana yang harus dikirim ke awan semua tergantung padanya. Ini termasuk koreksi distorsi, penghapusan artefak, penilaian tingkat kabur, dan koreksi cahaya dan warna. 1) Preprocess the frames Misalnya, setiap laboratorium atau mikroskop memiliki kondisi pencahayaan yang spesifik, yang dapat menyebabkan jaringan saraf menjadi rusak.Di sini, perlu untuk melakukan normalisasi keseimbangan putih — dengan mengarahkan medan pandang ke area kosong dan memulai penyesuaian keseimbangan putih kamera. Kami juga memiliki bug di mana sel-sel dikirim ke portal tanpa kalibrasi warna. ini terjadi karena deteksi diluncurkan secara paralel sebelum pengaturan kamera diterapkan. dan Sel tanpa duplikat 2) Detect, classify, count Misalnya, dalam foto di bawah ini, beberapa duplikat ditandai dengan merah dalam salah satu analisis yang lebih tua: sehingga bergerak dengan benar di seluruh slide, transisi dari satu slide ke yang lain, dan, yang paling penting, berfokus tepat pada slide, mendeteksi ketika melampaui batas slide atau mendarat di area kosong. 3) Control the microscope batch sel ke awan (snapshot, metadata) tanpa memblokir pemrosesan analisis berikutnya. 4) Upload proses ini n kali, karena analisis dilakukan dalam batch. 5) Repeat Dan mencapai semua ini tanpa overheating telepon. 6) Aplikasi ini berevolusi dalam mode startup khas: sebuah proof-of-concept dengan cepat digabungkan, kemudian disempurnakan menjadi MVP (Minimum Viable Product) yang cocok untuk pilot di laboratorium dan pitching ke investor. Hasilnya, arsitektur aplikasi akhirnya menjadi hibrida: beberapa layar diimplementasikan menggunakan layar MVP (Model-View-Presenter) berbasis UIKit, sementara fitur dan antarmuka baru ditulis dalam Swift dengan MVVM (Model-View-ViewModel). Kami menggunakan lapisan layanan untuk mengisolasi logika bisnis: , yang , yang Semua ketergantungan disuntikkan baik melalui konstruktor atau melalui kontainer DI. Dalam hal reaktivitas dan rantai asynchronous dengan langganan acara, kami memiliki “jalan evolusi”: awalnya kami mengadopsi RxSwift, kemudian mulai beralih ke Combine, dan dengan munculnya async/await, bagian dari rantai pindah ke sana. Hasilnya adalah semacam “Frankenstein,” tetapi kami kemudian mengisolasi komponen-komponen ini menjadi modul terpisah sehingga di masa depan, kami bisa hanya bertukar komponen untuk tumpukan teknologi baru. Seluruh aplikasi dihubungkan dengan logging terperinci, dan untuk kasus-kasus kompleks (terutama yang terkait dengan pemrosesan frame), kami menggunakan NSLogger: itu memungkinkan tidak hanya logging teks tetapi juga gambar – yang telah menyelamatkan kami lebih dari sekali ketika memecahkan CameraService BluetoothController AnalysisService Seluruh artikel dapat ditulis tentang pengujian: dari mengejek bagian-bagian individu dari analisis dan dengan cepat menetapkan keadaan yang diinginkan melalui (Selain itu, saya memiliki pada topik ini), untuk mensimulasikan langkah-langkah individu dari analisis dan mencakup semua itu dengan integrasi dan tes unit. ProcessInfo Catatan Teknis Kecil Tetapi mari kita kembali ke pemrosesan bingkai dan melihat diagram arsitektur yang sedikit lebih rinci daripada yang di atas: Analysis Controller - pusat pengambilan keputusan: menerima bingkai dan meluncurkan pemrosesan di Pipeline Frame. Layanan Kamera – menerima aliran bingkai mentah dari kamera, mengubahnya, dan melepaskannya ke depan. Microscope Controller - mengendalikan kontroler mikroskop. — 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 – bertanggung jawab untuk menampilkan hasil kepada pengguna secara real time (batasan kotak, statistik, peringatan). Uploader – menyinkronkan artifak analisis (snapshot, sel, config) dengan backend. Mengenai manajer ketergantungan: awalnya kami menggunakan CocoaPods (yang memasuki pada tahun 2024), tetapi kemudian memperkenalkan SPM (Swift Package Manager). Beberapa layanan (Computer Vision, Bluetooth, utilitas) dipindahkan ke modul SPM. Ada juga upaya untuk memisahkan kode ObjC/C++ menjadi xcframeworks individu, tetapi tidak ada cukup waktu untuk mengatur semuanya, jadi kami meninggalkan kode itu di proyek utama. ObjC dibutuhkan sebagai wrapper di sekitar C++ sehingga dapat dipanggil dari Swift. Ini mengakibatkan kelas ObjC++: antarmuka mereka murni ObjC, memungkinkan Swift untuk berinteraksi dengan mereka, sementara implementasi mereka mencampur kode ObjC dan C++. Ini sebelum . mode pemeliharaan dan menghentikan perkembangan aktif Swift mendukung panggilan langsung ke C++ Saya harus menyebutkan bahwa saya jauh dari guru dalam algoritma C++ dan Computer Vision, tetapi tanggung jawab saya termasuk mendapatkan pemahaman dasar dan porting algoritma dan heuristik dari Python, yang di mana sebagian besar R & D kami dilakukan. Tugas penghapusan distorsi Salah satu adaptor menampilkan artefak distorsi optik dalam gambar. sebagai hasilnya, sel yang seharusnya muncul bulat akan terlihat panjang atau membingungkan, terutama ke arah tepi bingkai. untuk mengembalikan geometri kerangka: Cv :Distort (Cv :Distort) dari OpenCV 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 Kemudian, adaptor diganti - langkah ini dihapus. Determining Position on the Slide Menentukan posisi pada slide Untuk menghitung sel dengan tepat, sangat penting untuk mengetahui koordinatnya sebaik mungkin. Di sini, Anda dapat melihat apa yang terjadi ketika penentuan pergeseran salah. Video yang Awalnya, kami mencoba menghitung pergeseran relatif antara dua bingkai dan meringkas pergeseran mutlak. metode klasik pendaftaran gambar melalui korelasi fase berdasarkan Fast Fourier Transform. kami menerapkan ini di OpenCV dan bahkan menggunakan Apple Accelerate. Metode yang didasarkan pada titik kunci lokal dengan deskriptor: SURF, SIFT, ORB, dan lainnya. Flow optik Apple Vision yang dibangun di VNTranslationalImageRegistrationRequest Di satu sisi, kami memiliki beberapa asumsi: Tidak ada scaling atau rotasi yang hadir Optik: pemotongan yang bersih, tidak berantakan, tanpa area kosong Meskipun demikian, masih ada masalah karena perubahan pencahayaan, fokus, kesalahan akumulasi, pergeseran mendadak, kebisingan, atau artefak dalam gambar. Ini menghasilkan tabel perbandingan seperti yang di bawah ini: Berikut adalah terjemahan yang tepat dari tabel dan teks yang disediakan: 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) Deteksi pergeseran global yang sangat cepat, mudah untuk diterapkan Mengumpulkan kesalahan, tidak kuat untuk pergeseran mendadak Memerlukan gambar dengan ukuran yang sama, cocok untuk shifts “murni” Sangat tinggi Digunakan sebagai metode utama SIFT Ketepatan tinggi, skala / rotasi invariant Perlahan, sebelumnya tidak bebas Sangat baik untuk berbagai adegan dengan tekstur dan transformasi yang kompleks lambat Opsi Eksperimen SURF Lebih cepat dari SIFT, juga skala / rotasi invariant Pemilik, tidak selalu tersedia Sedikit lebih cocok untuk real-time tetapi masih “berat” Medium Opsi eksperimental, terutama karena di bawah paten ORB Cepat, bebas, rotasi invariant Sensitif terhadap pencahayaan, tidak kuat untuk perubahan skala Bekerja cukup baik untuk stitching gambar tinggi Sebelum kami pindah ke cloud, kami memiliki versi yang menggunakan ini Optical Flow (Lucas-Kanade) Melacak pergerakan titik antara bingkai, baik untuk video Tidak menangani transformasi global, sensitif terhadap pencahayaan Terbaik dalam video atau urutan dengan gerakan minimal Medium Kami bereksperimen dengan ini untuk digitalisasi (sticking) gambar Optical Flow (Farneback) Peta gerakan padat, berlaku untuk seluruh gambar Perlahan, sensitif terhadap kebisingan Baik untuk menganalisis gerakan lokal dalam bingkai lambat Kami bereksperimen dengan ini untuk digitalisasi (sticking) gambar Apple Vision (VNTranslationalImageRegistrationRequest) API yang sangat nyaman, cepat, teroptimalkan untuk perangkat keras Dalam kasus kami, akurasi yang buruk Cocok untuk kasus penggunaan sederhana di iOS/macOS Sangat tinggi Kami mencoba dan menyerahkannya. Untuk setiap opsi, kami mencoba menemukan konfigurasi optimal dalam hal akurasi dan kinerja untuk membandingkan dengan pergeseran referensi: kami bervariasi resolusi gambar, parameter algoritma, dan pengaturan optik kamera dan mikroskop yang berbeda. Dan inilah bagaimana proses debugging terlihat untuk mendeteksi titik kunci, yang kemudian kami maksudkan untuk menggunakan untuk menghitung pergeseran. Akibatnya, setelah tahap robotik diperkenalkan ke dalam sistem kami, kami mulai menggunakan koordinat dari kontrolernya, yang kemudian kami haluskan menggunakan heuristik CV. Menghitung sel Pada dasarnya, tugas menghitung sel adalah kasus spesifik pelacakan objek & deduplikasi: "untuk mengidentifikasi apa sel itu, menghindari menghitungnya dua kali, menghindari menghitung berlebihan, dan tidak melewatkan sel-sel yang diperlukan - semua dalam fraksi detik, secara real-time melalui kamera dan berjalan pada perangkat keras ponsel." Kami menggunakan jaringan saraf untuk mendeteksi objek dalam bingkai (Bounding Box, BB). Setiap BB memiliki skor kepercayaan sendiri (keyakinan jaringan) dan kelas sel. Untuk melawan kebisingan latar belakang dan positif palsu, kami menerapkan filtrasi cepat: Misalnya, di sini di sebelah kiri, highlight merah menandai eritrosit – tetapi jaringan saraf awalnya mengklasifikasikannya sebagai leukosit. Namun, filter warna datang ke permainan kemudian, dan itu difilter keluar. Puncak merah menandai eritrosit yang dibuang oleh filter. 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. Secara umum, perlu untuk mempertahankan pelacakan objek antara bingkai, terutama jika kita melihat kembali area yang sebelumnya dipindai dari pemotongan. digitalisasi Salah satu tugasnya adalah mendigitalkan pemindaian, pada dasarnya menciptakan pemindai histologi berbasis perangkat lunak untuk pemindaian. foto di bawah ini menunjukkan bagaimana itu terlihat: panah menunjukkan gerakan yang digunakan untuk membangun pemindaian, di mana kita menangkap bingkai dan mengikatnya menjadi satu gambar besar. Pergerakan medan pandang di seluruh lubang Di sini lagi, penentuan posisi yang akurat sangat penting, diikuti dengan pengelasan yang lancar. Perlu dicatat bahwa pada awalnya kami tidak memiliki panggung bermotor dan bergantung pada navigasi manual. Bayangkan mencoba mengumpulkan mosaik dari ratusan fragmen. Berikut adalah apa yang terlihat eksperimen pertama: melompat bidang pandang, kawat, perbedaan pencahayaan, ruang kosong. Di sebelah kiri - peta dengan kecerahan dan paparan yang tidak merata, di mana "seams" terlihat di persimpangan bingkai. di sebelah kanan - gambar jaringan yang tidak merata dengan celah. Atau, misalnya, pengguna memindai pemotongan, bergerak dengan cepat di atasnya — beberapa area berakhir membingungkan (Motion Blur). kami mencoba membuang bingkai tersebut jika mereka tidak memenuhi ambang kebingungan yang dapat diterima atau jika pergeseran tidak dapat dihitung untuk mereka. Kerangka yang membingungkan meliputi pemindaian selama gerakan tiba-tiba Secara bertahap, kami maju menuju pendekatan berikut: Ada banyak iterasi: mengikat pada perangkat, menggunakan metode yang berbeda, pada resolusi frame yang berbeda dan konfigurasi kamera. akhirnya kami sampai pada solusi di mana pemindaian dikumpulkan di awan, dan perangkat seluler mengirimkan bingkai dengan keseimbangan putih terkalibrasi dan paparan. Di bawah ini adalah contoh bagaimana kami mengukur kecepatan pemrosesan komponen pemrosesan bingkai individu tergantung pada konfigurasi: pengaturan kamera, algoritma yang dipilih, dan parameter mereka. (ada beberapa campuran dengan Rusia di sini, tetapi saya berharap gagasan keseluruhan jelas) Bekerja dengan tahap motoris Sekarang — rincian tentang koneksi antara iPhone dan panggung motorisasi: bagaimana kita berkomunikasi melalui BLE, perintah apa yang kita kirim, dan bagaimana kita mengkonfigurasi autofokus. perangkat seluler terhubung melalui Bluetooth ke kontroler di panggung dan bergerak di sepanjang koordinat XYZ. Lebih tepatnya, itu adalah panggung itu sendiri yang bergerak, tetapi dari perspektif gambar yang dilihat melalui lensa objektif oleh perangkat seluler, terlihat seperti gerakan terjadi di seluruh slide. Kami juga mempekerjakan biro desain dan membangun versi kami sendiri seharga sekitar $ 800. Hal ini ternyata jauh lebih murah karena salah satu insinyur memperhatikan pada waktunya bahwa konstruksi microscope motorisasi tampaknya mirip dengan printer 3D. Kinematika XYZ yang sama, mesin stepper yang sama, rel yang sama. Hasilnya, kami menggunakan komponen yang diproduksi secara massal dan murah, tetapi disesuaikan dengan persyaratan spesifik kami. Secara struktural, tahap ini terdiri dari tiga bagian: platform XY itu sendiri, blok fokus (Z-Axis, di mana motor terpasang pada tombol fokus halus), dan unit kontrol - controller yang menerima perintah melalui Bluetooth dan mengirimkannya ke stepper. Komponen dari tahap mikroskop motorisasi Untuk gerakan tahap manual, kami menggunakan joystick virtual (menampilkan tombol gerakan kepada pengguna di layar) — digunakan dalam skenario kalibrasi dan pengaturan sistem. Namun, selama analisis, kontrol selalu otomatis. Communication Protocol Protokol Komunikasi Sebagai antarmuka Bluetooth, kita menggunakan Modul BLE beroperasi secara default dalam mode terminal teks, yang berarti permintaan dan tanggapan hanya melewati ke belakang dan ke depan. KPK 08 Kontroler itu sendiri menjalankan firmware berdasarkan GRBL, menggunakan Skenario utama di sini adalah: Kode G memulai koneksi (telepon harus mendeteksi bahwa panggung terhubung) memindai slide (menggerakkan panggung di sepanjang semua sumbu) Menghentikan / melanjutkan pemindaian menangani situasi luar biasa: mencapai switch limit, menghentikan gerakan, komando buffer overflow. GRBL memiliki set perintah sendiri yang dimulai dengan Contohnya adalah simbol: $ $H - homing atau kalibrasi dan mencari hardware nol melalui limit switch. Biasanya dilakukan pada awal startup dan kemudian jika diperlukan jika kesalahan akumulasi yang signifikan terjadi selama gerakan. — 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 ? — Pertanyaan status GRBL. Mengembalikan string dengan parameter kunci mesin. Contoh tanggapan: <Alarm FhMPos:0.000,0.000,0.000 FFS:0,0 FPn:XYZ FPWCO:-5.300,0.000,-2.062> Kami tertarik dengan dua parameter pertama: Ini bisa menjadi “Idle,” “Running,” atau “Alarm.” MPos - posisi saat ini dari panggung. Singkatnya: GRBL adalah firmware open-source dari dunia CNC, sempurna untuk mengontrol sistem tiga sumbu (XY+Z) melalui perintah G-code sederhana. kami memilih modul BLE yang paling sederhana - HC-08 - untuk menghindari berurusan dengan MFi dan iAP. sangat penting bagi kami bahwa iPhone dapat secara dapat diandalkan mengirimkan perintah dan menerima pembaruan status dengan latensi minimal, tanpa secara signifikan meningkatkan biaya kit. Tugas Autofokus Sebelumnya, saya menyebutkan fokus. proses ini dilakukan secara berkala selama pemindaian smear karena sampel diterapkan tidak merata, yang terutama terlihat pada magnifikasi tinggi. Grafik di bawah ini menunjukkan hubungan antara tingkat fokus dan waktu. kita memulai dengan gambar kabur, secara bertahap memindahkan panggung ke posisi fokus optimal. pemindaian Saya sudah menyebutkan digitalisasi pemindaian di sisi seluler.Hal ini patut dicatat di sini bahwa digitalisasi dapat dilakukan pada pembesaran yang berbeda: dari 5x hingga 40x. Pada tingkat zoom yang lebih rendah, lebih mudah untuk menavigasi dan mendeteksi batas-batas pemotongan, sementara pada pembesaran yang lebih tinggi, rincian seluler menjadi terlihat. Dalam kasus kami, kami bekerja dengan dua tingkat: 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 Agar pengguna tidak perlu beralih objektif setiap kali, kami melakukan deteksi batas dan memindai semua slide dalam batch secara bersamaan, sambil mengunggah batch sebelumnya ke awan secara paralel. Kesimpulan Proyek ini menunjukkan bahwa bahkan smartphone dari 2018 dapat menangani tugas yang sebelumnya membutuhkan desktop, server, dan mikroskop otomatis yang mahal. Tentu saja, masih banyak yang tersisa di belakang adegan: dari pengumpulan dataset hingga pengaturan eksposur yang disesuaikan. Jika Anda tertarik, saya akan senang untuk mencakup itu secara terpisah. Jangan ragu untuk mengajukan pertanyaan, berbagi pengalaman Anda sendiri, dan mungkin bersama-sama kami akan membuat follow-up atau menyelam lebih dalam ke aspek spesifik. Terima kasih telah membaca! Mari kita terhubung! Ansar E-mail untuk: ansaril3g@gmail.com Pengarang: Ansar Zhalyal Telegram: @celly_ai Amin Email: amin.benarieb@gmail.com Penulis: Amin Benarieb Telegram: @aminbenarieb