Python 如何使用Chaquopy和openCV打开android摄像头?
我为一个图像识别任务执行python代码,它工作得很好,但当我使用Chaquopy将其实现到android应用程序中时,它就不工作了。这是因为python代码中的第一个指令旨在使用此指令cap=cv2打开相机。videoCapture(0)和此指令在android设备上不起作用。 我还在androidManifest.xml中添加了相机和存储权限 这是我的Java代码:Python 如何使用Chaquopy和openCV打开android摄像头?,python,android,opencv,camera,chaquopy,Python,Android,Opencv,Camera,Chaquopy,我为一个图像识别任务执行python代码,它工作得很好,但当我使用Chaquopy将其实现到android应用程序中时,它就不工作了。这是因为python代码中的第一个指令旨在使用此指令cap=cv2打开相机。videoCapture(0)和此指令在android设备上不起作用。 我还在androidManifest.xml中添加了相机和存储权限 这是我的Java代码: public class MainActivity extends AppCompatActivity { @Overri
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (! Python.isStarted()) {
Python.start(new AndroidPlatform(this));
}
Python py = Python.getInstance();
PyObject pym =py.getModule("MyPythonClass");
}
这是python代码(类的名称是MyPythonClass.py):
将numpy导入为np
从skimage.transform导入金字塔
从imutils.object\u detection导入非最大值抑制
导入imutils
从skimage.feature导入
从sklearn.externals导入作业库
从脱脂进口颜色
将matplotlib.pyplot作为plt导入
导入操作系统
导入glob
从imutils.video导入视频流
从imutils.video导入FPS
将numpy作为np导入
导入argparse
导入时间
进口cv2
min_wdw_sz=[68124]
步长=[10,10]
方向=9
每单元像素数=[6,6]
每个块的单元数=[2,2]
可视化=错误
正常化=真
阈值=.3
clf=joblib.load(os.path.join('/storage/emulated/0/Download/','svm.model'))
def滑动窗口(图像、窗口大小、步长大小):
对于范围内的y(0,image.shape[0],步长[1]):
对于范围内的x(0,image.shape[1],步长[0]):
产量(x,y,图像[y:y+窗口大小[1],x:x+窗口大小[0]]
网络摄像头=cv2.VideoCapture(0)
#循环播放视频流中的帧
尽管如此:
ret,frame=webcam.read()
im=imutils.resize(frame,width=min(300,frame.shape[1]))
orig=im.copy()
min_wdw_sz=(64128)
步长=(10,10)
缩尺=1.25
#用于存储检测结果的列表
检测=[]
#图像的当前比例
比例=0
对于以金字塔为单位缩放的im(im,缩尺=缩尺):
#该列表包含当前比例下的检测
如果im_scaled.shape[0]1:
检测。附加((int(x*(缩尺**比例)),int(y*(缩尺**比例)),clf.决策函数(fd),
int(最小wdw_sz[0]*(缩尺**比例)),
int(min_wdw_sz[1]*(缩尺**比例)))
比例+=1
clone=im.copy()
#循环检测
对于检测中的(x_tl,y_tl,u,w,h):
cv2.矩形(im,(x_tl,y_tl),(x_tl+w,y_tl+h),(0,255,0),厚度=2)
rects=np.数组([[x,y,x+w,y+h]用于检测中的(x,y,w,h)])
sc=[检测中(x,y,score,w,h)的分数[0]
sc=np.数组(sc)
拾取=非最大抑制(矩形、probs=sc、重叠阈值=0.3)
#打印“形状”,拾取.shape
对于pick中的(xA,yA,xB,yB):
矩形(克隆,(xA,yA),(xB,yB),(0,45,255),2)
#显示输出帧
cv2.imshow(“帧”,克隆)
这就是日志显示的错误:
java.lang.RuntimeException: Unable to start activity ComponentInfo{com........MainActivity}: com.chaquo.python.PyException: AttributeError: 'NoneType' object has no attribute 'shape'
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3319)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3415)
at android.app.ActivityThread.access$1100(ActivityThread.java:229)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1821)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:7325)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
Caused by: com.chaquo.python.PyException: AttributeError: 'NoneType' object has no attribute 'shape'
at <python>.<module>(/android_asset/chaquopy/app.zip/MyPythonClass.py:44)
java.lang.RuntimeException:无法启动activity ComponentInfo{com…….MainActivity}:com.chaquo.python.PyException:AttributeError:'NoneType'对象没有属性'shape'
位于android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3319)
在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3415)上
在android.app.ActivityThread.access$1100(ActivityThread.java:229)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1821)
位于android.os.Handler.dispatchMessage(Handler.java:102)
位于android.os.Looper.loop(Looper.java:148)
位于android.app.ActivityThread.main(ActivityThread.java:7325)
位于java.lang.reflect.Method.invoke(本机方法)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run上(ZygoteInit.java:1230)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
原因:com.chaquo.python.PyException:AttributeError:“非类型”对象没有属性“形状”
位于。(/android_asset/chaquopy/app.zip/MyPythonClass.py:44)
编辑:
在手机中授予权限(存储和摄像头)。
以及:第19版
targetSdkVersion 28
compilesdkversion28我认为OpenCV对原生Android摄像头API有一定的支持,但在当前的Chaquopy版本中显然不起作用。正如您在中所发现的,最简单的解决方法是用Java捕获图像,然后将其作为字节数组传输到Python。您所说的“不工作”是什么意思?您在logcat中是否收到任何异常或错误消息?如果是这样,请将其添加到问题中。@mhsmith上述代码没有显示任何内容(没有打开摄像头,也没有要检测的帧),我将列出python类的全部代码以及logcat的内容shows@mhsmith我已经将所有python代码添加到logcat错误中
java.lang.RuntimeException: Unable to start activity ComponentInfo{com........MainActivity}: com.chaquo.python.PyException: AttributeError: 'NoneType' object has no attribute 'shape'
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3319)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3415)
at android.app.ActivityThread.access$1100(ActivityThread.java:229)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1821)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:7325)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
Caused by: com.chaquo.python.PyException: AttributeError: 'NoneType' object has no attribute 'shape'
at <python>.<module>(/android_asset/chaquopy/app.zip/MyPythonClass.py:44)