运行 Python Java 中的脚本 class activity Android Studio 中的脚本与 Chaquopy

Running Python scripts in Java class activity in Android Studio with Chaquopy

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

我有 found an example 如何在 Kotlin 应用程序中执行 python 脚本 但我正在努力在 Java.

中解决这个问题

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

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 脚本并在 activity 中显示输出(即 textView) 有谁知道 pos 是否可以在 Android Studio 中使用 face_recognition 和 Chaquopy? 它没有列出所以我有一些疑问 https://chaquo.com/pypi-7.0/ pos可以制作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"
        }
    }

项目gradle

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
    }
}

Activity 执行 Python 脚本

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

我听说很多人在 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 函数,可能在设置 [=15= 之后] 用你的命令行。

任何打印到标准输出的文本都将转到 Logcat, which you can view in Android Studio. If you'd like to see it on the device screen as well, the easiest way is to adapt the console app template