#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. Да, это так. Я попробую это и дам вам знать.