微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法通过android studio中的chaquopy在python中使用openCV打开“model.yml”文件进行结构化边缘检测

如何解决无法通过android studio中的chaquopy在python中使用openCV打开“model.yml”文件进行结构化边缘检测

我的目标是在 python 中使用 OpenCV 使用结构化边缘检测在图像中找到边缘,并通过 chaquopy 在 android studio 中使用它。所以在 MainActivity 中,当点击按钮时,位图被传递给 python 文件中的 main 函数进行图像处理,它会返回处理后的图像并将其设置到 imageView。但是由于某种原因,“model.yml”无法打开。代码错误如下:

python文件是这样的:

import cv2
from PIL import Image
import base64
import io

def main(data):
    decoded_string=base64.b64decode(data)
    np_data=np.fromstring(decoded_string,np.uint8)

    image = cv2.imdecode(np_data,cv2.IMREAD_UNCHANGED)
    g_blurred = cv2.GaussianBlur(image,(5,5),0)
    blurred_float = g_blurred.astype(np.float32)/255.0
    edgeDetector = cv2.ximgproc.createStructuredEdgeDetection("model.yml") // ERROR IS DUE TO THIS LINE
    edges = edgeDetector.detectEdges(blurred_float) * 255.0
    
    pil_im=Image.fromarray(edges)
    buff = io.BytesIO()
    pil_im.save(buff,format="PNG")
    img_str=base64.b64decode(buff.getvalue())
    return ""+str(img_str,'utf-8')

MainActivity中的代码

public class MainActivity extends AppCompatActivity {
Button btn;
ImageView imageView;
Bitmap bitmap;
String imageString=null;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        if (! Python.isstarted()) {
            Python.start(new Androidplatform(this));
        }
        btn=findViewById(R.id.btn);
        imageView=findViewById(R.id.imageView);
        bitmap= BitmapFactory.decodeResource(getResources(),R.drawable.sample);

        Python python=Python.getInstance();
        final PyObject pyObject=python.getModule("remove_background");

        btn.setonClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                imageString=getString(bitmap);
                PyObject pyObject1=pyObject.callAttr("main",imageString);
                imageString=pyObject1.toString();
                byte image_bytes[]=android.util.Base64.decode(imageString,Base64.DEFAULT);
                bitmap=BitmapFactory.decodeByteArray(image_bytes,image_bytes.length);
                imageView.setimageBitmap(bitmap);
            }
        });
    }
    private String getString(Bitmap bitmap)
    {
        ByteArrayOutputStream baos=new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.PNG,100,baos);
        byte[] byteImage=baos.toByteArray();
        String encoded_image=android.util.Base64.encodetoString(byteImage,Base64.DEFAULT);
        return encoded_image;
    }
}

我得到的错误

 com.chaquo.python.PyException: error: OpenCV(4.1.2) /home/smith/git/chaquo/python/server/pypi/packages/opencv-contrib-python/build/4.1.2.30/cp38-cp38-android_16_x86/src/opencv_contrib/modules/ximgproc/src/structured_edge_detection.cpp:432: error: (-215:Assertion Failed) modelFile.isOpened() in function 'StructuredEdgeDetectionImpl'

我认为出现此错误是因为它无法打开 model.yml 文件。我已将该文件放在与我的 python 脚本相同的目录中,即 app/src/main/python。我对此不确定,我觉得因为“model.yml”文件未放置在正确的文件夹中,这就是我收到此错误的原因。任何帮助表示赞赏。提前致谢!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。