如何解决无法通过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 举报,一经查实,本站将立刻删除。