Introducción En este artículo, quiero compartir mi experiencia desarrollando una aplicación para iOS para un microscopio robótico con reconocimiento de células sanguíneas basado en la IA - cómo se construyó, los desafíos que tuvimos que abordar, las trampas que encontramos y cómo se puede usar el iPhone como una herramienta de laboratorio. Esta no es otra aplicación de lista de tareas con autenticación o una aplicación para aplicar filtros a las selfies - el foco aquí es en una transmisión de vídeo desde el espejo del microscopio, las redes neuronales, la interacción del hardware, el movimiento de diapositivas controlado por Bluetooth, y todo esto que se ejecuta directamente en el iPhone. A Few Words About the Product Incluso con los modernos analizadores de hematología, hasta un 15% de las muestras todavía requieren una revisión manual bajo un microscopio, especialmente cuando se encuentran anomalías en la sangre.Sistemas de microscopía automática existen, pero cuestan tanto como una ala de avión, por lo que la mayoría de los laboratorios siguen examinando las manchas de sangre manualmente.Nosotros lo hacemos de manera diferente: nuestra solución convierte un microscopio de laboratorio estándar en un escáner digital con alimentación automática de diapositivas y captura de imágenes – sencillo, asequible y eficiente. Y el equipo en . Anarquismo3 Célula.es El kit se conecta a un microscopio de laboratorio estándar, transformándolo en un escáner digital. iPhone – control del sistema, análisis celular Adaptador de lente – conectando el smartphone al ojo del microscopio Fase robótica: permite movimientos de deslizamiento, control de enfoque y intercambio entre muestras Desde el lado del software, el sistema consiste en: Aplicaciones móviles en el iPhone Un controlador en el escenario Página web / Nube La aplicación móvil realiza las siguientes tareas: procesa el flujo de imagen de la cámara, detecta, clasifica y cuenta las células los envía al servidor web junto con otros artefactos de análisis controla el movimiento de la etapa robótica, realizando escaneo de lubricación según un algoritmo predefinido y también es responsable de la configuración y iniciación de análisis, ajustes de parámetros de la cámara, visualización de un breve informe de análisis y otras tareas relacionadas El portal web está destinado a la visualización de los resultados, la confirmación del médico del análisis y la exportación de informes. Mostrar cómo funciona todo esto: El video A Bit of Context About Hematological Diagnostics El análisis primario que realizamos es la microscopía de la mancha de sangre. Es un componente del Conto completo de sangre (CBC), uno de los exámenes médicos más comunes y fundamentales. ) de : fuente Cuando se realiza una CBC, se procesan muestras de sangre a través de un analizador de hematología. Si el dispositivo indica una desviación de la norma, la muestra se somete a un examen microscópico. Este proceso se ve como sigue: un técnico de laboratorio coloca una gota de sangre en un diafragma de vidrio, la mancha usando el método Romanowsky (o alternativas similares<)1 , la fija, y examina el lubricante preparado bajo el microscopio visualmente. Es precisamente en esta etapa que uno puede: detectar morfologías celulares anormales (como neutrófilos inmaduros, linfocitos atípicos, células de explosión), evaluar la madurez, tamaño, granularidad, inclusiones y otros parámetros, y a veces incluso hacer un diagnóstico preliminar antes de obtener datos de PCR2 o ELISA3. But manual analysis is painful: Es muy subjetiva, Depende de la experiencia del técnico. Los seres humanos son propensos a la fatiga y los errores, Y no se escale bien. Los sistemas de microscopía automática son excelentes, pero son caros (a partir de $ 60,000 y más), por lo que más del 90% de los laboratorios todavía confían en el método manual! Nos fijamos el objetivo de crear un kit de automatización de microscopio asequible (dentro de varios cientos de miles de rublos) que podría ser ampliamente desplegado en los laboratorios. [1] - Una muestra de sangre en el diafragma es tratada con una mancha especial desarrollada por Dmitry Leonidovich Romanowsky (1861-1921). Esta mancha hace que varios componentes de las células de la sangre sean más visibles bajo el microscopio, ya que están manchados en diferentes colores [2] - PCR (Reacción en cadena de la polimerasa) permite detectar incluso cantidades muy pequeñas de material genético, como virus o bacterias, lo que es crucial para diagnosticar enfermedades infecciosas. El ELISA (Enzyme-Linked Immunosorbent Assay) se utiliza cuando es importante detectar la presencia de proteínas específicas What the iPhone Is Capable Of Cuando hablamos de “IA en un teléfono inteligente”, la mayoría de la gente imagina cosas como filtros de la cámara, autocomplete de texto o chatbots.Pero los iPhones modernos son mini-ordenadores con módulos neuronales dedicados capaces de realizar tareas serias -en nuestro caso, análisis de células sanguíneas en tiempo real. Unidad de Procesamiento Gráfico (GPU). Usada para operaciones de imagen: preprocesamiento, filtración, corrección. Por ejemplo: evaluación de desvanecimiento, corrección de color, eliminación de artefactos y otras tareas específicas relacionadas con los gráficos y el análisis de imagen. Unidad de Procesamiento Neural (NPU / Neural Engine). Apple ha estado integrando el Neural Engine en sus dispositivos comenzando con el chip A11 (iPhone 8 / X), y desde el A12 (iPhone XR y más reciente), ya es posible realizar más de 5 billones de operaciones por segundo en el NPU (TOPS). En el momento de escribir, los últimos chips A17 Pro y A18 / A18 Pro son capaces de 35 TOPS. Esto se utiliza para la inferencia de modelos para la detección y clasificación de células, evaluación de fondo de la muestra, y tareas similares, liberando la CPU / GPU. Unidad Central de Procesamiento (CPU) Responsable de la lógica general, control, procesamiento de configuración, serialización/deserialización, trabajo con las APIs y el sistema de archivos - esencialmente todo lo que no cae bajo los dos componentes anteriores. Vamos a discutir esto usando el iPhone XR (A12 Bionic, 2018) como una especie de base, aunque ya es un dispositivo más antiguo. procesar un flujo de vídeo de 50fps desde la cámara del microscopio, realizar simultáneamente la inferencia CoreML (~15 ms por cuadro), guardar los datos simultáneamente en el disco y sincronizar con la nube, Mantenga la temperatura dentro de límites aceptables (si se configuran cuidadosamente la priorización de las tareas). Sin embargo, el dispositivo podría calentarse notablemente y comenzar a ralentizarse.Por ejemplo, durante el análisis de las manchas de malaria, donde es necesario procesar más de 100 células en un único marco, el calentamiento térmico comenzaría tan pronto como el segundo o tercer lubricante - la frecuencia de la CPU disminuiría, y aparecerían retrasos de interfaz y ralentizaciones. La captura de pantalla de abajo muestra un análisis diferente, no la malaria, pero lo importante aquí es cuántas detecciones se desencadenan por cuadro. En general, en iOS, es posible monitorear el estado térmico del sistema a través En nuestro entorno de producción, nunca hemos alcanzado el nivel Critical, pero el nivel Serio ocurre regularmente bajo una carga muy alta. Para las mediciones de rendimiento, usamos Xcode Profiler, que le permite medir la CPU, la GPU y la carga de memoria, así como el estado térmico: ProcesoInfo.procesoInfo.thermalState Y aquí está una tabla de valores de termostato con explicaciones de la documentación: 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). Nominalidad No se requieren acciones correctivas. — justo Las aplicaciones pueden iniciar proactivamente medidas de ahorro de energía. El análisis fotográfico se detiene. En serio Las aplicaciones deben disminuir el uso de la CPU, GPU y operaciones de I/O. ARKit y FaceTime bajan la tasa de imágenes (FPS). la recuperación de copias de seguridad de iCloud se detiene. Crítico Las aplicaciones deben reducir el uso de CPU, GPU y I/O y dejar de usar dispositivos periféricos (por ejemplo, la cámara). ARKit y FaceTime disminuyen significativamente la tasa de imágenes (FPS). Un análisis térmico y de potencia completo merece un artículo separado - como mencioné al principio, no quiero ir demasiado profundamente aquí. Se puede presumir que la estado corresponde a 80–90 °C en el nivel del chip y alrededor de ~40 °C en la superficie. Fuentes de acceso público Serious El iPhone funciona con cualquier para otros dispositivos, hay un flujo separado, donde el dispositivo debe tener una (Made for iPhone) certificación, operar a través del iAP2 (Apple Accessory Protocol), etc. En pocas palabras, no es nuestro caso. Bluetooth de baja energía MFI Aquí es útil recordar las funciones básicas y la estructura del protocolo: Usualmente, el periférico envía datos o espera una conexión (ejemplos: un reloj, un termómetro, un monitor de la frecuencia cardíaca). Central — un dispositivo que se conecta al periférico. Inicia la conexión, envía comandos y recibe datos. GATT (Generic Attribute Profile) — la estructura a través de la cual los dispositivos BLE intercambian datos. GATT define qué «campos» están disponibles, qué se puede leer, escribir o suscribir para notificaciones. Servicios y Características: los datos dentro de una conexión BLE están estructurados en servicios (grupos lógicos) y características (parámetros específicos). En nuestro caso, el iPhone controla el escenario a través de su módulo BLE integrado, que es reconocido como un periférico con un servicio GATT personalizado y realiza dos tareas: Enviar comandos de movimiento al controlador para los ejes XY y el control de enfoque a lo largo del eje Z recibir datos del controlador (estado, posición) Hablando de la carga térmica, la conexión BLE no debe contribuir notablemente. Según los datos de Silicon Labs en su , transmitir comandos o recibir estado a una frecuencia de 20 Hz (un intervalo de 50 ms): Documento sobre el consumo de energía BLE El consumo típico de energía inutilizable del iPhone XR es de alrededor de 50-100 mW. Una adición de menos de 1 mW es casi insignificante, especialmente en comparación con el procesamiento de red neural, el uso de GPU y la pantalla. El canal de radio es activo sólo alrededor del 2% del tiempo, durmiendo el resto del tiempo. Sumergiremos más profundamente en los detalles del trabajo de la aplicación con el módulo BLE y el controlador en la sección “Trabajar con la etapa motorizada”. Usamos la cámara trasera primaria (ancho de ángulo): capturamos vídeo H.264 a una resolución de 1280×720 y una velocidad de bits de aproximadamente 40 Mbps. Cuanto mayor sea la tasa de bits, más datos por unidad de tiempo → mayor es la calidad de la imagen. 40 Mbps es bastante alto para una resolución de 1280×720 (HD). H.264 es un estándar internacional de codificación de vídeo, también conocido como AVC - Advanced Video Coding o MPEG-4 Parte 10.Elimina los datos redundantes (tanto la compresión inter-frame como la compresión intra-frame), reduciendo la tasa de bits y, por lo tanto, el tamaño del archivo. (Por cierto, también tuvimos la tarea de grabar vídeo de todo el análisis para fines de debug y validación.) Por lo tanto, lo que terminamos no es simplemente un cliente de interfaz de usuario móvil, sino un dispositivo de borde completo, es decir, un dispositivo que procesa datos localmente, sin conexión constante a un servidor. Aplicación móvil Ahora que hemos cubierto la parte de hardware, echemos un vistazo a cómo funciona todo esto a nivel de aplicación. En la entrada, la aplicación recibe un flujo de marcos de la cámara - el campo de visión del microscopio que se mueve a través del esmalte. 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) Como se muestra en el diagrama anterior, todo gira alrededor del marco de la cámara: detección, navegación a través de la diapositiva y determinación de qué artefactos deben enviarse a la nube, todo depende de ello. Esto incluye la corrección de la distorsión, la eliminación de artefactos, la evaluación del nivel de brillo y la corrección de la luz y el color. 1) Preprocess the frames Por ejemplo, cada laboratorio o microscopio tiene condiciones de iluminación específicas, que pueden causar el mal funcionamiento de la red neural. Aquí, es necesario realizar la normalización del equilibrio de blanco - dirigiendo el campo de visión a una zona vacía e iniciando el ajuste del equilibrio de blanco de la cámara. También tuvimos un error donde las células fueron enviadas al portal sin calibración de color. Esto ocurrió porque la detección se lanzó en paralelo antes de que se aplicaran las configuraciones de la cámara. y Células sin duplicados 2) Detect, classify, count Por ejemplo, en la foto de abajo, algunos duplicados están marcados en rojo en uno de los análisis más antiguos: para que se mueva correctamente a través de la diafragma, transiciones de una diafragma a otra, y, lo más importante, se centra precisamente en la diafragma, detectando cuando va más allá de los límites de la diafragma o aterriza en áreas vacías. 3) Control the microscope lotes de células a la nube (snapshots, metadatos) sin bloquear el procesamiento del siguiente análisis. 4) Upload Este proceso es n veces, ya que los análisis se realizan en lotes. 5) Repeat Y lograr todo esto sin sobrecalentar el teléfono. 6) La aplicación evolucionó en la forma típica de las startups: una prueba de concepto se reunió rápidamente, luego se refinó en un MVP (Mínimo Producto Viable) adecuado para pilotar en laboratorios y lanzar a los inversores. Como resultado, la arquitectura de la aplicación terminó siendo híbrida: algunas pantallas se implementan utilizando pantallas MVP (Model-View-Presenter) basadas en UIKit, mientras que las nuevas características e interfaces se escriben en Swift con MVVM (Model-View-ViewModel). Utilizamos una capa de servicio para aislar la lógica empresarial: , de , de Todas las dependencias se inyectan a través de constructores o a través de contenedores DI. En términos de reactividad y cadenas asíncronas con suscripciones de eventos, tuvimos un “camino evolutivo”: inicialmente adoptamos RxSwift, luego comenzamos a pasar a Combine, y con el advenimiento de async/await, parte de las cadenas se desplazó allí. El resultado fue una especie de “Frankenstein”, pero más tarde aislamos estos componentes en módulos separados para que en el futuro podamos simplemente intercambiar un componente para una nueva pila de tecnología. CameraService BluetoothController AnalysisService Se podría escribir un artículo entero sobre las pruebas: desde burlarse de las partes individuales del análisis y establecer rápidamente los estados deseados a través de (Por cierto, tengo una sobre este tema), para simular las etapas individuales del análisis y cubrirlo todo con las pruebas de integración y unidad. ProcessInfo Pequeña nota técnica Pero volvamos al procesamiento de marcos y echemos un vistazo a un diagrama arquitectónico ligeramente más detallado que el anterior: Controlador de análisis - el centro de toma de decisiones: recibe marcos y inicia el procesamiento en la Pipeline de marcos. Servicio de cámara: recibe el flujo de cuadro crudo de la cámara, lo transforma y lo transmite hacia adelante. Controlador de microscopio - controla el controlador del microscopio. — 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 - responsable de mostrar resultados al usuario en tiempo real (cuadros de límite, estadísticas, alertas). Uploader: sincroniza los artefactos de análisis (snapshots, celdas, config) con el backend. En cuanto al gerente de adicción: inicialmente usamos CocoaPods (que entró en a partir de 2024), pero más tarde introdujo SPM (Swift Package Manager). Algunos servicios (Computer Vision, Bluetooth, utilidades) se trasladaron a módulos SPM. También hubo intentos de separar el código ObjC/C++ en xcframeworks individuales, pero no hubo tiempo suficiente para ordenarlo todo, por lo que dejamos ese código en el proyecto principal. ObjC era necesario como envoltorio alrededor de C++ para que se pudiera llamar desde Swift. Esto resultó en clases ObjC++: sus interfaces son puramente ObjC, permitiendo a Swift interactuar con ellos, mientras que sus implementaciones mezclaron el código ObjC y C++. Esto fue antes . Modo de mantenimiento y desarrollo activo detenido Swift admite llamadas directas a C++ Debería mencionar que estoy lejos de ser un guru en los algoritmos de C++ y Computer Vision, pero mis responsabilidades incluyeron obtener una comprensión básica y portar algoritmos y heurísticas de Python, que fue donde se llevó a cabo la mayor parte de nuestra I+D. Describiré algunos de ellos a continuación. Tareas Distortion Removal Uno de los adaptadores mostró un artefacto de distorsión óptica en la imagen. Como resultado, una celda que debería aparecer redonda parecería alargada o distorsionada, especialmente hacia los bordes del marco. Para restaurar la geometría del marco: El cv de OpenCV es::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 Más tarde, el adaptador fue reemplazado - este paso fue eliminado. Determining Position on the Slide Determinación de la posición en el slide Para contar con precisión las células, es crucial conocer sus coordenadas lo más exactamente posible. Aquí, puedes ver lo que sucede cuando la determinación del cambio es incorrecta. El video Inicialmente, tratamos de calcular el desplazamiento relativo entre dos marcos y sumar el desplazamiento absoluto. the classic image registration method via phase correlation based on the Fast Fourier Transform. We implemented this in OpenCV and even used . Apple Accelerate métodos basados en puntos clave locales con descriptores: SURF, SIFT, ORB y otros. Flujo óptico Integración VN de Apple VisionTranslationalImageRegistrationRequest Por un lado, teníamos algunas suposiciones: No hubo escalas ni rotaciones ópticamente: un lubricante limpio, sin borrar, sin espacios vacíos A pesar de esto, todavía había problemas debido a cambios en la iluminación, enfoque, error acumulado, cambios bruscos, ruido o artefactos en la imagen. This resulted in a comparison table like the one below: Aquí está su traducción exacta de la tabla y el texto proporcionados: 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) Detección de cambios muy rápida, global, fácil de implementar Se acumula error, no robusto para cambios bruscos Requiere imágenes de tamaño idéntico, adecuadas para cambios "puros" muy alto Se utiliza como método principal SIFT Alta precisión, escala / rotación invariante Lento, antes no libre Excelente para diversas escenas con texturas y transformaciones complejas lento Opciones experimentales SURF Más rápido que SIFT, también invariante de escala / rotación Propietario, no siempre disponible Un poco mejor adaptado para tiempo real pero aún “pesado” Medium Opción experimental, especialmente desde que bajo la patente ORB Rápido, libre, rotación invariante Sensible a la iluminación, no robusto a los cambios de escala Funciona bastante bien para el ajuste de imagen alta Antes de que nos mudáramos a la nube, teníamos versiones que usaban este Optical Flow (Lucas-Kanade) Tracks movimiento de puntos entre cuadros, bueno para vídeo No maneja transformaciones globales, sensible a la iluminación Mejor en videos o secuencias con movimiento mínimo Medium Hemos experimentado con esto para la digitalización (pintura) de imágenes Optical Flow (Farneback) Mapa de movimiento denso, aplicable a toda la imagen Lento, sensible al ruido Buen para analizar los movimientos locales dentro de un marco lento Hemos experimentado con esto para la digitalización (pintura) de imágenes Apple Vision (VNTranslationalImageRegistrationRequest) API muy conveniente, rápido, optimizado por hardware En nuestro caso, la precisión era pobre. Perfecto para casos de uso sencillo en iOS/macOS muy alto We tried it and abandoned it Para cada opción, tratamos de encontrar la configuración óptima en términos de precisión y rendimiento para comparar con un cambio de referencia: variamos las resoluciones de la imagen, los parámetros de algoritmo y las diferentes configuraciones ópticas de la cámara y el microscopio. Y aquí está lo que parecía el proceso de depuración para la detección de puntos clave, que más tarde pretendíamos usar para calcular el cambio. Como resultado, una vez que se introdujo la etapa robótica en nuestro sistema, comenzamos a utilizar las coordenadas de su controlador, que luego refinamos utilizando la heurística CV. Célula contadora En esencia, la tarea del recuento de células es un caso específico de seguimiento de objetos y deduplicación: “identificar lo que es la célula, evitar contarla dos veces, evitar la sobrecuenta, y no perder las células necesarias, todo en fracciones de segundo, en tiempo real a través de la cámara y funcionando en el hardware del teléfono”. Detección de objetos. Utilizamos redes neuronales para detectar objetos en el marco (Bounding Box, BB). Cada BB tiene su propia puntuación de confianza (confianza de la red) y clase de células. Para combatir el ruido de fondo y falsos positivos, aplicamos la filtración rápida: base de color: por ejemplo, por intensidad o rango de colores. por ejemplo, aquí a la izquierda, un destacamento rojo marca un eritrocito - pero la red neural inicialmente lo clasificó como un leucocito. Sin embargo, los filtros de color entraron en juego después, y se filtró. Un marcador rojo marca un eritrocito descartado por los filtros. 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. En general, es necesario mantener el seguimiento de objetos entre cuadros, especialmente si revisitamos áreas previamente escaneadas del esmalte. La digitalización Una de las tareas era digitalizar la exploración, creando esencialmente un escáner de histología basado en software para el esmalte.La foto de abajo muestra cómo se ve: las flechas indican el movimiento utilizado para construir la exploración, donde capturamos marcos y los plegamos en una sola imagen grande. Movimiento del campo de visión a través del esmalte Aquí, otra vez, la determinación precisa de la posición era críticamente importante, seguida de una costura suave. Vale la pena señalar que inicialmente no teníamos un escenario motorizado y dependíamos de la navegación manual. Imaginemos tratar de montar un mosaico de cientos de fragmentos. Aquí está lo que parecían los primeros experimentos: saltos de campos de visión, costuras, diferencias en la iluminación, espacios vacíos. A la izquierda - un mapa con brillo y exposición desigual, donde las "sinas" son visibles en las junciones del marco. O, por ejemplo, un usuario escanea el esmalte, moviéndose rápidamente sobre él —algunas áreas terminan borradas (Motion Blur).Hemos intentado descartar tales marcos si no cumplen el umbral de borrador aceptable o si el cambio no se podía calcular para ellos. Frames borrosos sobrepuestos al escáner durante el movimiento abrupto Poco a poco, avanzamos hacia el siguiente enfoque: Hubo muchas iteraciones: ajuste en el dispositivo, utilizando diferentes métodos, en diferentes resoluciones de cuadros y configuraciones de la cámara. Finalmente llegamos a la solución donde la escaneo se monta en la nube, y el dispositivo móvil envía cuadros con equilibrio de blanco calibrado y exposición. A continuación se muestra un ejemplo de cómo medimos la velocidad de procesamiento de los componentes individuales de procesamiento de marcos dependiendo de la configuración: configuración de la cámara, algoritmos seleccionados y sus parámetros. (hay algo de mezcla con el ruso aquí, pero espero que la idea general sea clara) Trabajando con la etapa motorizada Ahora — los detalles sobre la conexión entre el iPhone y el escenario motorizado: cómo nos comunicamos a través de BLE, qué comandos enviamos, y cómo configuramos el autofocus.El dispositivo móvil se conecta a través de Bluetooth al controlador en el escenario y se mueve a lo largo de las coordenadas XYZ. Más precisamente, es el escenario mismo el que se mueve, pero desde la perspectiva de la imagen vista a través de la lente de objetivo por el dispositivo móvil, parece que el movimiento ocurre a través del diapositivo. Nuestro escenario también es personalizado —no porque “queramos hacer todo nosotros mismos”, sino porque las soluciones comerciales comienzan a $10,000, y eso no es una broma. Hicimos una oficina de diseño y construimos nuestra propia versión por alrededor de $800. Resultó ser significativamente más barato porque uno de los ingenieros notó en el tiempo que la construcción de un microscopio motorizado se asemeja sospechosamente a una impresora 3D. La misma cinemática XYZ, los mismos motores de paso, los mismos carriles. Como resultado, estamos utilizando componentes producidos en masa y baratos, pero adaptados a nuestros requisitos específicos. Estructuralmente, el escenario consta de tres partes: la propia plataforma XY, el bloque de enfoque (Z-Axis, donde el motor está unido al botón de enfoque fino Componentes de la etapa del microscopio motorizado Para el movimiento manual de la etapa, utilizamos un joystick virtual (mostrando botones de movimiento al usuario en la pantalla) – se utiliza en escenarios de calibración y configuración del sistema. Sin embargo, durante el análisis, el control siempre es automatizado. Communication Protocol Protocolo de Comunicación Como la interfaz Bluetooth, utilizamos el El módulo BLE funciona por defecto en modo terminal de texto, lo que significa que las solicitudes y respuestas simplemente pasan atrás y adelante. Para tareas de configuración y sistema (cambio de nombre, velocidad de comunicación), se utilizan comandos AT. hc08 El propio controlador ejecuta firmware basado en GRBL, utilizando Los principales escenarios aquí son: Código G inicialización de la conexión (el teléfono debe detectar que el escenario está conectado) escaneando la diapositiva (moviendo el escenario a lo largo de todos los ejes) Detener o reanudar el escaneo manejo de situaciones excepcionales: alcanzar el interruptor de límite, interrumpir el movimiento, sobrecarga de buffer de comandos. Hay un documento separado que cubre el manejo de errores. GRBL tiene su propio conjunto de comandos que comienzan con el El símbolo, por ejemplo: $ $H - homing o calibración y búsqueda del hardware cero a través de interruptores de límite. Usualmente realizado en la inicialización y más tarde según sea necesario si se produce un error acumulado significativo durante el movimiento. — 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 ? — Pregunta de estado GRBL. Devuelve una cadena con los parámetros clave de la máquina. Respuesta de ejemplo: <Alarm FhMPos:0.000,0.000,0.000 FFS:0,0 FPn:XYZ FPWCO:-5.300,0.000,-2.062> Nos interesan los dos primeros parámetros: Puede ser “Idle”, “Running” o “Alarm”. MPos - la posición actual de la etapa. En resumen: GRBL es un firmware de código abierto del mundo CNC, perfecto para controlar sistemas de tres ejes (XY+Z) a través de comandos simples de código G. Elegimos el módulo BLE más simple posible - el HC-08 - para evitar tratar con MFi y iAP. Fue crucial para nosotros que el iPhone pudiera enviar comandos de forma fiable y recibir actualizaciones de estado con una latencia mínima, sin aumentar significativamente el coste del kit. Tareas Autofocus Anteriormente, mencioné el enfoque.Este proceso se realiza periódicamente durante la exploración del enfoque porque la muestra se aplica de manera desigual, lo que es especialmente notable en las amplificaciones altas.Es necesario monitorear el nivel de borrador y ajustar el enfoque en el tiempo. El gráfico a continuación muestra la relación entre el nivel de enfoque y el tiempo. Comenzamos con una imagen borrosa, moviendo gradualmente el escenario a la posición de enfoque óptima. Escáner Vale la pena señalar aquí que la digitalización se puede realizar a diferentes magnificaciones: de 5x a 40x. A niveles de zoom más bajos, es más fácil navegar y detectar los límites del lubricante, mientras que a amplificaciones más altas, los detalles celulares se vuelven visibles. En nuestro caso, trabajamos con dos niveles: 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 Para que el usuario no tenga que cambiar de objetivos cada vez, realizamos la detección de límites y la escaneo de todas las diapositivas del lote simultáneamente, mientras cargamos el lote anterior a la nube en paralelo. Conclusión Este proyecto demostró que incluso un teléfono inteligente de 2018 puede manejar tareas que anteriormente requerían escritorios, servidores y microscopios automatizados caros. Por supuesto, todavía queda mucho detrás de las escenas: desde la recopilación de conjuntos de datos hasta ajustar las configuraciones de exposición. Si usted está interesado, me gustaría cubrirlo por separado. ¡siéntate libre de hacer preguntas, compartir tus propias experiencias, y tal vez juntos crearemos un seguimiento o sumergirnos más profundamente en aspectos específicos. Gracias por leer! ¡Vamos a conectar! Ansar Correo electrónico: ansaril3g@gmail.com Archivo de la etiqueta: Ansar Zhalyal Telegrama de correo electrónico: @celly_ai Amin Correo electrónico: amin.benarieb@gmail.com Archivo de la etiqueta: Amin Benarieb Telegrama: @aminbenarieb