TypeError 使用 chaquopy 调用 python 函数

Posted

技术标签:

【中文标题】TypeError 使用 chaquopy 调用 python 函数【英文标题】:TypeError calling python function using chaquopy 【发布时间】:2021-03-02 17:43:19 【问题描述】:

我有一个 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。

【问题讨论】:

【参考方案1】:

错误消息和代码似乎不匹配,但我假设 hostdetect 是相同的函数,或者它们具有相同的签名。

如果这是正确的,那么问题只是您将 1 个参数传递给需要 3 个参数的函数。如果您希望 lowerRange 和 upperRange 基于图像,那么您必须:

在 Java 端计算它们并使用 2 个额外参数将它们传递给 Python;或 从函数中移除 2 个额外的参数,并在 Python 端计算范围。

【讨论】:

是的,就是这样。我会试试这个,让你知道。

以上是关于TypeError 使用 chaquopy 调用 python 函数的主要内容,如果未能解决你的问题,请参考以下文章

在 android studio 中使用 chaquopy 运行 python 脚本

如何使用 chaquopy 在颤振中包含 python .py 文件?

Chaquopy 不支持 AIML

使用 chaquopy 的 android studio 不支持 Python 模块

Android Studio Chaquopy 吐司消息

使用 chaquopy 在 android studio 中集成 python 代码(对象检测代码)