如何将视频作为输入传递给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代码的主要内容,如果未能解决你的问题,请参考以下文章

如何将多个图像作为输入传递给python脚本

如何在json android中返回多行并将其传递给sqlite

如何将用户定义的类型作为输入传递给存储过程?

Swift:如何将可编码类型作为函数输入传递给编码或解码 json

Android - 将搜索传递给片段

将 javascript 变量传递给 html5 视频标签,使用它作为播放器的 src