Ошибка TypeError, вызывающая функцию python с использованием chaquopy

#python #android #integration #chaquopy

#python #Android #интеграция #chaquopy

Вопрос:

У меня есть файл python, в котором содержится много значений ‘def’. Когда я пытаюсь интегрировать файл python с android studio, я получаю сообщение об ошибке типа. Входные данные представляют собой файл изображения, и я хочу, чтобы нижний и верхний диапазоны были основаны на этом изображении, поэтому я не могу определить для них значение, поскольку размер изображения может меняться каждый раз.

 import numpy as np
import cv2
import os
import matplotlib.pyplot as plt
from PIL import Image


def host(croppedImage,lowerRange, upperRange):
    mask_yellow = cv2.inRange(croppedImage,lowerRange,upperRange)
    dilatation_type = cv2.MORPH_RECT
    dilatation_size = 1
    element = cv2.getStructuringElement(dilatation_type, (dilatation_size   2, dilatation_size 2), (dilatation_size, dilatation_size))
    dilated_mask_image = cv2.dilate(mask_yellow, element)
    return dilated_mask_image

def DrawContourRect(contour):
    rect = cv2.minAreaRect(contour)
    return cv2.boxPoints(rect)

-----------------------------This is just a part of code---------------------------------
  

И это XML-код для объекта python:

 PyObject pyo = py.getModule("file");
PyObject obj = pyo.callAttr("host", imageString);
  

И ошибка заключается в следующем:

 com.chaquo.python.PyException: TypeError: detect() missing 2 required positional arguments: 'lowerRange' and 'upperRange'
at <python>.chaquopy_java.call(chaquopy_java.pyx:285)
at <python>.chaquopy_java.Java_com_chaquo_python_PyObject_callAttrThrows(chaquopy_java.pyx:257)
  

Есть ли какой-либо способ решить эту проблему и как chaquopy может считывать каждое значение ‘def’ (host и DrawContourRect.

Ответ №1:

Сообщение об ошибке и код, похоже, не совпадают, но я предполагаю, что host и detect являются либо одной и той же функцией, либо имеют одинаковую подпись.

Если это правильно, то проблема просто в том, что вы передаете 1 аргумент функции, для которой требуется 3. Если вы хотите, чтобы нижний и верхний диапазоны были основаны на изображении, тогда вам придется либо:

  • Вычислите их на стороне Java и передайте их в Python, используя 2 дополнительных аргумента; ИЛИ
  • Удалите 2 дополнительных аргумента из функции и вычислите диапазон на стороне Python.

Комментарии:

1. Да, это так. Я попробую это и дам вам знать.