如何将视频作为输入传递给Android Studio中的python代码
Posted
技术标签:
【中文标题】如何将视频作为输入传递给Android Studio中的python代码【英文标题】:How to pass video as input to python code inside Android Studio 【发布时间】:2021-09-28 13:24:45 【问题描述】:我想开发一个应用程序,它可以将视频作为输入,然后将该视频传递给 python 代码。我知道有一个名为 Chaquopy 的 python SDK 用于在 android studio 中使用 python 代码。但我不知道如何从 Android Studio 内的 res 文件夹中获取视频并将其传递给 python 代码。我的主要算法是在 python 中,为此我需要将视频作为输入传递。 我是安卓工作室的新手。有人可以帮助我吗?
【问题讨论】:
【参考方案1】:使用 Chaquopy 时,在 Python 代码中加载文件的最简单方法是将其放在 Python 源代码目录中,而不是 res 目录中。来自FAQ:
如果数据文件与Python文件在同一目录下:
from os.path import dirname, join filename = join(dirname(__file__), "filename.txt") You can then pass the filename to open, or any other function which reads a file.
如果数据文件和 Python 文件位于不同的目录,则相应地更改路径。例如Python文件为
alpha/hello.py
,数据文件为bravo/filename.txt
,则将上面的filename.txt
替换为../bravo/filename.txt
。
Chaquopy 目前不提供任何可以直接读取视频文件的 Python 包。但是,如果您将 mobile-ffmpeg 添加到您的项目中,您可以从 Python 调用它以从视频中提取帧,然后您可以随意处理。
完整示例请参见here,以下是相关行:
from com.arthenica.mobileffmpeg import FFmpeg
...
FFmpeg.execute("-i " + path + " -r " + frame_gap + " -f image2 " + initial_path + "/image-%2d.png")
image_read_counter = 1
while image_read_counter < int(vid_length_in_seconds * frame_gap):
str_image_read_counter = '%02d' % image_read_counter
image_path = initial_path + '/image-' + str_image_read_counter + '.png'
img = cv2.imread(image_path)
...
【讨论】:
所以,如果我想捕捉视频,那么我应该通过android java捕捉它并将其存储在外部存储中。然后,通过 python 代码,我应该使用 moile-ffmpeg 访问这个视频并处理它。如果我不想捕获它,我应该把它放在我保存 python 代码的同一个文件夹中。我说的对吗? 是的,但是最好不要使用外部存储,因为它的权限情况在新版本的Android中变得非常复杂。请改用internal storage directory,它可以在Python 中作为os.environ["HOME"]
访问。
非常感谢您的回复。我还有一个疑问。是否可以在捕获视频的同时进行视频处理?在 Python 中,我们可以在捕获视频的同时运行我们的算法。同样,在android studio中可以吗?如果可能的话,我该怎么做。
是的,您可以在 Java/Kotlin 中捕获视频,然后在帧到达时将它们传递给 Python。在这种情况下,您根本不需要将帧存储在文件中:只需将每个帧作为字节数组传递。 Here 是执行此操作的应用示例。以上是关于如何将视频作为输入传递给Android Studio中的python代码的主要内容,如果未能解决你的问题,请参考以下文章
如何在json android中返回多行并将其传递给sqlite