【问题标题】:Running Python scripts in Java class activity in Android Studio with Chaquopy使用 Chaquopy 在 Android Studio 中的 Java 类活动中运行 Python 脚本
【发布时间】:2020-11-03 00:40:21
【问题描述】:

我正在尝试在 Android 应用程序 (Java) 中使用一些 python 脚本。我已经按照他们网站上的说明配置了 Chaquopy。 https://chaquo.com/chaquopy/doc/current/android.html

我找到了一个如何在 kotlin 应用程序中执行 python 脚本的示例https://www.ericdecanini.com/2019/10/21/run-python-scripts-in-the-android-front-end-with-chaquopy/ 但我正在努力用 Java 解决这个问题。

如果我理解正确,python 脚本 (.py) 存储在 src/main/python 中,可以从另一个活动调用此脚本并在同一调用活动中显示结果。

kotlin 中的例子:

val python = Python.getInstance()
val pythonFile = python.getModule("helloworldscript")
val helloWorldString = pythonFile.callAttr("helloworld")
hello_textview.text = helloWorldString.toString()

我要执行以下python脚本:

import os
import face_recognition
def cmd2():
    os.system("face_recognition ./event_faces/ ./event_images/")

这个来自 face_recognition 的命令行工具允许用户在图像目录上运行面部识别,并将它们与已知人脸目录进行比较。结果是处理的文件的打印输出,其中任何已知或未知的面被附加到文件名。

我的目标是执行这个 python 脚本并在活动中显示输出(即 textView) 有谁知道是否可以在带有 Chaquopy 的 Android Studio 中使用 face_recognition? 它没有列出,所以我有一些疑问https://chaquo.com/pypi-7.0/ 可以做os.在 android 应用程序中键入调用?

额外 如果有人知道在不使用 python 的 face_recognition 的情况下在 Java 中的图像目录上执行面部识别的方法,请告诉我。我试图为 java 找到一个类似 face_recognition 的库,但没有成功。 Python 的 face_recognition 库对我来说运行良好,但现在当我尝试将我的 python 脚本移植到 Android Studio 项目中时,事情变得有点棘手。

到目前为止我的代码: Android 清单

 <application
        android:name="com.chaquo.python.android.PyApplication"

应用 Gradle

apply plugin: 'com.android.application'
apply plugin: 'com.chaquo.python'

android {
    compileSdkVersion 29

    defaultConfig {
        python{
            staticProxy "bulk.py"
            pip{
                install "dlib"
                install "opencv-python"
                install "opencv-contrib-python"
                install "face_recognition"
                install "pillow"
                install "numpy"
                install "cv2"
                install "os"
            }
        }
        applicationId "com.projectdevelopment.faces"
        minSdkVersion 16
        targetSdkVersion 29
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        ndk {
            abiFilters "armeabi-v7a", "x86", "arm64-v8a", "x86_64"
        }
    }

项目分级

buildscript {
    repositories {
        google()
        jcenter()
        maven { url "https://chaquo.com/maven" }

    }
    dependencies {
        classpath "com.android.tools.build:gradle:4.0.0"
        classpath 'com.google.gms:google-services:4.3.3'
        classpath "com.chaquo.python:gradle:8.0.0"

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

执行 Python 脚本的活动

python.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //call python script and return output to this activity
            }
        });

提前感谢您的任何意见。非常感谢。

【问题讨论】:

    标签: java python-3.x android-studio face-recognition chaquopy


    【解决方案1】:

    我听说很多人都在 Android 上成功使用了 face_recognition。它是一个纯 Python 包,因此可以直接从 PyPI 安装,不需要在 Chaquopy's own package repository 中。

    但是,Chaquopy 不附带 Python 可执行文件,因此使用 os.system 运行命令行脚本不太可能工作。相反,您可以只调用face_recognition Python API,它在its own website 上有很多示例。

    看起来与运行face_recognition 脚本最接近的等效方法是导入face_recognition.face_recognition_cli 并调用main 函数,可能在使用命令行设置sys.argv 之后。

    打印到标准输出的任何文本都将转到Logcat,您可以在 Android Studio 中查看。如果您也想在设备屏幕上看到它,最简单的方法是调整console app template

    【讨论】:

    • 若要在运行时查找图像文件,请使用相对于__file__ 的路径,如here 所述。
    • 感谢大家的帮助,我终于有了很大的进步。我确实迁移到 pycharm 并完全在 python 中构建应用程序,但您的回答引导我朝着正确的方向使用 face_recognition api。 (救生员)再次感谢。
    猜你喜欢
    • 2021-07-20
    • 1970-01-01
    • 2020-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-13
    • 1970-01-01
    • 2022-01-09
    相关资源
    最近更新 更多