我试图基于Kivy中的OpenCv构建一个相机Android应用:
main.py
import kivy
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.camera import Camera
import cv2
from kivy.uix.image import Image
from kivy.clock import Clock
from kivy.graphics.texture import Texture
import numpy as np
class KivyCamera(Image):
def __init__(self, capture, fps, **kwargs):
super(KivyCamera, self).__init__(**kwargs)
self.capture = capture
Clock.schedule_interval(self.update, 1.0 / fps)
def update(self, dt):
ret, frame = self.capture.read()
if ret:
# convert it to texture
buf1 = cv2.flip(frame, 0)
buf = buf1.tostring()
image_texture = Texture.create(size=(frame.shape[1], frame.shape[0]), colorfmt='bgr')
image_texture.blit_buffer(buf, colorfmt='bgr', bufferfmt='ubyte')
# display image from the texture
self.texture = image_texture
class MainApp(App):
def build(self):
self.capture = cv2.VideoCapture(0)
self.camera = KivyCamera(capture=self.capture, fps=30)
return self.camera
if __name__== "__main__":
MainApp().run()
buildozer.spec
[app]
title = Test_app
package.name = myapp
package.domain = org.test
source.dir = .
source.include_exts = py,png,jpg,kv,atlas,xml
version = 0.1
requirements = python3,kivy,numpy,opencv
orientation = portrait
# Android specific
fullscreen = 0
android.permissions = INTERNET, ACCESS_FINE_LOCATION, WRITE_EXTERNAL_STORAGE, CAMERA
android.arch = armeabi-v7a
[buildozer]
log_level = 2
warn_on_root = 1
代码在Window系统中运行成功。然后我使用buildozer为Android构建代码。当我打开Android应用时,屏幕显示一个黑屏, 屏幕左上角有一个小方块。我认为cv2.VideoCapture()函数没有正常工作。因此,我把cv2.VideoCapture(0)改成了cv2.VideoCapture(-1)和cv2.VideoCapture(1),但是都无法正常工作。
是否有人可以帮我解决这个问题?