Как я могу получить соответствующие параметры, классы и методы из сценария. groovy из Java? - PullRequest
0 голосов
/ 18 января 2020

У меня есть плагин Java для более крупного приложения, которое выполняет анализ изображений с использованием библиотеки ImageJ. Один клиент, который переключился на наше программное обеспечение, использовал Groovy сценарии для определения определенных c правил и параметров, когда они выполняют анализ в ImageJ. Они хотели бы, чтобы наше программное обеспечение могло принимать сценарии Groovy, так как они будут работать в рамках нашего GUI, а также ImageJ.

Они предоставят письменный сценарий. groovy к плагину, но я не всегда буду точно знать, какие параметры, методы и классы присутствуют и какие изменения в logi c находятся в файле. groovy.

Я изучал документацию GroovyClassLoader, и после ссылки Groovy в действии, 2-е издание у меня есть лучшее представление о том, как создавать и отправлять привязки и еще много чего, но Я не могу понять, с чего начать писать logi c для интерпретации содержимого файла stati c Groovy. Идеальным решением было бы использование пользователем одного сценария, который работает в обеих программах, и мой плагин определяет, что имеет значение.

Есть ли способ проанализировать отдельные части файла Groovy, чтобы я мог отобразить их к нашим параметрам и соответственно изменить поведение плагина Java?

Редактировать: Контекст

Наше программное обеспечение выполняет анализ изображений в реальном времени на окрашенных тканевых слайдах. Некоторые из наших пользователей также используют «Программу X» в пределах GUI для анализа уже снятых изображений. Плагин Java получает доступ к логи c из другой программы, что позволяет нашим пользователям использовать функции, с которыми они знакомы, в режиме реального времени. Скрипт Groovy 1016 *, который пользователь передает программе X, имеет некоторые функции, которые подают данные в те части пользовательского интерфейса программного обеспечения, которые нам не нужны. Я хотел бы только проанализировать наши соответствующие части сценария.

Редактировать: пример файла и то, что я хотел бы проанализировать:

. groovy файл начинается с некоторых параметров, которые мне не нужны, а также некоторых методов определения фона изображения, также бесполезных, так как моя программа делает это автоматически, где «Программа X» не делает:

/* imports */
//PARAMETER AREA//

//PARAMETERS FOR IMAGES WITH UM//
double requested_pixel_size = 0.5
double background_radius = 8
double median_filter_radius = 0
double sigma = 1.5
double minimum_area = 10
double maximum_area = 400
double threshold = 0.1
//PARAMETER AREA ENDS//

def openingReconstruction(final ImageProcessor ip, final ImageProcessor ipBackground, final double radius, final double maxBackground) {
    final RankFilters rf = new RankFilters()
    ipBackground.setRoi(ip.getRoi())
    rf.rank(ipBackground, radius, RankFilters.MIN)
    ByteProcessor bpMask = null
    if (!Double.isNaN(maxBackground) && maxBackground > 0) {
        int w = ip.getWidth()
        int h = ip.getHeight()
        for (int i = 0; i < w * h; i++) {
            if (ipBackground.getf(i) > maxBackground) {
                if (bpMask == null)
                    bpMask = new ByteProcessor(w, h)
                bpMask.setf(i, 1f)
            }
        }
        if (bpMask != null) {
            rf.rank(bpMask, radius * 2, RankFilters.MAX)
            for (int i = 0; i < w * h; i++) {
                if (bpMask.getf(i) != 0f) {
                    ipBackground.setf(i, Float.NEGATIVE_INFINITY)
                }
            }
        }
    }

Тогда есть некоторая область, которая фактически улучшает нашу программу, и мне нужно иметь возможность реализовать:

def detect(double key_value, PathObject parentObject, int Choose_detection_image, ParameterList params) {
    def viewer = QPEx.getCurrentViewer()
    ImageData<BufferedImage> imageData = viewer.getImageData()
    println("Program starts.....")

Приведенный выше фрагмент кода в конечном итоге вызовет измененную версию класса обнаружения, которая мне нужна:

detect(key_value, parentObject, Choose_detection_image, params)

class WatershedCellDetection2 {
    protected ObjectDetector<BufferedImage> createDetector(ImageData<BufferedImage> imageData, ParameterList params, double key_value) {
        ObjectDetector<BufferedImage> detector = new NewCellDetector(key_value)
//insert the key_value in original detector.
        return new DetectorWrapper<>(detector)
    }

Есть несколько перегруженных методов и других версий WatershedCellDetection, которые используются в зависимости от того, какие параметры присутствуют, но пока я знаю, как разобрать один, я могу определить, какой из них лучше каждый сценарий.

В функции встроено много кода, который обновляет текст справки в GUI "Программы X", не относящейся к пользовательскому интерфейсу моей программы, так как все взаимодействует с плагином Java программы C#.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...