2

我正在尝试在 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 Manifest

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

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

4

1 回答 1

1

我听说很多人在 Android 上成功使用了 face_recognition。它是一个纯 Python 包,因此可以直接从 PyPI 安装,不需要在Chaquopy 自己的包存储库中。

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

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

打印到标准输出的任何文本都将转到Logcat,您可以在 Android Studio 中查看。如果您也想在设备屏幕上看到它,最简单的方法是调整控制台应用程序模板

于 2020-07-14T12:17:39.930 回答