使用 chaquopy 调用 python 函数时出现类型错误
TypeError calling python function using chaquopy
我有一个 python 文件,其中有许多 'def' 值。当我尝试将 python 文件与 android studio 集成时,出现类型错误。输入是一个图像文件,我希望 lowerRange 和 upperRange 基于该图像,所以我不能为它们定义一个值,因为图像大小每次都不同。
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---------------------------------
这是 python 对象的 xml 代码:
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' 值(主机和 DrawContourRect。
错误消息和代码似乎不匹配,但我认为 host
和 detect
要么是相同的函数,要么具有相同的签名。
如果这是正确的,那么问题很简单,就是您将 1 个参数传递给需要 3 个参数的函数。如果您希望 lowerRange 和 upperRange 基于图像,那么您必须:
- 在 Java 侧计算它们并使用 2 个额外参数将它们传递给 Python;或者
- 从函数中删除 2 个额外的参数,并计算 Python 侧的范围。
我有一个 python 文件,其中有许多 'def' 值。当我尝试将 python 文件与 android studio 集成时,出现类型错误。输入是一个图像文件,我希望 lowerRange 和 upperRange 基于该图像,所以我不能为它们定义一个值,因为图像大小每次都不同。
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---------------------------------
这是 python 对象的 xml 代码:
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' 值(主机和 DrawContourRect。
错误消息和代码似乎不匹配,但我认为 host
和 detect
要么是相同的函数,要么具有相同的签名。
如果这是正确的,那么问题很简单,就是您将 1 个参数传递给需要 3 个参数的函数。如果您希望 lowerRange 和 upperRange 基于图像,那么您必须:
- 在 Java 侧计算它们并使用 2 个额外参数将它们传递给 Python;或者
- 从函数中删除 2 个额外的参数,并计算 Python 侧的范围。